Compare commits

..

1188 Commits

Author SHA1 Message Date
Raymond Knopp
149034887c log reduction 2023-07-27 16:34:46 +02:00
Raymond Knopp
5917f0f2b8 initial synch : SSS threshold condition removed 2023-07-27 12:36:36 +02:00
Raymond Knopp
6832959b0b bugfix in command-line parameters 2023-07-26 21:09:54 +02:00
ue1
e7b42f419b Merge branch 'sl-eurecom' of https://gitlab.eurecom.fr/oai/openairinterface5g into sl-eurecom 2023-07-26 13:46:14 -04:00
ue1
d629498b98 testing sync-ref 2023-07-26 13:44:31 -04:00
Raymond Knopp
1c01343d49 Merge branch 'sl-eurecom' of https://gitlab.eurecom.fr/oai/openairinterface5g into sl-eurecom 2023-07-26 19:38:28 +02:00
Raymond Knopp
f633fc8d96 testing 2023-07-26 19:35:38 +02:00
Raymond Knopp
5e28985954 Merge branch 'sl-eurecom' of https://gitlab.eurecom.fr/oai/openairinterface5g into sl-eurecom 2023-07-26 13:28:00 -04:00
Raymond Knopp
af662183f4 debugging OTA 2023-07-26 13:25:14 -04:00
Raymond Knopp
efccb416cc command line parameter --sync-ref added again 2023-07-25 23:11:17 +02:00
Raymond Knopp
4232baec52 "synchronized" PSBCH simulation working now 2023-06-08 16:10:00 +02:00
Raymond Knopp
2f19c2de4d Modifications for SL-SSB. 2023-06-08 14:43:28 +02:00
Melissa Elkadi
b17e862742 Fixing build errors 2023-05-10 08:05:50 -07:00
Melissa
d680bb83b2 Merge branch 'develop' into 'episys-merge-develop-sl'
# Conflicts:
#   openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
2023-05-08 14:26:24 +00:00
Robert Schmidt
9354a45235 Merge branch 'integration_2023_w18b' into 'develop'
integration_2023_w18b

See merge request oai/openairinterface5g!2095

* !1879 NR RRC config improvements for multi UE scenario
* !2070 Use F1 internally: UE Context Setup
* !2073 Fix reconfigurationWithSync
* !2086 F1 Setup Request DUname is optional
* !2062 remove pdu session duplicated structs
* !2066 NR UE rework RRC MAC config
* !2075 bugfix in computing CCEs for DCI
* !2089 chore(build): adding docker support for rocky-linux
* !2091 Removal of "disableConcurrentBuilds" option from jenkinsfiles
* !2093 Modification of documentation for CI testbenches
2023-05-08 13:22:01 +00:00
Robert Schmidt
0b6ba9d08f Merge remote-tracking branch 'origin/ci-testbenches-doc' into integration_2023_w18b 2023-05-08 11:54:00 +02:00
Robert Schmidt
f5db0a881e Merge remote-tracking branch 'origin/ci-jenkinsfile-modifs' into integration_2023_w18b 2023-05-08 11:52:47 +02:00
Robert Schmidt
e7bf3b83a5 Merge remote-tracking branch 'origin/rocky-linux-support' into integration_2023_w18b 2023-05-08 11:52:28 +02:00
Robert Schmidt
b05d0ab91e Don't warn on unused function 2023-05-08 11:23:05 +02:00
Robert Schmidt
0894a6bfe7 Merge remote-tracking branch 'origin/NR_CCE_fix' into integration_2023_w18b 2023-05-06 05:23:18 +02:00
Robert Schmidt
462ed76114 Merge remote-tracking branch 'origin/NR_UE_rework_rrc_mac_config' into integration_2023_w18b 2023-05-06 05:21:10 +02:00
Melissa Elkadi
50923c7f80 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-05-05 10:51:22 -07:00
laurent
5cbd83c4e6 add macro for UINT32 2023-05-05 19:28:35 +02:00
Robert Schmidt
7fae9eb2d8 F1 UE context setup req: don't allocate memory we don't need 2023-05-05 18:22:38 +02:00
Robert Schmidt
5ee44e015a Merge remote-tracking branch 'origin/simplify-pdu-session-management' into integration_2023_w18b 2023-05-05 18:20:58 +02:00
Robert Schmidt
b2cc750587 Merge remote-tracking branch 'origin/fix-f1-duname' into integration_2023_w18b 2023-05-05 14:45:06 +02:00
Robert Schmidt
b90448ae20 Merge remote-tracking branch 'origin/fix-reconfigurationWithSync' into integration_2023_w18b 2023-05-05 14:44:52 +02:00
Robert Schmidt
719752cad8 Merge remote-tracking branch 'origin/int-f1-ue-ctxt-setup' into integration_2023_w18b 2023-05-05 14:44:40 +02:00
Laurent THOMAS
15e858270d Split big function, add an assert for non-IPv4 PDU sessions
Contributions by Robert Schmidt <robert.schmidt@openairinterface.org>
2023-05-05 14:35:02 +02:00
francescomani
9421fcc8b9 addressing review 2023-05-05 07:50:39 +02:00
francescomani
e9ded45428 bugfix in computing first cce 2023-05-05 07:36:39 +02:00
Robert Schmidt
c588facc1b Merge remote-tracking branch 'origin/NR_RRC_config_improvements_multi_UE' into integration_2023_w18b 2023-05-04 18:48:50 +02:00
Jaroslava Fiedlerova
5933f5ba53 CI:Modification of documentation for testbenches
- RAN-SA-AW2S-CN5G pipeline image - one antenna added to Amarisoft UE simulator, modification of the label
- resize of the images used in RAN-SA-AW2S-CN5G pipeline image
- change of the description for RAN-SA-AW2S-CN5G pipeline
- change of the description for RAN-LTE-TDD-2x2-Container pipeline, where nrmodule2 is used
- typo correction
2023-05-04 15:58:54 +02:00
Robert Schmidt
da2ba65685 Add new Interop-F1 pipeline documentation 2023-05-04 14:29:21 +02:00
Roberto Louro Magueta
8ba201005f Fix reconfigurationWithSync 2023-05-04 10:07:16 +01:00
Raphael Defosseux
f328a6e181 doc(docker): post-review changes
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-05-04 10:57:36 +02:00
Jaroslava Fiedlerova
bc68fcb32d Removal of "disableConcurrentBuilds" option from jenkinsfiles
- modification of jenkinfiles in order to enable parallel execution of the pipelines
2023-05-04 10:34:02 +02:00
Raphael Defosseux
b75d95626e chore(build): adding docker support for rocky-linux
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-05-04 10:27:11 +02:00
Robert Schmidt
375a11b119 Remove non-existing T1-Offload-Test pipeline from RAN-Container-Parent Jenkinsfile 2023-05-03 16:20:38 +02:00
Robert Schmidt
a990cba81f Add Interop-F1 pipeline to RAN-Container-Parent Jenkinsfile 2023-05-03 16:20:03 +02:00
Robert Schmidt
3ea2afdca5 Fix NSA: lock scheduler before removing UE 2023-05-03 16:12:45 +02:00
Robert Schmidt
3e282f9573 Add Accelleran-CU interoperability test 2023-05-03 13:40:22 +02:00
Robert Schmidt
8e30f99eee CI: docker-compose file for OAI DU with Accelleran CU 2023-05-03 13:40:22 +02:00
Robert Schmidt
3eea99a312 Add documentation for internal F1 interface 2023-05-03 13:40:22 +02:00
Robert Schmidt
67c7d52333 Default RRC Connection <-> no PDU sessions 2023-05-03 13:40:22 +02:00
Robert Schmidt
1eb4f857af UE Capabilities: we request during RRC Connection Setup, so no PDU sessions 2023-05-03 13:40:22 +02:00
Robert Schmidt
ca30b9ee55 Implement F1/split case for UE Context Setup 2023-05-03 13:40:22 +02:00
Robert Schmidt
6ced3cd8a7 Implementation for F1 UE Context Setup+Response in monolithic 2023-05-03 13:40:22 +02:00
Robert Schmidt
10b996f5db Stubs for F1 UE Context Setup Req+Resp messages 2023-05-03 13:40:22 +02:00
Robert Schmidt
31a1003349 Introduce mutex for MAC scheduler
Different threads (e.g., RRC, DU tasks) might access the scheduler at
the same time as the thread that drivers the scheduler itself
(ru_thread). To avoid data races, introduce this mutex.

Most functions of the scheduler are only used internally and have been
marked static in the previous commit. The remaining ones, in this
commit, either lock the scheduler mutex sched_lock, or a comment has
been added of the assumption of how such function is to be locked (e.g.,
if it might be called from different places, or if it is called by a
function that already locks the scheduler).
2023-05-03 13:40:22 +02:00
Robert Schmidt
44bf62758a Remove nr_mac_update_RA()
There is no point in updating RA, when we update the CellGroupConfig. We
simply drop this function, therefore
2023-05-03 13:40:22 +02:00
Robert Schmidt
e7a8eb950e NR MAC: make many functions static
To know which functions are used from outside and which are
module-local, make many functions static. This will allow us to protect
only those functions with a mutex for which it is necessary.
2023-05-03 13:40:20 +02:00
Robert Schmidt
2a0142fb96 Suppress any CellGroupConfig updates in F1
The CellGroupConfig should come from the DU. Currently, any update made
to the CellGroupConfig is done at CU. In split-operation, we have no way
of telling the DU about this update. Hence, in this commit, check if we
are in F1 split mode operation during a CellGroupConfig update, and if
so, suppress any updates to the CellGroupConfig, alongside a warning.
2023-05-03 13:38:25 +02:00
Robert Schmidt
6d7d075d8c Refactor NR MAC config: mark unimplemented functions as such 2023-05-03 13:38:24 +02:00
Robert Schmidt
f2a8b5c41d Remove wrong comment: SRBs are not handled via E1 2023-05-03 13:38:24 +02:00
Robert Schmidt
6cc01f7cd9 Merge branch 'integration_2023_w17' into 'develop'
integration_2023_w17

See merge request oai/openairinterface5g!2083

* !2045 ssb offset to point A harmonization
* !2068 Add mac_CellGroupConfig in RRCReconfiguration after a RRCReestablisment
* !2052 fix(ci): for old versions of iperf, server process shall be killed manually
* !2056 Generic changes related to UEs used in CI
* !2074 Fix of command for USRP B200 reset in CI pipeline
* !2014 transform global variables into const or static
* !2082 Change of the PLMN in AW2S pipeline
* !2078 Improve PRS Tutorial
* !2079 Update scope (Xforms, Qt) documentation and list in doc/README.md
2023-05-03 08:26:38 +00:00
Robert Schmidt
fc01032915 Merge remote-tracking branch 'origin/fix-nrqtscope-doc' into integration_2023_w17 2023-05-02 18:40:01 +02:00
Robert Schmidt
db00336a2a Merge remote-tracking branch 'origin/prsfix' into integration_2023_w17 2023-05-02 18:39:55 +02:00
Robert Schmidt
7223ac8c9a Merge remote-tracking branch 'origin/ci-aw2s-change-of-plmn' into integration_2023_w17 2023-05-02 18:39:50 +02:00
Robert Schmidt
a8879d3b9c Merge remote-tracking branch 'origin/remove-some-globales' into integration_2023_w17 2023-05-02 18:39:25 +02:00
Robert Schmidt
3fbcdf4c5a Merge remote-tracking branch 'origin/ci-fix-usrp-reboot-command' into integration_2023_w17 2023-05-02 18:39:17 +02:00
Robert Schmidt
d525849730 Merge remote-tracking branch 'origin/ci-generic-changes' into integration_2023_w17 2023-05-02 18:39:10 +02:00
Robert Schmidt
d9e38660ba Merge remote-tracking branch 'origin/ci-fix-iperf-zombie-process' into integration_2023_w17 2023-05-02 18:38:59 +02:00
Robert Schmidt
38ec30559e F1 Setup Request DUname is optional 2023-05-02 11:30:46 +02:00
Robert Schmidt
082cf6146d Merge remote-tracking branch 'origin/Fix_mac_CellGroupConfig_after_reestablishment' into integration_2023_w17 2023-04-28 16:37:21 +02:00
Dhanuja Elizabeth Thomas
149d27d55f Generic changes related to UEs used in CI 2023-04-28 16:35:09 +02:00
laurent
b339460666 cleanup only 2023-04-28 16:25:24 +02:00
Jaroslava Fiedlerova
787170de83 Change of the PLMN in AW2S pipeline 2023-04-28 16:04:35 +02:00
laurent
84fa481e72 remove pdu session duplicated structs 2023-04-28 15:55:12 +02:00
Raphael Defosseux
c126cbab77 fix(ci): Changes for debugging ssh connection issues faced while iperf/ping operations 2023-04-28 10:50:38 +02:00
Robert Schmidt
7cfb6db48a Update scope (Xforms, Qt) documentation and list in doc/README.md 2023-04-27 13:55:06 +02:00
Arash Sahbafard
bc0083c219 commit messages
There are some problems in the document that needs to be fixed.
	modified:   doc/RUN_NR_PRS.md
2023-04-26 17:37:06 +02:00
Melissa Elkadi
90e5db3728 Removing unnecessary changes to unit tests 2023-04-24 16:22:09 -07:00
Melissa Elkadi
c9bc86312f Merging in Adding new sidelink (SL) variables 2023-04-24 10:23:49 -07:00
Melissa Elkadi
7221a5f736 Some minor clean up 2023-04-24 10:07:43 -07:00
Melissa Elkadi
629b2c9fe3 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-04-24 09:59:13 -07:00
Melissa Elkadi
9f91dbd9bb Merge branch 'episys-merge-develop-sl' of https://gitlab.eurecom.fr/oai/openairinterface5g into episys-merge-develop-sl 2023-04-24 09:48:47 -07:00
Melissa Elkadi
a354ce01cf Updating SL TX side for PSS and SSS. Also propberly setting d_sss 2023-04-24 09:48:31 -07:00
Melissa Elkadi
93d32eca45 Updating SL TX side for PSS and SSS. Also propberly setting d_sss 2023-04-24 09:31:38 -07:00
rakesh mundlamuri
594fb18cc8 adressing the comments 2023-04-24 11:05:05 +02:00
rakesh mundlamuri
5143133d33 ssb offset to point A bugfix 2023-04-24 10:47:41 +02:00
francescomani
c0f7e458bb rework and adjust size of config_request mac vectors 2023-04-24 09:09:17 +02:00
francescomani
15822a0a5d rework nr_rrc_mac_config_req 2023-04-24 09:05:54 +02:00
Robert Schmidt
6022fe5acd Merge branch 'integration_2023_w16b' into 'develop'
integration_2023_w16b

See merge request oai/openairinterface5g!2069

* !1952 Fix problems detected by UBsan
* !1924 NR UL 256 QAM
* !1988 PUCCH2 for N = 64
* !2053 separating MAC and PHY procedures for TA
* !2058 fix interoperability with accelleran CU
* !2060 avoid duplicated function in nr_common for supported bandwidth
* !2064 CI AW2S config file fix
* !2065 bugfix for msg3 retransmission scheduling frame
* !2067 Modification of tagging develop images on OC
2023-04-24 06:05:11 +00:00
Robert Schmidt
224ef7921a Merge remote-tracking branch 'origin/ci-OC-image-tagging' into integration_2023_w16b 2023-04-22 07:51:37 +02:00
Robert Schmidt
4fdbcb0472 Merge remote-tracking branch 'origin/NR_msg3_rtx_frame_fix' into integration_2023_w16b 2023-04-22 07:51:29 +02:00
Robert Schmidt
bbc9442fc8 Merge remote-tracking branch 'origin/NR_CI_AW2S_config_file' into integration_2023_w16b 2023-04-22 07:51:22 +02:00
Robert Schmidt
418c6e23f0 Merge remote-tracking branch 'origin/NR_common_duplicated_function' into integration_2023_w16b 2023-04-22 07:51:14 +02:00
Robert Schmidt
94185df93e Merge remote-tracking branch 'origin/bugfix-interop-accelleran' into integration_2023_w16b 2023-04-22 07:49:06 +02:00
Robert Schmidt
302f016650 Merge remote-tracking branch 'origin/NR_UE_TA_procedures_at_MAC' into integration_2023_w16b 2023-04-22 07:48:58 +02:00
Melissa Elkadi
053d8d938f Fixing PSBCHSIM for sidelink finally! 2023-04-21 17:09:44 -07:00
Melissa Elkadi
cf4a22b58a Fixing build failure 2023-04-21 16:40:28 -07:00
Melissa Elkadi
75e9db0633 More conversions 2023-04-21 16:38:43 -07:00
Melissa Elkadi
24bf0d8046 More conversions for int16_t to c16_t 2023-04-21 16:21:30 -07:00
Jaroslava Fiedlerova
3c5468dd7d Fix of command for USRP B200 reset in CI pipeline 2023-04-21 16:59:17 +02:00
Robert Schmidt
e31eacb386 Merge remote-tracking branch 'origin/develop-PUCCH2' into integration_2023_w16b 2023-04-21 16:33:44 +02:00
Robert Schmidt
361dfc3c9f Merge remote-tracking branch 'origin/NR_UL_256QAM_new' into integration_2023_w16b 2023-04-21 16:32:36 +02:00
Robert Schmidt
8482cb62c4 Merge remote-tracking branch 'origin/fix-ubsan-ldpc' into integration_2023_w16b 2023-04-21 16:30:52 +02:00
Melissa Elkadi
d8627c91f3 Some more clean up to make review easier 2023-04-21 07:30:24 -07:00
Melissa Elkadi
ad8da84671 Fixing implicit declaration 2023-04-21 06:45:41 -07:00
Melissa Elkadi
f0f1121e9c Merge branch 'episys-merge-SL-variables' into episys-merge-develop-sl 2023-04-21 06:10:47 -07:00
Jaroslava Fiedlerova
64b4fbe7f2 Removal of unnecessary line 2023-04-21 13:46:50 +02:00
luis_pereira87
ae6db92dc2 Add mac_CellGroupConfig in RRCReconfiguration after a RRCReestablisment to configure SR, BSR, TAG and PHR 2023-04-21 10:29:57 +01:00
Jaroslava Fiedlerova
99c620b8cc Minor modification of tagging develop images on OC 2023-04-21 10:19:31 +02:00
Melissa Elkadi
9b8eae2256 Merge branch 'eurecom-develop' into episys-merge-SL-variables 2023-04-20 14:05:14 -07:00
francescomani
87d9517738 avoid duplicated function in nr_common for supported bandwidth 2023-04-20 18:16:37 +02:00
Roberto Louro Magueta
e140ac4bf7 Add CI test for PUCCH2 and polarParams->N = 64 2023-04-20 12:56:28 +01:00
Roberto Louro Magueta
b307044345 Decode PUCCH2 for polarParams->N = 64 2023-04-20 12:56:28 +01:00
Robert Schmidt
62a5c4996c Add clang build on OpenShift Cluster
Add Dockerfile, OpenShift build config, and OpenShift image stream, to
compile OAI using clang, notably to get compiler warnings and keep it
OAI compilable using clang.
2023-04-20 13:44:11 +02:00
laurent
d12e67b0bc Enable undefined behavior sanitizer in physim image 2023-04-20 13:44:11 +02:00
Robert Schmidt
8f85851a95 Remove clang from physim Dockerfile
clang (at least version 14.0.6 used on the cluster) is very slow when
compiling both ASan and UBSan into the binary. We therefore move clang
out, into a separate file in a later commit
2023-04-20 13:44:11 +02:00
Robert Schmidt
3b429c5399 Fix uninitialized variable warning 2023-04-20 13:44:05 +02:00
Roberto Louro Magueta
7879afc010 Improve code readability and fix the nr_polar_params() function 2023-04-20 11:51:47 +01:00
francescomani
053ef8fc44 bug fix for msg3 retrasmission scheduling frame 2023-04-20 11:47:37 +02:00
francescomani
24e4629eff never use ulsch_max_frame_inactivity = 0 in a multi-ue scenario 2023-04-20 10:20:16 +02:00
Robert Schmidt
aac2a062b3 Merge branch 'integration_2023_w16' into 'develop'
integration_2023_w16

See merge request oai/openairinterface5g!2063

* !2040 CI: AW2S-ASUE pipeline creation
* !2042 fix iqplayer doc and copy in central directory
* !2051 Documentation update for USRPs
2023-04-20 06:41:22 +00:00
laurent
b735f8bec6 ubsan fixes 2023-04-19 22:12:08 +02:00
laurent
8a10d1b222 add phy layer variable and persited arrays 2023-04-19 22:12:08 +02:00
laurent
9509bdfdc1 ubsan detected issue 2023-04-19 22:12:08 +02:00
laurent
3eabc2fe01 remove ubsan from ziggurat random generator for speed and because it detects abs(MIN_INT32) cant be computed 2023-04-19 22:12:08 +02:00
Robert Schmidt
01af5a1e2d Fix too large shift in ulsim 2023-04-19 22:12:08 +02:00
Robert Schmidt
2faca0fdba Fix too large shift in nr_pucchsim 2023-04-19 22:12:08 +02:00
laurent
7f4e8f9220 fix-ubsan 2023-04-19 22:12:08 +02:00
laurent
63fc39dc3f fix bugs detected by ubsan 2023-04-19 22:12:08 +02:00
Robert Schmidt
3f1a52eb3e Merge remote-tracking branch 'origin/multiusrps' into integration_2023_w16 2023-04-19 17:01:15 +02:00
Robert Schmidt
759d9df9bd Merge remote-tracking branch 'origin/iqplayer_doc' into integration_2023_w16 2023-04-19 17:01:09 +02:00
Robert Schmidt
6927eb12a6 Merge remote-tracking branch 'origin/ci-aw2s-asue-test' into integration_2023_w16 2023-04-19 17:01:00 +02:00
Jaroslava Fiedlerova
cf67fcea6c CI: Jenkinsfile log collection 2023-04-19 16:58:05 +02:00
Jaroslava Fiedlerova
62efab7262 CI EPC module: fix of CN log collection 2023-04-19 16:58:02 +02:00
Jaroslava Fiedlerova
8a9346dd27 Add pipeline to Jenkins RAN-container-parent 2023-04-19 16:57:59 +02:00
Jaroslava Fiedlerova
9987ebf8aa Add AW2S+Amarisoft test
- New amariue config for AW2S test
- XML files
- docker-compose file for deployment
- documentation
2023-04-19 16:57:56 +02:00
Jaroslava Fiedlerova
6836582ca1 Harmonize Jenkinsfile log collection
- use same zip file in Jenkins artifacts for multiple pipelines
2023-04-19 16:57:53 +02:00
Jaroslava Fiedlerova
8b339bb659 Retag porcepix and cluster registry images to use same prefix
Allows to reuse DeployObject, CleanTestImages, etc, to be reused
regardless of image registry origin.
2023-04-19 16:57:50 +02:00
Jaroslava Fiedlerova
b6feedc883 Ping for OC OAI 5GC 2023-04-19 16:57:46 +02:00
Jaroslava Fiedlerova
bfbb3a69ba CI EPC module: Deploy OpenShift Cluster OAI 5GC 2023-04-19 16:57:44 +02:00
Jaroslava Fiedlerova
b34e4d0a19 CI Cluster module: refactor login&logout, pull cluster images 2023-04-19 16:57:41 +02:00
Jaroslava Fiedlerova
98f06c5907 Minor fixes in cls_containerize.py 2023-04-19 16:57:37 +02:00
Jaroslava Fiedlerova
5c426db6eb Update Amarisoft to new version 2023-04-19 16:57:34 +02:00
Jaroslava Fiedlerova
f798541e84 Remove old and unused Amarisoft UE configuration files 2023-04-19 16:57:29 +02:00
Jaroslava Fiedlerova
d510827e16 Fix for AW2S dockerfile 2023-04-19 16:57:23 +02:00
Arash Sahbafard
c63edad48b Update radio/USRP/README.md 2023-04-19 16:02:45 +02:00
Melissa Elkadi
e9e347043e Fixing typo and aligning input buffer 2023-04-18 11:09:15 -07:00
Melissa Elkadi
28741ed967 Reverting unnecessary CICD test change 2023-04-18 10:09:16 -07:00
Melissa Elkadi
608aa3ebc4 Adding 32 bit alignment to PSS variables 2023-04-18 09:59:51 -07:00
Melissa Elkadi
a6e18fe06a Merge branch 'eurecom-develop' into episys-merge-SL-variables 2023-04-18 09:29:56 -07:00
Robert Schmidt
46db3534b7 Add link to second document 2023-04-18 10:08:39 +02:00
Bruno Mongazon-Cazavet
2f82aea100 fix iqplayer doc and copy in central directory 2023-04-18 10:07:05 +02:00
francescomani
b37b0e5c97 further improvements for PUCCH config 2023-04-17 16:22:22 +02:00
francescomani
28fb7a37d7 removing an assertion and improving CSI-RS config 2023-04-17 16:22:22 +02:00
Robert Schmidt
db2aa3c8bd Honor force_256qam_off when configuring UL MCS tables 2023-04-17 15:09:17 +02:00
francescomani
9eb1af6dc2 addressing review 2023-04-17 15:06:04 +02:00
Roberto Louro Magueta
6a90266aff Add implementation related to 256QAM for 2-layers UL 2023-04-17 13:59:55 +02:00
francescomani
8c051201d6 fix for RA NSA 2023-04-17 12:41:47 +02:00
francescomani
26e469cbac adding 256QAM in feature set, adding 256QAM test in ulsim and limit mcs according to table 2023-04-17 12:41:47 +02:00
Raymond Knopp
7455bae459 added 256QAM LLR computation for ULSCH 2023-04-17 12:41:47 +02:00
francescomani
a0b207fe6b adding options for 256QAM in UL simulators 2023-04-17 12:41:47 +02:00
francescomani
fc17f3fdc7 fix for transform precoding condition 2023-04-17 12:32:29 +02:00
francescomani
abba6a6d8a UL 256 QAM 2023-04-17 12:32:29 +02:00
laurent
1fefd730d6 fix ldpc ubsan 2023-04-17 09:30:47 +02:00
Robert Schmidt
56367dd07c Merge branch 'integration_2023_w15' into 'develop'
integration_2023_w15

See merge request oai/openairinterface5g!2057

* !1977 UL-MMSE
* !2021 Remove globals demodulator
* !2025 NR UE implementation of PUCCH multiplexing procedures
* !2049 reworking UE function to get max transmitted power
* !2034 Compiling CLANG warning free
* !2043 Refactor radio-related RRC parameters and further cleanup
2023-04-16 21:35:54 +00:00
Cedric Roux
6e5511b220 bugfix: use an array of size NGAP_MAX_DRBS_PER_UE for drb_priority
It may happen that the drb to configure is not 1, so we may need
this array in rrc_gNB_generate_dedicatedRRCReconfiguration().

Not tested, this commit is mostly to harmonize with other places in
openair2/RRC/NR/rrc_gNB.c
2023-04-15 21:26:24 +02:00
Cedric Roux
bf10230185 bugfix: use correct index in array
Accelleran CU configures DRB ID 4, not 1, so we need to take index 3
in the array 'priority', not 0.

So let's use i-1 as it was before.
2023-04-15 20:20:10 +02:00
Robert Schmidt
be5c3d7aa0 Merge remote-tracking branch 'origin/refactor-nr-rrc-du' into integration_2023_w15 2023-04-14 15:26:30 +02:00
Robert Schmidt
04451c7078 Merge remote-tracking branch 'origin/clang_warnings_new' into integration_2023_w15 2023-04-14 13:54:46 +02:00
Robert Schmidt
224c5538e4 Merge remote-tracking branch 'origin/NR_UE_get_Pmax' into integration_2023_w15 2023-04-14 13:54:40 +02:00
francescomani
ffe0630d93 addressing a couple of review comments 2023-04-14 13:52:16 +02:00
francescomani
5a153c502f adding static const in Gen_shift_value.h to avoid asan odr-violation 2023-04-14 13:52:16 +02:00
francescomani
1470d7637f fix new warnings 2023-04-14 13:52:16 +02:00
Robert Schmidt
69da6a5f5e Remove futile AssertFatal
NGAP_MAX_PDU_SESSION is 256, and ue->nb_of_pdusessions is uint8_t,
so comparison is always true and we can simply drop it.
2023-04-14 13:52:16 +02:00
Robert Schmidt
1ae561b9cc Remove write-only variable and commented code 2023-04-14 13:52:16 +02:00
Robert Schmidt
41aadcc54f Comment write-only variable 2023-04-14 13:52:16 +02:00
Robert Schmidt
beef5461e5 Write-only variable: return ret_mask 2023-04-14 13:52:16 +02:00
Robert Schmidt
51c4933258 MAC: count transported SDU bytes 2023-04-14 13:52:16 +02:00
Robert Schmidt
8d07275496 Write-only variable: suppress warning, as we decode NAS message 2023-04-14 13:52:16 +02:00
Robert Schmidt
852a6c4f28 Remove write-only variables 2023-04-14 13:52:12 +02:00
francescomani
ca4b438dd4 clang warning fixes to compile lte softmodems 2023-04-14 13:52:12 +02:00
francescomani
971bacb76f clang warning fixes to compile rfsimulator 2023-04-14 13:52:12 +02:00
Robert Schmidt
5d38a99955 Physim images: build using clang and -Werror 2023-04-14 13:52:12 +02:00
Robert Schmidt
e6488d1b62 Remove compile options unknown to clang 2023-04-14 13:52:03 +02:00
Robert Schmidt
c6a04db9a1 Merge remote-tracking branch 'origin/NR_UE_PUCCH_fixes' into integration_2023_w15 2023-04-13 18:45:29 +02:00
Robert Schmidt
8292c4523e Merge remote-tracking branch 'origin/remove-globals-demodulator' into integration_2023_w15 2023-04-13 18:45:19 +02:00
francescomani
eb09a63001 separating MAC and PHY procedures for TA 2023-04-12 10:32:35 +02:00
Robert Schmidt
8aa0aa4d40 Make functions in (gNB MAC) main.c static 2023-04-11 10:33:27 +02:00
Robert Schmidt
296d930fba Make most functions in nr_rrc_config.c static 2023-04-11 10:33:27 +02:00
Robert Schmidt
b62474bd83 Move fill_default_secondaryCellGroup() and change signature
fill_default_secondaryCellGroup() is moved to nr_rrc_config.c.
Furthermore, the signature is changes to return the NR_CellGroupConfig
from the functions, instead of filling a pre-allocated structure (which
is, in all cases, allocated just before calling
fill_default_secondaryCellGroup().

There is a problem with this function: the function also fills the
ServingCellConfig (a parameter to this function). This behavior has not
been changed.
2023-04-11 10:33:27 +02:00
Robert Schmidt
c1a2b65697 Delete nr_DRB_preconfiguration() and replace with existing functions
nr_DRB_preconfiguration() does a "pre-configuration" for the default DRB
for "noS1" mode, i.e., when there is no connection to core network. In
this case, there is no PDU session to be set up, and hence we need to
preconfigure the DRBs.

We replace this function with partially existing functions and a new
function fill_nr_noS1_bearer_config() which returns a bearer
configuration for the noS1 case, also better reflected in the function
name. It has also been moved to asn1_msg.c, away from the actual PDCP
layer.
2023-04-11 10:33:27 +02:00
Robert Schmidt
d021fbd0b6 Reuse get_DRB_RLC_BearerConfig() to get RLC-BearerConfig
For nr_DRB_preconfiguration() and fill_default_secondaryCellGroup(),
there is duplicated code to generate and RLC-BearerConfig, when calling
the existing get_DRB_RLC_BearerConfig() (with the right parameters)
yields a similar configuration (see exceptions below).

Differences:
- We do not support reestablishmentRLC, so we don't set it
- Set prioritisedBitrate to 8kbps instead of infinity (we don't
  prioritize anything, anyway)
- bucketSizeDuration is 50ms instead of 100ms
2023-04-11 10:17:07 +02:00
Robert Schmidt
395ca4b4b0 Refactor update_cellGroupConfig() 2023-04-11 10:17:07 +02:00
Robert Schmidt
44d5b37890 Refactor get_initial_cellGroupConfig() 2023-04-11 10:17:07 +02:00
Robert Schmidt
88e6d9df09 Refactor SIB1 handling 2023-04-11 10:17:07 +02:00
Robert Schmidt
7cb50288ef Refactor MIB handling 2023-04-11 10:17:07 +02:00
Robert Schmidt
1e30c0adba Demote PRS no config message to information level 2023-04-11 10:07:07 +02:00
Robert Schmidt
b9293754b8 Change rrc_coreset_config() to return new coreset config 2023-04-11 10:07:07 +02:00
Robert Schmidt
2d1aa8425b Remove write-only or unused variables 2023-04-11 10:07:07 +02:00
Robert Schmidt
d907cbd442 Remove unused servingcellconfig parameter in RRC config 2023-04-11 10:07:07 +02:00
Robert Schmidt
c744b01566 Remove ServingCellConfig from RRC Setup-related functions: is not needed 2023-04-11 10:07:07 +02:00
Robert Schmidt
5761b60c60 Create functions to access MAC from RRC
- for updating cellGroup
- for removing UE
- not done for SI information and RRC timers
2023-04-11 10:07:07 +02:00
Robert Schmidt
f7181caf65 Remove commented code 2023-04-11 10:07:07 +02:00
Melissa Elkadi
aa6468f95e Merge branch 'eurecom-develop' into episys-merge-SL-variables 2023-04-10 13:45:19 -07:00
Roberto Louro Magueta
a611d58d3b Add CI tests: PUSCH Type B, 40 MHz BW, 30 kHz SCS, 2 and 4 RX Antennas Requirements Test, 2 layers 2023-04-10 10:18:41 +01:00
Roberto Louro Magueta
6c590b900a Compute noise variance to be used in MMSE 2023-04-10 10:18:41 +01:00
Roberto Louro Magueta
4b263c3fa5 MMSE working for 2-layers UL with a hardcoded noise variance 2023-04-10 10:18:41 +01:00
francescomani
a85fee5dca fixes for UE pucch scheduling 2023-04-07 16:56:26 +02:00
francescomani
e49c6db2bf final round of warning fixes to compile nr softmodems 2023-04-07 15:52:16 +02:00
laurent
f4ed558cc5 fix a bug in UE_CAPABILITY_DUMMY message, fix is correct, but the surround code is not fully consistent 2023-04-07 15:52:16 +02:00
francescomani
3ca0f39088 new round of clang warning fixes 2023-04-07 15:52:16 +02:00
Robert Schmidt
98f4d038d4 Merge branch 'integration_2023_w14' into 'develop'
integration_2023_w14

See merge request oai/openairinterface5g!2048

* !1861 NR UE RX Multi-threading
* !2017 scheduling aperiodic SRS at UE
* !2046 Correctly allocate GUTI in NAS UE structures
* !2033 PBCH radio link failure detection at MAC
* !1959 bugfix: change memory management of interface between PHY and MAC scheduler
* !2041 hack: see "Bye." message when quitting gnb running with aw2s
* !2047 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
2023-04-07 12:53:01 +00:00
Florian Kaltenberger
daa1a911ac Update radio/USRP/README.md 2023-04-07 10:04:13 +00:00
francescomani
41d9e775c9 reworking the function to get Pmax 2023-04-07 11:33:14 +02:00
Melissa Elkadi
f09fffdb2b Whitespace and updating pss_search_time_nr() footprint 2023-04-06 10:05:48 -07:00
luis_pereira87
486ae6e7bd Merge remote-tracking branch 'origin/nr-rrcreestablishment-fix-multipdu-proper-commits' into integration_2023_w14 2023-04-06 10:48:38 +01:00
Angelo Athanassopoulos
1679cf38ba NR RRC - RRCReestablishment - Reviewer comments
Changes
1. Passing function argument  by reference.
2. Use a pointer for ue->established_drbs[drb_id - 1] in generateDRB.
2023-04-05 22:40:55 +02:00
Robert Schmidt
bdfec26d82 Merge remote-tracking branch 'origin/hack-bye-message-aw2s' into integration_2023_w14 2023-04-05 19:30:33 +02:00
Robert Schmidt
19d3014150 Merge remote-tracking branch 'origin/bugfix-phy-mac-interface' into integration_2023_w14 2023-04-05 19:30:30 +02:00
Cedric Roux
733c7e5e89 bugfix: change memory management of interface between PHY and MAC scheduler
This commit fixes a bug caused by global variables in the gNB_MAC_INST
structure used to transfer MAC scheduler's results to the PHY layer.

When using several threads in the PHY layer, it may happen that the
MAC scheduler is called a second time by the second PHY thread for the
next slot before the content of the global variables in the gNB_MAC_INST
structure used to store the result of the MAC scheduler for the current
slot have been consumed by the first thread, leading to unpredictable
results (all of them certainly wrong).

The solution is to introduce a small memory management module for the
interface between the PHY threads and the MAC scheduler. The MAC
scheduler now fills the data structures passed to it, and not a
global variable anymore. The PHY layer manages the structures and
ensures that no data is overwritten before being fully consumed by
the various threads of the PHY layer.

Some care has to be taken because several PHY threads will access the
same structures at the same time for a given slot (in read mode, so
it's okay). A mechanism of reference counting has thus been introduced.

Only one CC is supported. This restriction should not be too hard
to remove if/when needed. (The code before this commit does not seem
to work for more than one CC anyway.)
2023-04-05 16:39:12 +02:00
Angelo Athanassopoulos
5b35523c2c NR RRC - RRCReestablishment - Apply clang format 2023-04-05 11:22:59 +02:00
Melissa Elkadi
376a9beb80 Adding __attribute__((aligned(32))) back in 2023-04-04 15:02:56 -07:00
francescomani
ebd70a3915 Merge remote-tracking branch 'origin/NR_pbch_errors_at_MAC' into integration_2023_w14 2023-04-04 19:35:23 +02:00
luis_pereira87
3cf3a42b44 Flag integrityProtection work in inverse logic state, '0' means enabled which is the default the value, we need to set it to '1' to disable it 2023-04-04 18:25:08 +01:00
luis_pereira87
6fb10cd5fa Fix SRB_configList2 and DRB_configList2 array position (new_xid) while creating RRCReconfiguration message after RRCReestablishmentComplete 2023-04-04 18:13:11 +01:00
Robert Schmidt
a6862df7aa Merge remote-tracking branch 'origin/guti-hotfix' into integration_2023_w14 2023-04-04 18:54:39 +02:00
Robert Schmidt
a0a92f4581 Merge remote-tracking branch 'origin/NR_UE_aperiodic_SRS' into integration_2023_w14 2023-04-04 18:50:41 +02:00
Melissa Elkadi
0b892acef3 Updating simulator and adding memsets 2023-04-04 07:25:38 -07:00
Angelo Athanassopoulos
f4dc362247 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Fixed a bug where the integrity protection was included in the ASN1 and caused significant throughput bottleneck.
2023-04-04 14:05:06 +02:00
Angelo Athanassopoulos
778c88d8a9 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Cosmetic changes, also changed the LOG message for updating the UEid, and moved the drb_id_to_setup_start and nb_drb_to_setup right before the function that they are used
2023-04-04 14:05:06 +02:00
Angelo Athanassopoulos
ad598a2d5d NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Removed the unused variables, and changed the tenary operator conditions of drb_id_to_setup_start & nb_drb_to_setup, to the correct ones
2023-04-04 14:05:05 +02:00
Angelo Athanassopoulos
ca010654bf NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Changed the SRB2 and DRB at the do_RRCReconfiguration arguments, to pass the correct structures that are generated
2023-04-04 14:05:05 +02:00
Angelo Athanassopoulos
1923bed4a3 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Simplify RRCReestablishmentComplete procedure with respective function,
removed the block that creates the SRB2  and created a function, with doxygen
2023-04-04 14:05:05 +02:00
Angelo Athanassopoulos
9142357069 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Simplify RRCReestablishmentComplete procedure with respective function,
removed the block that creates the ASN1 DRBs  and created a function, with doxygen
2023-04-04 14:05:04 +02:00
Angelo Athanassopoulos
a3c13fdc71 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Simplify RRCReestablishmentComplete procedure with respective function,
removed the block that updates NGU Tunnels and created a function, with doxygen
2023-04-04 14:05:04 +02:00
Angelo Athanassopoulos
bf844247bf NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Simplify RRCReestablishmentComplete procedure with respective function,
removed the block that updates NAS PDUSession and created a function, with doxygen
2023-04-04 14:05:04 +02:00
Angelo Athanassopoulos
7eb2e99dcd NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Simplify RRCReestablishmentComplete procedure with respective function,
removed the block that frees all the NAS PDUs and created a function for this.
2023-04-04 14:05:03 +02:00
Angelo Athanassopoulos
26909e7c32 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Cosmetic changes, added doxygen configuration, and changed the rrc_gNB_process_RRCReestablishmentComplete function arguments' alignment, so in the future if an argument is removed or added to be better visible in the commits
2023-04-04 14:05:03 +02:00
laurent
ded8a3779d remove globals 2023-04-04 11:41:32 +02:00
Robert Schmidt
0a4e28688b Update phytest-timing test timing thresholds 2023-04-04 09:39:28 +02:00
Robert Schmidt
22db2d613f Correctly allocate GUTI in NAS UE structures 2023-04-04 08:40:48 +02:00
Melissa Elkadi
73907e5ee2 Re-adding clean-up and refactoing now that pbch works! 2023-04-03 19:34:59 -07:00
Melissa Elkadi
703047eca9 Fixing build errors 2023-04-03 17:28:40 -07:00
Angelo Athanassopoulos
33c09b7776 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
The generateDRB function now creates a DRB and puts it in the struct member of gNB_RRC_UE_t, from this struct we can generate ASN1 messages by calling the generateDRB_ASN1
2023-04-04 00:44:43 +02:00
Angelo Athanassopoulos
af8b3b0486 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Added function to create ASN1 DRB-ToAddMod structs from, gNB_RRC_UE_t established_drbs
2023-04-04 00:44:38 +02:00
Angelo Athanassopoulos
5403198996 NR RRC - RRCReestablishment - Fix MultiplePDU Regression
Added struct member to gNB_RRC_UE_t to store the established DRBs for a UE, this can be used to generate ASN1 structs, during RRCReconfiguration
2023-04-04 00:18:44 +02:00
Melissa Elkadi
5cbad19d19 Temporarily removing refactoring in PSS until I can understand the sync problems 2023-04-03 10:41:40 -07:00
Sakthivel Velumani
1f6d111f6a Num wait idication as Tpool message field 2023-04-03 10:25:13 -04:00
Sakthivel Velumani
2bfe9ba229 Remove dead code 2023-04-03 10:25:13 -04:00
Sakthivel Velumani
c8a61331ea Update UE design doc 2023-04-03 10:25:13 -04:00
Sakthivel Velumani
0004626ac7 Fix bug in QT scope
The UE copies scope data not in a single buffer to avoid overwiring in case of multiple slots processing in parallel. But the scope upates data from single buffer thats assigned during selection. A getPlotValue() method is created to update the data pointer on every timerEvent.
2023-04-03 10:25:13 -04:00
Sakthivel Velumani
9e4d522937 Make kpi variables atomic
Mutex for phy scope: Repeating this change again. My earlier change in commit 06ef311975 was erased by someone during merge of QT scope.
2023-04-03 10:25:13 -04:00
Sakthivel Velumani
e45a051c80 Perform CRC check for whole TB 2023-04-03 10:25:11 -04:00
Sakthivel Velumani
5c6778be0c Fixed Harq stats print 2023-04-03 10:24:26 -04:00
Sakthivel Velumani
7d23ec27b5 Changed NR_UE_CAPABILITY_SLOT_RX_TO_TX to 3
Tested with X300 and there was no real-time problems.
Could get the same throughput as when NR_UE_CAPABILITY_SLOT_RX_TO_TX is 4.
2023-04-03 10:24:26 -04:00
Sakthivel Velumani
f1841639f5 Updated documentation 2023-04-03 10:24:26 -04:00
Sakthivel Velumani
a03864ee8c Fix printing help message 2023-04-03 10:24:26 -04:00
Sakthivel Velumani
f3be849904 Delete job data when no response FIFO 2023-04-03 10:24:26 -04:00
Sakthivel Velumani
1d9a4a42e7 Corrected thread pool help message 2023-04-03 10:24:26 -04:00
Sakthivel Velumani
15c12caa37 Contains MAC changes to run || DLSCH
DL config as array in MAC
Run RX slot processing in Tpool thread
Fixed race in phy config
Changed mac_IF_mutex
Proc Tx: Lets wait for Proc Rx to get ACK/NACK
-(only on slots that carry ACK/NACK)
Fix problem with rfsim
Separated PDCCH and PDSCH decoding functions. Run PDCCH decoding in main UE_thread.
Fixed race in MAC dci config struct
needed for parallel processing of slots
Moved DLSCH transport block buffer to stack
rx_ind as static allocation
L2sim: Fixed calling of MAC sched in wrong slot
Fix DCI extract bug for RA procedure
2023-04-03 10:24:24 -04:00
Melissa Elkadi
d1e1f56199 Merge branch 'eurecom-develop' into episys-merge-SL-variables 2023-04-03 05:35:06 -07:00
francescomani
5c333cca65 move radio link failure detection on pbch at MAC 2023-04-02 09:48:09 +02:00
Robert Schmidt
1f97969675 Merge branch 'integration_2023_w13' into 'develop'
integration_2023_w13

See merge request oai/openairinterface5g!2037

* !1945 Free RNTI related structures at PHY after UE disconnection
* !2011 Creation of new pipeline LTE-TDD-2x2-container
* !1854 Handle reconfigurationWithSync
* !2019 bugfix: LDPC decoding in the gNB: clear d properly
* !2038 Fix DL 2x2 errors
* !2039 Adding test-case in XML to reset USRP in LTE-TDD pipeline
* !2008 Implement NR-UE Deregistration procedure
* !2023 Rework PDCP OAI API to allow custom SRB data forwarding (e.g., in F1)
* !2015 Update documentation: CI, general README.md, overview of doc README, various improvements
2023-04-01 13:28:17 +00:00
Robert Schmidt
06c0979b90 Merge remote-tracking branch 'origin/doc-ci' into integration_2023_w13 2023-03-31 18:06:19 +02:00
Robert Schmidt
51fe9b84dd Merge remote-tracking branch 'origin/pdcp-callbacks-simplify' into integration_2023_w13 2023-03-31 18:03:40 +02:00
Robert Schmidt
5268dbf3f8 Merge remote-tracking branch 'origin/deregistration' into integration_2023_w13 2023-03-31 18:01:00 +02:00
Robert Schmidt
ca6ae2c486 Merge remote-tracking branch 'origin/ci-ltetdd-reset-usrp' into integration_2023_w13 2023-03-31 18:00:03 +02:00
Robert Schmidt
8c1aeb4ab9 Merge remote-tracking branch 'origin/develop-fix-DL-2x2-errors' into integration_2023_w13 2023-03-31 17:59:54 +02:00
Robert Schmidt
7a52279078 Merge remote-tracking branch 'origin/bugfix-clear-llr-properly' into integration_2023_w13 2023-03-31 17:58:23 +02:00
Melissa Elkadi
61435e9066 More clean up and use of c16_t's - but PBCH sync is failing 2023-03-31 08:40:35 -07:00
Robert Schmidt
c4a9f0ea03 gNB RRC: Shorten time till UE is removed for RRCRelease 2023-03-31 17:23:03 +02:00
Robert Schmidt
a6149386dc NR UE MAC: Decode TBS and print warning if unknown LCID 2023-03-31 17:23:03 +02:00
Robert Schmidt
25b3aaf230 NR UE RRC: DCCH messages can be on SRB1 or SRB2 2023-03-31 17:23:03 +02:00
Robert Schmidt
06436655ff Bugfix: Forward F1 DL RRC Message transfer on correct SRB 2023-03-31 17:22:59 +02:00
Robert Schmidt
0631c04fba Revert 5G RFsim timeout changes for tests with CN: deregistration triggers UE disconnect 2023-03-31 17:22:59 +02:00
Robert Schmidt
8e6554bdf3 Print log on receiving deregistration accept, on CONN Release stop nr-uesoftmodem 2023-03-31 17:22:59 +02:00
Robert Schmidt
7fb242d33e Send NAS_CONN_RELEASE_IND to correct NAS UE task from RRC NR UE 2023-03-31 17:22:59 +02:00
Robert Schmidt
03862de437 Update TESTBenches.md to reflect current stetup 2023-03-31 17:07:28 +02:00
Robert Schmidt
ca3a7c612b Remove outdated CI section 2023-03-31 17:07:28 +02:00
Robert Schmidt
8ca640337a Reorganize RUNMODEM.md 2023-03-31 17:07:28 +02:00
Robert Schmidt
a29e59b602 Update GET_SOURCES.md and BUILD.md 2023-03-31 17:07:28 +02:00
Robert Schmidt
e4143ded39 Update main README and overview of documentation 2023-03-31 17:07:28 +02:00
Roberto Louro Magueta
b69fb5bd74 Do not send TA command when rrc_processing_timer is active 2023-03-31 14:38:56 +01:00
Robert Schmidt
d1fc95a8a1 GTP: when creating a tunnel, tell which functions to use
The GTP module is common for 4G and 5G. It hardcodes the functions to
call when creating S1U and NGU tunnels. The S1U case is both applicable
for LTE and NR (NSA), which until now was not a problem as the PDCP data
forwarding functions where called pdcp_data_req. The issue is that in this
branch, the NR PDCP functions have changed to nr_pdcp_data_req_drb().

When setting up a GTP tunnel, we now pass the PDCP data forwarding
functions into GTP, since the caller knows whether it is in 4G or 5G,
but GTP itself does not.
2023-03-31 11:53:52 +02:00
Melissa Elkadi
ee8af9dcfb Fixing seg fault and removing unused variables for PHY testing 2023-03-30 11:39:18 -07:00
Robert Schmidt
ed1d009381 fix warning 2023-03-30 19:59:48 +02:00
Robert Schmidt
99d5e50b6a fix merge 2023-03-30 19:58:55 +02:00
Robert Schmidt
1ac428a323 Merge remote-tracking branch 'origin/develop-handle-reconfigurationWithSync' into integration_2023_w13 2023-03-30 19:19:37 +02:00
Cedric Roux
50bf571347 hack: see "Bye." message when quitting gnb running with aw2s
For some (unclear) reason, nr-softmodem with aw2s device does not print
"Bye." when stopping it with control+c, which is problematic in the CI.

This little hack solves the problem.

(Maybe not the right solution, to be changed if needed.)
2023-03-30 12:57:10 +02:00
Dhanuja Elizabeth Thomas
15adb12b71 Adding test-case in XML to reset USRP in LTE-TDD pipeline 2023-03-30 10:25:36 +02:00
Melissa Elkadi
b7f47aa70a Refactoring and more clean up 2023-03-29 12:34:52 -07:00
Melissa Elkadi
066de7c3c5 Removing primary_synchro_nr2_sl and others 2023-03-28 16:36:03 -07:00
Robert Schmidt
bd42a4259f Merge remote-tracking branch 'origin/lte-2x2-container-pipeline' into integration_2023_w13 2023-03-28 20:07:43 +02:00
Roberto Louro Magueta
cf8dff2093 Implementation to update the RRC timers at UE 2023-03-28 18:52:48 +01:00
Roberto Louro Magueta
670fcc0459 Fix handle_nr_ul_harq() for CFRA in SA 2023-03-28 18:52:48 +01:00
Roberto Louro Magueta
81d44c6422 Stop timer T304 when RA is succeeded 2023-03-28 18:52:48 +01:00
Roberto Louro Magueta
889a50072f Implementation of resynchronization procedures for a gNB with a given Nid_cell 2023-03-28 18:52:48 +01:00
Robert Schmidt
1880ede547 Check for GUTI 2023-03-28 14:12:05 +02:00
Robert Schmidt
40c06fa8d5 Custom handler in NRUE to first send deregistration before stopping 2023-03-28 14:12:05 +02:00
Robert Schmidt
a6486909ca Reimplement itti_wait_tasks_end() to allow custom wait handlers
In the UE, we wish to handle ^C in the UE to send a message before
terminating, so we allow custom wait handlers to implement such
functionality. Use itti_wait_tasks_unblock() to unblock
itti_wait_tasks_end().

Also, implement itti_wait_tasks_end() using semaphores, as signals are
not async-signal-safe (and therefore should not be used in a signal
handler).
2023-03-28 14:12:05 +02:00
Robert Schmidt
4700dde2ae Trigger deregistration 2023-03-28 14:12:05 +02:00
Robert Schmidt
a0318fb413 Implement NAS Deregistration Type message 2023-03-28 14:12:05 +02:00
Robert Schmidt
09ea970b34 Stop UE with ^C 2023-03-28 14:12:05 +02:00
Robert Schmidt
77e61425e0 UE NAS: Add counter for NAS messages 2023-03-28 14:12:05 +02:00
Robert Schmidt
4642a7c0f5 Correctly fill GUTI in NAS if available 2023-03-28 14:12:05 +02:00
Robert Schmidt
6e01a62838 Decode Registration Accept to receive GUTI 2023-03-28 14:12:05 +02:00
Robert Schmidt
e35401efde NAS refactor: no moduleID, group UICC and security in one context 2023-03-28 14:12:05 +02:00
Robert Schmidt
223fd28bb2 Refactor NAS: separate code into functions 2023-03-28 14:12:05 +02:00
Robert Schmidt
528025e9a6 Fix decoding of Mobile identity 2023-03-28 14:12:05 +02:00
Robert Schmidt
d4da44f1d3 CI: Remove unused routes 2023-03-28 14:03:03 +02:00
francescomani
0de51bcd93 scheduling aperiodic SRS at UE 2023-03-28 11:11:31 +02:00
Melissa Elkadi
fec2a15bdf Merge branch 'eurecom-develop' into episys-merge-SL-variables 2023-03-27 14:24:12 -07:00
Robert Schmidt
6529d875d8 nr_pdcp_data_req_srb(): take callback to forward data 2023-03-27 16:47:46 +02:00
Robert Schmidt
ffebe2498d Simplify callback for deliver_pdu 2023-03-27 16:47:46 +02:00
Robert Schmidt
0f43c2c713 PDCP DL handling: unlock PDCP before forwarding PDU
nr_pdcp_entity_recv_sdu() processes PDCP SDUs, and forwards the PDU at the
end of the function, while having the PDCP lock. This can lead to
deadlocks, e.g., when another thread goes through RLC and tries to
access the PDCP while the PDCP tries to lock the RLC.

This commit changes the logic: instead of having recv_sdu() forward the
PDU directly, it fills a buffer with the PDU (thus the name change to
process_sdu()), and returns. We then unlock the PDCP, before forwarding
the PDU, thus eliminating potential deadlocks.
2023-03-27 16:47:46 +02:00
Robert Schmidt
c405ad16a8 Remove nr_rrc_data_req()/rrc_data_req_nr_ue() 2023-03-27 16:47:46 +02:00
Robert Schmidt
2ac2a7f074 Make separate header for nr_pdcp instead of using 4G pdcp
Creates function that have nr_pdcp_ prepended to their name, and change
the signature of some functions for the 5G PDCP:

- nr_pdcp_layer_init()
- nr_pdcp_data_req()
- nr_pdcp_remove_UE()
- nr_pdcp_config_set_security()
- nr_pdcp_remove_UE()
- Make separate functions for nr_pdcp_data_req_srb/drb()
2023-03-27 16:39:24 +02:00
Robert Schmidt
a458a251a0 PDCP: harmonize DL RRC Message transfer 2023-03-27 16:39:24 +02:00
Robert Schmidt
47ea8d79a2 Free memory correctly 2023-03-27 15:39:49 +02:00
francescomani
d664190f9d scope compilation fixes 2023-03-27 15:39:49 +02:00
francescomani
0d66410317 another round of review 2023-03-27 15:39:49 +02:00
francescomani
12ccca72b6 further improvements 2023-03-27 15:26:52 +02:00
Robert Schmidt
6e93619896 review comments 2023-03-27 15:26:52 +02:00
francescomani
779748579c fixes for physical simulators 2023-03-27 15:26:52 +02:00
francescomani
f3126586f3 removing constant max number of xlsch 2023-03-27 15:26:52 +02:00
francescomani
48d19391e2 fix for PHY structure disactivation 2023-03-27 15:26:52 +02:00
francescomani
7c9b501310 removing call from MAC to PHY to clear structures (now automatic clearing) 2023-03-27 15:26:52 +02:00
Dhanuja Elizabeth Thomas
b58ad4baf0 Introducing new pipeline for LTE TDD 2x2 in container
Following changes are made:

1. Removed XMLs used in old pipeline lte-OAIEPC
2. Added TM1 and TM2 config, XML and YAML
3. Added pipeline details in TestBenches.md
4. Modification in Jenkins file for the pipeline
5. Added ping/iperf test cases in XML
6. Minor modification in cls_containerize.py and cls_oaicitest.py
2023-03-27 14:01:30 +02:00
Roberto Louro Magueta
dcdf057dc8 Enable T304 after receiving the reconfigurationWithSync 2023-03-27 10:50:00 +01:00
Robert Schmidt
342ea0882d Merge branch 'integration_2023_w12' into 'develop'
integration_2023_w12

See merge request oai/openairinterface5g!2030

* !1957 UL improvements for 2-layers
* !2016 int32_t to c16_t conversion
* !2028 Fix ue capability config files
* !2022 NR dlsim pmi input
* !2027 limiting SR periodicity according to scs
* !1985 Correct F1 RRC Message Transfer
* !2024 harmonize mac_CellGroupConfig RRC configuration
* !2026 Fix build by installing nrscope dependencies
2023-03-26 10:52:14 +00:00
Melissa Elkadi
8cbe4bb1d1 Adding softmodem_params() to prach and pucchsim
The get_softmodem_params() function needs to be added
to set the mode for sl_mode (or not). Several places
in the code will check this mode and it should be added
to ensure the proper code path is followed.
2023-03-24 14:34:14 -07:00
Melissa Elkadi
a54ca2c6e3 Slowly implementing sidelink changes.
Specifically, in this commit, we will begin to
implement the #define variables required for
synchronization. These variables include offset
and payload size values that vary from the Uu
interface, in relation to the PSS, SSS and PBCH
elements. We also introduce the new sl_mode
command line flag, which is used to switch between
the Uu interface and SL interface. This will allow
us to modify exisitng PSS and SSS functions, without
copying complete 5G functions and only changing
a few lines to support sidelink mode.

Fixing formatting for softmodem-common.h

Fixing formatting for softmodem-common.h
2023-03-24 10:55:09 -07:00
Robert Schmidt
60d7fe6347 Merge remote-tracking branch 'origin/NR_SA_Tutorials_fix_build' into integration_2023_w12 2023-03-24 11:56:49 +01:00
Robert Schmidt
8fd0ad58b2 Merge remote-tracking branch 'origin/NR_harmonize_mac_cellgroup' into integration_2023_w12 2023-03-24 11:56:41 +01:00
Robert Schmidt
9eac725441 Merge remote-tracking branch 'origin/simplify-f1-rrc-msg-transfer' into integration_2023_w12 2023-03-24 11:56:30 +01:00
luis_pereira87
8e9f9b5629 Fix build by installing nrscope dependencies 2023-03-24 05:57:26 +00:00
Robert Schmidt
e5954f2dbf Merge remote-tracking branch 'origin/NR_SR_periodicity_limits_per_scs' into integration_2023_w12 2023-03-23 19:08:00 +01:00
Robert Schmidt
96f21a1ccb Merge remote-tracking branch 'origin/NR_dlsim_pmi_input' into integration_2023_w12 2023-03-23 19:07:52 +01:00
Robert Schmidt
7e29f16d53 Merge remote-tracking branch 'origin/develop-uecap' into integration_2023_w12 2023-03-23 18:57:46 +01:00
Robert Schmidt
9074566869 Merge remote-tracking branch 'origin/episys-merge-int-to-c16t' into integration_2023_w12 2023-03-23 18:57:37 +01:00
Robert Schmidt
b44bb41235 Merge remote-tracking branch 'origin/develop-UL-Rx' into integration_2023_w12 2023-03-23 18:57:29 +01:00
Cedric Roux
a4718d4a16 bugfix: LDPC decoding in the gNB: clear d properly
The d array has to be cleared at the first usage, which may not necessarily
be when new_rx is true. For example, in case of DTX detected for a first
transmission, the next transmission won't have new_rx true, so d won't be
cleared, containing data from a previous transmission. Or when a LDPC
decoding is cancelled for a segment when new_rx is true, a decoding for
a retransmission will not clear d because then new_rx will not be true.
(Yes, the logic of cancellation will be changed in the future, but the
changes will be orthogonal to the ones of this commit.)

new_rx is removed.
2023-03-23 17:18:50 +01:00
Raphael Defosseux
6475cf21a5 fix(ci): removing the mysql-collection from pipeline; not used anymore
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-03-23 11:44:57 +01:00
Robert Schmidt
5b8674cc57 Remove any reference to NR_SRB_INFO in gNB RRC 2023-03-23 10:30:49 +01:00
Roberto Louro Magueta
9ab2fde392 Fix ue capability config files 2023-03-22 18:35:38 +00:00
Robert Schmidt
b5acd48e5b Remove unused rrc_rlc_register_rrc() 2023-03-22 19:21:06 +01:00
Robert Schmidt
acf73ac23f Delete misleading comment 2023-03-22 19:03:51 +01:00
Robert Schmidt
b3791364fd Review: correct indentation 2023-03-22 19:03:42 +01:00
Robert Schmidt
7c0cb06e59 Review: correct indentation 2023-03-22 19:03:31 +01:00
Melissa Elkadi
9c9ce64809 Fixing warning during build (wasnt casting properly) 2023-03-21 10:11:50 -07:00
francescomani
508b67e5e5 limiting SR periodicity according to scs 2023-03-21 13:52:03 +01:00
Melissa Elkadi
e79756d7ab Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-03-20 12:27:28 -07:00
Melissa Elkadi
39b73391d4 This commit fixing the rfsimualtor
There were three main issues with the simulator.
1. PSS_SSS_SUB_CARRIER_START was not properly used in Uu mode
2. phy_procedures_nrUE_TX(UE, proc, &phy_data) missing last arg
3. Premature free was added in the MAC layer by us for some reason.
2023-03-20 12:24:04 -07:00
Roberto Louro Magueta
9e6fe8cf80 Add CI test: 3GPP G-FR1-A4-27, PUSCH Type B, 40 MHz BW, 30 kHz SCS, 2 RX Antennas Requirements Test, 2 layers 2023-03-20 17:13:30 +00:00
Roberto Louro Magueta
a4d43c249e Update the ad_shift, considering the previous improvement 2023-03-20 17:13:30 +00:00
Roberto Louro Magueta
451449e148 Avoid multiple shifts in UL channel compensation 2023-03-20 17:13:30 +00:00
Roberto Louro Magueta
508d7d284b Fix magnitude computation for 2-layers UL in nr_ulsch_zero_forcing_rx_2layers() 2023-03-20 17:13:30 +00:00
Roberto Louro Magueta
b2e1631f7d Simplification of function nr_ulsch_channel_compensation() 2023-03-20 17:13:30 +00:00
francescomani
29ee6b17fa adding check on allowed pm index in dlsim 2023-03-20 17:33:15 +01:00
francescomani
90bfdfcaf3 harmonize mac_CellGroupConfig 2023-03-20 17:18:02 +01:00
Robert Schmidt
7b40520a2d Do not handle NR_RRC_DL_INDICATION message at NR RRC
The message is never sent to the RRC. And this message is to be
forwarded by the DU to the UE, hence it should not even be handled by
the RRC (as the RRC in the CU sends it).
2023-03-20 16:57:58 +01:00
Robert Schmidt
b3ff033e29 Do not decode RRC Container in DL RRC message
The RRC container is transparent for the DU. Hence, we should not decode
it.
2023-03-20 16:57:58 +01:00
Robert Schmidt
27566f49dd Create CellGroup, SRB0, and SRB1, before sending Initial UL RRC message
During the Initial UL RRC Message, the CellGroup is created. Since the
CellGroup specifies the SRB1, the SRB1 should also be created (because
the DL RRC Messages is sent via SRB1). However, before this commit, the
CellGroup is created while having the RLC lock, so we cannot create
SRB1, as it results in a deadlock.

Therefore, we now first create CellGroup, SRB0, and SRB1, before giving
the UE message to the RLC.
2023-03-20 16:57:58 +01:00
Robert Schmidt
c4c41d3b69 Simplify nr_rlc: provide functions to add SRB/DRB 2023-03-20 16:57:58 +01:00
Robert Schmidt
0ed9201169 Remove useless node_type switches in RRC 2023-03-20 16:57:55 +01:00
Robert Schmidt
da193d1bd1 Merge branch 'integration_2023_w11b' into 'develop'
integration_2023_w11b

See merge request oai/openairinterface5g!2020

* !1833 NR ULSCH transform precoding improvements
* !1929 Implementing bands greater than 64 in the code, feature #603
* !1982 Rework ngap
* !1998 Update NR RRC to version 17.3.0
* !2003 improve NR UE state machine
* !2007 possibility to set identity precoding matrix from config file
* !2009 Use same configurable port number for local and remote N3
* !2012 fix unaligned IDFT
* !2013 doc(tutorial): switching to jinja-rendering configuration on the OAI-CN5 containers
* !2018 demote two UL scheduler warnings to debug level
2023-03-20 15:47:59 +00:00
francescomani
65ce834863 add pmi input option in dlsim 2023-03-20 16:29:38 +01:00
Robert Schmidt
de7f072e85 fix physim container image build 2023-03-20 15:35:14 +01:00
Robert Schmidt
ca25160c4c Some cleanup after introducing new CI machine 2023-03-20 15:20:28 +01:00
luis_pereira87
3514cb43ba Minor fixes to get NR_RRCReestablishment working again after merging on the integration branch 2023-03-20 09:23:05 +00:00
luis_pereira87
40b5e99197 Fix segmentation fault when calling get_transformPrecoding function for BWP_id > 0 and rach_ConfigCommon = NULL 2023-03-18 15:28:52 +00:00
Robert Schmidt
ef9104d264 Merge remote-tracking branch 'origin/doc-update-cn5g-docker-compose-for-tutorial' into integration_2023_w11b 2023-03-18 12:07:49 +01:00
Robert Schmidt
7773311e0e Merge remote-tracking branch 'origin/NR_UL_scheduler_warnings' into integration_2023_w11b 2023-03-18 12:05:13 +01:00
Robert Schmidt
10a10e9910 Merge remote-tracking branch 'origin/fix_unaligned_idft' into integration_2023_w11b 2023-03-18 12:05:05 +01:00
Robert Schmidt
15055c26b8 Merge remote-tracking branch 'origin/616-gnb-remote-n3-port-can-no-more-be-modified' into integration_2023_w11b 2023-03-18 12:04:58 +01:00
Robert Schmidt
d77c1c3ebf Merge remote-tracking branch 'origin/NR_identity_precoding_from_config' into integration_2023_w11b 2023-03-18 12:04:52 +01:00
Robert Schmidt
93f42683d1 Merge remote-tracking branch 'origin/NR_improve_UE_state_machine' into integration_2023_w11b 2023-03-18 11:53:24 +01:00
Robert Schmidt
6fdb44953b Merge remote-tracking branch 'origin/nr_rrc_asn1_1730' into integration_2023_w11b 2023-03-18 11:53:18 +01:00
Robert Schmidt
9dc3f4f61f Merge remote-tracking branch 'origin/rework-ngap' into integration_2023_w11b 2023-03-18 11:43:53 +01:00
Robert Schmidt
f97d002ca6 Merge remote-tracking branch 'origin/feat-603-bands-greater-64' into integration_2023_w11b 2023-03-18 11:43:45 +01:00
Robert Schmidt
d5bdeb0699 Merge remote-tracking branch 'origin/NR_ULSCH_transform_precoding_softmodem' into integration_2023_w11b 2023-03-18 11:42:32 +01:00
Robert Schmidt
0b7da43638 Call correct RRC functions in CI telnet module 2023-03-18 11:33:31 +01:00
luis_pereira87
e3f0482d09 Change IMS network to 12.1.9.0/24 to have all the UE DNNs under the same network 12.1.0.0/16 2023-03-17 17:05:42 +00:00
Robert Schmidt
faffc9b136 Fix: cut less output of docker-compose, it changed in U22 2023-03-17 15:32:50 +01:00
francescomani
df110d457a demote UL scheduler warnings to debug level 2023-03-17 11:22:56 +01:00
Raphael Defosseux
e88ca34423 doc(tutorial): switching to jinja-rendering configuration on the OAI-CN5G containers
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-03-17 09:56:10 +01:00
francescomani
3a1102d9bf possibility to set identity precoding matrix from config file 2023-03-17 09:29:25 +01:00
Melissa Elkadi
784be9d241 Removing unnecessary changes 2023-03-16 17:48:21 -07:00
Weskley Vinicius Fernandes Mauricio
fefa0bfea7 Implementing bands greater than 64 in the code, feature #603 2023-03-16 09:57:52 -03:00
Melissa Elkadi
5d378b6416 Passing in local rxdataF to nr_slot_fep_init_sync then memcpy into global 2023-03-15 17:44:27 -07:00
Melissa Elkadi
b6e5b3594c Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-03-15 12:49:34 -07:00
Melissa Elkadi
4dd579e042 int32_t to c16_t conversion
This commit includes changes to the function
footprints for vaiours NR UE and gNB functions.
It does not updated the LTE code. For functions
shared by both LTE and 5G, we maintained the original
LTE footprint and argument structure.

Several of the simulators that use these functions
have been updated as well. The specific usage of these
functions which index into the int32_t buffers and
treat the first int16_t and the real and the second
as the complex should be modified in the near future.
2023-03-15 12:45:39 -07:00
Robert Schmidt
79d351fbbb Upgrade IP addresses and routes for new faraday cage deployment 2023-03-15 19:12:10 +01:00
Melissa Elkadi
f79ab7e087 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-03-15 06:37:38 -07:00
Thomas Schlichter
b3b53506a1 improve memory alignment of some arrays in nr_pusch_channel_estimation() 2023-03-15 14:03:21 +01:00
Thomas Schlichter
96c1cadf2b fix typo in idft() function
In case of unaligned input array, a DFT of wrong size was executed instead of a correct IDFT.
2023-03-15 14:00:12 +01:00
laurent
563421b4dc merge develop 2023-03-15 11:33:46 +01:00
Thomas Schlichter
6cee30ba79 review comments and further transform precoding cleanup 2023-03-15 11:01:47 +01:00
francescomani
b64185e85e more fixes 2023-03-15 10:57:51 +01:00
francescomani
8131f63504 setting transform precoding in pusch-config 2023-03-15 10:57:51 +01:00
francescomani
29ec271586 fixes at UE for transform precoding 2023-03-15 10:54:03 +01:00
francescomani
f82bba5535 fix transform precoding scheduling for ulsch 2023-03-15 10:54:03 +01:00
francescomani
7db8dce51c fixes for allowing softmodem to schedule PUSCH with transform precoding 2023-03-15 10:54:03 +01:00
Robert Schmidt
bf03abae6a Merge branch 'integration_2022_wk11' into 'develop'
integration_2022_wk11

See merge request oai/openairinterface5g!2010

* !1849 Set t-Reordering to 100ms to prevent packet loss
* !1997 Warnings in Ubuntu20 build make CI fail
* !2000 bugfix: bad usage of T() in the log module
* !2005 Fix RNTI after RRCReestablishment
* !2006 avoid segfault in additional BWP configuration
* !2001 Add reestablishment test to SA Quectel test
* !1974 Tutorials: split tutorials in three files, OAI_CN5G, COTS_UE and OAI_nrUE
* !1993 Remove unused dependencies, modules
2023-03-15 09:23:44 +00:00
Melissa Elkadi
c6c004b8aa Getting rid of remaining warnings 2023-03-14 20:11:27 -07:00
Melissa Elkadi
2b193cded0 Reverting unnecessary changes 2023-03-14 19:02:17 -07:00
Robert Schmidt
36f374be2a Merge remote-tracking branch 'origin/remove-unused-stuff' into integration_2022_wk11 2023-03-14 17:46:45 +01:00
Robert Schmidt
cdac404c47 Merge remote-tracking branch 'origin/NR_SA_Tutorials_vX' into integration_2022_wk11 2023-03-14 17:46:32 +01:00
luis_pereira87
27546f60da Tutorials: split tutorials in three files, OAI_CN5G, COTS_UE and OAI_nrUE 2023-03-14 14:31:24 +00:00
Robert Schmidt
32f9d95bba Merge remote-tracking branch 'origin/telnet-ci' into integration_2022_wk11 2023-03-14 15:24:33 +01:00
laurent
03d3e1a5db code review comments 2023-03-14 14:48:09 +01:00
francescomani
bc73e73c26 improve UE state machine 2023-03-14 11:06:32 +01:00
Robert Schmidt
9288930a3b Merge remote-tracking branch 'origin/Fix_RRCReestablishment_regression' into telnet-ci 2023-03-13 19:46:22 +01:00
Robert Schmidt
2560ba84e8 telnet documentation 2023-03-13 19:45:55 +01:00
Robert Schmidt
8352f71a71 Show output of CustomCommand if it would make the pipeline fail 2023-03-13 19:31:41 +01:00
Melissa Elkadi
a07d4376d6 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-03-13 11:29:55 -07:00
Robert Schmidt
1a79b7ca74 Merge remote-tracking branch 'origin/NR_configuration_fix_additional_BWPs' into integration_2022_wk11 2023-03-13 19:25:25 +01:00
Robert Schmidt
3efb55ad17 Merge remote-tracking branch 'origin/Fix_RRCReestablishment_regression' into integration_2022_wk11 2023-03-13 19:25:17 +01:00
Robert Schmidt
ce96cb193b Merge remote-tracking branch 'origin/bugfix-t-tracer' into integration_2022_wk11 2023-03-13 19:25:09 +01:00
Robert Schmidt
2328ee259b Merge remote-tracking branch 'origin/no-warnings-develop' into integration_2022_wk11 2023-03-13 19:25:01 +01:00
Robert Schmidt
4352c8314c Merge remote-tracking branch 'origin/t-reordering-gt-0' into integration_2022_wk11 2023-03-13 19:24:51 +01:00
frtabu
d550fb220e Use same configurable port number for local and remote N3 2023-03-13 19:14:03 +01:00
laurent
082ba963d3 error free 2023-03-13 15:48:19 +01:00
laurent
474f662337 merge develop 2023-03-13 12:45:32 +01:00
laurent
a853a0873e free memory to reduce the memory leaks 2023-03-13 11:59:31 +01:00
laurent
36783a3a79 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into rework-ngap 2023-03-13 11:58:56 +01:00
luis_pereira87
459eb193e0 Fix RNTI after RRCReestablishment, ue_context_pP->ue_context.rnti is only updated after RRCReconfigurationComplete, at this point we need to use UEid instead 2023-03-13 10:34:26 +00:00
Robert Schmidt
6791974004 Remove unused OCG (OpenAir Config Generator) 2023-03-11 15:50:50 +01:00
Robert Schmidt
c9db9b4c22 Drop backup file of gtkwave 2023-03-11 15:50:50 +01:00
Robert Schmidt
258ad6e4c1 Move gtkwave files to new directory targets/gtkwave 2023-03-11 15:50:50 +01:00
Robert Schmidt
352eaa2c57 Remove old/unused doxygen files 2023-03-11 15:50:50 +01:00
Robert Schmidt
ceef0fdb7b Remove old/outdated README 2023-03-11 15:50:50 +01:00
Robert Schmidt
d0357cc998 Remove old/unused cmake find files 2023-03-11 15:50:49 +01:00
Robert Schmidt
cc6b473d17 Remove old s6a leftovers 2023-03-11 15:50:49 +01:00
Robert Schmidt
c1394b7097 Remove old EPC documentation 2023-03-11 15:50:49 +01:00
Robert Schmidt
4d16f1f883 Remove libxml2: we don't use it 2023-03-11 15:50:49 +01:00
Robert Schmidt
0968576649 Remove libtasn1: we don't need it 2023-03-11 15:50:49 +01:00
Robert Schmidt
9dc3b26c1b Remove libxslt: we don't use it 2023-03-11 15:50:49 +01:00
Robert Schmidt
6577a9a379 Remove guile: we don't use it 2023-03-11 15:50:49 +01:00
Robert Schmidt
b35451222c Build pipeline in U20: fail if there are warnings 2023-03-11 15:49:40 +01:00
Robert Schmidt
29c984a1ec Merge branch 'integration_2023_w10b' into 'develop'
integration_2023_w10b

See merge request oai/openairinterface5g!2002

* !1954 Fix for warnings and errors from CLANG compiling
* !1978 Change default of "nokrnmod" option to "On"
* !1981 F1AP: minor fixes and preparation for F1 work
* !1983 Improve clang-format
* !1992 fix nrqtscope build warnings
* !1994 reworking response to MSG3 with DCCH/DTCH
* !1996 dead-code-f1-removal
* !1968 small changes for multi usrp support
* !1991 rfsimulator: configurable wait timeout, use in CI to avoid retransmissions
* !1999 Remove Dedicated Serving Cell Configuration from CI config file for 2x2 rfsim test
2023-03-11 14:45:14 +00:00
Robert Schmidt
8e87374b47 Merge remote-tracking branch 'origin/develop-CI-2x2' into integration_2023_w10b 2023-03-11 12:01:29 +01:00
Robert Schmidt
232700e417 Merge remote-tracking branch 'origin/rfsim-timeout' into integration_2023_w10b 2023-03-11 12:01:21 +01:00
Robert Schmidt
52d7d2881a Merge remote-tracking branch 'origin/multi_usrp' into integration_2023_w10b 2023-03-11 11:57:38 +01:00
Florian Kaltenberger
7631381a98 adding documentation for USRP 2023-03-10 22:03:28 +01:00
Melissa Elkadi
2f23bf1ea4 Fixing botched build_oai merge 2023-03-10 09:16:38 -08:00
Robert Schmidt
8263ac09ec Merge remote-tracking branch 'origin/dead-code-f1-removal' into integration_2023_w10b 2023-03-10 15:13:08 +01:00
Robert Schmidt
1436470943 Merge remote-tracking branch 'origin/NR_Msg3_dcch_dtch_reworking' into integration_2023_w10b 2023-03-10 15:11:57 +01:00
Robert Schmidt
3e3dd40cf8 Merge remote-tracking branch 'origin/fix_nrqtscope_build_warnings' into integration_2023_w10b 2023-03-10 15:05:02 +01:00
Robert Schmidt
52154ddeb9 Merge remote-tracking branch 'origin/clang-format-improvements' into integration_2023_w10b 2023-03-10 14:49:18 +01:00
Robert Schmidt
8b0ad24dcd Merge remote-tracking branch 'origin/f1ap-minor-fixes' into integration_2023_w10b 2023-03-10 14:47:29 +01:00
Robert Schmidt
a6bd14c2cd Merge remote-tracking branch 'origin/Remove_nokrnmod' into integration_2023_w10b 2023-03-10 14:47:19 +01:00
Robert Schmidt
31e6b5814f fixup 2023-03-10 14:32:26 +01:00
Robert Schmidt
1b29701368 Threshold for NSA traffic lowered 2023-03-10 14:05:29 +01:00
Robert Schmidt
59feb72fca SA Quectel test: add reestablishment test 2023-03-10 12:38:17 +01:00
Robert Schmidt
4ae28aba10 Custom_Command: add option to fail if returncode is non-zero 2023-03-10 12:38:17 +01:00
Robert Schmidt
e3520f952e DOC to finish 2023-03-10 12:38:17 +01:00
Robert Schmidt
7fc9550f7b Load telnet CI in docker-compose 2023-03-10 12:38:17 +01:00
Robert Schmidt
76caa943b5 Add telnetsrv_ci to docker images 2023-03-10 12:38:17 +01:00
Robert Schmidt
97d989a865 Add telnet module with CI-specific functions
- adds function to retrieve the only UE's RNTI
- adds function to trigger reestablishment for the only UE present, or a
  specific via its RNTI
- adds function to verify the reestablishment counters
2023-03-10 12:37:02 +01:00
Robert Schmidt
e1dc1d9d03 Correctly implement option to load additional SOs for telnet 2023-03-10 12:37:02 +01:00
Luis Pereira
6c6ce912b1 Introduce counters for reestablishment 2023-03-10 12:37:02 +01:00
Robert Schmidt
e76e6f1266 20MHz MCS9: max UL throughput is 3.5Mpbs 2023-03-10 12:37:02 +01:00
Robert Schmidt
6a89d4568e fix 20MHz SA tab name 2023-03-10 12:37:02 +01:00
Cedric Roux
39c42bca41 bugfix: bad usage of T() in the log module
The LOG_x() and T() logic was wrong.

LOG_x() goes to the terminal when T_stdout == 1 or T_stdout == 2.
It goes to T() when T_stdout == 0 or T_stdout == 2.

The call T() does the check for T_stdout == 0 or T_stdout == 2.
So we have to call it out of the check "if (T_stdout)".

So, well, let's fix that.

Some spacing was fixed as well. clang-format may complain.
2023-03-10 12:10:08 +01:00
Roberto Louro Magueta
7e52caa588 Remove Dedicated Serving Cell Configuration from CI config file for 2x2 rfsim test 2023-03-10 11:05:13 +00:00
francescomani
40a0072d5b avoid segfault in additional BWP configuration 2023-03-10 11:07:01 +01:00
Thomas Schlichter
0d9268ec10 Update NR RRC to version 17.3.0 2023-03-10 10:54:43 +01:00
Melissa Elkadi
d8e92e93b3 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-03-09 11:09:17 -08:00
Robert Schmidt
8198272571 Review remarks 2023-03-09 19:10:59 +01:00
francescomani
931cf0a868 more review fixes 2023-03-09 19:10:39 +01:00
Robert Schmidt
742800b858 Split rrc_mac_config_req_gNB() in multiple functions 2023-03-09 19:09:04 +01:00
Robert Schmidt
7668a8917e Use pointer to MAC instead of module ID 2023-03-09 19:06:07 +01:00
Robert Schmidt
64c59ef5ec Count Msg.4 DLSCH HARQ stats 2023-03-09 19:06:07 +01:00
Robert Schmidt
665fdd3d8d Set F1AP log level to info 2023-03-09 19:06:07 +01:00
Robert Schmidt
9826c81808 Make F1AP-related log messages less verbose 2023-03-09 19:06:07 +01:00
Robert Schmidt
c9b043eb09 Fix: Correct check thread pool initialized
traceFd of thread pool can be:
* -1: no tracing
* valid file descriptor/>0: tracing
2023-03-09 19:01:47 +01:00
Robert Schmidt
f8d0c3de03 Minor fixes 2023-03-09 19:01:47 +01:00
Robert Schmidt
ff4c48f952 Align all configuration structs, and guard them to not be formatted with clang-format 2023-03-09 19:01:47 +01:00
francescomani
6d13f28bc0 physical simulators compilation warnings 2023-03-09 19:01:47 +01:00
francescomani
4065e7b4b7 adding thread pool patch 2023-03-09 19:01:47 +01:00
francescomani
87f603687a fixing most warning when compiling nr-uesoftmodem 2023-03-09 19:01:47 +01:00
francescomani
2385bc364a fixing most warning when compiling nr-softmodem 2023-03-09 19:01:46 +01:00
Robert Schmidt
7975b90d7c Merge branch 'integration_2023_w10' into 'develop'
integration_2023_w10

See merge request oai/openairinterface5g!1989

* !1928 Delay compensation for UL
* !1958 Fix IQ recorder/player for nrUE
* !1979 Cleanup of headers, do not include headers in RAN context, CMakeLists.txt link to header only library 1 of 1 checklist item completed
* !1984 bugfix: set max priority to trx_usrp_write_thread
* !1986 Changed buffer alloc and symb rotaion logs to debug
* !1987 fixing UE DL MIMO reception
2023-03-09 17:45:01 +00:00
laurent
61f49be3eb dead-code-f1-removal 2023-03-09 17:03:41 +01:00
laurent
585eb1d357 verified rfsim with splits, and quectel 2 sessions (no split) 2023-03-09 14:52:26 +01:00
Melissa Elkadi
6db9c37e47 Fixing white space, and using c16_t in psbchsim 2023-03-09 05:43:19 -08:00
francescomani
799d0b3ab5 reworking response to MSG3 with DCCH/DTCH 2023-03-09 14:01:33 +01:00
Raphael Defosseux
ff1749a557 fix(ci): replacing one of the 2 LTE smartphones for the legacy bench
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-03-09 11:52:42 +01:00
Thomas Schlichter
670cc4de09 fix build warnings 2023-03-09 10:50:26 +01:00
Robert Schmidt
87b7a980e1 5G RFsim tests: set high rfsim wait timeout to avoid retransmissions when UE stopped 2023-03-09 10:06:19 +01:00
Robert Schmidt
b925dd3e2b rfsimulator: introduce configurable wait timeout if no UE connected
Use --rfsimulator.wait_timeout 20
2023-03-09 10:02:56 +01:00
laurent
14caab46dd fix multi-UEs, and partially confusion rnti versus 5GC UE id 2023-03-08 22:08:53 +01:00
Melissa Elkadi
f596c6907a Reverting change to node_number initialization 2023-03-08 13:00:32 -08:00
Melissa Elkadi
d22d11d003 Fixing prachsim - get_softmodem_params was NULL 2023-03-08 12:25:02 -08:00
Melissa Elkadi
8bf5a0acf6 Using rxdataF in UE rather than local 2023-03-08 11:41:28 -08:00
Deokseong "David" Kim
95fc447472 Merge branch 'episys/ea/sidelink_frequency_update' into 'episys/master-sl'
Exploiting Sidelink carrier frequency for SL

See merge request aburger/openairinterface5g!185
2023-03-08 10:37:14 -08:00
Robert Schmidt
253aa011f9 Merge remote-tracking branch 'origin/NR_UE_DL_MIMO_fixes' into integration_2023_w10 2023-03-08 19:04:55 +01:00
Robert Schmidt
51c0a5457f Merge remote-tracking branch 'origin/NR_gNB_suppress_init_logs' into integration_2023_w10 2023-03-08 19:04:46 +01:00
Robert Schmidt
6d97394f28 Merge remote-tracking branch 'origin/bugfix-tx-usrp-thread-priority' into integration_2023_w10 2023-03-08 19:04:36 +01:00
Robert Schmidt
3f0833b140 Merge remote-tracking branch 'origin/no-platform-const-asn-dep' into integration_2023_w10 2023-03-08 19:04:22 +01:00
Melissa Elkadi
5a61145948 Resolving all warning associated with c16_t conversion 2023-03-08 09:46:27 -08:00
Robert Schmidt
b4ef9fe69a Merge remote-tracking branch 'origin/iqfixes_nrue' into integration_2023_w10 2023-03-08 18:40:19 +01:00
francescomani
b3061bc48c fixing DL MIMO reception vector sizes 2023-03-08 11:13:49 +01:00
Melissa Elkadi
751f06b15e Only preconfiguring SL for SL mode 2023-03-07 21:17:07 -08:00
Sakthivel Velumani
44906a236c Changed buffer alloc and symb rotaion logs to debug 2023-03-07 16:54:25 -05:00
laurent
c1aec06360 test with commercial UE and 2 pdusessions 2023-03-07 16:02:54 +01:00
Rúben Soares da Silva
94faf0b46c Set default behaviour regarding nokrnmod as enabled, updating references and usages 2023-03-07 13:27:37 +00:00
David
98d5c1691c Adding NRUE_thread_SL back to nr_ue.c
Also, fixed all warning associated with switching
all global buffers on the NRUE side from int32_t to
c16_t
2023-03-06 17:01:41 -08:00
Robert Schmidt
9a90e85da8 Compile most targets in one go 2023-03-06 20:05:38 +01:00
Robert Schmidt
c39861d9a3 Remove useless freediameter references 2023-03-06 20:05:38 +01:00
Robert Schmidt
29b6011be4 Remove build_oai option for core simulators: they don't compile 2023-03-06 20:05:38 +01:00
Robert Schmidt
3b7d6377a0 Link targets that need RRC ASN.1 headers to header-only library
Most targets don't need the symbols from the compiled RRC ASN.1
libraries, but only the headers. In particular when compiling individual
libraries (e.g., for tests), linking the full library makes the RRC
ASN.1 libraries compile and link, when they are not needed (only headers
are needed).

For libraries that can do without these headers, don't link them.
2023-03-06 20:05:38 +01:00
Robert Schmidt
6cd72e4e7d Create INTERFACE libraries to link to RRC ASN.1 target with headers only 2023-03-06 20:05:38 +01:00
Robert Schmidt
c67a612192 SIMU_ETH: use target, compile netlink_init.c only once 2023-03-06 20:05:38 +01:00
Robert Schmidt
e90ef3bc68 Split phy_init.h into two files (for LTE/NR) 2023-03-06 20:05:38 +01:00
Robert Schmidt
8a15fb7c63 RC: forward declarations and link physims better
The simulators have been changed: due to linker errors that would arise
otherwise, a lot of functions are defined in them to avoid such errors.
Some functions are also defined in header files; in this commit, we
define most functoins in nr_dummy_functions.c, which is compiled in, not
by including the C file, but by adding it to the target in
CMakeLists.txt

- nr_dlsim+nr_ulsim need NR_IF_Module_init(), so it cannot be in
  nr_dummy_functions, but the others need it
- Link correcr NR_IF_Module_init() into these simulators, and reduce
  overall link list
- Correctly link remaining simulators
2023-03-06 20:04:38 +01:00
Robert Schmidt
f30185bc0e Add license header to file without license 2023-03-06 19:47:08 +01:00
Robert Schmidt
035b5bb665 Remove definition of null 2023-03-06 19:47:08 +01:00
Robert Schmidt
cd8df70e5c Do not spill LTE/NR ASN.1 RRC all over: clean up platform_constants.h 2023-03-06 19:47:08 +01:00
Robert Schmidt
6d90aaaae2 (Almost) Remove all PHY/phy_vars* and PHY/phy_extern 2023-03-06 19:47:08 +01:00
Robert Schmidt
4e144dba6a Remove useless MBMS_NFAPI_SCHEDULER definition 2023-03-06 19:47:08 +01:00
Bruno Mongazon-Cazavet
bd42f37ad4 Merge branch 'develop' into iqfixes_nrue 2023-03-06 18:40:49 +01:00
Bruno Mongazon-Cazavet
15852ca054 proper adaptation of seed depending on iq replay/record or not 2023-03-06 18:39:20 +01:00
David
678e3f9a01 Merge branch 'develop' into episys-merge-develop-sl 2023-03-06 07:35:37 -08:00
laurent
1ba3b13aef remove ngap enum generated by ans1c 2023-03-06 14:10:30 +01:00
Roberto Louro Magueta
db1928573f Delay compensation for pusch_dmrs_type2 2023-03-06 10:16:01 +00:00
Roberto Louro Magueta
a96732e347 Add CI test with MCS 28, 106 PRBs, Time shift 8 2023-03-06 10:16:01 +00:00
Roberto Louro Magueta
e223f4ee1d Apply delay compensation for UL in nr_pusch_channel_estimation() 2023-03-06 10:16:01 +00:00
Roberto Louro Magueta
0b05fce71b Time shift estimation based on DMRS-PUSCH 2023-03-06 10:16:01 +00:00
laurent
c4538995db continue code and take review comments 2023-03-06 00:37:23 +01:00
laurent
a59753121a tmp 2023-03-06 00:35:03 +01:00
Cedric Roux
3084ae89dd bugfix: set max priority to trx_usrp_write_thread 2023-03-04 16:42:01 +01:00
Robert Schmidt
bccf8379c3 Improve clang-format: total line length 132, harmonize long function calls with existing OAI style 2023-03-04 15:34:52 +01:00
Robert Schmidt
d379bbae9c Merge branch 'integration_2023_w09' into 'develop'
integration_2023_w09

See merge request oai/openairinterface5g!1980

!1904 DL channel estimation improvements
!1910 Continuation of reworking BWP structure for UE
!1918 Increasing size of UL MAC buffers for 15kHz SCS
!1973 Fix 2-layers UL channel estimation for pusch_dmrs_type2
!1975 minor typo
2023-03-04 14:31:51 +00:00
luis_pereira87
2547feeff1 Add physicalCellGroupConfig to RRCReconfiguration after a RRCReestablishmentComplete 2023-03-03 21:19:16 +00:00
Ejaz
ec1d5ead6a Only preconfigurating for SL in SL mode 2023-03-03 05:32:49 -08:00
Robert Schmidt
30b7ab3c12 Merge remote-tracking branch 'origin/minor-typo' into integration_2023_w09 2023-03-03 12:17:57 +01:00
David
7cbfbd6c92 Updating arg types in pss_sl_ch_est_nr 2023-03-02 14:23:46 -08:00
Roberto Louro Magueta
532584deca Merge remote-tracking branch 'origin/develop-fix-pusch-dmrs-type2' into integration_2023_w09
# Conflicts:
#	openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
#	openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
#	openair1/PHY/TOOLS/tools_defs.h
2023-03-02 10:18:55 +00:00
Robert Schmidt
c6883ad2ee Merge remote-tracking branch 'origin/NR_15khz_UL_buffers' into integration_2023_w09 2023-03-02 09:18:06 +01:00
Robert Schmidt
1e3de79862 Merge remote-tracking branch 'origin/NR_UE_BWP_reworking_continuation' into integration_2023_w09 2023-03-02 08:57:40 +01:00
Melissa Elkadi
9338925b93 This commit is a large refactoring of UE_thread_sl
We chose to initially create our own (SL) version
of the UE_thread() function in the nr_ue.c. The original
function was then refactored and merged to the develop
branch. Now that it has been refactored, we have added
the UE SL support into the original function and removed
the UE_thread_sl function. This still needs to be validated
on the USRPs prior to merge. (It has been tested with RFSIM).

Also, a few more lingering warnings related to the int32_t -> c16_t
conversion
2023-03-01 14:14:28 -08:00
Melissa Elkadi
64b65cb5d9 Converting int16_t to c16_t struct 2023-03-01 09:18:22 -08:00
Melissa Elkadi
7b2d0dbf39 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-02-28 14:21:21 -08:00
Roberto Louro Magueta
03f752e1b0 Fix 2-layers UL channel estimation for pusch_dmrs_type2 2023-02-27 10:36:31 +00:00
laurent
5b13d71e24 fix bugs introduced by previous commit 2023-02-27 11:31:52 +01:00
laurent
fd5a124c84 try to make a piece of code a bit more decent, no functional change 2023-02-27 11:31:52 +01:00
laurent
88cbf8c940 fix regression, to squash with previous commit 2023-02-27 11:31:52 +01:00
laurent
dc12dfd7d4 reduce UE stack size, make a piece of code clear, reduced variables visibility 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
cbb257a547 Creation of function NFAPI_NR_DMRS_TYPE1_linear_interp(), NFAPI_NR_DMRS_TYPE1_average_prb(), NFAPI_NR_DMRS_TYPE2_linear_interp() and NFAPI_NR_DMRS_TYPE2_average_prb() 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
f1d5a92cd7 Memory free in nr_zero_forcing_rx() function 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
27f242ea08 Change of the minimum and maximum SNR of some DL CI tests, to reduce the test time 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
5cdea25a3b Fix size of pdsch_dl_ch_estimates 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
0ab5b35867 To use c16maddShift(), c32x16maddShift(), c16multaddVectRealComplex(), and c16x32div() functions in nr_pdsch_channel_estimation() 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
e06704a8aa Add CI test for 4-layers DL 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
dcae2e7f68 Fix buffer overflow for 4-layers DL 2023-02-27 11:31:51 +01:00
Roberto Louro Magueta
d8c97ec756 DL channel estimation improvements 2023-02-27 11:31:51 +01:00
Bruno Mongazon-Cazavet
490e230b75 merge last develop 2023-02-27 10:32:36 +01:00
Cedric Roux
6315dae4ca minor typo 2023-02-25 13:45:52 +01:00
Robert Schmidt
fda5c4aed3 Merge branch 'integration_2023_w08b' into 'develop'
integration_2023_w08b

See merge request oai/openairinterface5g!1972

!1613 Implementation of NR_RRCReestablishment procedures
!1734 KPI GUI with Qt5 from ESA 5G-GOA project
!1751 Refactor and simplify CI UE Handling
!1948 Remove unmaintained ocp-enb, some clean up in CMakeLists.txt
!1969 support old versions of openssl
!1970 bugfix: increase size of nrb
!1971 multiple pdu sessions regression fix
2023-02-25 10:12:26 +00:00
Robert Schmidt
122a4e8d5b Merge remote-tracking branch 'origin/fix-multipdu' into integration_2023_w08b 2023-02-24 18:51:53 +01:00
Robert Schmidt
5b3977ce13 Merge remote-tracking branch 'origin/bugfix-size-of-nrb' into integration_2023_w08b 2023-02-24 18:50:02 +01:00
Robert Schmidt
70765d1ebe Merge remote-tracking branch 'origin/old-openssl' into integration_2023_w08b 2023-02-24 18:49:56 +01:00
Robert Schmidt
f35945e912 Merge remote-tracking branch 'origin/ocp-enb-cmake' into integration_2023_w08b 2023-02-24 18:49:30 +01:00
Robert Schmidt
5acdc72b3b Merge remote-tracking branch 'origin/ci-asue-changes' into integration_2023_w08b 2023-02-24 18:43:50 +01:00
Robert Schmidt
a0594dd638 Merge remote-tracking branch 'origin/goa-5g-kpi-gui' into integration_2023_w08b 2023-02-24 18:43:42 +01:00
Robert Schmidt
8a6e64179b Address review comments 2023-02-24 18:19:36 +01:00
Bruno Mongazon-Cazavet
8a2caa66d5 merge develop 2023-02-24 16:06:41 +01:00
francescomani
e4ce069d1a increase UL buffer size for 15kHz 2023-02-24 14:06:23 +01:00
Robert Schmidt
0740b59684 Build nrqtscope in Ubuntu pipeline 2023-02-24 13:52:59 +01:00
Bruno Mongazon-Cazavet
4e0f7419dc merge with develop 2023-02-24 13:52:37 +01:00
Robert Schmidt
1a6dbad0d7 Apply 1 suggestion(s) to 1 file(s) 2023-02-24 09:10:09 +00:00
luis_pereira87
263436d866 Implementation of NR_RRCReestablishment procedures at gNB 2023-02-24 07:50:56 +00:00
Cedric Roux
f64ed09574 bugfix: increase size of nrb
We can have 273 RBs, so 8 bits to store the number of RBs is not enough.
16 bits ought to be enough for anybody.
2023-02-23 21:36:46 +01:00
Cedric Roux
a4eeefc13f support old versions of openssl
Needed for ubuntu 16 and centos 7.
2023-02-23 21:35:26 +01:00
francescomani
605efb5e86 improving handling of TDAs and other fixes 2023-02-23 19:14:04 +01:00
francescomani
a7e7899edd addressing review including clang formatting 2023-02-23 19:09:25 +01:00
francescomani
4b6ac06b5e fixes 2023-02-23 19:09:25 +01:00
francescomani
ffdffeee9e further improvements in UE BWP configuration 2023-02-23 19:09:25 +01:00
francescomani
0d9d4f55f7 further improvements in tda lists 2023-02-23 19:09:25 +01:00
francescomani
91f8f88781 remove pdcch_config from dci_size function 2023-02-23 18:39:04 +01:00
francescomani
b4675c106f PDSCH configuration 2023-02-23 18:39:04 +01:00
Melissa Elkadi
ac4c4defd3 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-02-23 08:51:34 -08:00
Thomas Schlichter
f83f5f1a52 NR_UE: fix noise measurement if SSB crosses the center 2023-02-23 17:46:27 +01:00
Bo Zhao
4d0762e43d First implementation for KPI GUI with Qt5
Authors: Bo Zhao, Marwan Hammouda, Thomas Schlichter (Fraunhofer IIS)

- CMakeLists modification: add QtWidgets library, add new source files, MOC (Meta-Object Compiler) on the given source file
- build_oai modification
- Activate new GUI with Qt on the UE side
- 2 x 3 widget with I/Q sample for PDSCH
- Drop-down list implementation
2023-02-23 17:46:27 +01:00
Robert Schmidt
e017df3d70 Better show image info in HTML
- each image in a new line
- only show up to seconds in date
2023-02-23 17:38:10 +01:00
Robert Schmidt
6b9d98f467 Add YAML for OAI UE on obelix 2023-02-23 17:38:10 +01:00
Robert Schmidt
61e22e39b3 Remove unmaintained test XMLs 2023-02-23 17:38:10 +01:00
Robert Schmidt
85b4f2c67f CI test XMLs: Add UEs to use in all pipelines; cleanup
- remove -R iperf parameter: handled in test by UL/DL direction
2023-02-23 17:38:10 +01:00
Robert Schmidt
de359dae9f Remove Reboot(), CheckProcessExists() (eNB, UE), Iperf_Common() and Iperf_UL_Common() 2023-02-23 17:38:10 +01:00
Robert Schmidt
f2992564bb Actually log error in ping_iperf_wrong_exit() 2023-02-23 17:38:10 +01:00
Robert Schmidt
ab009fabff Refactor Iperf_module()
- Harmonize code for CNs
- Support TCP
- Different port numbers for multiple UEs
- Calculate UDP throughput for multiple UEs
2023-02-23 17:38:10 +01:00
Robert Schmidt
9a727b744a Perform multiple UE operations simultaneously
- Initialize
- Attach
- Detach
- Terminate
- DataEnable
- DataDisable
- CheckStatus
2023-02-23 17:38:10 +01:00
Robert Schmidt
e7b40cb444 Remove COTS_UE 2023-02-23 17:38:10 +01:00
Robert Schmidt
e1e6413977 Refactor Iperf_common() 2023-02-23 17:38:10 +01:00
Robert Schmidt
2825d2bf5d Refactor Ping to always handle Module_UE 2023-02-23 17:38:10 +01:00
Robert Schmidt
08ea58b243 Remove any mention of ADB 2023-02-23 17:38:10 +01:00
Robert Schmidt
5a113cdbb2 Remove useless code 2023-02-23 17:38:10 +01:00
Robert Schmidt
df209625ab Improve cls_oaicitest.py to use cls_module_up.py
- Remove cls_ci_ueinfra
- Use new UE module in cls_oaicitest
- Remove useless code
2023-02-23 17:38:09 +01:00
Robert Schmidt
41e8191578 Improve cls_module_ue.py 2023-02-23 17:37:31 +01:00
Robert Schmidt
917bea36d3 Improve ci_ueinfra.yaml 2023-02-23 17:37:31 +01:00
Robert Schmidt
69fc7b1100 Remove cls_amarisoft_ue.py 2023-02-23 17:37:31 +01:00
Robert Schmidt
503a6b1a8b Rework UE activation scripts
new adb script
2023-02-23 17:37:31 +01:00
Robert Schmidt
5d78609871 RemoteCmd/LocalCmd: various fixes
- allow executing in background
- less logs
- no use of split()
- common implementation of legacy command()
2023-02-23 17:37:30 +01:00
Robert Schmidt
0a0cd884dd Remove all references to CatM 2023-02-23 17:37:30 +01:00
Robert Schmidt
208a15aacc CI HTML: use full width, no footer, remove UE info at top 2023-02-23 17:37:30 +01:00
Robert Schmidt
59af5bd8aa CreateHtmlTestRowQueue: one UE column in any test 2023-02-23 17:37:30 +01:00
Melissa Elkadi
816532d86c Removing PHY_SIDE_LINK definition 2023-02-23 08:31:14 -08:00
Melissa Elkadi
a96d727409 Merge branch 'episys-merge-develop-sl' of https://gitlab.eurecom.fr/oai/openairinterface5g into episys-merge-develop-sl 2023-02-23 08:29:06 -08:00
Melissa Elkadi
624fc5353e Forgot to update PSS_SEQ_OFFSET_SL - now it works 2023-02-23 08:19:53 -08:00
laurent
3ea461340b fix-multi-pdusessions-since-e1ap 2023-02-23 17:06:56 +01:00
Robert Schmidt
415e830c1a CONFIG_LIB needs dlsym and LOG (in UTIL) 2023-02-23 16:31:04 +01:00
Robert Schmidt
42a00a8111 Clean up CMakeLists.txt
- variables CMAKE_DL_LIBS and LIB_LMS_LIBRARIES are not defined anywhere
- -DPHYSICAL_SIMULATOR is not used anywhere
2023-02-23 16:31:04 +01:00
Robert Schmidt
2cdc433518 Telnet: softmodem exit cmd: do not stop config module 2023-02-23 16:31:04 +01:00
Robert Schmidt
600f46dddd Remove unused backtrace function 2023-02-23 16:31:04 +01:00
Robert Schmidt
6553239fbc Remove ocp-enb/split73 2023-02-23 16:31:04 +01:00
Melissa Elkadi
d609f3f5ae Removing PHY_SIDE_LINK variable and dependents 2023-02-23 06:57:53 -08:00
Robert Schmidt
646cec27d0 Merge branch 'integration_2023_w08' into 'develop'
integration_2023_w08

See merge request oai/openairinterface5g!1967

* !1917 web server optional feature update
* !1938 Reuse old TDA when allocating DL retransmissions
* !1949 Container Images with Ubuntu20 and UHD 4.4
* !1960 Upgrade cmake to 3.12
* !1965 NR Cleanup
* correct IP LTE-2x2
* Add fix physim
* increase 60 Mhz timing threshold
* Add fix F1 ping
* !1939 Remove 4G F1
* !1966 CI test for T1 LDPC offload on caracal
* Fix for Build_eNB not recognizing end of command
2023-02-23 14:47:29 +00:00
Sagar Parsawar
738ccce421 Bug fix for subdev selection in OAI gNB 2023-02-23 13:39:23 +01:00
Florian Kaltenberger
30f0942dbc fix for the case multiple USRP devices are specified in the config string 2023-02-23 13:35:57 +01:00
Robert Schmidt
e87f123870 Fix indentation to remove warning 2023-02-23 12:23:16 +01:00
Robert Schmidt
194e61cfbe Merge remote-tracking branch 'origin/ci-t1-offload-test' into integration_2023_w08 2023-02-23 12:19:32 +01:00
Bruno Mongazon-Cazavet
b5b0e59c35 fix errors in ldpctest and warning in rrc_eNB.c 2023-02-23 10:41:49 +01:00
Robert Schmidt
1613e12df7 Merge remote-tracking branch 'origin/remove-4g-f1' into integration_2023_w08 2023-02-23 10:17:41 +01:00
Robert Schmidt
11ac735ee3 Fix: Fix command end detection in Build_eNB 2023-02-23 10:13:13 +01:00
Bruno Mongazon-Cazavet
86f31972f1 Merge branch 'develop' into iqfixes_nrue 2023-02-23 09:57:06 +01:00
Bruno Mongazon-Cazavet
9db78ab4d6 fix warnings introduced by changes in _Assert_Exit_ macro 2023-02-23 09:56:24 +01:00
Robert Schmidt
39f522c546 F1: force low ULSCH max frame inactivity to have more reliable ping test 2023-02-22 16:10:13 +01:00
Robert Schmidt
134cf55931 Increase timing threshold for timing test 2023-02-22 16:07:26 +01:00
Robert Schmidt
bbca763110 Increase LDPC iterations for 3GPP test phytest 2023-02-22 16:05:10 +01:00
Robert Schmidt
133865b7a4 Correct IP addresses for LTE 2x2 test 2023-02-22 15:59:49 +01:00
Robert Schmidt
9fe2c0bdf8 Merge remote-tracking branch 'origin/NR_cleanup' into integration_2023_w08 2023-02-22 15:58:53 +01:00
Robert Schmidt
d7ba0230d1 Merge remote-tracking branch 'origin/ubuntu-18-cmake' into integration_2023_w08 2023-02-22 15:58:45 +01:00
Robert Schmidt
89cc4d2d02 Merge remote-tracking branch 'origin/images-u20' into integration_2023_w08 2023-02-22 15:58:36 +01:00
Robert Schmidt
a3685e6bde Merge remote-tracking branch 'origin/multi-ue-fixes' into integration_2023_w08 2023-02-22 15:58:28 +01:00
Robert Schmidt
f4412ac03e Merge remote-tracking branch 'origin/websrv3' into integration_2023_w08 2023-02-22 15:58:20 +01:00
Jaroslava Fiedlerova
20242b7522 Add repo for ubuntu 18 to install cmake >= 3.12 2023-02-22 14:43:02 +01:00
francescomani
e9ff5ee562 improving the logic of reusing the old tda and applying to UL 2023-02-21 19:16:35 +01:00
Robert Schmidt
2e7011588a Merge remote-tracking branch 'origin/ubuntu-18-cmake' into websrv3 2023-02-21 17:01:26 +01:00
Robert Schmidt
9a0dd7c1b3 Update for webserver; cleanup in CMakeLists.txt
- Add oai header to typescript and html sources, add support to commands
  requiring two parameters, add more helpfiles
- Fix help bug (html comments not removed from tooltips)
- Fix backend build problem and 2 warnings
- Correctly initialize variables in nr_phy_scope.c
- Use add_subdirectory for websrv cmake build
- correctly link to asn1_lte_rrc and asn1_nr_rrc
- fix bug: correctly recognize npm packet
- only configure targets if explicitly asked for by users
- use add_subdirectory
- Use add_subdirectory for telnet cmake build
- Minor cleanup in build_oai
- Move softscope build in dedicated CMakeLists, and comment out
  DEBUG_MAC_INTERFACE option (not found in code)
- Make DEBUG_ASN1 a cmake only option ( no C macro) as it's not used as
  a C macro in the code, and develop align
2023-02-21 17:01:07 +01:00
francescomani
fc30280a7d cleaning up some NR files 2023-02-21 16:53:51 +01:00
Jaroslava Fiedlerova
c6d880329d Install cmake >= 3.12 on Ubuntu 18 fix, link to repo added 2023-02-21 14:32:14 +01:00
Jaroslava Fiedlerova
c94ba6ecd6 CI test for T1 LDPC offload on caracal 2023-02-20 23:05:44 +01:00
Robert Schmidt
c093a2cf6d Use trf-gen image based on Ubuntu focal to match iperf versions 2023-02-20 16:06:28 +01:00
Robert Schmidt
d3ef88edf8 Fix iperf status regex 2023-02-20 15:59:01 +01:00
Robert Schmidt
e6dd524099 Upgrade to UHD 4.4 in all container images 2023-02-20 15:59:01 +01:00
Robert Schmidt
192a24c434 Docker images: Upgrade Ubuntu 18->20 2023-02-20 15:59:01 +01:00
Raphael Defosseux
914b47039c fix(ci): hot fix
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-20 15:50:16 +01:00
Robert Schmidt
9dc2282249 Remove 4G F1 2023-02-20 11:38:53 +01:00
Bruno Mongazon-Cazavet
fcc41355ea merge with latest develop 2023-02-20 10:36:36 +01:00
Robert Schmidt
ffecf830b7 Merge branch 'integration_2023_w07' into 'develop'
integration_2023_w07

See merge request oai/openairinterface5g!1955

!1817 OAI LTE improvements
!1925 Avoid saturation in PUSCH for UL channel estimation
!1940 5G UE IMEISV 16 digits
!1944 fixes in limiting MCS and number of PRB while handling NR PHR
!1953 bugfix: length type too short
!1935 updating simulators docker-compose files for CN5G release v1.5
!1941 Dockerfile for aw2s RRUs on u18.04
!1956 Updated 5G L2sim tutorial
!1951 Conditional compilation of the T1 and CUDA offload libs
!1926 CI custom command
2023-02-20 08:36:09 +00:00
Bruno Mongazon-Cazavet
ca41bc0731 fix exit_function() prototype 2023-02-20 09:09:11 +01:00
Robert Schmidt
5824a0603b Merge remote-tracking branch 'origin/ci-custom-command' into integration_2023_w07 2023-02-19 12:32:40 +01:00
Robert Schmidt
13cbe0d0d3 Merge remote-tracking branch 'origin/offload-t1-lib' into integration_2023_w07 2023-02-19 12:31:00 +01:00
Robert Schmidt
972cbd5cb3 Build CUDA lib in caracal test 2023-02-18 15:06:47 +01:00
Dhanuja Elizabeth Thomas
379bc3e519 Add custom command for setting cpu power state 2023-02-18 12:06:59 +01:00
Dhanuja Elizabeth Thomas
d7d067165c Add custom command to reboot or reset SDRs in CI 2023-02-18 12:06:58 +01:00
Dhanuja Elizabeth Thomas
9e5e6bf16d Removed reset/reboot of USRP 2023-02-18 12:06:58 +01:00
Dhanuja Elizabeth Thomas
5723e7135f Add custom_commad to execute arbitrary command in CI 2023-02-18 12:06:58 +01:00
Robert Schmidt
8f7a4bf353 All-in-one tutorial: only build selected libraries 2023-02-18 12:04:41 +01:00
Robert Schmidt
4f097b425a Build CI: only build selected optional libraries 2023-02-18 11:59:11 +01:00
Robert Schmidt
b89b0d5074 build_oai: include ldpc_cuda and ldpc_t1 as optional libraries 2023-02-18 11:57:54 +01:00
Robert Schmidt
52e160a08a Conditional compilation for CUDA LDPC Offload 2023-02-18 11:57:41 +01:00
Jaroslava Fiedlerova
79f8d16da6 Rename T1 offload lib and conditional compilation 2023-02-18 11:56:31 +01:00
Jaroslava Fiedlerova
2debc770ec add repo for ubuntu 18 to install cmake >= 3.12 2023-02-17 23:10:41 +01:00
Robert Schmidt
07e2e797e9 Merge remote-tracking branch 'origin/NR_L2sim_doc' into integration_2023_w07 2023-02-17 19:12:50 +01:00
Robert Schmidt
4e3e4cb5da Merge remote-tracking branch 'origin/aw2s-dockerfile-for-ubuntu' into integration_2023_w07 2023-02-17 19:12:41 +01:00
Robert Schmidt
c1f63858ac Merge remote-tracking branch 'origin/ci-chore-updating-cn5g-v1.5' into integration_2023_w07 2023-02-17 19:12:08 +01:00
Bruno Mongazon-Cazavet
f7b4d18146 Merge branch 'develop' into iqfixes_nrue 2023-02-17 17:24:04 +01:00
Robert Schmidt
43d8ee586f Upgrade cmake to 3.12
Prior to this version, we cannot use target_link_libraries() with OBJECT
libraries.
2023-02-17 17:06:20 +01:00
Melissa
bb525dc0ee Merge branch 'episys/sl_script_update_for_rfsim' into 'episys/master-sl'
Updated sidelink test script to include rfsim test.

See merge request aburger/openairinterface5g!188
2023-02-17 05:35:24 -08:00
Bruno Mongazon-Cazavet
8601b8c990 Fix IQ recorder/player for nrUE 2023-02-17 12:00:46 +01:00
Sakthivel Velumani
37b808d171 Updated 5G L2sim tutorial 2023-02-16 17:22:53 +00:00
Robert Schmidt
70949fd4af Merge remote-tracking branch 'origin/bugfix-f1-du-to-cu-len' into integration_2023_w07 2023-02-16 18:21:39 +01:00
Robert Schmidt
73ae66f2cc Merge remote-tracking branch 'origin/NR_PHR_improvements' into integration_2023_w07 2023-02-16 18:21:32 +01:00
Robert Schmidt
4f36249c8c Merge remote-tracking branch 'origin/feat-5g-ue-imeisv-16-digits' into integration_2023_w07 2023-02-16 18:21:25 +01:00
Robert Schmidt
99bfac9c77 Merge remote-tracking branch 'origin/develop-UL-saturation' into integration_2023_w07 2023-02-16 18:21:15 +01:00
Cedric Roux
16b0b5f0ec bugfix: length type too short
On a setup, length of cellGroupConfig was > 255.

Using uint8_t to store the length is thus wrong
and gives a bad encoding of the cellGroupConfig.

So let's use uint32_t to store length instead of uint8_t.
2023-02-15 22:50:40 +01:00
Robert Schmidt
c73ac5cf30 AW2s RHEL image: don't copy config files, copy libori.so in final image 2023-02-15 18:25:02 +01:00
Robert Schmidt
d45a9a933b AW2S image: install less packages, require mounted configuration file 2023-02-15 18:25:02 +01:00
turletti
22ad41e6f7 Dockerfile for aw2s RRUs on u18.04 2023-02-15 18:25:02 +01:00
Melissa Elkadi
1f432be612 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-02-15 05:44:45 -08:00
Melissa Elkadi
b47cb76977 Removing unused PSS and SSS tests as well as bw variable 2023-02-15 05:42:27 -08:00
laurent
38a908a4ec code review comments 2023-02-15 13:50:44 +01:00
laurent
2a49e1fbdb rebase on develop 2023-02-15 13:50:44 +01:00
laurent
43b698f434 fix race cond in mbms startup procedure 2023-02-15 13:50:44 +01:00
laurent
9f8a468d94 remove eNB threads for RRC and MAC, MAC thread was only for DRX config (useless) and RRC thread has many race conditions with MAC+PHY 2023-02-15 13:50:44 +01:00
laurent
d3d76080f7 minor fixes 2023-02-15 13:50:44 +01:00
laurent
ef1d5079f2 stats display with 5G flag 2023-02-15 13:50:44 +01:00
Robert Schmidt
2de56bf324 Correct NUMA bound devices for caracal/timing test 2023-02-15 10:30:03 +01:00
Melissa Elkadi
528e1d99d2 Adding test cases for nr_psbchsim 2023-02-14 14:52:10 -08:00
Melissa Elkadi
aba645dc93 Removing unused/not working PSS and SSS tests 2023-02-14 06:33:27 -08:00
Raphael Defosseux
31d6a5e9bd chore(ci): pushing oai-nr-cuup new image to docker-hub
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-14 15:25:05 +01:00
Raphael Defosseux
8d91453b52 chore(ci): updating the new E1 scenario for CN5G v1.5
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-14 15:23:55 +01:00
Raphael Defosseux
f493a47a89 Merge remote-tracking branch 'origin/develop' into ci-chore-updating-cn5g-v1.5 2023-02-14 15:23:21 +01:00
Melissa Elkadi
468e7330de Adding back in DPHY_SIDE_LINK 2023-02-13 12:44:40 -08:00
Melissa Elkadi
e7d04ec14f Adding definition for MIBSLCH 2023-02-13 10:15:47 -08:00
Melissa Elkadi
600399aa63 Fixing white space and removing unrelated changes 2023-02-13 08:56:04 -08:00
Melissa Elkadi
56b87424db Removing LTE HO changes 2023-02-13 08:42:34 -08:00
Melissa Elkadi
7a1928dfd0 Removing nFAPI LTE HO changes from this MR 2023-02-13 08:20:46 -08:00
Melissa Elkadi
6c8112581b Reverting LTE code (removing LTE HO changes from this MR) 2023-02-13 08:16:58 -08:00
Melissa Elkadi
7e473ca971 Reverting docker-compose to original 2023-02-13 08:06:48 -08:00
Melissa Elkadi
7f40b90ceb Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-02-13 07:59:48 -08:00
Robert Schmidt
c8aceea464 Merge branch 'integration_2023_wk06' into 'develop'
integration_2023_wk06

See merge request oai/openairinterface5g!1943

!1855 Cleanup of external dependencies install script
!1876 NR refactor PHY vector sizes for multi UE
!1933 bugfix: try to handle USRP devices correctly to avoid crashes
!1937 CI: clean unused files, drop old cluster images
!1629 E1 procedure
!1738 Replace Nettle with OpenSSL
!1896 Remove CSET0 rom configuration if not in configuration file
2023-02-13 14:12:32 +00:00
francescomani
a51cb67cb0 fixes in limiting MCS and number of PRB while handling PHR 2023-02-13 11:41:13 +01:00
Raphael Defosseux
801dc4cc6c fix(ci): fdqn is no longer an option for OAI-CN5G launch script
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-13 11:07:17 +01:00
Robert Schmidt
d656022e1e Remove pdcch_ConfigSIB1 from new config files 2023-02-12 14:03:59 +01:00
Robert Schmidt
ca2b5f15a7 Merge remote-tracking branch 'origin/NR_test_cset0_initBW' into integration_2022_wk06 2023-02-12 14:03:43 +01:00
Robert Schmidt
39b7cce490 Resolve warning 2023-02-12 14:01:49 +01:00
Robert Schmidt
a6145ca92b Merge remote-tracking branch 'origin/kdf_openssl' into integration_2022_wk06 2023-02-12 14:01:33 +01:00
Robert Schmidt
0d4a95b88f Merge remote-tracking branch 'origin/e1-implementation-wip' into integration_2022_wk06 2023-02-11 18:41:37 +01:00
Robert Schmidt
007dcc63a8 5G E1 RFsim test XML test cases 2023-02-11 12:32:34 +01:00
Robert Schmidt
616bdf8360 Generalize tshark capture filter, but avoid false positives 2023-02-11 12:32:34 +01:00
Robert Schmidt
4d10437474 Add basic docker-compose for E1 2023-02-11 12:32:34 +01:00
Robert Schmidt
3ec0f5ee68 Correct E1 config for containers 2023-02-11 12:32:34 +01:00
Robert Schmidt
e859533454 Build nr-cuup in CI (ubuntu) 2023-02-11 12:32:34 +01:00
Robert Schmidt
472e916af6 Add Dockerfile for nr-cuup 2023-02-11 12:32:34 +01:00
Laurent Thomas
553f1d1a52 Add basic E1 functionality
With contributions from
* Sakthivel Velumani <velumani@eurecom.fr>
* Robert Schmidt <robert.schmidt@openairinterface.org>

Squashed commit of the following:

commit e8488acbcdaef6ee1688dc233c9e48e85b0fbfc8
Merge: f09468eb13 5d58645a85
Author: laurent <laurent Thomas>
Date:   Sat Jan 21 15:03:40 2023 +0100

    merge develop

commit f09468eb13f729c49830786150918b03ae2d7524
Author: laurent <laurent Thomas>
Date:   Fri Jan 20 10:43:51 2023 +0100

    continue e1AP development

commit 76545cfbfc7ec5031633b1b0ec599c3560c1e5a7
Author: laurent <laurent Thomas>
Date:   Wed Jan 18 14:18:47 2023 +0100

    fix regressions after merge develop

commit 7071c480a6c433eb94501c49f4a7694ba77f4f6d
Merge: 569b9fc5f3 214aa50595
Author: laurent <laurent Thomas>
Date:   Mon Jan 16 15:51:50 2023 +0100

    merge develop

commit 569b9fc5f37b9947b722885e423572a211d658da
Author: laurent <laurent Thomas>
Date:   Wed Jan 4 17:07:01 2023 +0100

    fix srb2 addition, simplify and remove dead code, fix one race

commit 9fa89151c0f9b4a16a79d0685cc04d8cf2adfa44
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Jan 4 20:02:05 2023 +0530

    Bearer context release decoder and encoder

commit 7011cb518ed6df015ace536e9a08b2d1865188d9
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Jan 4 13:43:58 2023 +0530

    Update documentation

commit 3e8899fc962cb16fc1ded49590ca5dddede54978
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Jan 4 10:14:11 2023 +0530

    Fix function arguments and warnings

commit 989ad183a8d66961facaa6719fa7793b9d40d5b4
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Jan 3 20:18:31 2023 +0530

    Moved E1-design.md to doc/

commit 04a8633dd509d9525755c5f3abfad976a1ba704e
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Jan 3 20:13:46 2023 +0530

    Make libraries lower case in CMakeLists

commit 033ec174c1f48a0e745a2a2e1c367aa361f5ae76
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Jan 3 17:55:25 2023 +0530

    Renamed and updated cucp cuup config files

commit f76a6913352bd8b2bb73ac25f225140cf05f93f2
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Jan 3 13:31:19 2023 +0530

    Removed CU-UP checks from nr-softmodem

commit ae70afe44c84ac16b977b388c63e80e24803c43c
Author: laurent <laurent Thomas>
Date:   Mon Jan 2 13:01:45 2023 +0100

    fix for gcc version hat doesnt accept declarations in switch

commit 6a7a01043bf1e6e0ee9ac40b4d85ced7cdf6dcf4
Author: laurent <laurent Thomas>
Date:   Tue Dec 27 15:59:28 2022 +0100

    first functional commit standalone cu-up

commit 0caa4690f9e1acbe578d4de5a82ba62f45444a12
Merge: 3619f9550e 1a0c0cd1c9
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Fri Dec 23 14:21:00 2022 +0530

    Merge remote-tracking branch 'origin/develop' into e1-implementation-wip

commit 3619f9550e4d3e78815334150ff8443db914f738
Merge: 1bcf8d5e00 cfe698eb70
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Dec 21 15:47:40 2022 +0530

    Merge remote-tracking branch 'origin/develop' into e1-implementation-wip

commit 1bcf8d5e00a9b9ce440d825f83ddc1b48086daa8
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Sep 13 02:10:34 2022 -0400

    Fix GTP rnti to ue_id after rebase

commit 23075ff8b7ef5d56df844c05e0a7100fe7bd35de
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Sep 6 00:32:12 2022 -0400

    Added documentation

commit 28f6e507f74d3fb069441e05da523378dee0f6ed
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Mon Sep 5 15:02:02 2022 -0400

    Header cleaups and unitary simulators build fixes

commit e665dbab28c49327066cff72aed22e1de7797b59
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Sep 1 17:52:07 2022 -0400

    Common interface between CUCP & CUUP for E1 and non E1 modes

commit 5dcc1bf59a37ed87d7d32a617cfcd663d6415757
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Sep 1 13:53:49 2022 -0400

    Allocate stack where ever possible
    Free memory after ASN encode

commit 793a5379539a3a2b6c42cd327d8cef79fe21fb55
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Sep 1 10:41:50 2022 -0400

    Fixes for build issues

commit 0d3564f25a0d8746b0fc550ed371ce21e08cd05a
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Aug 31 20:57:14 2022 -0400

    Fixed uesoftmodem linkage error

commit 34adf865820f09900a5efed693ada1ccf6f0f1ad
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Aug 31 19:31:50 2022 -0400

    Removed RRC thread from CUUP

commit 536741910aff90a86ba3a60612f943b412c5ab40
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Aug 31 14:21:31 2022 -0400

    Add header guard in one of E1AP header

commit 22e9d9b6dea5d84d259ee2dc1aaa7cb943e55b08
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Aug 31 14:00:47 2022 -0400

    Fix bug in PDCP ue_id

commit 4c65339b07d347003ed89d5e00f49a62e9b21483
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 30 18:04:59 2022 -0400

    Linked E1AP lib to L2_NR target
    E1AP builds for nr-softmodem

commit 014fe30ac93c84d810e0209bc7f0d3b7a1bbaee3
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 30 15:49:27 2022 -0400

    Remove xer prints from e1ap
    and gcc warning fixes

commit 71f0c9126bbb91bc595b66d57e1e91db676d3b9d
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 30 15:42:30 2022 -0400

    Fixed bug in integrity protection config

commit 4e393ef9528c2b14d670a341b52fc63262abf894
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 30 14:34:37 2022 -0400

    GTP init with only local address
    IP traffic works both directions in Mono, F1 and E1

commit ec3bde2c5deb99f554afc2053e351b9f79525e96
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 30 00:16:03 2022 -0400

    Fix bug in pdcp config and GTP instance
    UL iperf still not works. Can see packets in wireshark.

commit be8df4435eeae0a0755e2ac658f33caa2a3e3c94
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Sat Aug 27 20:15:04 2022 -0400

    Fixes in node config after rebase

commit 6f42ff88de7f1615f87c46771fd6617a5fdfc48f
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Sat Aug 27 01:38:21 2022 -0400

    Added N3 tunnel address in config params
    fixed bug in address length feild

commit b5e132041994344ebb5c2c59ca392612a32658fd
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Fri Aug 26 20:38:47 2022 -0400

    Send UL UP address via F1 UE cxt mod msg

commit ecfd0fe260aee6aad78c291368c246f88b6bffcf
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Fri Aug 26 15:08:53 2022 -0400

    Update GTP remote address from response message
    Modified GTP tunnel update function accordingly
    Put GTP tunnel update out of F1AP
    F1 split works

commit 14a37e414de3d653f25ccef1a790bc5b08fc7dc2
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Sat Aug 20 01:17:36 2022 -0400

    Moved GTP tunnel creation out of F1AP message sending

commit cdd58ab96e84f48cc8ab8f0fe6b3133081ff02f7
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Fri Aug 19 17:40:43 2022 -0400

    Moved DRB config out of RRCReconfig complete
    Monolithic and F1 split works

commit 61d66e490a1b61aa2b6ce18d993bb90d112d6374
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Aug 11 01:30:10 2022 -0400

    Allow CUUP to have RRC inst without error

commit dd7ae889372bb9fdf9e96be87c28eed0d9461d7f
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Aug 11 01:29:21 2022 -0400

    Added missing IEs in bearer cxt response handler

commit a6f1fe5fd254ccb36a54ede5b652161cb5e542e8
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Aug 10 21:02:30 2022 -0400

    Unified bearer context message transfer for E1 and non-E1 mode
    compiles, to be tested

commit f245ace285632edcc28d669123746b9bf458bc38
Author: laurent <laurent Thomas>
Date:   Tue Aug 9 17:46:52 2022 +0200

    remove log_i() of fatal errors

commit d2a0f3c8620981f3b65a136f0169e3be9c549742
Author: laurent <laurent Thomas>
Date:   Fri Aug 5 15:01:39 2022 +0200

    fix rnti/ue_id for ue

commit 7b52c6cd9e675c28cb9d6347d122f77234ec6542
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Aug 4 19:14:46 2022 -0400

    Created separate functions in PDCP for E1 mode

commit 46680d2b3d221e675c3aeb675137f45318e31acb
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Aug 4 19:13:10 2022 -0400

    Bug fixes in bearer context setup response

commit 3d091bfd31b7aba625e4ba4b4f0f337cf2c1f6db
Author: laurent <laurent Thomas>
Date:   Thu Aug 4 15:42:11 2022 +0200

    add missing file from previous commit

commit 21838572196dec947da99f350f20c4d9408c3c17
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed Aug 3 16:59:16 2022 -0400

    Minor bug fixes

commit 34eb73fbc6f9d33098850d62b4808e54c80bb4ca
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 2 23:16:47 2022 -0400

    Added config files for testing
    To be renamed or removed later

commit a7e9c6fb9332295ad42585eb4338a6f9ff0ae7c0
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 2 23:15:21 2022 -0400

    Made rrc_gNB_get_ue_context_from_ngap_ids() non static

commit 028f0407571466ff24cf72b5c3814e42c346ae81
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 2 23:12:16 2022 -0400

    Completed bearer context setup cycle
    To be tested: Handling of bearer context setup response and subsequent UE context modifition msg to F1AP task

commit 4481d11324b13efa73ab0b5f4f156012485661ae
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Aug 2 23:01:50 2022 -0400

    Fixed E1AP PPID (wireshark fixed)

commit 7a22573f3e7e16960e3310609dea2783ddf404a2
Author: laurent <laurent Thomas>
Date:   Fri Jul 29 13:03:31 2022 +0200

    fix compile issues, simplify gtp send function

commit 0209011aa75a16e4c9c1eb36ebcf4fe0ff93aba2
Author: laurent <laurent Thomas>
Date:   Thu Jul 28 11:51:18 2022 +0200

    restore compilation capability, gtp replacement of rnti by ueid

commit ce3b886fd7f11322a8d37b924d1752e6a6adf777
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Fri Jul 22 08:35:31 2022 -0400

    Included missing IEs in bearer cxt setup message

commit 1208ae0d6fe4b25341c9036dde111fd4d00fd6e9
Author: Cedric Roux <cedric.roux@eurecom.fr>
Date:   Tue Jul 19 10:53:35 2022 +0200

    replace rnti by ue_id in pdcp

    some sdap and gtp files had to be touched, the work is not finished in there

    some changes in nr_pdcp_oai_api.c simply assume ue_id is indeed rnti
    (will functions in this file be used by cu-up?)

commit e67d1c88c786267458194e4de516919d0b5d1002
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Jul 19 10:08:39 2022 +0200

    Replace RNTI with UE ID in GTP files
    (half done. Laurent to change ctxt_t)

commit 7a141e8e941e5c2624a47da7c764531c03b8f617
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Jul 19 10:04:15 2022 +0200

    Added RRC handler for bearer cxt setup in CUUP

commit fe2106676bf9144347f30969a1bfd351136f536a
Author: laurent <laurent Thomas>
Date:   Mon Jul 11 13:30:30 2022 +0200

    fix race in startup procedure (config before starting threads that use the config)

commit 3197baab60e53459928da30cea7a4e0514a074e3
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Sun Jul 10 11:30:31 2022 +0200

    Fixed bugs in bearer creation

commit 26be61167dec9068e572e08a21ddc96a0f2a7731
Author: laurent <laurent Thomas>
Date:   Sun Jul 10 10:50:57 2022 +0200

    fix a race, add asn1c debug method

commit 26750d1818aa206c4c56ada6dbed9bb66dfe3811
Author: laurent <laurent Thomas>
Date:   Wed Jul 6 22:34:10 2022 +0200

    e1ap bearer setup encoding invalid

commit d092788aa3f8229eb5c938a41534dfb318955135
Author: laurent <laurent Thomas>
Date:   Wed Jul 6 14:18:39 2022 +0200

    fix regression with F1, some basic cleaning in NGAP

commit 41a135734a33b284808d4c5049c431dbc0ff1c46
Author: laurent <laurent Thomas>
Date:   Wed Jul 6 11:24:52 2022 +0200

    fix some ngap regressions

commit 460acd840dd58fd46a995219cb9da8fda103668e
Author: laurent <laurent Thomas>
Date:   Tue Jul 5 21:19:13 2022 +0200

    build, run in F1 mode until UE connect but pdu session still fails

commit 7c067095df287cc7a542be53e9a1471c11ec5af8
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Sat Jun 25 22:45:46 2022 +0530

    Populate PDU and DRB paramenters from NGAP

commit c4ada56a8c31b4c07fc1498e15b0954d9b1ad2f6
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue Jun 7 22:16:58 2022 +0530

    setup resp decoding success

commit a2f41597c7438934a203ccf3cced35b6b65e8cee
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Sat Jun 4 13:50:55 2022 +0530

    Fixed bugs in E1 setup procedure
    E1 setup request decoding successful

commit 6106207ba74c74579b5f375d572930a609abe3a9
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu May 26 20:13:14 2022 +0530

    Fixing build issues

commit 67235fac01aaca4c17da13bf658144ffe6bd12df
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Mon May 23 12:04:22 2022 +0200

    Make nr-softmodem depend on E1AP module

commit 391cee938e8250c355b6b914e747f2004c795817
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Mon May 23 11:57:15 2022 +0200

    Fix ITTI errors in E1AP target

commit db4146e4a0432b7e3759d71efbeb450754c1f0d3
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Wed May 18 06:59:03 2022 +0530

    CP UP task created

commit 3058d2fc445acf5681a09f70409023718294d093
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue May 10 08:12:19 2022 +0530

    Bearer context setup response message

commit b911e9db2a4d0a35eb9a449ef02acefff30b558f
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Tue May 3 16:52:49 2022 +0530

    Bearer context setup c structs

commit d0f4d5f3539803253b9a995a90a47b3d825ea0ca
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Apr 28 02:21:50 2022 +0530

    Bearer context setup message

commit 489a5358fa0e199314254561a2d52c1a93f7803e
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Thu Apr 21 10:11:03 2022 +0530

    Started with CUUP task

commit b416061f5a237cbabbe09c6d81fe92df9e33fd72
Author: Sakthivel Velumani <velumani@eurecom.fr>
Date:   Fri Apr 15 18:46:27 2022 +0530

    Setup request and response messages

commit faca4b97dba92be857bd8442193365fc2c8ed122
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Mon Apr 11 15:01:48 2022 +0200

    Fixup for cmake execution

commit ecfd9f7608a5820ae85278939e9bbaf7f1245dd6
Author: Robert Schmidt <robert.schmidt@eurecom.fr>
Date:   Tue Nov 24 21:39:20 2020 +0100

    Move CMakeLists.txt into root

commit 9f41f7c52b3c7a185e5e34bb1591b0eb66459837
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Tue Apr 12 12:07:18 2022 +0200

    Remove hwlat refs in build_oai: targets don't exist anymore

commit e666cf5eedc67695febd33de1397331d6b7b2320
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Mon Apr 11 14:37:32 2022 +0200

    Create CMake E1AP_RELEASE variable from E1AP_VERSION

commit 1f8413361c1b99ea46ee613da035803a1387f65c
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Sun Apr 10 14:25:38 2022 +0200

    Add E1AP lib

commit 7465cea49243fd6eb9869035b18860dface57098
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Sun Apr 10 14:48:40 2022 +0200

    Add E1AP Grammar and build ASN.1 lib at build time

commit cde22f83032a199387ae1eae6b702f44ed154f3e
Author: Robert Schmidt <robert.schmidt@openairinterface.org>
Date:   Fri Apr 22 13:42:51 2022 +0200

    Accept higher vers. nums in make_version/MAKE_VERSION

commit d5127b23608240374a439d1d9c2ff6d53c4b527c
Author: Robert Schmidt <robert.schmidt@eurecom.fr>
Date:   Tue Nov 24 21:39:20 2020 +0100

    Move CMakeLists.txt into root
2023-02-11 12:32:34 +01:00
mir
986a1a80ff Remove nettle library from OAI, support OpenSSL 3.0 and 1.1
Add byte_array_t structure under common/
2023-02-10 16:49:54 +01:00
Robert Schmidt
20f8515724 review suggested changes 2023-02-10 09:26:45 +00:00
Robert Schmidt
f4b394a30f Merge remote-tracking branch 'origin/ci-clean-dashboard-drop-old-images' into integration_2022_wk06 2023-02-09 19:23:11 +01:00
Robert Schmidt
adb02aa2ee Merge remote-tracking branch 'origin/bugfix-release-usrp' into integration_2022_wk06 2023-02-09 19:23:04 +01:00
Robert Schmidt
3c73b3aadf Merge remote-tracking branch 'origin/NR_refactor_PHY_vector_sizes' into integration_2022_wk06 2023-02-09 19:22:57 +01:00
Dorovskikh
eca08df857 5G UE IMEISV 16 digits
reading 5G UE IMEISV from config file

Signed-off-by: Dorovskikh <vladimir.dorovskikh@capgemini.com>
2023-02-09 16:09:50 +00:00
Melissa Elkadi
7feb6ed41f Merge branch 'episys/master-sl' into episys-merge-develop-sl 2023-02-09 07:37:18 -08:00
Melissa Elkadi
6fbb4df0a3 CMDLINE_PARAMS_CHECK_DESC must be correct
When merging in the new --nfapi str CL option from
develop, the santizer was catching a null pointer in
config_checkstr_assign_integer(). To fix this, I logged
params and i in config_execcheck(). This showed that
only 36 CMDLINE_PARAMS_CHECKs were happening when we
have 41 CL options in executables/softmodem-common.h.

To fix this, I added 7 more { .s5 = { NULL } }, for the
remaining CL parameters defined. Furthermore, the .s3a
CL parameter must be associated with the new --nfapi
string, so if it does not properly line up with the CL
definitions order, it will fail. The logs added in
config_execcheck() will show this.
2023-02-09 06:50:43 -08:00
Sagar Arora
a36ed24b1a Make cluster images older than 4 weeks dangling so they are deleted 2023-02-08 14:18:44 +01:00
Melissa
89f11abe68 Merge branch 'episys/gNB_tdd_config' into 'episys/master-sl'
Episys/gNB_tdd_config

See merge request aburger/openairinterface5g!183
2023-02-07 23:39:43 +00:00
Moein Sadeghi
3362fa991f Episys/gNB_tdd_config 2023-02-07 23:39:43 +00:00
Melissa Elkadi
3614c221c4 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-02-07 13:54:29 -08:00
Melissa Elkadi
298d822bd1 Merge branch 'episys/master-sl' into episys-merge-develop-sl 2023-02-07 13:14:57 -08:00
Melissa
6775b577fd Merge branch 'episys/david/counting_tx_sssb_in_tx_log' into 'episys/master-sl'
Adding Tx SSB count and measured RSRP value in the script.

See merge request aburger/openairinterface5g!180
2023-02-06 23:37:25 +00:00
David Kim
1283065946 Fixed delay time computation. 2023-02-06 15:02:16 -08:00
David Kim
50f4890faa Merge remote-tracking branch 'origin/episys/master-sl' into episys/david/counting_tx_sssb_in_tx_log 2023-02-06 10:16:29 -08:00
Melissa
03b75ed679 Merge branch 'episys/ea/sss_rsrp' into 'episys/master-sl'
Episys/ea/sss rsrp

See merge request aburger/openairinterface5g!182
2023-02-06 18:12:43 +00:00
Melissa
a91839e69c Episys/ea/sss rsrp 2023-02-06 18:12:43 +00:00
Melissa
2e34ab0190 Merge branch 'revert-a93da4a8' into 'episys/master-sl'
Revert "Merge branch 'episys/ea/sss_rsrp' into 'episys/master-sl'"

See merge request aburger/openairinterface5g!181
2023-02-06 18:09:11 +00:00
Melissa
e6abb12fb1 Revert "Merge branch 'episys/ea/sss_rsrp' into 'episys/master-sl'" 2023-02-06 18:09:11 +00:00
Melissa
a93da4a886 Merge branch 'episys/ea/sss_rsrp' into 'episys/master-sl'
Added RSRP calculation for SSB

See merge request aburger/openairinterface5g!179
2023-02-06 18:07:38 +00:00
Ejaz Ahmed
27e14a06c2 Added RSRP calculation for SSB 2023-02-06 18:07:38 +00:00
David Kim
028f92a3e2 Code cleanup. 2023-02-06 10:05:43 -08:00
Robert Schmidt
2e215b0951 Remove unnecessary file 2023-02-06 16:55:04 +01:00
Robert Schmidt
ea1be5276c Remove legacy dashboard 2023-02-06 16:55:04 +01:00
Roberto Louro Magueta
9c6f07dbc8 Avoid saturation in PUSCH for UL channel estimation 2023-02-06 13:08:04 +00:00
Guido
bc21da6ab2 Harmonized debug logging in DL/UL scheduling
- made it consistent throughout the code
- always reporting the UE RNTI that is failing (helps debug in a multi-ue operation)
2023-02-06 11:48:16 +01:00
Guido
389b9cf4ef Reuse old TDA when allocating DL retransmissions
- reusing old TDA whenever possible helps allocate DL retransmission when TDA chnges
- e.g. nrOfSymbols of new TDA > nrOfSymbols old TDA (leading to TBS size mismatching and allocation failure)
- This bugifx improves DL throughput stability in a multi-UE operation
2023-02-06 11:46:27 +01:00
Raphael Defosseux
8a388f4b0e fix(ci): for old versions of python3, pyshark live-capture is buggy
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-06 11:22:31 +01:00
Cedric Roux
344f8b75e6 bugfix: try to handle USRP devices correctly to avoid crashes
Some problems when we release the device:

    - Calling the destructors is wrong, we should set the pointers to NULL.
      These are shared pointers, this is C++.
    - We have to stop rx by doing a STREAM_MODE_STOP_CONTINUOUS.
    - The end-of-burst for tx has been simplified.

This problem when we acquire the device:

    - Calling get_rx_stream() many times seems to be problematic.

We now should have a better behavior with UHD 4.2 and N310. (Hopefully with
others too.) No crash seen so far.
2023-02-04 23:37:58 +01:00
Gabriele Gemmi
817ee1a217 Cleanup of external dependencies in the installs script
Many useless dependencies have been removed or moved to the additional tools list of packages.
Xforms and ue-ip module must now be built explicitly
Removed support for Ubuntu 16. Addedd support for Debian 11 and Fedora 37

Squashed commits:

removed all unused dependencies
Applied patch from Robert + cleanup in the dependencies
Applied patch from Robert + cleanup in the dependencies
Moved xforms to optional packages, minor fixes
remvoed ue_ip module from ue build
fixes in the build script
styling fixes
Make RHEL8 ran-base build
- Use EPEL 8
- Inside container there is no sudo, so remove superfluous -H
- Install python3-mako
Working build on fedora 36
Make build by install xxd
Drop Ubuntu 16 support
add pip3 again
Correct software
Drop useless software, maybe drop python too
Fix: comment mistaken for package
Remove Netinterfaces from optional packages (Ubuntu)
Don't link xforms into 4G simulators: not needed
Install xmlstarlet, required for physims
Support for fedora 37
Remove irrelevant svn executable from physims
Option to compile UE ip kernel module
Install only relevant boost libs
Removed --skip-broken
Remove unnecessary vconfig,numpy,scipy dependencies
Remove packages that have been installed (pkg-config), python, awk
Remove unnecessary ntpsec package
addedd support for debian 11
styiling fixes
2023-02-03 17:31:35 -05:00
David
bf6b8442f1 Added no-run option for log analysis only. 2023-02-03 12:55:21 -08:00
David
0f90a7c24c Added Sidelink SSB RSRP metric value in the script result. 2023-02-03 12:05:40 -08:00
Raphael Defosseux
00ef792d47 chore(ci): post-review changes
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
Raphael Defosseux
19ffb7be48 fix(ci): proxy repo has no develop branch
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
Raphael Defosseux
f516d7ab4f fix(ci): typo found per review
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
Raphael Defosseux
a03d274676 chore(ci): after upgrade of CN5G version on porcepix
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
Raphael Defosseux
43a2ae0040 style(ci): using and debugging the new LocalCmd class
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
Raphael Defosseux
6905159a38 chore(ci): applying the same image syntax with oaisoftwarealliance/ for RAN components
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
Raphael Defosseux
76ed14e76c chore(ci): using pyshark live-capture instead of launching a bg tshark
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
Raphael Defosseux
63124fc487 chore(ci): updating simulators docker-compose for CN5G release v1.5
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2023-02-03 14:03:53 +01:00
David
0e84775e29 Merge branch 'episys/ea/sss_rsrp' into episys/david/counting_tx_sssb_in_tx_log 2023-02-02 16:17:42 -08:00
David
0e0fc7eab4 Counting the number tx Sidelink SSB for sync.
1. Parsed tx log file in case that SyncRef UE was found.
2. Counted the number of tx Sidelink SSB until sync.
3. Added average statistics for multiple iternations.
2023-02-02 15:17:31 -08:00
Ejaz
323f52aeb1 Code cleanup in log and format adjustment. 2023-02-02 12:12:11 -08:00
Ejaz
334fbb8879 Fixed symbol_offset and ssb_offset in rsrp measurement method 2023-02-02 11:48:40 -08:00
Melissa Elkadi
39d54215bd Removing whitespace 2023-02-01 16:59:10 -08:00
David
bb580fae58 Adding the time option to logs and removing color
By modifying the reported logs on the rx side, we
can then use the test script to analyze these logs
and figure out the time it took to achieve sync.
2023-02-01 16:38:35 -08:00
Melissa
783e3d0da6 Merge branch 'episys/add-test-metrics' into 'episys/master-sl'
Fixing spacing for test script

See merge request aburger/openairinterface5g!177
2023-02-01 23:20:17 +00:00
Melissa Elkadi
3fc1825e44 Fixing spacing for test script 2023-02-01 15:19:29 -08:00
Ejaz
c0bf78efa0 Separated SyncRef and UE in logs 2023-02-01 14:58:26 -08:00
Ejaz
c4f4a5d793 Merge branch 'episys/master-sl' into episys/ea/sss_rsrp 2023-02-01 14:49:54 -08:00
Ejaz
b6247b075b Fixed ssb index issue 2023-02-01 14:47:30 -08:00
Melissa
cfdfe6aaa7 Merge branch 'episys/david/updating_sl_launch_script' into 'episys/master-sl'
Updated sidelink launching script.

See merge request aburger/openairinterface5g!175
2023-02-01 22:40:45 +00:00
Deokseong "David" Kim
709efd5da5 Updated sidelink launching script. 2023-02-01 22:40:45 +00:00
Ejaz
d9e487359d Merge branch 'episys/master-sl' into episys/ea/for_merging_changes_4m_sss_rsrp 2023-02-01 12:06:05 -08:00
Ejaz
500069fcf0 Added Second SSS in rsrp calculation 2023-02-01 12:05:40 -08:00
Ejaz
99fb046474 Replaced ue->is_synchronized with ue->is_synchronized_sl 2023-02-01 12:05:10 -08:00
Ejaz
c8ace3b540 Added nr_ue_sl_ssb_rsrp_measurements function 2023-02-01 12:04:32 -08:00
Melissa
6fc62b0184 Merge branch 'episys/david/adding_sl_launch_scripts' into 'episys/master-sl'
Added sidelink launch scripts for both SyncRef UE and Nearby UE.

See merge request aburger/openairinterface5g!174
2023-02-01 14:54:29 +00:00
Melissa
085e84dc38 Merge branch 'episys/ea/fixed_nid_sl_calculation' into 'episys/master-sl'
Fixed nid_sl calculation formula

See merge request aburger/openairinterface5g!173
2023-02-01 14:29:49 +00:00
Ejaz Ahmed
b1407040b6 Fixed nid_sl calculation formula 2023-02-01 14:29:49 +00:00
David
88accf144e Fixed typo error in the log. 2023-01-31 18:48:12 -08:00
David
a7c5a0bb29 Indentation was changed to spaces. 2023-01-31 18:20:18 -08:00
David
2949d00083 Added sidelink launch scripts for both SyncRef UE and Nearby UE.
1. run_sl_usrp.py for launching both SyncRef UE and Nearby UE.
2. sl_rx_agent.py will be trigged by run_sl_usrp.py for Nearby UE
3. sl_usrp_cmds.txt for sidelink usrp commands.
2023-01-31 17:58:49 -08:00
Melissa
8378127c2c Merge branch 'episys/fixed_sync_ref_inconsistentency_issue' into 'episys/master-sl'
Replaced synch with sync

See merge request aburger/openairinterface5g!172
2023-01-31 23:51:23 +00:00
Ejaz Ahmed
e1d9d15b2c Replaced synch with sync 2023-01-31 23:51:23 +00:00
Melissa
53eb37e674 Merge branch 'episys/ssb_time_slot' into 'episys/master-sl'
ssb time slot allocation

See merge request aburger/openairinterface5g!171
2023-01-31 23:14:09 +00:00
Melissa Elkadi
682b1be022 Merge branch 'episys/master-sl' into episys/ssb_time_slot 2023-01-31 15:12:56 -08:00
Melissa Elkadi
f4047b7aa4 Removing commented code 2023-01-31 15:11:48 -08:00
Melissa
34d80d4754 Merge branch 'episys/ea/nid_1_nid_2_flags' into 'episys/master-sl'
Added nid1 and nid2 flags

See merge request aburger/openairinterface5g!170
2023-01-31 19:38:20 +00:00
Ejaz Ahmed
5dc3663f16 Added nid1 and nid2 flags 2023-01-31 19:38:20 +00:00
Melissa
de54ec5b8b Merge branch 'episys/fixing-cl-dl-freq' into 'episys/master-sl'
Calling nr_init_frame_parms_ue_sa we can dynamically set the tx/rx freq

See merge request aburger/openairinterface5g!169
2023-01-31 19:34:05 +00:00
Melissa
ce07b567d0 Calling nr_init_frame_parms_ue_sa we can dynamically set the tx/rx freq 2023-01-31 19:34:05 +00:00
Moein Sadeghi
4ee9a6d8c6 last commit was not correct commit. this time it is resolved ! 2023-01-31 10:36:15 -08:00
Moein Sadeghi
39726e3274 resolved merge conflict 2023-01-31 10:30:03 -08:00
Ejaz
0d5dcbbccb Merge branch 'episys-merge-develop-sl' of gitlab.int-episci.com:aburger/openairinterface5g into episys-merge-develop-sl 2023-01-31 07:38:48 -08:00
Ejaz
684f762fd9 Merge branch 'episys/fixing-cl-dl-freq' into episys-merge-develop-sl 2023-01-31 07:35:47 -08:00
David
b95722b670 Merge branch 'episys/fixing-cl-dl-freq' into episys-merge-develop-sl 2023-01-31 07:35:39 -08:00
David
b431e042fc Calling nr_init_frame_parms_ue_sa we can dynamically set the tx/rx freq
Additionally, there were a few variables defined as PARAMBOOLs
rather than ints in the softmodem-common.h so they were not properly
updated from the CL. Lastly, setting a default value for dl_freq.
2023-01-31 06:51:34 -08:00
Moein Sadeghi
43e8dcd7b6 appropriate formatting 2023-01-30 15:46:34 -08:00
Moein Sadeghi
5ea2e6d029 feature is working in rfsim 2023-01-30 15:01:21 -08:00
Moein Sadeghi
7cdf6847f1 modification regardgin SSB slot allocation 2023-01-27 12:00:22 -08:00
Melissa Elkadi
1483d53e28 Using rxdataF instead of local passed around 2023-01-23 14:44:13 -08:00
Melissa Elkadi
8727d12d18 Properly allocating common_vars->rxdataF 2023-01-23 09:12:03 -08:00
Melissa Elkadi
6f6a314ab6 Merge branch 'eurecom-develop' into episys-merge-develop-sl 2023-01-23 08:39:32 -08:00
francescomani
358772429e fix asan failures 2023-01-23 11:31:01 +01:00
francescomani
721b8e9d9f setting max dlsch/ulsch limit 2023-01-23 11:31:01 +01:00
francescomani
43685afe1a removing NUMBER_OF_NR_UE_MAX 2023-01-23 11:13:05 +01:00
francescomani
d8612a6ca7 some more cleanup 2023-01-23 11:13:05 +01:00
francescomani
b4b5516ca7 remove NUMBER_OF_NR_SRS_MAX 2023-01-23 11:13:05 +01:00
francescomani
571f488ddb remove NUMBER_OF_NR_CSIRS_MAX 2023-01-23 11:13:05 +01:00
francescomani
dd24ddd645 remove NUMBER_OF_NR_PUCCH_MAX 2023-01-23 11:13:05 +01:00
Melissa
77f069c1af Merge branch 'episys/timestamp_sl_debug' into 'episys/master-sl'
Synchronization is working on USRPs OTA!

See merge request aburger/openairinterface5g!168
2023-01-20 22:39:13 +00:00
Melissa Elkadi
6a2f5664b8 Fixing whitespace 2023-01-20 14:38:42 -08:00
Ejaz
6d51179357 Adding/fixing whitespace 2023-01-16 13:03:32 -08:00
Ejaz
720b2669fd Properly updating the SSB start location 2023-01-16 12:55:26 -08:00
Ejaz
9ffe2b7851 Reverting write timestamps since these changes did not effect sync 2023-01-16 11:46:20 -08:00
Ejaz
6befa6b3b0 Reverting check for nr_slot_tx == 20 becasue not possible 2023-01-16 11:28:57 -08:00
Ejaz
d497806c6c Properly setting SSB offset.
Previously, we hackily changed the rx_offset right before
taking the DFT. It is better for us to properly calculate
the SSB offset. This is done by subtracting off the prefix
symbols of every symbol that exists before the correalted
PSS.
2023-01-16 11:14:29 -08:00
Ejaz
475f99195e Reverting hack 2023-01-16 10:25:37 -08:00
Ejaz
e1c152fbcf This rx_offset change is how we are able to get sync 2023-01-16 10:12:24 -08:00
Ejaz
0db28d4f5a Removing unnecessary changes 2023-01-16 09:55:50 -08:00
Ejaz
e344d531f9 Fixing merge conflicts. 2023-01-16 09:53:10 -08:00
Ejaz
433f3d1507 Reverting white space changes and unnecessary check for overflow 2023-01-16 09:50:20 -08:00
Ejaz
7e7b00e58b Merge branch 'episys/timestamp_sl' into episys/timestamp_sl_debug 2023-01-16 09:44:46 -08:00
David
9b03282972 Reverting whitespace change 2023-01-16 09:38:58 -08:00
David
b5a2dab4e9 Reverting more unnecessary changes 2023-01-16 09:38:09 -08:00
David
0f22e2a2d8 Fixing more white space 2023-01-16 09:34:16 -08:00
David
9fe8a273f2 Reverting whitespace change 2023-01-16 09:32:12 -08:00
David
e95d6e28fc Reverting init changes that have no effect on sync 2023-01-16 09:31:40 -08:00
David
71f52d180f Reverting whitespace changes 2023-01-16 09:27:24 -08:00
David
0c048b28bd Merge branch 'episys/master-sl' into episys/timestamp_sl 2023-01-16 09:24:21 -08:00
David
0a38dbb7be Clean up for MR 2023-01-16 09:15:16 -08:00
Ejaz
40a2ee85aa Sync is workinggit add -u! 2023-01-16 08:47:42 -08:00
David
c61ab7fb7e Sync is workinggit add -u! 2023-01-16 08:47:28 -08:00
Melissa Elkadi
9591a5bef5 Adding hex dumps 2023-01-13 13:58:46 -08:00
Melissa
f95c3f92ed Merge branch 'episys/cleanup-ue-thread-sl' into 'episys/master-sl'
UE_thread_sl() clean-up, code simplification, and small bug fix

See merge request aburger/openairinterface5g!166
2023-01-13 18:18:36 +00:00
Melissa
0a6e7eb898 UE_thread_sl() clean-up, code simplification, and small bug fix 2023-01-13 18:18:36 +00:00
Melissa Elkadi
26a52906df Removing 5G code that was incorrectly added, it still exists in nr_initial_sync 2023-01-13 10:15:57 -08:00
Melissa Elkadi
0f8bb964a4 White space clean up 2023-01-13 10:11:35 -08:00
Melissa Elkadi
937c7119ae The nb_prefix_samples0 is dependent on sync status.
By changing the global value of the nb_prefix_samples0
at the top of the thread, we are never able to properly
set the value after sync. To fix this, a local variable
was added in every place we use nb_prefix_samples0 in
the UE_thread_SL. However this commit has quite a few
changes becasue some places where the nb_prefix_samples0
global was used did not have the UE global available, so
we had to update the function footprint to pass in a
sync bool for proeprly setting the local nb_prefix_samples0
variable.
2023-01-13 06:48:07 -08:00
Melissa Elkadi
3e028a43b5 Not writing in the future if this data is not ready yet. 2023-01-12 15:51:11 -08:00
Robert Schmidt
1f458c7107 Adapt retx thresholds to CI env 2023-01-12 17:32:05 +01:00
Robert Schmidt
9c165e3992 Reduce 180Mbps in CI test for 162 PRB
Due to t-Reordering, if requesting more than 100% of resources allow,
leads to dropped packets at RLC that PDCP waits for in reordering
2023-01-12 17:31:13 +01:00
Ejaz
c501e448ca Updated the write_time_stamp value.
Previously this value was based on the slot_tx,
however the slot_tx is in the future and has not
be fully populated at this time (execution of writing
to USRP). So, we should write to USRP in current
slot, but we will fill the buffer in the generation
code in the future.
2023-01-11 14:57:10 -08:00
David
8313896093 Lowering init size of txdata and txdataF to not be ridiculous 2023-01-11 14:39:38 -08:00
Ejaz
87436a1884 Lowering init size of txdata and txdataF buffers to not be ridiculous 2023-01-11 14:38:46 -08:00
David
34d508ae23 Updating write timestamp
The generated SSB frame is in the future,
but what we are transmitting should be the current spot not the future
one.
2023-01-11 13:17:39 -08:00
Melissa Elkadi
ffb6ca5934 Merge branch 'episys/master-sl' into episys/cleanup-ue-thread-sl 2023-01-11 11:57:47 -08:00
Melissa Elkadi
682721cf57 Disabling MAC layer code after sync is achieved. 2023-01-11 11:05:50 -08:00
David
1a627782dd Reverting back to old SL configuration 2023-01-11 07:44:30 -08:00
Ejaz
28688065e2 Reverting back to old SL configuration 2023-01-11 07:43:56 -08:00
Ejaz
21b766912b Updating log messages for sync and adding an exit 2023-01-11 06:06:35 -08:00
Ejaz
774b8ef6e9 Merge remote-tracking branch 'episci/episys/timestamp_sl' into episys/timestamp_sl_debug 2023-01-10 09:56:10 -08:00
David
aefe918f9f Adding logs to show PSS location on TX side 2023-01-09 16:16:03 -08:00
Ejaz
1dbe99316a Changed IP address in conf and Added log in usrp_lib.cpp 2023-01-09 13:46:51 -08:00
David
b0ca489e60 Currently gets rid of LLLLs somewhat thorugh process 2023-01-09 12:07:37 -08:00
David
5d270d63ac Only seeing LLLLs on a few items! 2023-01-09 11:10:32 -08:00
David
22063a35ec Trying to get sync_ref to match gNB 2023-01-09 10:54:54 -08:00
David
d39997d8b0 Added logs to check tx sl timestamp using USRP 2023-01-06 17:19:00 -08:00
francescomani
3ab368f9b0 removing duplicate cset0 ss0 from config files 2023-01-06 09:44:12 +01:00
Melissa Elkadi
74998221e8 This commit does a lot of clean up.
It includes clean up of the entire UE_thread_sl().
It should also be simplifying a lot of the code and
it now uses UE->rx_offset_sl properly instead of
UE->rx_offset.
2023-01-05 13:18:27 -08:00
Melissa Elkadi
c468bd519b This commit does three things:
1. The dummyWrite is only necessary for the client (!sync_ref)
   UE, since it should write dummy data for timing to the server.
2. There is a typo in one of the logs (pbch -> psbch)
3. The MAC layer is currently disabled. We should not fill the
   RX_IND since it is not even allocated. Later we can re-enable
   this code.
2023-01-05 11:23:22 -08:00
francescomani
0d8a1327b0 remove ss0 and cset 0 from config file 2023-01-04 09:25:11 +01:00
Melissa
385243f521 Merge branch 'episys/validated-tx-on-rfsim' into 'episys/master-sl'
Updating hexdumps for debugging

See merge request aburger/openairinterface5g!165
2023-01-03 19:54:32 +00:00
Melissa
0453ef25dd Updating hexdumps for debugging 2023-01-03 19:54:32 +00:00
Melissa
a909589185 Merge branch 'episys/validated-tx-on-rfsim' into 'episys/master-sl'
TX Data Validation for RFSIM

See merge request aburger/openairinterface5g!164
2023-01-03 19:27:16 +00:00
Melissa
064b05aee8 TX Data Validation for RFSIM 2023-01-03 19:27:16 +00:00
Melissa
4f34b5f97a Merge branch 'episys/mel/preventing-overflow-during-decode' into 'episys/master-sl'
The calculation of -1/1 in decoding was buggy.

See merge request aburger/openairinterface5g!162
2022-12-20 23:58:56 +00:00
Melissa
9c2c8067ef The calculation of -1/1 in decoding was buggy. 2022-12-20 23:58:56 +00:00
Melissa
ca86a8a5ac Merge branch 'episys/mel-modifying-idft-input-output-pointer-locations' into 'episys/master-sl'
Changing the address in which the output of the IDFT starts

See merge request aburger/openairinterface5g!160
2022-12-19 19:27:59 +00:00
Melissa
4708a7d81c Changing the address in which the output of the IDFT starts 2022-12-19 19:27:59 +00:00
Melissa
1d730cd8e2 Merge branch 'episys/rotate-in-freq-domain' into 'episys/master-sl'
Rotating the txdata buffer in the freq domain

See merge request aburger/openairinterface5g!158
2022-12-14 23:33:06 +00:00
Melissa Elkadi
e20bd2edaa Rotating the txdata buffer in the freq domain 2022-12-14 15:22:08 -08:00
Melissa
fc236e4bd3 Merge branch 'episys/mel-debugging-dmrs-correl' into 'episys/master-sl'
Validate the pilot bits and suspect PSBCH channel estimation is problematic.

See merge request aburger/openairinterface5g!155
2022-12-13 23:56:03 +00:00
Melissa Elkadi
2ebef66785 Removing unnecessary change 2022-12-13 15:53:18 -08:00
Melissa Elkadi
4cd71874c0 Adding gold psbch back in to RX side 2022-12-13 15:50:27 -08:00
Melissa Elkadi
c19ffff075 Removing redundant return 2022-12-13 15:44:49 -08:00
Melissa Elkadi
1c50671296 Improved performance by resetting k every symbol 2022-12-13 15:00:41 -08:00
Melissa Elkadi
611c98f6f1 Resetting the k value seems to help channel estimation on DMRS 2022-12-13 13:46:25 -08:00
Melissa Elkadi
a66d7fcafc More whitespcae clean up 2022-12-13 13:23:27 -08:00
Melissa Elkadi
c6a972f65e More code clean up 2022-12-13 13:19:55 -08:00
Melissa Elkadi
28290c792d Clean up for MR 2022-12-13 13:13:20 -08:00
Melissa Elkadi
aa2e0319d0 Adding uncommented code and update to match Ejaz 2022-12-13 11:32:11 -08:00
Melissa Elkadi
0cce63fae9 Code clean up and running DMRS correlation on all PSBCH symbols 2022-12-13 11:21:44 -08:00
Melissa Elkadi
f4bd344b9b This commit has several changes (some hacks) that result in correct first 3 PSBCH decoding
The changes include:
1. The last argument in nr_slot_fep_init_sync() is the
   ssb_offset. This offset was shifting the rxdata buffer
   by PSS location (2368) - # prefix samples (144) = 2224.
   This offset was causing the first PSBCH to be missed and
   the other symbols to be shifted. Now, by setting this
   offset argument to 0, the shift is 144, 144+2048, 144+2048*2, etc.

2. The estimateSz fed to the nr_psbch_channel_estimation should
   be the number of symbols per slot * ofdm sym size * sizeof(int).

3. The nb_prefix_samples was not matching between the TX and RX side.
   The first cp_size is nb_prefix_samples if sync is 0.

Lastly, we can only correlate with the first 3 PSBCH symbols.
Meaning, the 0th, 5th, and 6th symbol index in the SSB.. Not sure why.
2022-12-09 13:45:31 -08:00
Melissa Elkadi
565f6e13b0 Merge branch 'episys/nr_initial_sync_ota_test' into episys/mel-debugging-dmrs-correl 2022-12-09 11:33:05 -08:00
Melissa Elkadi
30e6cc01c6 Hacked the psbch reception in nr_sl_initial_sync without DMRS correlation... and it works! 2022-12-09 11:27:44 -08:00
Melissa Elkadi
f9f8e21b55 Applying rotation to time domain of txdata instead of freq domain 2022-12-09 11:20:55 -08:00
Melissa Elkadi
bb1699e4d6 In this commit, we validated the first set of pilot bits.
The nr_psbch_dmrs_rx() is able to properly generate the
pilot bits used in the PSBCH correaltion. It seems that the
RXdataF is not properly aligned and we cannot correlate
with the pilot bits
2022-12-09 10:29:35 -08:00
Melissa Elkadi
853f2737a4 Reverting incorrect change 2022-12-09 08:24:57 -08:00
Melissa Elkadi
7f3242a2b4 Merge branch 'episys/nr_initial_sync_ota_test' into episys/mel-debugging-dmrs-correl 2022-12-09 08:08:38 -08:00
Melissa Elkadi
f2e678375b Clean up of nr_psbch_detection 2022-12-09 08:03:34 -08:00
David Kim
6444ee9aee Changed dmrs signal index in psbch. 2022-12-08 20:07:43 -08:00
Melissa
5fc0e53cc8 Merge branch 'nr_sl_phy_2' into 'episys/master-sl'
SSS synch working

See merge request aburger/openairinterface5g!154
2022-12-09 00:35:30 +00:00
Melissa Elkadi
147b5af7fe Fixing small whitespace changes and re-assignment of rxdataF 2022-12-08 16:33:43 -08:00
Melissa Elkadi
fa5fb4e49b Cleaning up rx_sss_sl_nr() 2022-12-08 16:29:22 -08:00
Melissa Elkadi
d98f09825f Cleaning up pss_sl_ch_est_nr() 2022-12-08 16:14:15 -08:00
Melissa Elkadi
74c075a751 Cleaning up pss_sss_sl_extract_nr() 2022-12-08 16:07:21 -08:00
Melissa Elkadi
f6815c381a Cleaning up nr_sl_initial_sync() 2022-12-08 15:56:43 -08:00
Prashanth Saidu
7268877512 formatting nr_sl_initial_sync 2022-12-08 15:35:23 -08:00
Prashanth Saidu
9114cd36cd Reverting Correlation threshold to 30K from 60K as results are better at 30K 2022-12-08 14:02:21 -08:00
Prashanth Saidu
530a5a3f01 Cleanup pss_sl_ch_est_nr 2022-12-08 13:46:11 -08:00
Prashanth Saidu
1a9148ae2f Cleaning upnr_sl_initial_sync 2022-12-08 13:23:25 -08:00
Prashanth Saidu
e74d9c8aea Cleaning up pss_sss_sl_extract_nr 1 2022-12-08 11:15:21 -08:00
Prashanth Saidu
662d453bf5 Cleaning up pss_sss_sl_extract_nr 2022-12-08 11:12:49 -08:00
Prashanth Saidu
00885ccfd6 Calling nr_psbch_detection() instead of nr_pbch_detection 2022-12-08 10:55:41 -08:00
Prashanth Saidu
2e17b65004 Removing ref to Nid_cell and adjusting correlation threshold for SL 2022-12-08 08:56:15 -08:00
Prashanth Saidu
df3a7bab95 Fixing spaces in pbchsim.c 2022-12-07 15:06:02 -08:00
Ejaz AHmed
c96851dc0d Updated rx_sync in the psbchsim to handle all psbch symbols 2022-12-07 13:27:04 -08:00
Prashanth Saidu
8c528798ad Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-12-07 12:49:22 -08:00
Ejaz AHmed
c065dc89bb Merge branch 'episys/master-sl' into episys/nr_initial_sync_wplan 2022-12-07 10:45:51 -08:00
Prashanth Saidu
f339b8b1e7 Fixed SSS correlation 2022-12-07 10:16:18 -08:00
Melissa
24cec4d5ba Merge branch 'episys/changed_phy_parameters' into 'episys/master-sl'
Changed PHY parameters in psbchsim

See merge request aburger/openairinterface5g!153
2022-12-06 23:32:19 +00:00
Ejaz AHmed
0d769760fd Changed PHY parameters in psbchsim 2022-12-06 12:18:50 -08:00
Robert Schmidt
4412a2d318 Set t-Reordering to 100ms to prevent packet loss 2022-12-06 10:22:02 +01:00
Prashanth Saidu
8fb5f5a350 Updated SSS unit test 2022-11-18 11:40:10 -08:00
Ejaz Ahmed
9ffc7359b4 Merge branch 'episys/pss_sync' into 'episys/master-sl'
Some of the rx side functions updated to enable pss initial synchronization

See merge request aburger/openairinterface5g!151
2022-11-18 17:45:40 +00:00
Ejaz Ahmed
e6d200befe Some of the rx side functions updated to enable pss initial synchronization 2022-11-18 17:45:39 +00:00
Prashanth Saidu
e079c43485 Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-11-18 08:49:36 -08:00
Prashanth Saidu
5f200844a4 updated log vectors for SSS and PSS 2022-11-18 08:48:26 -08:00
Melissa
6a4aa58c2e Merge branch 'episys/mel-new-pss-tests' into 'episys/master-sl'
Adding Sidelink PSS and SSS Tests into the PSBCH Simulator.

See merge request aburger/openairinterface5g!150
2022-11-18 16:46:12 +00:00
Melissa Elkadi
679bcc4365 Updating white space 2022-11-18 08:45:45 -08:00
Melissa Elkadi
9f056450d6 Freeing allocated memory regardless of PSS/SSS mode or PSBCH sim mode.
Also, reverting UE->common_vars.eNb_id == pss_sequence_number
comparison for *now* until we merge in updated PSS and SSS
code. In which case, it will be:
UE->common_vars.N2_id == pss_sequence_number
2022-11-18 05:58:22 -08:00
Prashanth Saidu
27994e444d Removing a debug while(1) 2022-11-17 16:10:19 -08:00
Melissa Elkadi
9d11486431 Updating the code to support PSS SL changes 2022-11-17 14:06:32 -08:00
Prashanth Saidu
e6ed641079 SSS metric is lower than floor, needs to be fixed 2022-11-17 13:00:51 -08:00
Melissa Elkadi
99bdc94279 Updating pss_test boolean to be named properly 2022-11-17 09:59:02 -08:00
Melissa Elkadi
a86559bdce Adding sss sl test into the simulator.
The new nr_sss_sl_test.c/h files are used
for the SSS test. These files are simplified
versions of the pss_tests that already exist.

Now that these tests are able to be compiled
and ran, they should explicitly call the SL
specific SSS functions
2022-11-17 09:54:05 -08:00
Melissa Elkadi
971bb3bfc0 Code clean up 2022-11-16 13:56:45 -08:00
Melissa Elkadi
c387aa0f0d Adding pss sl test into the simulator.
The new nr_pss_sl_test.c/h files are used
for the PSS test. These files are simplified
versions of the pss_tests that already exist.

Now that these tests are able to be compiled
and ran, they should explicitly call the SL
specific PSS functions.
2022-11-16 13:44:19 -08:00
Prashanth Saidu
10ec942d67 Enabing nr_sl_initial_sync 2022-11-16 11:31:42 -08:00
Prashanth Saidu
91338a7439 Updated NID SL macro to use Nid_SL 2022-11-16 10:50:49 -08:00
Prashanth Saidu
a5ff057b69 Updated GET_NID macros 2022-11-16 10:38:50 -08:00
Melissa Elkadi
d04291d66d Revert "Merge branch 'episys/master-sl' of gitlab.int-episci.com:aburger/openairinterface5g into episys/master-sl"
This reverts commit 4b9bc61748, reversing
changes made to 12f240c7e5.
2022-11-16 09:49:23 -08:00
Melissa Elkadi
4b9bc61748 Merge branch 'episys/master-sl' of gitlab.int-episci.com:aburger/openairinterface5g into episys/master-sl 2022-11-16 09:30:33 -08:00
Prashanth Saidu
a0a0e32f68 Fixed GET_NID1_SL computation 2022-11-16 08:47:31 -08:00
Prashanth Saidu
8167d64bcb Updated computation of Nid1, Nid2 2022-11-15 12:24:18 -08:00
Prashanth Saidu
e6b101d7da Update SSS with 2nd SSS symnbol computations 2022-11-14 20:02:28 -08:00
Prashanth Saidu
3689def55f Added PSS and SSS sync for Side Link 2022-11-14 09:55:31 -08:00
Prashanth Saidu
a8c79ebf3b Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-11-11 12:31:13 -08:00
Melissa
12f240c7e5 Merge branch 'episys/david/sl_param_and_channel_update' into 'episys/master-sl'
Sidelink Parameter and Channel index update.

See merge request aburger/openairinterface5g!149
2022-11-11 18:19:52 +00:00
Deokseong "David" Kim
e1fc0a4d6b Sidelink Parameter and Channel index update. 2022-11-11 18:19:52 +00:00
Prashanth Saidu
1c602f0e92 Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-11-07 05:46:16 -08:00
Melissa Elkadi
f5ad65cd2e Using the working polar_decoder instead of polar_decode_int16 2022-11-04 17:46:50 -07:00
Deokseong "David" Kim
4fe865a30f Merge branch 'episys/debug_psbchsim' into 'episys/master-sl'
Changed the number of dmrs RE per symbol in psbch.

See merge request aburger/openairinterface5g!147
2022-11-04 23:40:15 +00:00
Ejaz AHmed
4ba390adfc Changed the number of dmrs RE per symbol in psbch. 2022-11-04 16:20:50 -07:00
Prashanth Saidu
ebfa50dce4 Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-11-04 11:20:05 -07:00
Deokseong "David" Kim
3d1631a673 Merge branch 'episys/develop-sl' into 'episys/master-sl'
PSBCH simulator parameter update.

See merge request aburger/openairinterface5g!146
2022-11-04 18:13:24 +00:00
David Kim
7ea1501058 PSBCH simulator parameter update. 2022-11-04 11:02:47 -07:00
Deokseong "David" Kim
6fe163f4c4 Merge branch 'nr_sl_phy_2' into 'episys/master-sl'
Updates to PSBCH DMRS Tx

See merge request aburger/openairinterface5g!145
2022-11-04 16:40:33 +00:00
Prashanth
38cccc73f0 Updates to PSBCH DMRS Tx 2022-11-04 16:40:32 +00:00
Prashanth Saidu
75d0b6116e Removing DMRS mod_count check to let complete DMRS generation 2022-11-03 21:31:56 -07:00
Melissa
acb3a50768 Merge branch 'mel-debugging-psbchsim' into 'episys/master-sl'
Fixing for loop indices for PSBCH

See merge request aburger/openairinterface5g!144
2022-11-04 00:02:40 +00:00
Melissa Elkadi
e51ce1d232 Removing DEBUG_PSBCH definition 2022-11-03 17:02:26 -07:00
Melissa Elkadi
e23e81425c Fixing for loop indices for PSBCH 2022-11-03 17:00:01 -07:00
Melissa
14234e9eca Merge branch 'episys/david/updating_psbch_rx_side' into 'episys/master-sl'
Updating psbch rx side

See merge request aburger/openairinterface5g!143
2022-11-03 23:20:33 +00:00
Deokseong "David" Kim
5dd561743e Updating psbch rx side 2022-11-03 23:20:33 +00:00
Prashanth Saidu
264ab2ddd2 Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-11-03 16:18:58 -07:00
Melissa
1e3932fbe1 Merge branch 'debugging-polar-encoding' into 'episys/master-sl'
HACKY change for NR_POLAR_PSBCH_E.

See merge request aburger/openairinterface5g!142
2022-11-03 22:43:41 +00:00
Melissa Elkadi
51b8271ee9 HACKY change for NR_POLAR_PSBCH_E.
This is going to be a long explaination. The spec says
for polar encoding that N = 512 (input size) - 2^9,
K = 56, and E (encoded size) = 1782. However, the interleaver
will break 512 into 16, 32 bit sections. These 16 sections
are moved around to form the interleaved input. Then
the code does something else and basically, every 16th
bit is modified (or important) and triggers the mingroupsize
to be 16. The mingroupsize is calculated in a for loop and
starts from 0->16 and then resets again at 0. However, the
E size if 1782, which is not divisible by 16, will make
minigroupsize end at 6 (it is incremented until the special
character is found at index 16). The hack is to just
make 1782 large enough so the last bit is found, so we change
it to size 1792.
2022-11-03 15:36:03 -07:00
Prashanth Saidu
c6d13e8d73 Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-11-03 14:35:52 -07:00
Melissa
8a8c5275b0 Merge branch 'episys/convert_payload_to_nrue' into 'episys/master-sl'
Created psbch_nr_sl; Added nr_generated_sl_psbch() function

See merge request aburger/openairinterface5g!141
2022-11-03 20:11:24 +00:00
Ejaz Ahmed
a884e37625 Created psbch_nr_sl; Added nr_generated_sl_psbch() function 2022-11-03 20:11:23 +00:00
Prashanth Saidu
dc84deafea merge to master-sl 2022-11-03 11:38:36 -07:00
Melissa
23adfc132a Merge branch 'update-psbchsim-mode2' into 'episys/master-sl'
Moving nr_sl_common_signal_procedures to nr_psbch.c temporarily

See merge request aburger/openairinterface5g!140
2022-11-03 17:47:15 +00:00
Melissa Elkadi
be8bed3602 Fixing white space and adding new dmrs gen file to UE 2022-11-03 10:45:47 -07:00
Melissa Elkadi
a8cb993e56 This commit moves the DMRS symbol generation to the UE side
In this commit, the code properly builds and is able to
(somehow) generate non-zero values into the txdata buffer.
2022-11-03 10:40:51 -07:00
Melissa Elkadi
43da8296cf Moving nr_sl_common_signal_procedures to nr_psbch.c temporarily
Currently, the psbchsim will build and run correctly without
linking errors. Several solutions have been tried unsuccessfully.
Now that we have a working version, we will save these changes
and try a few more logical places to put this
2022-11-03 10:17:48 -07:00
Melissa
3462053a08 Merge branch 'update-psbchsim-mode2' into 'episys/master-sl'
Moving psbchsim to be only UE dependent

See merge request aburger/openairinterface5g!139
2022-11-03 01:07:53 +00:00
Melissa Elkadi
5e21c904ae This commit adds assert fatals and code clean up 2022-11-02 18:01:50 -07:00
Melissa Elkadi
26395fa2c2 Merge branch 'episys/master-sl' into update-psbchsim-mode2 2022-11-02 16:52:59 -07:00
Melissa
f62ea2b3e0 Merge branch 'adding_sl_common_signal_procedures' into 'episys/master-sl'
Adding sl common signal procedures

See merge request aburger/openairinterface5g!138
2022-11-02 23:52:13 +00:00
Deokseong "David" Kim
f70097d9c9 Adding sl common signal procedures 2022-11-02 23:52:13 +00:00
Melissa Elkadi
47c400da03 Adding hex dumps for debugging tx payloads 2022-11-02 15:59:24 -07:00
Melissa Elkadi
a01a5f06ed Moving psbchsim to be only UE dependent
Also, this commit includes removing the NR_txUE_PSBCH
struct members into the NR_UE_PSBCH struct. At this point,
I cannot see a reason for a seprate struct. Especially
since the NR_txUE_PSBCH is not declared within the PHY_VARS_UE
scope so it is not accessible by the UE PHY layer global
anyways.

Additionally, the changes in psbchsim will allow the
UE to be used instead of the gNB. It configures the
frame parameters and should allocate memory for the
tx and rx buffers used in SL.
2022-11-02 15:50:43 -07:00
Melissa
d8a53795fe Merge branch 'nr_sl_phy_2' into 'episys/master-sl'
NR SL PHY updates 1

See merge request aburger/openairinterface5g!137
2022-11-02 21:08:41 +00:00
Prashanth
42991ff0ca NR SL PHY updates 1 2022-11-02 21:08:40 +00:00
Melissa
087318f333 Merge branch 'new-sl-file-creation' into 'episys/master-sl'
UE frame parameter configuration

See merge request aburger/openairinterface5g!136
2022-11-02 21:06:59 +00:00
Ejaz Ahmed
c2c574f153 UE frame parameter configuration 2022-11-02 21:06:59 +00:00
Prashanth Saidu
96b7930292 Update log for ssb_start_symbol 2022-11-02 13:55:46 -07:00
Prashanth Saidu
789b639bbe removing gNB arguments in SL PSBCH DMRS 2022-11-02 13:49:00 -07:00
Prashanth Saidu
7b5eb7e1b7 SSS PSS deleting gNB arguments 2022-11-02 13:39:45 -07:00
Prashanth Saidu
04d35e8d7e Updating Nid ops from 335 to 336 2022-11-02 13:26:03 -07:00
Prashanth Saidu
bef8362087 Updated Nid for LS SSS 2022-11-02 13:12:27 -07:00
Prashanth Saidu
d80ba9b649 increasing pilot size to accommodate for new size 2022-11-02 12:59:15 -07:00
Prashanth Saidu
fdd75c4a36 moved sl sss generation to separate file 2022-11-02 10:30:52 -07:00
Prashanth Saidu
31beafbd04 Merge branch 'episys/master-sl' into nr_sl_phy_2 2022-11-02 09:56:59 -07:00
Melissa
b203c79d87 Merge branch 'new-sl-file-creation' into 'episys/master-sl'
Adding sidelink functions and files

See merge request aburger/openairinterface5g!135
2022-11-02 01:26:02 +00:00
Melissa Elkadi
18188b6f39 Updating white space 2022-11-01 18:25:08 -07:00
Melissa Elkadi
3e8ad6e26c Updating white space 2022-11-01 18:23:12 -07:00
Melissa Elkadi
6ef808cae1 Updating cmake cache to be correct 2022-11-01 18:20:13 -07:00
Melissa Elkadi
bc2fe3db05 Fixing build and white space errors
A few gNB items were added back into psbchsim to ensure it successfully builds
2022-11-01 18:17:43 -07:00
Prashanth Saidu
400447825a Using psbch sources 2022-11-01 17:59:17 -07:00
Prashanth Saidu
75f52cef4a Added SL_PSBCH to use UE instead of gNb 2022-11-01 17:38:39 -07:00
Melissa Elkadi
4bec2f496d Merge branch 'episys/master-sl' into new-sl-file-creation 2022-11-01 17:27:22 -07:00
Melissa Elkadi
39c6b07820 Defined nr_sl_generate_pss in UE PHY procedures 2022-11-01 17:22:01 -07:00
Melissa
f2cf9f0bd1 Merge branch 'episys/david/porting_nr_sl_generate_pss' into 'episys/master-sl'
Porting nr sl generate pss

See merge request aburger/openairinterface5g!134
2022-11-02 00:17:52 +00:00
Deokseong "David" Kim
38b1b41682 Porting nr sl generate pss 2022-11-02 00:17:51 +00:00
Melissa
68638ae67c Merge branch 'episys/david/adding_phy_procedures_nrUE_SL_TX' into 'episys/master-sl'
Adding phy procedures nr ue sl tx

See merge request aburger/openairinterface5g!133
2022-11-01 23:54:18 +00:00
Deokseong "David" Kim
9000f91f7e Adding phy procedures nr ue sl tx 2022-11-01 23:54:17 +00:00
Prashanth Saidu
46b1cf6dc9 Updated SL functions for Rx 2022-11-01 16:01:11 -07:00
Prashanth Saidu
a74d7fa54f Changed to support PSS for Side Link. 2022-11-01 12:03:02 -07:00
Melissa Elkadi
cdec2dd204 Temporarily using Lmax == 4 for SL 2022-11-01 10:51:59 -07:00
Melissa Elkadi
f98be66eda Updating generat dmrs for psbch 2022-11-01 10:31:27 -07:00
Melissa Elkadi
af5c062638 Updating assert fatals 2022-11-01 10:08:19 -07:00
Melissa Elkadi
6ca28a9931 Removing warnings and calling nr_sl_initial_sync in nr_psbchsim 2022-11-01 08:32:10 -07:00
Melissa Elkadi
ce10596a13 Merge branch 'episys/master-sl' into new-sl-file-creation 2022-11-01 08:19:59 -07:00
Melissa Elkadi
d9a8108a15 Adding sidelink files and structs.
The purpose of this commit is to:
1. Stop using NR functions for SL functions
2. Removing SL functions from NR functions
3. Creating new #define SL values rather than just changing NR #defines
4. Creating new psbchsim.c (which fails)
5. Adding AssertFatals and code clean up

The next steps include:
- Implementing initial_sync for SL
- Validating that the SL values are correct
- Getting psbchsim.c to pass
2022-11-01 08:18:55 -07:00
Melissa Elkadi
1b5005277c Conducting more code clean up and fixing warnings
Also, I have started to add the psbchsim.c.
The next fix should be to update all pbch members
to be psbch.
2022-11-01 06:47:02 -07:00
Melissa Elkadi
ee9b35bec7 Fixing white space 2022-10-31 18:31:25 -07:00
Prashanth Saidu
d82ab58c24 Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-31 18:29:57 -07:00
Prashanth Saidu
dbcc558f04 Support for SL id on SSS 2022-10-31 18:26:52 -07:00
Prashanth Saidu
54f8add2de Support for SL PSS, SSS on Rx 2022-10-31 18:04:37 -07:00
Melissa Elkadi
6e11362b75 Code clean up and adding more assertions 2022-10-31 17:02:13 -07:00
Prashanth Saidu
59310feb4b updated psbch_e size for scrambling 2022-10-31 13:41:05 -07:00
Melissa Elkadi
8017cb16f3 More code clean up and error checking 2022-10-29 13:35:59 -07:00
Melissa Elkadi
be32f71b1a Updating AssertFatal logs and adding a few more 2022-10-29 13:24:09 -07:00
Melissa Elkadi
193720a376 Adding assert fatals and more code clean up 2022-10-29 13:19:24 -07:00
Melissa Elkadi
865dd7984d Code clean up
This commit consists of simple white space changes,
function alignment and moving local variable declarations
near the first usage.
2022-10-29 13:02:06 -07:00
Prashanth Saidu
d31d050dd5 added psbch ch estimate 2022-10-28 12:36:38 -07:00
Melissa
3ae4e95775 Merge branch 'episys/david/sidelink_thread_update' into 'episys/master-sl'
Episys/david/sidelink thread update

See merge request aburger/openairinterface5g!132
2022-10-28 18:23:20 +00:00
Deokseong "David" Kim
1450ffd015 Episys/david/sidelink thread update 2022-10-28 18:23:20 +00:00
Melissa
0ff5045410 Merge branch 'episys/sidelink_preconfig' into 'episys/master-sl'
Implemented required sidelink preconfigurations, SLSS and MIB-SL for NR

See merge request aburger/openairinterface5g!131
2022-10-28 18:13:30 +00:00
Ejaz Ahmed
e6a68d8cf2 Implemented required sidelink preconfigurations, SLSS and MIB-SL for NR 2022-10-28 18:13:29 +00:00
Prashanth Saidu
a093745aa1 updated psbch ch level and compensation 2022-10-27 15:36:00 -07:00
Prashanth Saidu
0af95f24fc updated PSBCH sizes 2022-10-27 13:39:13 -07:00
Prashanth Saidu
6d1462712c added psbch_dmrs_rx 2022-10-27 11:32:53 -07:00
Prashanth Saidu
048782bbec updated nr_psbch_extract 2022-10-27 08:47:01 -07:00
Prashanth Saidu
7397fca459 added nr_rx_psbch 2022-10-26 12:55:59 -07:00
Prashanth Saidu
3dfb02e876 added ssb frame plus rx functions 2022-10-26 12:06:37 -07:00
Melissa
7e31ec9994 Merge branch 'episys/david/adding_sync_ref_flag' into 'episys/master-sl'
Added sync_ref flag in command line argument to specify SyncRef UE.

See merge request aburger/openairinterface5g!130
2022-10-21 00:25:28 +00:00
Deokseong "David" Kim
594811b9e6 Added sync_ref flag in command line argument to specify SyncRef UE. 2022-10-21 00:25:27 +00:00
Deokseong "David" Kim
c18da15703 Merge branch 'episys/master-sl-cleanup' into 'episys/master-sl'
Fixing camel case vs. underscores to be consistent

See merge request aburger/openairinterface5g!129
2022-10-20 16:48:26 +00:00
Melissa Elkadi
c7c30d26b5 Cleaning up white space 2022-10-20 06:30:07 -07:00
Melissa Elkadi
b2cf3f5270 Fixing camel case vs. underscores to be consistent 2022-10-19 16:55:06 -07:00
Melissa
1ebc4643e9 Merge branch 'episys/david/sidelink_thread_creation' into 'episys/master-sl'
Added sidelink sync flags to check sync status.

See merge request aburger/openairinterface5g!127
2022-10-19 23:09:51 +00:00
David Kim
e77818daf8 Added sidelink sync flags to check sync status. 2022-10-19 13:50:07 -07:00
Melissa
eb6068cc1f Merge branch 'episys/david/adding_SL_thread_placeholder' into 'episys/master-sl'
Added Sidelink thread placeholder.

See merge request aburger/openairinterface5g!126
2022-10-18 19:39:34 +00:00
Deokseong "David" Kim
fbec6c1261 Added Sidelink thread placeholder. 2022-10-18 19:39:34 +00:00
Melissa
2b05e90a57 Merge branch 'nr_sl_phy' into 'episys/master-sl'
Support for Side Link PSBCH Tx and Rx.

See merge request aburger/openairinterface5g!125
2022-10-12 00:23:05 +00:00
Prashanth Saidu
028166428d Fixed MR comments 2022-10-11 17:21:48 -07:00
Prashanth Saidu
fccae8a158 Fixed MR comments 2022-10-11 17:17:29 -07:00
Prashanth Saidu
9e8f3f8c67 Fixing MR comments 2022-10-11 17:11:59 -07:00
Prashanth Saidu
5886bb2b6a Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 17:03:03 -07:00
Prashanth Saidu
a999ce41ce Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 17:02:35 -07:00
Prashanth Saidu
d911c83c56 Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 16:59:59 -07:00
Prashanth Saidu
471df37f73 Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 16:59:43 -07:00
Prashanth Saidu
fab708d74e Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 14:02:42 -07:00
Prashanth Saidu
96583ee109 Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 14:02:24 -07:00
Prashanth Saidu
d3dd8af4cc Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 13:16:25 -07:00
Prashanth Saidu
f9642228af Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 13:16:04 -07:00
Prashanth Saidu
7a30b607e5 Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 13:13:16 -07:00
Prashanth Saidu
042b9e3c85 Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 13:12:48 -07:00
Prashanth Saidu
e57d62184e Merge branch 'nr_sl_phy' of gitlab.int-episci.com:aburger/openairinterface5g into nr_sl_phy 2022-10-11 12:23:26 -07:00
Prashanth Saidu
0139c38786 Merge branch 'episys/master-sl' into nr_sl_phy 2022-10-11 12:22:22 -07:00
Prashanth Saidu
81c5c06414 Merge branch 'episys/master-sl' into nr_sl_phy 2022-10-11 11:56:54 -07:00
Prashanth Saidu
8e702ad0d0 Merge branch 'develop' into episys/master-sl 2022-10-11 11:55:06 -07:00
Prashanth Saidu
8a06717f95 Merge branch 'episys/master-sl' into nr_sl_phy 2022-10-11 11:43:34 -07:00
Prashanth Saidu
123bf7e339 PSBCH Sidelink PHY Tx and Rx working, SSSB frame creation pending 2022-10-07 14:53:58 -07:00
Melissa
0bfaeac94b Merge branch 'adding-new-sl-cl-opt' into 'episys/master-sl'
Adding two new sidelink command line options

See merge request aburger/openairinterface5g!124
2022-10-05 22:29:28 +00:00
Melissa
81a2d3854b Adding two new sidelink command line options 2022-10-05 22:29:27 +00:00
Prashanth Saidu
e6bcd4e559 Added PSBCH payload with bitwise formatting 2022-10-03 16:22:52 -07:00
Prashanth Saidu
0d78000ca3 Added PSBCH payload 2022-09-27 17:05:18 -07:00
Prashanth Saidu
175579f8e2 PBCH side link phy initial version 2022-09-19 15:34:58 -07:00
Melissa Elkadi
05d2c538ea Merge branch 'episys-lte-handover' into develop 2022-09-19 11:33:21 -07:00
David Kim
28a78f02a8 Removed duplicated flag __func__ in the logging line. 2022-09-16 18:06:21 -07:00
David Kim
9de72b2e7e Merge remote-tracking branch 'eurocom/develop' into episys-lte-handover 2022-09-16 15:01:08 -07:00
David Kim
c6a892c15d Added explanations for AWGN results files. 2022-09-16 14:51:58 -07:00
David Kim
618ea544c2 Setting pdcp security mode active in LTE handover. 2022-09-16 14:02:19 -07:00
David Kim
4ed69e515e Removed return in gtp_itf.cpp to make ping work in lte mode. 2022-09-14 13:27:16 -07:00
David Kim
124715d93e Restored entity->is_gnb flag in sdap_data_ind for NR PDCP. 2022-09-12 21:44:59 -07:00
David Kim
26553dfdad Merge remote-tracking branch 'eurocom/develop' into episys-lte-handover 2022-09-12 16:26:16 -07:00
David Kim
844d683915 Updated docker-compose file to fix node-number value. 2022-09-09 17:53:48 -07:00
David Kim
47c429e8c3 Merge branch 'episys-lte-handover' of https://gitlab.eurecom.fr/oai/openairinterface5g into episys-lte-handover 2022-09-08 16:08:12 -07:00
Melissa Elkadi
33d9f68cda Merge branch 'episys-lte-handover-debugging' of gitlab.int-episci.com:aburger/openairinterface5g into episys-lte-handover-debugging 2022-09-07 17:45:39 -07:00
Melissa Elkadi
8618b6ad60 The new changes for exiting nr-softmodem properly broke NSA mode.
In this commit we are sure not to exucute PHY parameters
in emulated mode.
2022-09-07 17:44:41 -07:00
David Kim
893ca2a4cb Removed merge lines in config file. 2022-09-07 17:00:20 -07:00
David Kim
ef09160447 Update NRUE interface config in MACRLC layer.
1. Configuration file update corresponding to NRUE.
2. Compile error fix.
3. Reverting node id to new one.
2022-09-07 14:17:09 -07:00
David Kim
1ab09a6fa8 Handling of exceptional pdu size case for ULSCH Trncated BSR. 2022-09-07 11:59:00 -07:00
Melissa Elkadi
0134d8c914 First attempt to stop using configurations from L1
We need to now configure the NR UE based on MACRLC
similar to how the gNB does. This is started but not
tested in this commit. We only need to update for the
NRUE.
2022-09-07 11:52:46 -07:00
David Kim
ac0ec7b314 Merge remote-tracking branch 'eurocom/develop' into episys-lte-handover 2022-09-07 10:22:42 -07:00
Melissa Elkadi
9350e05ad6 Reverting node_number changes to show SA mode working.
However, currently 6c31639522 and
some other related changes have broken the path for getting the
MIB in emulated SA mode. The full source of these changes has not
been established. This may or may not be a big problem. It seems
that all other connections and the RA procedure are completing
properly. Therefore, we may decide not to worry about this and
simply make the assumption that the MIB configuration information
is hard coded for emulated mode and move on.
2022-09-06 18:10:27 -07:00
Melissa Elkadi
76797a5e86 Merge branch 'eurecom-develop' into episys-lte-handover 2022-09-06 12:29:02 -07:00
Melissa Elkadi
6163143cfe Merge branch 'eurecom-develop' into episys-lte-handover 2022-09-01 16:11:47 -07:00
Melissa Elkadi
60bcbb230f Reverting these changes as MR 1573 should cover them 2022-09-01 16:10:45 -07:00
Melissa Elkadi
57824f4f02 Merge branch 'eurecom-develop' into episys-lte-handover 2022-08-25 15:26:19 -07:00
David Kim
9642337729 Code cleanup. 2022-08-17 10:44:30 -07:00
Melissa Elkadi
c265a6ec6a Removing unused variables to resolve added warnings. 2022-08-17 08:27:00 -07:00
Melissa Elkadi
0558d55259 Reverting incorrect change 2022-08-17 07:44:44 -07:00
Melissa Elkadi
c2328793a3 A few more whitespace changes 2022-08-17 07:34:26 -07:00
Melissa Elkadi
e1300914da Fixing whitespace changes for MR-1642 2022-08-17 07:20:36 -07:00
Melissa Elkadi
713f6632f9 Fixing CI/CD build errors 2022-08-15 06:43:07 -07:00
Melissa Elkadi
9e8bd87501 Merge branch 'eurecom-develop' into episys-lte-handover 2022-08-12 15:59:25 -07:00
David Kim
b508ea71f8 Removed heap-use-after-free issue. 2022-08-12 10:34:09 -07:00
David Kim
be5a93b29a Removed INHIBIT_REALTIME_SCHEDULER flag. 2022-08-12 10:00:36 -07:00
David Kim
972256cd6e Code cleanup, log level reset, code location adjustment.
1. Code cleanup and format update.
2. Log level reset
3. Channel model related codes moved into NR_Packet_Drop.c or .h file.
2022-08-12 09:57:31 -07:00
David Kim
b5c2634151 Merge branch 'eurocom/develop' into episys-lte-handover 2022-08-03 14:11:26 -07:00
David Kim
992aa392a9 Adding shift in build_oai item. 2022-07-29 17:35:39 -07:00
Melissa Elkadi
6b751b2874 Merge branch 'eurecom-develop' into release-3.0 2022-07-28 16:51:55 -07:00
Deokseong "David" Kim
034b64c895 Merge branch 'episys/david/lte_handover' into 'release-3.0'
Cleaning  LTE Handover code

See merge request aburger/openairinterface5g!122
2022-07-28 23:04:12 +00:00
Deokseong "David" Kim
61a93c2374 Cleaning LTE Handover code 2022-07-28 23:04:10 +00:00
Melissa Elkadi
73c8012b52 Merge branch 'eurecom-develop' into release-3.0 2022-07-26 11:39:36 -07:00
David Kim
eca4415287 Inhibit rt scheduler in Ubuntu 20.04. 2022-06-28 17:16:00 -07:00
David Kim
a5c67fac57 Adding mimo config file 2022-06-27 19:09:28 -07:00
Melissa Elkadi
b0d1b9d44f Increasing buffer size for NSA throughput 2022-06-27 19:06:24 -07:00
Melissa Elkadi
4d7958414e This commit fixes UE to UE IP traffic
The bug fixes include, proeprly allocating
for multiple dl_config PDUs for the num_dci_options.
It also includes getting rid of a double free.
It also does not index pdu (from rx_ind) since there
is only one PDU.
It also puts frees back in the check_and_process_dci().
2022-06-24 15:48:45 -07:00
Melissa Elkadi
4d122d5d7c Costmetic change to packing/unpacking 2022-06-24 13:55:25 -07:00
Melissa Elkadi
5228c18981 Removing commented code causing incorrect pack/unpack 2022-06-24 13:05:46 -07:00
Melissa Elkadi
7b39aa61a9 Merge branch 'episys/david/channel_abstraction_on_top_of_MIMO_CSI_Reporting' of gitlab.int-episci.com:aburger/openairinterface5g into episys/david/channel_abstraction_on_top_of_MIMO_CSI_Reporting 2022-06-24 09:51:00 -07:00
David Kim
d785a95a5f Code fix to remove compile warning. 2022-06-23 16:42:33 -07:00
Melissa Elkadi
ff43319fdb TBS + 2 bug fix (not standard compliant for nFAPI header)
Also, added a return 0; for invalid PDU length in the gNB.
This is a bug. We need to understand why the PDU length is
overrun. For now, this avoids indexing past the end of pduP
pointer.
2022-06-23 13:57:19 -07:00
David Kim
4167066f04 Merge remote-tracking branch 'origin/episys/master-sa' into episys/david/channel_abstraction_on_top_of_MIMO_CSI_Reporting 2022-06-21 18:17:15 -07:00
Melissa Elkadi
61232c4557 Merge branch 'eurecom-develop' into episys/master-sa 2022-06-21 17:01:15 -07:00
Melissa Elkadi
5f8b20761b TBS + 2 bug fix (not standard compliant for nFAPI header)
Also, added a return 0; for invalid PDU length in the gNB.
This is a bug. We need to understand why the PDU length is
overrun. For now, this avoids indexing past the end of pduP
pointer.
2022-06-21 16:49:27 -07:00
David Kim
4ad9d66a3c Changed log level. 2022-06-20 18:24:08 -07:00
David Kim
5d4ad105b7 Merge remote-tracking branch 'origin/episys/master-sa' into episys/david/channel_abstraction_on_top_of_MIMO_CSI_Reporting 2022-06-20 11:56:33 -07:00
David Kim
fa8bc0b57c Updated to resolve crash when handling MAC pdus. 2022-06-20 11:26:24 -07:00
David Kim
1341cc35b9 Updated for NR traffic test. 2022-06-16 16:11:34 -07:00
Melissa Elkadi
173b4722fc Merge branch 'eurecom-develop' into episys/master-sa 2022-06-14 06:33:18 -07:00
David Kim
515093ca29 Updated SDAP setting to handle with NSA mode. 2022-06-09 10:10:17 -07:00
Melissa Elkadi
013e70d22d Bug fix in the NSA tunnel interface command
When the develop branch from OAI was merged,
the NSA tunnel interface command was was causing
a Heap-Buffer-Overflow. The filling of the buffer
was of size 500, but the memcpy in the RRC layer
was not matching the buffer size. Now, all buffer
sizes have been updated to be sufficient for the
content and are consistent.
2022-06-08 09:25:21 -07:00
David Kim
640ce7beed Updated to execute multiple UEs.
1. Introduced NR_NUM_SINR instead of NUM_SINR for NR case.
2. Extended Max number of UL PDU, Max number of RA Proc, and Max number of mobiles per gNB.
3. Changed log level to anlaysis for nsa and nr.
4. Fixed compiler warning regarding to data type in the logging of rsrp comparison.
2022-06-06 11:03:09 -07:00
Melissa Elkadi
d704dbec15 Symbol rotation not working properly.
This is a PHY function that we do not
use in our emulate-l1 mode. The previous
develop branch has broken the symbol_rotation
function, which causes the gNB to crash in
NSA mode. For now, we shunt out the functionality,
but an issue will be created in git for the
OAI team to investigate.
2022-06-03 18:07:27 -07:00
Melissa Elkadi
33989c3551 Merge branch 'eurecom-develop' into episys/master-sa 2022-06-03 18:07:13 -07:00
David Kim
6470165730 Fixed compile error when handling usim_data. 2022-06-02 21:56:34 -07:00
David Kim
fc33a75f22 Added AWGN_MIMO2x2 CDLC Bler table.
- Added env variable to refer to this bler table.
- Bler table will be chosen dynamically.
- Area code was used to select proper bler table.
2022-05-30 19:21:19 -07:00
David Kim
0645690f3d Handling edge case of channel info. 2022-05-26 18:26:44 -07:00
David Kim
e9a541a096 Updated csi structure members instead of encoding csi values. 2022-05-26 16:41:11 -07:00
David Kim
ec253251bc Merge branch 'episys/david/handover_step2_handover_execution' into episys/david/updating_MIMO_CSI_report_values 2022-05-26 13:43:30 -07:00
David Kim
ae72632b85 Merge remote-tracking branch 'origin/episys/master-sa' into episys/david/updating_MIMO_CSI_report_values 2022-05-26 13:15:42 -07:00
David Kim
b69a4aaa9b Updated rrc status and SINR value after Handover. 2022-05-25 17:43:41 -07:00
David Kim
fc56972a35 Code cleanup. 2022-05-20 16:35:28 -07:00
David Kim
f898a1724c Merge remote-tracking branch 'origin/episys/master-sa' into episys/david/handover_step2_handover_execution 2022-05-20 12:45:20 -07:00
David Kim
ef37bcf170 Updated pdcp functions to check uplink traffic.
In this commit, we confirm that uplink and downlink IP traffic is working for LTE handover.
The uplink traffic works only up to 3 Mbps, anything more it belongs to  show a lot of loss.
The downlink traffic and pings works well.
The following is additional update in this commit.

1. Used PDCP_COLL_KEY_VALUE to find key using rab_id after handover.
2. Disabled channel modeling in case of handover.
3. Updated rsrq by using rsrp.
2022-05-20 12:07:14 -07:00
David Kim
31437e3185 Updated rlc functions to check downlink traffic.
1. Downlink traffic is working.
2. Set default rlc mode to be AM even in drb case.
3. Code cleanup.
2022-05-18 19:07:07 -07:00
Melissa Elkadi
fb98755a48 Adding LOG_As back to OAI code for EpiSci tests 2022-05-18 09:12:23 -07:00
Melissa Elkadi
b2c07b620d Merge branch 'eurecom-develop' into episys/master-sa 2022-05-18 07:25:32 -07:00
David Kim
d3cda4816d Checking Msg3 size and code cleanup. 2022-05-16 11:20:05 -07:00
David Kim
8aaa384193 Updated sinr to csi to check rsrp. 2022-05-12 08:56:55 -07:00
David Kim
2eed6f18e4 Updated to use RSRP value to trigger handover. 2022-05-06 18:18:43 -07:00
David Kim
c79b681480 Added and updated config file for LTE HO.
1. Two eNB config file updated.
2. Removed lte specific node_number variable to get softmodem params.
3. Checking sfn_sf values for all eNBs.
4. Added phy_id member in phy_channel_params to identify source eNB.
2022-05-02 18:31:45 -07:00
David Kim
15b6259dcc Updated handover RACH Procedure together with code cleanup.
1. Added default case for handling actions in rrc_rlc_config_req.
2. Added a log for analysis purpose for Msg3 in rrc_eNB.
3. Handled RACH procedure to send Msg3 properly from UE.
4. Code cleanup.
2022-04-26 17:10:14 -07:00
David Kim
d3e96c6769 Updated pdcp and rlc layer config to reset for Handover.
1. Config reset in pdcp and rlc layer.
2. Adding new rb for target eNB.
3. eNB RRC layer received RRCConnectionReconfigurationComplete.
4. Need to setup further for NAS.
2022-04-22 10:07:36 -07:00
Melissa Elkadi
eef2fb907b Merge branch 'eurecom-develop' into episys/master-sa 2022-04-19 07:18:57 -07:00
Melissa Elkadi
29a68836fa Merge branch 'episys/master-sa' of gitlab.int-episci.com:aburger/openairinterface5g into episys/master-sa 2022-04-19 06:52:53 -07:00
David Kim
4b5cf91125 Added Msg4 with empty payload and received harq ack. 2022-04-18 15:58:05 -07:00
David Kim
e66640f5ab Updated ulsch_buffer for Handover Msg3.
1. Changed ulsch_buffer as static variable.
2. Swapped crnti bytes in eNB.
3. Changed status after sending Msg3 in UE.
2022-04-15 11:45:12 -07:00
David Kim
01921cf9f0 We receive the RAR and send Msg3. Fixes include:
- Properly providing crnti value to mac_rlc_status_ind() for HO (this
allowed us to be able to get the Msg3 from the RRC -> PDCP ->
RLC -> MAC). We were able to remove the hack we added in
the previous commit for BSR_Bytes.
- The unpacked rnti value from the
mobility info was saved incorrectly (bug fix)
- RX_IND and CRC_IND for msg3 crnti
had to be updated to the correct expected value.
- Currently, the ULSCH header is clearly incorrect.
- We can possibly try to call ue_get_sdu() instead.
2022-04-14 14:33:38 -07:00
David Kim
d30b232aeb Receiving RAR but sending incorrect Msg3.
- We started utilizing the HO case in the ue_get_rach
- We hacked the code to have BSR_Bytes > 0
- The BSR_Bytes is not properly set by RLC
- We then saw RAR received after shunting out RLC handling
- We are building msg3 before RAR
- We are sending "msg 3" = RX_IND after RAR
- The eNB does not like the Msg3 (It is CCCH - should be DCCH)
- The next steps are to look at why the RX is CCCH and not DCCH
- We can look at the RX we build in the UE to make sure its correct
2022-04-13 13:34:55 -07:00
David Kim
f9d93403d0 Updated preamble index for handover. 2022-04-12 17:51:27 -07:00
David Kim
2c84fdbea3 nFAPI queue reset for handover. 2022-04-07 19:05:34 -07:00
David Kim
61ebbc3403 Detach from source eNB. 2022-04-07 13:56:15 -07:00
Melissa
4d8615c4fa Merge branch 'episys/rt_sched_or_sanitizer' into 'episys/master-sa'
pthread_create and the RT scheduler together are incompatible in Ubuntu 18.04+

See merge request aburger/openairinterface5g!119
2022-04-06 22:06:41 +00:00
Melissa
55eb112ab0 pthread_create and the RT scheduler together are incompatible in Ubuntu 18.04+ 2022-04-06 22:06:40 +00:00
David Kim
9fa16cd5b9 Inactivating X2U interface. 2022-04-06 11:53:44 -07:00
Melissa Elkadi
6101792f4a Merge branch 'episys/master-sa' into episys/rt_sched_or_sanitizer 2022-04-05 14:23:16 -07:00
David Kim
b931c1b008 Updated the 4th byte value of cellIdentitys(28 bits length). 2022-04-04 16:49:34 -07:00
Melissa Elkadi
6aa1ad83a6 pthread_create and the RT scheduler together are incompatible.
When we run with the RT scheduler and the address santizer in
Ubuntu 18.04, pthread_create will hang and never create threads.
2022-04-04 14:55:50 -07:00
David Kim
634f7dc1e6 Updated to fix asn encoding error. 2022-04-04 10:44:09 -07:00
David Kim
80420d7cba Enabled ASAN log and print. 2022-04-01 15:46:23 -07:00
David Kim
b62d2fcf08 Adjusted to one udp interface. 2022-03-31 20:06:03 -07:00
David Kim
e5f851b01e Updated config file for handover. 2022-03-30 10:33:46 -07:00
David Kim
12cecf668a Enabled mreasurement report. 2022-03-25 09:47:58 -07:00
David Kim
f92a972aa5 Adjusted the delta of port numbering between eNBs. 2022-03-25 09:45:48 -07:00
David Kim
756ff02fb7 Updated eNB config for X2C in lte handover. 2022-03-23 17:42:35 -07:00
David Kim
1acb2fe894 Added additional UDP connection for handover. 2022-03-23 15:46:50 -07:00
Melissa Elkadi
4694664470 Merge branch 'eurecom-develop' into episys/master-sa 2022-03-22 16:59:25 -07:00
David Kim
10c992bb27 Added AssertFatal for operation of eNB node_number. 2022-03-22 16:03:59 -07:00
David Kim
5c443ee7a5 code cleanup when using node_number. 2022-03-22 15:56:11 -07:00
David Kim
2785c83a90 Added vnf p7 port arguement when calling configure_nfapi_vnf. 2022-03-22 15:48:56 -07:00
David Kim
a7f35bba02 code cleanup. 2022-03-22 15:43:10 -07:00
David Kim
cb5f8919e4 Fixed argument format in function. 2022-03-22 15:29:33 -07:00
David Kim
16371a8f5d Updated PDCP config for multiple eNB by using node_number.
Updated target eNB's config for nFAPI connection.
2022-03-22 13:15:58 -07:00
David Kim
98ac49f1bb Adding update from episci/master-sa. 2022-03-15 16:33:45 -07:00
David Kim
5006fd48d8 Adding one more eNB config file for LTE handover. 2022-03-15 16:23:34 -07:00
David Kim
a389eb8fd6 Function reallocation for downlink cqi value. 2022-03-09 12:21:27 -08:00
David Kim
c68640f6f7 Code cleanup by removing some added logs. 2022-03-09 12:02:56 -08:00
David Kim
2695df5f31 Updated cqi value setting. 2022-03-09 11:51:49 -08:00
David Kim
fd4dbbfb35 Updated for MIMO CSI Reporting. 2022-03-09 10:55:10 -08:00
David Kim
5902aaf138 Updated pdsch_AntennaPorts = 2. 2022-03-08 17:53:39 -08:00
David Kim
fc2ba4f4bd Removed duplicated semicolon at the end of line. 2022-03-08 17:51:23 -08:00
David Kim
d50dae5005 Cleaned code by removing logs. 2022-03-08 17:50:46 -08:00
David Kim
e883528dd1 Added zero pad in reporting PMI in nrUE. 2022-03-08 17:49:38 -08:00
David Kim
b1f721503e Added CSI report signaling with default values. 2022-03-08 17:43:09 -08:00
David Kim
c0e71341a5 Merge remote-tracking branch 'eurocom/tdd25period_for_MR' into episys/david/merge_develop 2022-03-08 11:22:18 -08:00
Melissa Elkadi
f2b9d369bd Reveting hack that was added to master-sa 2022-03-08 10:56:23 -08:00
Melissa
b1a1d1d0dd Merge branch 'error-checking-ul-tti-req' into 'episys/master-sa'
Clean up to nFAPI and error checking UL_TTI_REQ n_pdus

See merge request aburger/openairinterface5g!115
2022-03-08 16:48:53 +00:00
Melissa Elkadi
51e56f74d8 Merge remote-tracking branch 'eurecom/episys-throughput-updates-and-downlink-siso-cm' into episys/master-sa 2022-03-07 12:16:37 -08:00
Melissa Elkadi
a34ce559a4 Removing untracked/unnecessary conf files 2022-03-07 11:31:17 -08:00
Melissa Elkadi
8bf7e77b0e Merge branch 'episys-throughput-updates-and-downlink-siso-cm' into episys/master-sa
This commit includes resolutions for MR comments from OAI
2022-03-07 11:28:55 -08:00
Melissa Elkadi
7b633b141f Merge branch 'eurecom-develop' into episys/master-sa 2022-03-07 09:09:18 -08:00
Melissa Elkadi
95dbe3089e Adding min_rxtxtime to internal proxy conf file 2022-03-01 08:27:59 -08:00
Melissa Elkadi
ee2f7c8a5c Merge branch 'eurecom-develop' into episys/master-sa 2022-03-01 07:45:48 -08:00
1057 changed files with 114604 additions and 78898 deletions

View File

@@ -9,9 +9,10 @@ AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowAllArgumentsOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
@@ -44,7 +45,7 @@ BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakStringLiterals: true
ColumnLimit: 200
ColumnLimit: 132
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true

File diff suppressed because it is too large Load Diff

View File

@@ -4,8 +4,12 @@
<p align="center">
<a href="https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-OAI--Public--V1.1-blue" alt="License"></a>
<a href="https://releases.ubuntu.com/18.04/"><img src="https://img.shields.io/badge/OS-Ubuntu18-Green" alt="Supported OS"></a>
<a href="https://www.redhat.com/en/enterprise-linux-8"><img src="https://img.shields.io/badge/OS-RHEL8-Green" alt="Supported OS"></a>
<a href="https://releases.ubuntu.com/18.04/"><img src="https://img.shields.io/badge/OS-Ubuntu18-Green" alt="Supported OS Ubuntu 18"></a>
<a href="https://releases.ubuntu.com/20.04/"><img src="https://img.shields.io/badge/OS-Ubuntu20-Green" alt="Supported OS Ubuntu 20"></a>
<a href="https://releases.ubuntu.com/22.04/"><img src="https://img.shields.io/badge/OS-Ubuntu22-Green" alt="Supported OS Ubuntu 22"></a>
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL8-Green" alt="Supported OS RHEL8"></a>
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL9-Green" alt="Supported OS RELH9"></a>
<a href="https://getfedora.org/en/workstation/"><img src="https://img.shields.io/badge/OS-Fedore37-Green" alt="Supported OS Fedora 37"></a>
</p>
<p align="center">
@@ -13,10 +17,10 @@
</p>
<p align="center">
<a href="https://hub.docker.com/r/rdefosseoai/oai-enb"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/rdefosseoai/oai-enb?label=eNB%20docker%20pulls"></a>
<a href="https://hub.docker.com/r/rdefosseoai/oai-lte-ue"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/rdefosseoai/oai-lte-ue?label=LTE-UE%20docker%20pulls"></a>
<a href="https://hub.docker.com/r/rdefosseoai/oai-gnb"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/rdefosseoai/oai-gnb?label=gNB%20docker%20pulls"></a>
<a href="https://hub.docker.com/r/rdefosseoai/oai-nr-ue"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/rdefosseoai/oai-nr-ue?label=NR-UE%20docker%20pulls"></a>
<a href="https://hub.docker.com/r/oaisoftwarealliance/oai-gnb"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/oaisoftwarealliance/oai-gnb?label=gNB%20docker%20pulls"></a>
<a href="https://hub.docker.com/r/oaisoftwarealliance/oai-nr-ue"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/oaisoftwarealliance/oai-nr-ue?label=NR-UE%20docker%20pulls"></a>
<a href="https://hub.docker.com/r/oaisoftwarealliance/oai-enb"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/oaisoftwarealliance/oai-enb?label=eNB%20docker%20pulls"></a>
<a href="https://hub.docker.com/r/oaisoftwarealliance/oai-lte-ue"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/oaisoftwarealliance/oai-lte-ue?label=LTE-UE%20docker%20pulls"></a>
</p>
# OpenAirInterface License #
@@ -32,12 +36,12 @@ Please see [NOTICE](NOTICE.md) file for third party software that is included in
# Where to Start #
* [General overview of documentation](./doc/README.md)
* [The implemented features](./doc/FEATURE_SET.md)
* [How to build](./doc/BUILD.md)
* [How to run the modems](./doc/RUNMODEM.md)
More information and documentation can be found in the [doc folder](./doc).
Unfortunately, not all information is available there, and information for
Not all information is available in a central place, and information for
specific sub-systems might be available in the corresponding sub-directories.
To find all READMEs, this command might be handy:
@@ -51,52 +55,20 @@ The OpenAirInterface (OAI) software is composed of the following parts:
```
openairinterface5g
├── charts
├── ci-scripts : Meta-scripts used by the OSA CI process. Contains also configuration files used day-to-day by CI.
├── CMakeLists.txt : Top-level CMakeLists.txt for building
├── cmake_targets : Build utilities to compile (simulation, emulation and real-time platforms), and generated build files.
├── common : Some common OAI utilities, other tools can be found at openair2/UTILS.
├── doc : Contains an up-to-date feature set list and starting tutorials.
├── executables : Top-level executable source files.
├── LICENSE : License file.
├── common : Some common OAI utilities, some other tools can be found at openair2/UTILS.
├── doc : Documentation
├── docker : Dockerfiles to build for Ubuntu and RHEL
├── executables : Top-level executable source files (gNB, eNB, ...)
├── maketags : Script to generate emacs tags.
├── nfapi : Contains the NFAPI code. A local Readme file provides more details.
├── nfapi : (n)FAPI code for MAC-PHY interface
├── openair1 : 3GPP LTE Rel-10/12 PHY layer / 3GPP NR Rel-15 layer. A local Readme file provides more details.
│   ├── PHY
│   ├── SCHED
│   ├── SCHED_NBIOT
│   ├── SCHED_NR
│   ├── SCHED_NR_UE
│   ├── SCHED_UE
│   └── SIMULATION : PHY RF simulation.
├── openair2 : 3GPP LTE Rel-10 RLC/MAC/PDCP/RRC/X2AP + LTE Rel-14 M2AP implementation. Also 3GPP NR Rel-15 RLC/MAC/PDCP/RRC/X2AP.
│   ├── COMMON
│   ├── DOCS
│   ├── ENB_APP
│   ├── F1AP
│   ├── GNB_APP
│   ├── LAYER2/RLC/ : with the following subdirectories: UM_v9.3.0, TM_v9.3.0, and AM_v9.3.0.
│   ├── LAYER2/PDCP/PDCP_v10.1.0
│   ├── M2AP
│   ├── MCE_APP
│   ├── NETWORK_DRIVER
│   ├── NR_PHY_INTERFACE
│   ├── NR_UE_PHY_INTERFACE
│   ├── PHY_INTERFACE
│   ├── RRC
│   ├── UTIL
│   └── X2AP
├── openair3 : 3GPP LTE Rel10 for S1AP, NAS GTPV1-U for both ENB and UE.
│   ├── COMMON
│   ├── DOCS
│   ├── GTPV1-U
│   ├── M3AP
│   ├── MME_APP
│   ├── NAS
│   ├── S1AP
│   ├── SCTP
│   ├── SECU
│   ├── TEST
│   ├── UDP
│   └── UTILS
├── radio : drivers for various radios such as USRP, AW2S, RFsim, ...
└── targets : Top-level wrappers for unitary simulation for PHY channels, system-level emulation (eNB-UE with and without S1), and realtime eNB and UE and RRH GW.
├── openshift : OpenShift helm charts for some deployment options of OAI
├── radio : Drivers for various radios such as USRP, AW2S, RFsim, ...
└── targets : Some configuration files; only historical relevance, and might be deleted in the future
```

View File

@@ -36,7 +36,6 @@ pipeline {
label nodeExecutor
}
options {
disableConcurrentBuilds()
timestamps()
gitLabConnection('OAI GitLab')
ansiColor('xterm')
@@ -385,27 +384,66 @@ pipeline {
}
}
}
//avra is offline, re-enable once it is available
//stage ("T1-Offload-Test") {
// when { expression {do5Gtest} }
// steps {
// script {
// triggerSlaveJob ('RAN-T1-Offload-Test', 'T1-Offload-Test')
// }
// }
// post {
// always {
// script {
// finalizeSlaveJob('RAN-T1-Offload-Test')
// }
// }
// failure {
// script {
// currentBuild.result = 'FAILURE'
// }
// }
// }
//}
stage ("LTE-TDD-2x2-Container") {
when { expression {do4Gtest} }
steps {
script {
triggerSlaveJob ('RAN-LTE-TDD-2x2-Container', 'LTE-TDD-2x2-Container')
}
}
post {
always {
script {
finalizeSlaveJob('RAN-LTE-TDD-2x2-Container')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("SA-AW2S-CN5G") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-SA-AW2S-CN5G', 'SA-AW2S-CN5G')
}
}
post {
always {
script {
finalizeSlaveJob('RAN-SA-AW2S-CN5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("Interop-F1") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-Interop-F1', 'Interop-F1')
}
}
post {
always {
script {
finalizeSlaveJob('RAN-Interop-F1')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
}
}
stage ("DockerHub-Push") {

View File

@@ -61,7 +61,6 @@ pipeline {
label pythonExecutor
}
options {
disableConcurrentBuilds()
timestamps()
ansiColor('xterm')
lock(extra: lockResources)
@@ -155,14 +154,6 @@ pipeline {
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
@@ -207,14 +198,13 @@ pipeline {
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}"
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${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}"
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} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false

View File

@@ -1,48 +0,0 @@
#!/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
*/
// 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
def pythonExecutor = params.pythonExecutor
pipeline {
agent {
label pythonExecutor
}
stages {
stage ("gDashboard") {
steps {
script {
dir ("ci-scripts/ran_dashboard") {
//retrieve MR data from gitlab / mySQL db, build HTML pages and load them to AWS S3 bucket (configured as static web page hosting)
//deprecated method : sh returnStdout: true, script: 'python3 ran_dashboard.py'
sh returnStdout: true, script: 'python3 Hdashboard.py'
}
}
}
}
}
}

View File

@@ -55,7 +55,6 @@ pipeline {
label pythonExecutor
}
options {
disableConcurrentBuilds()
timestamps()
ansiColor('xterm')
lock(extra: lockResources)
@@ -140,12 +139,6 @@ pipeline {
allParametersPresent = false
}
if (params.ADB_IPAddress == null) {
allParametersPresent = false
}
if (params.ADB_Credentials == null) {
allParametersPresent = false
}
if (params.OC_Credentials == null) {
allParametersPresent = false
}
@@ -192,15 +185,14 @@ pipeline {
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}"
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
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}"
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} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
@@ -218,10 +210,16 @@ pipeline {
script {
dir ('ci-scripts') {
// Zipping all archived log files
sh "zip -r -qq physim_deploytest_logs_${env.BUILD_ID}.zip physim_test_logs_*/*"
sh "rm -rf physim_test_logs_*/"
if (fileExists("physim_deploytest_logs_${env.BUILD_ID}.zip")) {
archiveArtifacts artifacts: "physim_deploytest_logs_${env.BUILD_ID}.zip"
sh "mkdir test_logs"
sh "mv *.log* test_logs || true"
sh "zip -r -qq test_logs_${env.BUILD_ID}.zip *test_log*/"
sh "rm -rf *test_log*/"
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
}
if (fileExists("test_logs_CN.zip")){
sh "mv test_logs_CN.zip test_logs_CN_${env.BUILD_ID}.zip"
archiveArtifacts artifacts: "test_logs_CN_${env.BUILD_ID}.zip"
}
if (fileExists("test_results.html")) {
sh "mv test_results.html test_results-${env.JOB_NAME}.html"

View File

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

View File

@@ -61,7 +61,6 @@ pipeline {
label pythonExecutor
}
options {
disableConcurrentBuilds()
ansiColor('xterm')
lock(extra: lockResources)
}
@@ -155,13 +154,6 @@ pipeline {
allParametersPresent = false
}
if (params.ADB_IPAddress == null) {
allParametersPresent = false
}
if (params.ADB_Credentials == null) {
allParametersPresent = false
}
if (allParametersPresent) {
echo "All parameters are present"
if (eNB_AllowMergeRequestProcess) {
@@ -202,14 +194,13 @@ pipeline {
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_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']
]) {
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}"
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_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}"
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false

View File

@@ -50,7 +50,6 @@ pipeline {
label pythonExecutor
}
options {
disableConcurrentBuilds()
ansiColor('xterm')
lock(extra: lockResources)
}
@@ -150,13 +149,6 @@ pipeline {
allParametersPresent = false
}
if (params.ADB_IPAddress == null) {
allParametersPresent = false
}
if (params.ADB_Credentials == null) {
allParametersPresent = false
}
if (allParametersPresent) {
echo "All parameters are present"
if (eNB_AllowMergeRequestProcess) {
@@ -198,14 +190,13 @@ pipeline {
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_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']
]) {
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}"
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_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}"
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
@@ -220,20 +211,6 @@ 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'

View File

@@ -24,7 +24,6 @@
// Location of the python executor node shall be in the same subnet as the others servers
def pythonExecutor = params.pythonExecutor
def DataBaseHost = params.DataBaseHost
// Location of the test XML file to be run
def testXMLFile = params.pythonTestXmlFile
@@ -53,7 +52,6 @@ def StatusForDb = ""
pipeline {
agent {label pythonExecutor}
options {
disableConcurrentBuilds()
ansiColor('xterm')
lock(extra: lockResources)
}
@@ -169,16 +167,6 @@ pipeline {
allParametersPresent = false
}
if (params.ADB_IPAddress == null) {
allParametersPresent = false
}
if (params.ADB_Credentials == null) {
allParametersPresent = false
}
if (params.DataBaseHost == "none") {
DataBaseHost = pythonExecutor
}
if (allParametersPresent) {
echo "All parameters are present"
if (eNB_AllowMergeRequestProcess) {
@@ -220,15 +208,14 @@ pipeline {
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_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.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_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}"
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_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}"
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
@@ -364,31 +351,6 @@ pipeline {
}
}
}
stage ("SQL Collect"){
when {
expression { params.DataBaseHost != "none" }
}
agent {label DataBaseHost}
steps {
script {
if (currentBuild.result=='FAILURE') {StatusForDb = 'FAIL'} else {StatusForDb = 'PASS'}
sh "python3 /home/oaicicd/mysql/sql_connect.py ${JOB_NAME} ${params.eNB_MR} ${params.eNB_Branch} ${env.BUILD_ID} ${env.BUILD_URL} ${StatusForDb} ''"
}
}
}
stage ("Result Update"){
when {
expression { params.DataBaseHost != "none" }
}
agent {label DataBaseHost}
steps {
script {
dir ('ci-scripts/ran_dashboard') {
sh "python3 Hdashboard.py testevent ${params.eNB_MR} "
}
}
}
}
}
}
}

View File

@@ -63,7 +63,6 @@ pipeline {
label pythonExecutor
}
options {
disableConcurrentBuilds()
ansiColor('xterm')
lock(extra: lockResources)
}
@@ -89,10 +88,6 @@ pipeline {
string(name: 'EPC_Type', defaultValue: 'ltebox', description: 'EPC type: OAI or ltebox')
credentials(name: 'EPC_Credentials', defaultValue: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', credentialType: "Username with password", required: true, description: 'Credentials for EPC')
string(name: 'EPC_SourceCodePath', defaultValue: '/tmp/CI-enb', description: 'Full path of EPC source code')
//ADB server parameters
string(name: 'ADB_IPAddress', defaultValue: '192.168.XX.XX', description: 'IP Address of ADB server')
credentials(name: 'ADB_Credentials', defaultValue: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', credentialType: "Username with password", required: true, description: 'Credentials for ADB')
}
*/
@@ -171,13 +166,6 @@ pipeline {
allParametersPresent = false
}
if (params.ADB_IPAddress == null) {
allParametersPresent = false
}
if (params.ADB_Credentials == null) {
allParametersPresent = false
}
if (allParametersPresent) {
echo "All parameters are present"
if (eNB_AllowMergeRequestProcess) {
@@ -217,14 +205,13 @@ pipeline {
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']
]) {
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}"
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
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}"
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} --XMLTestFile=${xmlFile}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
@@ -239,27 +226,6 @@ 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}"
}
}
post {
success {
script {
termStatusArray[termUE] = true
}
}
}
}
stage('Terminate eNB') {
steps {
echo '\u2705 \u001B[32mTerminate eNB\u001B[0m'
@@ -517,13 +483,6 @@ pipeline {
// Making sure that we really shutdown every thing before leaving
failure {
script {
if ((!termStatusArray[termUE]) && (params.ADB_IPAddress != "none")) {
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}"
}
}
if (!termStatusArray[termENB]) {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']

View File

@@ -63,7 +63,6 @@ pipeline {
label pythonExecutor
}
options {
disableConcurrentBuilds()
ansiColor('xterm')
lock(extra: lockResources)
}
@@ -142,13 +141,6 @@ pipeline {
allParametersPresent = false
}
*/
if (params.ADB_IPAddress == null) {
allParametersPresent = false
}
if (params.ADB_Credentials == null) {
allParametersPresent = false
}
if (allParametersPresent) {
echo "All parameters are present"
if (eNB_AllowMergeRequestProcess) {
@@ -187,14 +179,13 @@ pipeline {
}
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password'],
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_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}"
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
sh "python3 main.py --mode=TestUE --UEIPAddress=${params.UE_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${xmlFile}"
sh "python3 main.py --mode=TestUE --UEIPAddress=${params.UE_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --XMLTestFile=${xmlFile}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false

View File

@@ -197,6 +197,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
SCA.eNBSourceCodePath=matchReg.group(1)
PHYSIM.eNBSourceCodePath=matchReg.group(1)
CLUSTER.eNBSourceCodePath=matchReg.group(1)
EPC.eNBSourceCodePath=matchReg.group(1)
elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
RAN.eNB1SourceCodePath=matchReg.group(1)
@@ -219,31 +220,21 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
EPC.SourceCodePath=matchReg.group(1)
elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE):
if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE) or re.match('OC-OAI-CN5G', matchReg.group(1), re.IGNORECASE):
EPC.Type=matchReg.group(1)
else:
sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS or OAI-Rel14-Docker)')
sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS or OAI-Rel14-Docker or OC-OAI-CN5G)')
elif re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE)
EPC.ContainerPrefix=matchReg.group(1)
elif re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE)
CiTestObj.ADBIPAddress = matchReg.group(1)
print("ignoring --ADBIPAddress parameter")
elif re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE)
CiTestObj.ADBUserName = matchReg.group(1)
print("ignoring --ADBUserName parameter")
elif re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE)
if re.match('centralized', matchReg.group(1), re.IGNORECASE) or re.match('distributed', matchReg.group(1), re.IGNORECASE):
if re.match('distributed', matchReg.group(1), re.IGNORECASE):
CiTestObj.ADBCentralized = False
else:
CiTestObj.ADBCentralized = True
else:
sys.exit('Invalid ADB Type: ' + matchReg.group(1) + ' -- (should be centralized or distributed)')
print("ignoring --ADBType parameter")
elif re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE)
CiTestObj.ADBPassword = matchReg.group(1)
print("ignoring --ADBPassword parameter")
elif re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
CiTestObj.testXMLfiles.append(matchReg.group(1))
@@ -270,14 +261,17 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
matchReg = re.match('^\-\-OCUserName=(.+)$', myArgv, re.IGNORECASE)
PHYSIM.OCUserName = matchReg.group(1)
CLUSTER.OCUserName = matchReg.group(1)
EPC.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)
EPC.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)
EPC.OCProjectName = matchReg.group(1)
elif re.match('^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE)
CLUSTER.OCUrl = matchReg.group(1)

View File

@@ -0,0 +1,183 @@
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define TDD 1
log_options: "all.level=warn,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue1.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and
allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: true,
cells: [{
rf_port: 0,
bandwidth: 20,
#if TDD == 1
band: 78,
dl_nr_arfcn:627360,
ssb_nr_arfcn:627360,
#else
band: 7,
dl_nr_arfcn: 536020,
ssb_nr_arfcn: 535930,
ssb_subcarrier_spacing: 15,
#endif
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
ue_list: [
{
/* UE capabilities */
/* USIM data */
"ue_id" : 1,
"imsi": "001010000000100",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
},
{
/* UE capabilities */
/* USIM data */
"ue_id" : 2,
"imsi": "001010000000101",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
},
{
/* UE capabilities */
/* USIM data */
"ue_id" : 3,
"imsi": "001010000000102",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, sd: 66051, }, ],
default_pdu_session_snssai: { sst: 1, sd: 66051, },
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
},
{
/* UE capabilities */
/* USIM data */
"ue_id" : 4,
"imsi": "001010000000103",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, sd: 66051, }, ],
default_pdu_session_snssai: { sst: 1, sd: 66051, },
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
},
{
/* UE capabilities */
/* USIM data */
"ue_id" : 5,
"imsi": "001010000000104",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, sd: 66051, }, ],
default_pdu_session_snssai: { sst: 1, sd: 66051, },
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
},
{
/* UE capabilities */
/* USIM data */
"ue_id" : 6,
"imsi": "001010000000105",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, sd: 66051, }, ],
default_pdu_session_snssai: { sst: 1, sd: 66051, },
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
},
{
/* UE capabilities */
/* USIM data */
"ue_id" : 7,
"imsi": "001010000000106",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, sd: 66051, }, ],
default_pdu_session_snssai: { sst: 1, sd: 66051, },
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
},
],
}

View File

@@ -0,0 +1,280 @@
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 2
#define TDD 1
log_options: "all.level=warn,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and
allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: true,
cells: [{
rf_port: 0,
bandwidth: 20,
band: 78,
dl_nr_arfcn:627360,
ssb_nr_arfcn:627360,
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
/* UE capabilities */
/* USIM data */
ue_list: [
{
"ue_id" : 1,
"imsi": "208970000000111",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 2,
"imsi": "208970000000112",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 3,
"imsi": "208970000000113",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 4,
"imsi": "208970000000114",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 5,
"imsi": "208970000000115",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 6,
"imsi": "208970000000116",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 7,
"imsi": "208970000000117",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 8,
"imsi": "208970000000118",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 9,
"imsi": "208970000000119",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 10,
"imsi": "208970000000120",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 11,
"imsi": "208970000000121",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 12,
"imsi": "208970000000122",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 13,
"imsi": "208970000000123",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 14,
"imsi": "208970000000124",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 15,
"imsi": "208970000000125",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
{
"ue_id" : 16,
"imsi": "208970000000126",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [ { sst: 1, }, ],
default_pdu_session_snssai: { sst: 1, },
tun_setup_script: "ue-ifup",
},
],
}

View File

@@ -1,172 +0,0 @@
/* UE simulator configuration */
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define TDD 1
#define CELL_BANDWIDTH 40
#define UE_COUNT 3 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue0.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: true,
cells: [{
rf_port: 0,
bandwidth: CELL_BANDWIDTH,
#if TDD == 1
band: 78,
dl_nr_arfcn:621312,
ssb_nr_arfcn:621312,
//band: 41,
//dl_nr_arfcn:517020,
//ssb_nr_arfcn:516990,
#else
band: 7,
dl_nr_arfcn: 536020,
ssb_nr_arfcn: 535930,
ssb_subcarrier_spacing: 15,
#endif
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
/* Enable it to allow sim_events to be handled remotely */
//rue_bind_addr: "127.0.10.11",
ue_list: [
{
/* UE capabilities */
/* USIM data */
"ue_id" : 0,
"imsi": "208970100001127",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
event: "power_off",
start_time: 30,
}
] /*end sim events */
}, /*end UE object 0*/
{
/* UE capabilities */
/* USIM data */
"ue_id" : 1,
"imsi": "208970100001128",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
event: "power_off",
start_time: 30,
}
] /*end sim events */
}, /*end UE object 1*/
{
/* UE capabilities */
/* USIM data */
"ue_id" : 2,
"imsi": "208970100001129",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
event: "power_off",
start_time: 30,
}
] /*end sim events */
} /*end UE object 2*/
],/*end UE list*/
}/*end json*/

View File

@@ -1,142 +0,0 @@
/* UE simulator configuration */
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define TDD 1
#define CELL_BANDWIDTH 40
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue0.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: true,
cells: [{
rf_port: 0,
bandwidth: CELL_BANDWIDTH,
#if TDD == 1
band: 78,
dl_nr_arfcn:621312,
ssb_nr_arfcn:621312,
//band: 41,
//dl_nr_arfcn:517020,
//ssb_nr_arfcn:516990,
#else
band: 7,
dl_nr_arfcn: 536020,
ssb_nr_arfcn: 535930,
ssb_subcarrier_spacing: 15,
#endif
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
/* Enable it to allow sim_events to be handled remotely */
//rue_bind_addr: "127.0.10.11",
ue_list: [
{
/* UE capabilities */
/* USIM data */
"ue_id" : 1,
"imsi": "208970100001127",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
event: "power_off",
start_time: 30,
}
] /*end sim events */
}, /*end UE object 0*/
{
/* UE capabilities */
/* USIM data */
"ue_id" : 2,
"imsi": "208970100001128",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
"tag": "ping",
"prog":"oai_ext_app.sh",
start_time: 15,
end_time: 25,
"args":["ping 192.168.70.136"],
"event":"ext_app"
},
{
event: "power_off",
start_time: 30,
}
] /*end sim events */
} /*end UE object 1*/
],/*end UE list*/
}/*end json*/

View File

@@ -1,150 +0,0 @@
/* UE simulator configuration */
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define TDD 1
#define CELL_BANDWIDTH 40
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue0.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: true,
cells: [{
rf_port: 0,
bandwidth: CELL_BANDWIDTH,
#if TDD == 1
band: 78,
dl_nr_arfcn:621312,
ssb_nr_arfcn:621312,
//band: 41,
//dl_nr_arfcn:517020,
//ssb_nr_arfcn:516990,
#else
band: 7,
dl_nr_arfcn: 536020,
ssb_nr_arfcn: 535930,
ssb_subcarrier_spacing: 15,
#endif
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
/* Enable it to allow sim_events to be handled remotely */
//rue_bind_addr: "127.0.10.11",
ue_list: [
{
/* UE capabilities */
/* USIM data */
"ue_id" : 1,
"imsi": "208970100001127",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
"tag": "ping",
"prog":"oai_ext_app.sh",
start_time: 15,
end_time: 25,
"args":["ping 192.168.70.136"],
"event":"ext_app"
},
{
event: "power_off",
start_time: 30,
}
] /*end sim events */
}, /*end UE object 0*/
{
/* UE capabilities */
/* USIM data */
"ue_id" : 2,
"imsi": "208970100001128",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
"tag": "ping",
"prog":"oai_ext_app.sh",
start_time: 15,
end_time: 25,
"args":["ping 192.168.70.136"],
"event":"ext_app"
},
{
event: "power_off",
start_time: 30,
}
] /*end sim events */
} /*end UE object 1*/
],/*end UE list*/
}/*end json*/

View File

@@ -1,150 +0,0 @@
/* UE simulator configuration */
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define TDD 1
#define CELL_BANDWIDTH 40
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue0.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: true,
cells: [{
rf_port: 0,
bandwidth: CELL_BANDWIDTH,
#if TDD == 1
band: 78,
dl_nr_arfcn:621312,
ssb_nr_arfcn:621312,
//band: 41,
//dl_nr_arfcn:517020,
//ssb_nr_arfcn:516990,
#else
band: 7,
dl_nr_arfcn: 536020,
ssb_nr_arfcn: 535930,
ssb_subcarrier_spacing: 15,
#endif
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
/* Enable it to allow sim_events to be handled remotely */
//rue_bind_addr: "127.0.10.11",
ue_list: [
{
/* UE capabilities */
/* USIM data */
"ue_id" : 1,
"imsi": "208970100001127",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
"tag": "ping",
"prog":"oai_ext_app.sh",
start_time: 20,
end_time: 30,
"args":["ping 192.168.70.136"],
"event":"ext_app"
},
{
event: "power_off",
start_time: 60,
}
] /*end sim events */
}, /*end UE object 0*/
{
/* UE capabilities */
/* USIM data */
"ue_id" : 2,
"imsi": "208970100001128",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [
{
event: "power_on",
start_time: 5,
},
{
"tag": "ping",
"prog":"oai_ext_app.sh",
start_time: 40,
end_time: 50,
"args":["ping 192.168.70.136"],
"event":"ext_app"
},
{
event: "power_off",
start_time: 60,
}
] /*end sim events */
} /*end UE object 1*/
],/*end UE list*/
}/*end json*/

View File

@@ -1,113 +0,0 @@
/* UE simulator configuration */
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define TDD 1
#define CELL_BANDWIDTH 40
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue1.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and
allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: false,
cells: [{
rf_port: 0,
bandwidth: CELL_BANDWIDTH,
#if TDD == 1
band: 78,
dl_nr_arfcn:621312,
ssb_nr_arfcn:621312,
//band: 41,
//dl_nr_arfcn:517020,
//ssb_nr_arfcn:516990,
#else
band: 7,
dl_nr_arfcn: 536020,
ssb_nr_arfcn: 535930,
ssb_subcarrier_spacing: 15,
#endif
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
/* Enable it to allow sim_events to be handled remotely */
//rue_bind_addr: "127.0.10.11",
ue_list: [
{
/* UE capabilities */
/* USIM data */
"imsi": "208970100001127",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 66051,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 66051,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [{
event: "power_on",
start_time: 5,
}, {
"tag": "ping",
"prog":"oai_ext_app.sh",
start_time: 15,
end_time: 25,
"args":["ping 192.168.70.136"],
"event":"ext_app"
},
{
event: "power_off",
start_time: 30,
}]
}
],
}

View File

@@ -1,109 +0,0 @@
/* UE simulator configuration */
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define TDD 1
#define CELL_BANDWIDTH 20
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
log_filename: "/tmp/ue0.log",
/* Enable remote API and Web interface */
com_addr: "0.0.0.0:9002",
include "rf_driver/1chan.cfg",
/* If true, allow the simulation of several UEs at the same time and
allow dynamic UE creation from remote API */
cell_groups: [{
group_type: "nr",
multi_ue: false,
cells: [{
rf_port: 0,
bandwidth: CELL_BANDWIDTH,
#if TDD == 1
// band: 78,
// dl_nr_arfcn:621312,
// ssb_nr_arfcn:621312,*/
band: 41,
dl_nr_arfcn:517020,
ssb_nr_arfcn:516990,
#else
band: 7,
dl_nr_arfcn: 536020,
ssb_nr_arfcn: 535930,
ssb_subcarrier_spacing: 15,
#endif
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: 1,
rx_to_tx_latency:2,
}],
}],
/* Enable it to allow sim_events to be handled remotely */
//rue_bind_addr: "127.0.10.11",
ue_list: [
{
/* UE capabilities */
/* USIM data */
"imsi": "208970100001127",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
as_release: 15,
ue_category: "nr",
apn:"oai",
attach_pdn_type:"ipv4",
default_nssai: [
{
sst: 1,
sd: 1,
},
],
default_pdu_session_snssai: {
sst: 1,
sd: 1,
},
/* Enable it to allow sim_events to be handled remotely */
//rue_addr: "127.1.0.0",
/* Enable it to create a TUN interface for each UE PDN */
tun_setup_script: "ue-ifup",
sim_events: [{
event: "power_on",
start_time: 5,
}, {
event: "ext_app",
start_time: 15,
end_time: 25,
prog: "ext_app.sh",
args: ["iperf", " -c 172.21.10.5", " -u"," -b 1M"," -i 1"," -t 10"]
}, {
event: "power_off",
start_time: 30,
}]
}
],
}

View File

@@ -39,10 +39,6 @@ def main():
'--ranAllowMerge=' + params['ranAllowMerge'] + ' ' + \
'--ranTargetBranch=' + params['ranTargetBranch'] + ' ' + \
\
'--ADBIPAddress=' + params['ADB']['ADBIPAddress'] + ' ' + \
'--ADBUserName=' + params['ADB']['ADBUserName'] + ' ' + \
'--ADBPassword=' + params['ADB']['ADBPassword'] + ' ' + \
\
'--UEIPAddress=' + params['UE']['UEIPAddress'] + ' ' + \
'--UEUserName=' + params['UE']['UEUserName'] + ' ' + \
'--UEPassword=' + params['UE']['UEPassword'] + ' ' + \

View File

@@ -12,12 +12,6 @@ steps:
- TesteNB,xml_files/fr1_nsa_base_next.xml #ue toggle, nodes initialize, ue toggle, ping, nodes terminate
- TesteNB,xml_files/fr1_epc_closure.xml
ADB: #on Caracal
ADBIPAddress : 172.21.16.132
ADBUserName : oaici
ADBPassword : KkexF6CErOi1fNuebCPsuIVK
RAN:
- eNBIPAddress : 192.168.18.199 #eNB on Minimassive
eNBUserName : oaicicd

55
ci-scripts/ci_ctl_adb.sh Executable file
View File

@@ -0,0 +1,55 @@
#!/bin/bash
usage() {
echo "usage: $0 <command> <id>"
echo "available commands: initialize, attach, detach, terminate, check"
}
if [ $# -ne 2 ]; then
usage
exit 1
fi
cmd=$1
id=$2
flightmode_off() {
set +x
adb -s $id shell "/data/local/tmp/on"
}
flightmode_on() {
set +x
adb -s $id shell "/data/local/tmp/off"
}
initialize() {
set +x
adb -s $id shell "svc data enable" # make sure data services are enabled
flightmode_on
}
terminate() {
echo "terminate: does nothing"
}
check() {
declare -A service=( ["0"]="IN_SERVICE" ["1"]="OUT_OF_SERVICE" ["2"]="EMERGENCY_ONLY" ["3"]="RADIO_POWERED_OFF")
declare -A data=( ["0"]="DISCONNECTED" ["1"]="CONNECTING" ["2"]="CONNECTED" ["3"]="SUSPENDED")
serv_idx=$(adb -s $id shell "dumpsys telephony.registry" | sed -n 's/.*mServiceState=\([0-3]\).*/\1/p')
data_idx=$(adb -s $id shell "dumpsys telephony.registry" | sed -n 's/.*mDataConnectionState=\([0-3]\).*/\1/p')
data_reason=$(adb -s $id shell "dumpsys telephony.registry" | sed -n 's/.*mDataConnectionReason=\([0-9a-zA-Z_]\+\).*/\1/p')
#echo "Status Check UE $id"
echo "Service State: ${service[$serv_idx]}"
echo "Data State: ${data[$data_idx]}"
echo "Data Reason: ${data_reason}"
}
case "${cmd}" in
initialize) initialize;;
attach) flightmode_off;;
detach) flightmode_on;;
terminate) terminate;;
check) check;;
*) echo "Invalid command $cmd"; usage; exit 1;;
esac

View File

@@ -33,7 +33,6 @@ import sys
import time
import serial
class qtel_ctl:
#---------------
#private methods
@@ -75,12 +74,15 @@ class qtel_ctl:
self.__set_modem_state(self.modem,'0')
if __name__ == "__main__":
#argv[1] : usb port
#argv[2] : qtel command (see function pointers dict "wup", "detach" etc ...)
command = sys.argv[2]
Module=qtel_ctl(sys.argv[1])
if len(sys.argv) >= 3:
command = sys.argv[2]
print(command)
Module=qtel_ctl(sys.argv[1])
#calling the function to be applied
Module.cmd_dict[command]()
Module.cmd_dict[command]()
print(Module.cmd_dict[command])
else:
print("To many arguments")

View File

@@ -1,106 +1,128 @@
idefix:
ID: idefix
State : enabled
Kind : quectel
Process :
Name : quectel-CM
Cmd : /home/oaicicd/quectel-CM/quectel-CM -4 -s
Apn :
ltebox : oai.ipv4
WakeupScript : ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript : ci_ctl_qtel.py /dev/ttyUSB2 detach
LogStore : /media/usb-drive/ci_qlogs
PLMN : 22201
UENetwork : wwan0
HostIPAddress : 172.21.16.135
HostUsername : oaicicd
HostPassword : oaicicd
HostSourceCodePath : none
MTU : 1500
Host: idefix
InitScript: sudo stdbuf -oL /home/oaicicd/quectel-CM/quectel-CM -4 -s oai.ipv4 &> /tmp/quectel-cm.log &
TermScript: sudo -S killall --signal SIGKILL quectel-CM
AttachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB2 detach
UENetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
Trace: True
LogStore: /media/usb-drive/ci_qlogs
nrmodule2_quectel:
ID: nrmodule2_quectel
State : enabled
Kind : quectel
Process :
Name : quectel-CM
Cmd : /home/nrmodule2/quectel-CM/quectel-CM -4 -s
Apn :
OAICN5G : oai
OAI-Rel14-Docker : oai.ipv4
WakeupScript : ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript : ci_ctl_qtel.py /dev/ttyUSB2 detach
LogStore : /media/ci_qlogs
PLMN : 20897
UENetwork : wwan0
HostIPAddress : 172.21.16.139
HostUsername : nrmodule2
HostPassword : linux
HostSourceCodePath : none
StartCommands :
- sudo -S ip link set dev wwan1 mtu 1500
MTU : 1500
Host: nrmodule2
InitScript: sudo stdbuf -oL /home/nrmodule2/quectel-CM/quectel-CM -4 -s oai.ipv4 &> /tmp/quecel-cm.log &
TermScript: sudo -S killall --signal SIGKILL quectel-CM
AttachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB2 detach
UENetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
LogStore: /media/ci_qlogs
# CAUTION: 192.168.18.89 address has to be changed when the server is moved
#single UE single ping
adb_ue_1:
Host: nano
InitScript: /home/oaicicd/ci_ctl_adb.sh initialize R3CM40LZPHT
TermScript: /home/oaicicd/ci_ctl_adb.sh terminate R3CM40LZPHT
AttachScript: /home/oaicicd/ci_ctl_adb.sh attach R3CM40LZPHT
DetachScript: /home/oaicicd/ci_ctl_adb.sh detach R3CM40LZPHT
CheckStatusScript: /home/oaicicd/ci_ctl_adb.sh check R3CM40LZPHT
DataEnableScript: adb -s R3CM40LZPHT shell "svc data enable"
DataDisableScript: adb -s R3CM40LZPHT shell "svc data disable"
UENetworkScript: adb -s R3CM40LZPHT shell "ip address show | grep rmnet_data0"
CmdPrefix: adb -s R3CM40LZPHT shell
MTU: 1500
LogStore: /media/usb-drive/ci_adb_1-logs
adb_ue_2:
Host: nano
InitScript: /home/oaicicd/ci_ctl_adb.sh initialize 5200c00db4413517
TermScript: /home/oaicicd/ci_ctl_adb.sh terminate 5200c00db4413517
AttachScript: /home/oaicicd/ci_ctl_adb.sh attach 5200c00db4413517
DetachScript: /home/oaicicd/ci_ctl_adb.sh detach 5200c00db4413517
CheckStatusScript: /home/oaicicd/ci_ctl_adb.sh check 5200c00db4413517
DataEnableScript: adb -s 5200c00db4413517 shell "svc data enable"
DataDisableScript: adb -s 5200c00db4413517 shell "svc data disable"
UENetworkScript: adb -s 5200c00db4413517 shell "ip address show | grep rmnet"
CmdPrefix: adb -s 5200c00db4413517 shell
MTU: 1500
LogStore: /media/usb-drive/ci_adb_2-logs
amarisoft_ue:
Host: amariue
InitScript: /root/NV18-06-2022/lteue-linux-2023-03-17/lteue /root/oaicicd/ran_sa_aw2s_asue/aw2s-multi-20897.cfg &
TermScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"quit"}'
amarisoft_ue_1:
ID: amarisoft_ue_1
State : enabled
Kind : amarisoft
#not required for AS config but needed for py script
WakeupScript : none
DetachScript : none
#end
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
UELog : /tmp/ue1.log
HostIPAddress : 172.21.16.144
HostUsername : root
HostPassword : toor
HostSourceCodePath : /tmp
#an other scenario example
#notice : this will not work as such, only suggestion for multi ue scenario
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":1}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":1}'
UENetworkScript: ip netns exec ue1 ip a show dev pdn0
CmdPrefix: ip netns exec ue1
MTU: 1500
amarisoft_ue_2:
ID: amarisoft_ue_2
State : enabled
Kind : amarisoft
#not required for AS config but needed for py script
WakeupScript : none
DetachScript : none
#end
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 :
- /tmp/test_ue1.log #to be updated fo an other scenario
- /tmp/test_ue2.log #could be a list for a multi ue scenario
UELog :
- /tmp/ue1.log
- /tmp/ue1.log
HostIPAddress : 192.168.18.89
HostUsername : root
HostPassword : toor
HostSourceCodePath : /tmp
#do not remove
dummy:
ID: ''
State : ''
Kind : ''
Process :
Name : ''
Cmd : ''
WakeupScript : ''
DetachScript : ''
PLMN : 22201
UENetwork : wwan0
HostIPAddress : 172.21.16.135
HostUsername : oaicicd
HostPassword : oaicicd
HostSourceCodePath : none
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":2}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":2}'
UENetworkScript: ip netns exec ue2 ip a show dev pdn0
CmdPrefix: ip netns exec ue2
MTU: 1500
amarisoft_ue_3:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":3}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":3}'
UENetworkScript: ip netns exec ue3 ip a show dev pdn0
CmdPrefix: ip netns exec ue3
MTU: 1500
amarisoft_ue_4:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":4}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":4}'
UENetworkScript: ip netns exec ue4 ip a show dev pdn0
CmdPrefix: ip netns exec ue4
MTU: 1500
amarisoft_ue_5:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":5}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":5}'
UENetworkScript: ip netns exec ue5 ip a show dev pdn0
CmdPrefix: ip netns exec ue5
MTU: 1500
amarisoft_ue_6:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":6}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":6}'
UENetworkScript: ip netns exec ue6 ip a show dev pdn0
CmdPrefix: ip netns exec ue6
MTU: 1500
amarisoft_ue_7:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":7}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":7}'
UENetworkScript: ip netns exec ue7 ip a show dev pdn0
CmdPrefix: ip netns exec ue7
MTU: 1500
amarisoft_ue_8:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":8}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":8}'
UENetworkScript: ip netns exec ue8 ip a show dev pdn0
CmdPrefix: ip netns exec ue8
MTU: 1500
amarisoft_ue_9:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":9}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":9}'
UENetworkScript: ip netns exec ue9 ip a show dev pdn0
CmdPrefix: ip netns exec ue9
MTU: 1500
amarisoft_ue_10:
Host: amariue
AttachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":10}'
DetachScript: /root/NV18-06-2022/lteue-linux-2023-03-17/doc/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":10}'
UENetworkScript: ip netns exec ue10 ip a show dev pdn0
CmdPrefix: ip netns exec ue10
MTU: 1500
oai_ue_obelix:
Host: obelix
UENetworkScript: ip a show dev oaitun_ue1
IF: oaitun_ue1

View File

@@ -40,6 +40,29 @@ import cls_cmd
IMAGE_REGISTRY_SERVICE_NAME = "image-registry.openshift-image-registry.svc"
NAMESPACE = "oaicicd-ran"
OCUrl = "https://api.oai.cs.eurecom.fr:6443"
OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
if ocUserName == '' or ocPassword == '' or ocProjectName == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter: no OC Credentials')
if OCRegistry.startswith("http") and not self.OCRegistry.endswith("/"):
sys.exit(f'ocRegistry {OCRegistry} should not start with http:// or https:// and end on a slash /')
ret = cmd.run(f'oc login -u {ocUserName} -p {ocPassword} --server {OCUrl}')
if ret.returncode != 0:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
return False
ret = cmd.run(f'oc project {ocProjectName}')
if ret.returncode != 0:
logging.error(f'\u001B[1mUnable to access OC project {ocProjectName}\u001B[0m')
OC_logout(cmd)
return False
return True
def OC_logout(cmd):
cmd.run(f'oc logout')
class Cluster:
def __init__(self):
@@ -57,7 +80,7 @@ class Cluster:
self.ranAllowMerge = False
self.ranTargetBranch = ""
self.cmd = None
self.imageToPull = ''
def _recreate_entitlements(self):
# recreating entitlements, don't care if deletion fails
@@ -170,11 +193,47 @@ class Cluster:
def _undeploy_pod(self, filename):
self.cmd.run(f'oc delete -f {filename}')
def PullClusterImage(self, HTML, RAN):
if self.imageToPull == '':
HELP.GenericHelp(CONST.Version)
HELP.EPCSrvHelp(self.imageToPull)
sys.exit('Insufficient eNB Parameters')
lIpAddr = self.eNBIPAddress
self.testCase_id = HTML.testCase_id
cmd = cls_cmd.getConnection(lIpAddr)
succeeded = OC_login(cmd, self.OCUserName, self.OCPassword, self.OCProjectName)
if not succeeded:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
return False
ret = cmd.run(f'oc whoami -t | docker login -u oaicicd --password-stdin {self.OCRegistry}')
if ret.returncode != 0:
logging.error(f'\u001B[1m Unable to access OC project {ocProjectName}\u001B[0m')
OC_logout(cmd)
cmd.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
return False
for image in self.imageToPull:
imagePrefix = f'{self.OCRegistry}{self.OCProjectName}'
imageTag = cls_containerize.ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
ret = cmd.run(f'docker pull {imagePrefix}/{imageTag}')
if ret.returncode != 0:
logging.error(f'Could not pull {image} from local registry : {self.OCRegistry}')
OC_logout(cmd)
cmd.close()
HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK)
return False
cmd.run(f'docker tag {imagePrefix}/{imageTag} oai-ci/{imageTag}')
cmd.run(f'docker rmi {imagePrefix}/{imageTag}')
OC_logout(cmd)
cmd.close()
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
return True
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 == '':
@@ -204,7 +263,6 @@ class Cluster:
baseTag = 'develop'
forceBaseImageBuild = False
imageTag = 'develop'
if self.ranAllowMerge: # merging MR branch into develop -> temporary image
imageTag = f'{self.ranBranch}-{self.ranCommitID[0:8]}'
if self.ranTargetBranch == 'develop':
@@ -214,6 +272,7 @@ class Cluster:
forceBaseImageBuild = True
baseTag = 'ci-temp'
else:
imageTag = f'develop-{self.ranCommitID[0:8]}'
forceBaseImageBuild = True
# logging to OC Cluster and then switch to corresponding project
@@ -230,6 +289,14 @@ class Cluster:
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL)
return False
# delete old images by Sagar Arora <sagar.arora@openairinterface.org>:
# 1. retrieve all images and their timestamp
# 2. awk retrieves those whose timestamp is older than 4 weeks
# 3. issue delete command on corresponding istags (the images are dangling and will be cleaned by the registry)
delete_cmd = "oc get istag -o go-template --template '{{range .items}}{{.metadata.name}} {{.metadata.creationTimestamp}}{{\"\\n\"}}{{end}}' | awk '$2 <= \"'$(date -d '-4weeks' -Ins --utc | sed 's/+0000/Z/')'\" { print $1 }' | xargs --no-run-if-empty oc delete istag"
response = self.cmd.run(delete_cmd)
logging.debug(f"deleted images:\n{response.stdout}")
self._recreate_entitlements()
status = True # flag to abandon compiling if any image fails
@@ -265,11 +332,18 @@ class Cluster:
ranbuild_job = self._start_build('ran-build')
attemptedImages += ['ran-build']
wait = ranbuild_job is not None and physim_job is not None and self._wait_build_end([ranbuild_job, physim_job], 1200)
if not wait: logging.error('error during build of ranbuild_job or physim_job')
self._recreate_is_tag('oai-clang', imageTag, 'openshift/oai-clang-is.yaml')
self._recreate_bc('oai-clang', imageTag, 'openshift/oai-clang-bc.yaml')
self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.clang.rhel8.2')
clang_job = self._start_build('oai-clang')
attemptedImages += ['oai-clang']
wait = ranbuild_job is not None and physim_job is not None and clang_job is not None and self._wait_build_end([ranbuild_job, physim_job, clang_job], 1200)
if not wait: logging.error('error during build of ranbuild_job or physim_job or clang_job')
status = status and wait
self.cmd.run(f'oc logs {ranbuild_job} &> cmake_targets/log/ran-build.log')
self.cmd.run(f'oc logs {physim_job} &> cmake_targets/log/oai-physim.log')
self.cmd.run(f'oc logs {clang_job} &> cmake_targets/log/oai-clang.log')
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
if status:

View File

@@ -31,11 +31,21 @@ import subprocess as sp
import os
import paramiko
import uuid
import sys
SSHTIMEOUT=7
# helper that returns either LocalCmd or RemoteCmd based on passed host name
def getConnection(host, d=None):
if host is None or host.lower() in ["", "none", "localhost"]:
return LocalCmd(d=d)
else:
return RemoteCmd(host, d=d)
# provides a partial interface for the legacy SSHconnection class (getBefore(), command())
class Cmd(metaclass=abc.ABCMeta):
def cd(self, d, silent=False):
if d == None or d == '' or d == []:
if d == None or d == '':
self.cwd = None
elif d[0] == '/':
self.cwd = d
@@ -51,9 +61,13 @@ class Cmd(metaclass=abc.ABCMeta):
def run(self, line, timeout=300, silent=False):
return
@abc.abstractmethod
def command(self, commandline, expectedline, timeout, silent=False, resync=False):
return
def command(self, commandline, expectedline=None, timeout=300, silent=False, resync=False):
splitted = commandline.split(' ')
if splitted[0] == 'cd':
self.cd(' '.join(splitted[1:]), silent)
else:
self.run(commandline, timeout, silent)
return 0
@abc.abstractmethod
def close(self):
@@ -74,34 +88,30 @@ class Cmd(metaclass=abc.ABCMeta):
class LocalCmd(Cmd):
def __init__(self, d = None):
self.cwd = d
if self.cwd is not None:
logging.debug(f'Working dir is {self.cwd}')
self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
def run(self, line, timeout=300, silent=False, reportNonZero=True):
if type(line) is str:
line = [s for s in line.split(' ') if len(s) > 0]
if not silent:
logging.debug(' '.join(line))
logging.info(line)
try:
ret = sp.run(line, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
if line.strip().endswith('&'):
# if we wait for stdout, subprocess does not return before the end of the command
# however, we don't want to wait for commands with &, so just return fake command
ret = sp.run(line, shell=True, cwd=self.cwd, timeout=5)
else:
ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
except Exception as e:
ret = sp.CompletedProcess(args=line, returncode=255, stdout=f'Exception: {str(e)}'.encode('utf-8'))
if ret.stdout is None:
ret.stdout = b''
ret.stdout = ret.stdout.decode('utf-8').strip()
if reportNonZero and ret.returncode != 0:
cmd = ' '.join(ret.args)
logging.warning(f'command "{cmd}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
logging.warning(f'command "{ret.args}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
self.cp = ret
return ret
def command(self, commandline, expectedline=None, timeout=300, silent=False, resync=False):
line = [s for s in commandline.split(' ') if len(s) > 0]
if line[0] == 'cd':
self.cd(line[1], silent)
else:
self.run(line, timeout, silent)
return 0
def close(self):
pass
@@ -109,22 +119,28 @@ class LocalCmd(Cmd):
return self.cp.stdout
def copyin(self, scpIp, scpUser, scpPw, src, tgt):
logging.warning("LocalCmd emulating sshconnection.copyin() function")
self.run(f'cp -r {src} {tgt}')
def copyout(self, scpIp, scpUser, scpPw, src, tgt):
logging.warning("LocalCmd emulating sshconnection.copyout() function")
self.run(f'cp -r {src} {tgt}')
class RemoteCmd(Cmd):
def __init__(self, hostname, d=None):
logging.getLogger('paramiko').setLevel(logging.INFO) # prevent spamming through Paramiko
cIdx = 0
logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko
self.client = paramiko.SSHClient()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
cfg = RemoteCmd._lookup_ssh_config(hostname)
self.client.connect(**cfg)
self.cwd = d
self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
while cIdx < 3:
try:
self.client.connect(**cfg)
return
except:
logging.error(f'Could not connect to {hostname}, tried for {cIdx} time')
cIdx +=1
raise Exception ("Error: max retries, did not connect to host")
def _lookup_ssh_config(hostname):
ssh_config = paramiko.SSHConfig()
@@ -137,7 +153,7 @@ class RemoteCmd(Cmd):
ucfg = ssh_config.lookup(hostname)
if 'identityfile' not in ucfg or 'user' not in ucfg:
raise KeyError(f'no identityfile or user in SSH config for host {hostname}')
cfg = {'hostname':hostname, 'username':ucfg['user'], 'key_filename':ucfg['identityfile']}
cfg = {'hostname':hostname, 'username':ucfg['user'], 'key_filename':ucfg['identityfile'], 'timeout':SSHTIMEOUT}
if 'hostname' in ucfg:
cfg['hostname'] = ucfg['hostname'] # override user-given hostname with what is in config
if 'port' in ucfg:
@@ -147,33 +163,27 @@ class RemoteCmd(Cmd):
return cfg
def run(self, line, timeout=300, silent=False, reportNonZero=True):
if type(line) is list:
line = ' '.join(line)
if not silent:
logging.debug(line)
logging.info(line)
if self.cwd:
line = f"cd {self.cwd} && {line}"
args = line.split(' ')
try:
stdin, stdout, stderr = self.client.exec_command(line, timeout=timeout)
ret = sp.CompletedProcess(args=args, returncode=stdout.channel.recv_exit_status(), stdout=stdout.read(size=None) + stderr.read(size=None))
if line.strip().endswith('&'):
# if we wait for stdout, Paramiko does not return before the end of the command
# however, we don't want to wait for commands with &, so just return fake command
self.client.exec_command(line, timeout = 5)
ret = sp.CompletedProcess(args=line, returncode=0, stdout=b'')
else:
stdin, stdout, stderr = self.client.exec_command(line, timeout=timeout)
ret = sp.CompletedProcess(args=line, returncode=stdout.channel.recv_exit_status(), stdout=stdout.read(size=None) + stderr.read(size=None))
except Exception as e:
ret = sp.CompletedProcess(args=args, returncode=255, stdout=f'Exception: {str(e)}'.encode('utf-8'))
ret = sp.CompletedProcess(args=line, returncode=255, stdout=f'Exception: {str(e)}'.encode('utf-8'))
ret.stdout = ret.stdout.decode('utf-8').strip()
if reportNonZero and ret.returncode != 0:
cmd = ' '.join(ret.args)
logging.warning(f'command "{cmd}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
logging.warning(f'command "{line}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
self.cp = ret
return ret
def command(self, commandline, expectedline=None, timeout=300, silent=False, resync=False):
line = [s for s in commandline.split(' ') if len(s) > 0]
if line[0] == 'cd':
self.cd(line[1], silent)
else:
self.run(line, timeout, silent)
return 0
def close(self):
self.client.close()
@@ -181,7 +191,6 @@ class RemoteCmd(Cmd):
return self.cp.stdout
def copyout(self, src, tgt, recursive=False):
logging.warning("RemoteCmd emulating sshconnection.copyout() function, ignoring scpIp")
logging.debug(f"copyout: local:{src} -> remote:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"
@@ -199,7 +208,6 @@ class RemoteCmd(Cmd):
sftp.close()
def copyin(self, src, tgt, recursive=False):
logging.warning("RemoteCmd emulating sshconnection.copyout() function")
logging.debug(f"copyin: remote:{src} -> local:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"

View File

@@ -31,19 +31,23 @@
#-----------------------------------------------------------
# Import
#-----------------------------------------------------------
import sys # arg
import re # reg
import sys # arg
import re # reg
import logging
import os
import shutil
import subprocess
import time
import pyshark
import threading
import cls_cmd
from multiprocessing import Process, Lock, SimpleQueue
from zipfile import ZipFile
#-----------------------------------------------------------
# OAI Testing modules
#-----------------------------------------------------------
import cls_cluster as OC
import cls_cmd
import sshconnection as SSH
import helpreadme as HELP
@@ -62,7 +66,10 @@ def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTarge
sshSession.command('mkdir -p ' + sourcePath, '\$', 5)
sshSession.command('cd ' + sourcePath, '\$', 5)
# Recent version of git (>2.20?) should handle missing .git extension # without problems
sshSession.command(f'git clone --filter=blob:none -n -b develop {ranRepository} .', '\$', 60)
if ranTargetBranch == 'null':
ranTargetBranch = 'develop'
baseBranch = re.sub('origin/', '', ranTargetBranch)
sshSession.command(f'git clone --filter=blob:none -n -b {baseBranch} {ranRepository} .', '\$', 60)
if sshSession.getBefore().count('error') > 0 or sshSession.getBefore().count('error') > 0:
sys.exit('error during clone')
sshSession.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
@@ -84,6 +91,15 @@ def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTarge
logging.debug(f'Merging with the target branch: {ranTargetBranch}')
sshSession.command(f'git merge --ff origin/{ranTargetBranch} -m "Temporary merge for CI"', '\$', 30)
def ImageTagToUse(imageName, ranCommitID, ranBranch, ranAllowMerge):
shortCommit = ranCommitID[0:8]
if ranAllowMerge:
tagToUse = f'{ranBranch}-{shortCommit}'
else:
tagToUse = f'develop-{shortCommit}'
fullTag = f'{imageName}:{tagToUse}'
return fullTag
def CopyLogsToExecutor(cmd, sourcePath, log_name):
cmd.cd(f'{sourcePath}/cmake_targets')
cmd.run(f'rm -f {log_name}.zip')
@@ -181,7 +197,7 @@ def AnalyzeIperf(cliOptions, clientReport, serverReport):
reportLine = clientReportLines[l+1]
logging.debug(f'found server report: "{reportLine}"')
statusTemplate = '(?:|\[ *\d+\].*) +0\.0-\s*(?P<duration>[0-9\.]+) +sec +[0-9\.]+ [kKMG]Bytes +(?P<bitrate>[0-9\.]+) (?P<magnitude>[kKMG])bits\/sec +(?P<jitter>[0-9\.]+) ms +(\d+\/ ..\d+) +(\((?P<packetloss>[0-9\.]+)%\))'
statusTemplate = '(?:|\[ *\d+\].*) +0\.0-\s*(?P<duration>[0-9\.]+) +sec +[0-9\.]+ [kKMG]Bytes +(?P<bitrate>[0-9\.]+) (?P<magnitude>[kKMG])bits\/sec +(?P<jitter>[0-9\.]+) ms +(\d+\/ *\d+) +(\((?P<packetloss>[0-9\.]+)%\))'
# if we do not find a server report in the client logs, check the server logs
# and use the last line which is typically close/identical to server report
if reportLine is None:
@@ -287,6 +303,7 @@ class Containerize():
self.deployedContainers = []
self.tsharkStarted = False
self.displayedNewTags = False
self.pingContName = ''
self.pingOptions = ''
self.pingLossThreshold = ''
@@ -299,7 +316,6 @@ class Containerize():
self.registrySvrId = ''
self.testSvrId = ''
self.imageToPull = []
#checkers from xml
self.ran_checkers={}
@@ -338,14 +354,14 @@ class Containerize():
self.host = result.group(0)
if self.host == 'Ubuntu':
self.cli = 'docker'
self.dockerfileprefix = '.ubuntu18'
self.dockerfileprefix = '.ubuntu20'
self.cliBuildOptions = '--no-cache'
elif self.host == 'Red Hat':
self.cli = 'sudo podman'
self.dockerfileprefix = '.rhel8.2'
self.cliBuildOptions = '--no-cache --disable-compression'
# we always build the ran-build image with all targets
# we always build the ran-build image with all targets
imageNames = [('ran-build', 'build')]
result = re.search('eNB', self.imageKind)
# Creating a tupple with the imageName and the DockerFile prefix pattern on obelix
@@ -360,6 +376,7 @@ class Containerize():
if result is not None:
imageNames.append(('oai-enb', 'eNB'))
imageNames.append(('oai-gnb', 'gNB'))
imageNames.append(('oai-nr-cuup', 'nr-cuup'))
imageNames.append(('oai-lte-ue', 'lteUE'))
imageNames.append(('oai-nr-ue', 'nrUE'))
if self.host == 'Red Hat':
@@ -375,7 +392,7 @@ class Containerize():
CreateWorkspace(cmd, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
# if asterix, copy the entitlement and subscription manager configurations
# if asterix, copy the entitlement and subscription manager configurations
if self.host == 'Red Hat':
cmd.run('mkdir -p ./etc-pki-entitlement ./rhsm-conf ./rhsm-ca')
cmd.run('cp /etc/rhsm/rhsm.conf ./rhsm-conf/')
@@ -546,14 +563,17 @@ class Containerize():
oldRanCommidID = self.ranCommitID
oldRanRepository = self.ranRepository
oldRanAllowMerge = self.ranAllowMerge
oldRanTargetBranch = self.ranTargetBranch
self.ranCommitID = self.proxyCommit
self.ranRepository = 'https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git'
self.ranAllowMerge = False
self.ranTargetBranch = 'master'
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
self.ranTargetBranch = oldRanTargetBranch
# Let's remove any previous run artifacts if still there
mySSH.command(self.cli + ' image prune --force', '\$', 30)
@@ -570,6 +590,7 @@ class Containerize():
# 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)
mySSH.command(self.cli + ' image prune --force || true','\$', 15)
if mySSH.getBefore().count('o such image') != 0:
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
mySSH.close()
@@ -637,15 +658,6 @@ class Containerize():
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
def ImageTagToUse(self, imageName):
shortCommit = self.ranCommitID[0:8]
if self.ranAllowMerge:
tagToUse = f'{self.ranBranch}-{shortCommit}'
else:
tagToUse = f'develop-{shortCommit}'
fullTag = f'porcepix.sboai.cs.eurecom.fr/{imageName}:{tagToUse}'
return fullTag
def Push_Image_to_Local_Registry(self, HTML):
if self.registrySvrId == '0':
lIpAddr = self.eNBIPAddress
@@ -668,8 +680,8 @@ class Containerize():
logging.debug('Pushing images from server: ' + lIpAddr)
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
mySSH.command('docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr', '\$', 5)
imagePrefix = 'porcepix.sboai.cs.eurecom.fr'
mySSH.command(f'docker login -u oaicicd -p oaicicd {imagePrefix}', '\$', 5)
if re.search('Login Succeeded', mySSH.getBefore()) is None:
msg = 'Could not log into local registry'
logging.error(msg)
@@ -680,11 +692,11 @@ class Containerize():
orgTag = 'develop'
if self.ranAllowMerge:
orgTag = 'ci-temp'
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames:
tagToUse = self.ImageTagToUse(image)
mySSH.command(f'docker image tag {image}:{orgTag} {tagToUse}', '\$', 5)
mySSH.command(f'docker push {tagToUse}', '\$', 120)
tagToUse = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
mySSH.command(f'docker image tag {image}:{orgTag} {imagePrefix}/{tagToUse}', '\$', 5)
mySSH.command(f'docker push {imagePrefix}/{tagToUse}', '\$', 120)
if re.search(': digest:', mySSH.getBefore()) is None:
logging.debug(mySSH.getBefore())
msg = f'Could not push {image} to local registry : {tagToUse}'
@@ -692,9 +704,9 @@ class Containerize():
mySSH.close()
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False
mySSH.command(f'docker rmi {tagToUse} {image}:{orgTag}', '\$', 30)
mySSH.command(f'docker rmi {imagePrefix}/{tagToUse} {image}:{orgTag}', '\$', 30)
mySSH.command('docker logout porcepix.sboai.cs.eurecom.fr', '\$', 5)
mySSH.command(f'docker logout {imagePrefix}', '\$', 5)
if re.search('Removing login credentials', mySSH.getBefore()) is None:
msg = 'Could not log off from local registry'
logging.error(msg)
@@ -727,62 +739,36 @@ class Containerize():
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
if lIpAddr != 'none':
logging.debug('Pulling images onto server: ' + lIpAddr)
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
else:
logging.debug('Pulling images locally')
cmd = 'docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr'
if lIpAddr != 'none':
mySSH.command(cmd, '\$', 5)
response = mySSH.getBefore()
else:
logging.info(cmd)
response = subprocess.check_output(cmd, shell=True, universal_newlines=True, stderr=subprocess.STDOUT)
if re.search('Login Succeeded', response) is None:
myCmd = cls_cmd.getConnection(lIpAddr)
imagePrefix = 'porcepix.sboai.cs.eurecom.fr'
response = myCmd.run(f'docker login -u oaicicd -p oaicicd {imagePrefix}')
if response.returncode != 0:
msg = 'Could not log into local registry'
logging.error(msg)
if lIpAddr != 'none':
mySSH.close()
myCmd.close()
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False
for image in self.imageToPull:
tagToUse = self.ImageTagToUse(image)
cmd = f'docker pull {tagToUse}'
if lIpAddr != 'none':
mySSH.command(cmd, '\$', 120)
response = mySSH.getBefore()
else:
logging.info(cmd)
response = subprocess.check_output(cmd, shell=True, universal_newlines=True)
if re.search('Status: Downloaded newer image for |Status: Image is up to date for', response) is None:
tagToUse = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
cmd = f'docker pull {imagePrefix}/{tagToUse}'
response = myCmd.run(cmd, timeout=120)
if response.returncode != 0:
logging.debug(response)
msg = f'Could not pull {image} from local registry : {tagToUse}'
logging.error(msg)
if lIpAddr != 'none':
mySSH.close()
myCmd.close()
HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK)
return False
cmd = 'docker logout porcepix.sboai.cs.eurecom.fr'
if lIpAddr != 'none':
mySSH.command(cmd, '\$', 5)
response = mySSH.getBefore()
else:
logging.info(cmd)
response = subprocess.check_output(cmd, shell=True, universal_newlines=True)
if re.search('Removing login credentials', response) is None:
myCmd.run(f'docker tag {imagePrefix}/{tagToUse} oai-ci/{tagToUse}')
myCmd.run(f'docker rmi {imagePrefix}/{tagToUse}')
response = myCmd.run(f'docker logout {imagePrefix}')
if response.returncode != 0:
msg = 'Could not log off from local registry'
logging.error(msg)
mySSH.close()
myCmd.close()
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False
if lIpAddr != 'none':
mySSH.close()
myCmd.close()
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
return True
@@ -809,22 +795,18 @@ class Containerize():
sys.exit('Insufficient Parameter')
if lIpAddr != 'none':
logging.debug('Removing test images from server: ' + lIpAddr)
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
myCmd = cls_cmd.RemoteCmd(lIpAddr)
else:
logging.debug('Removing test images locally')
myCmd = cls_cmd.LocalCmd()
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames:
cmd = f'docker rmi {self.ImageTagToUse(image)} || true'
if lIpAddr != 'none':
mySSH.command(cmd, '\$', 5)
else:
logging.info(cmd)
subprocess.run(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
imageTag = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
cmd = f'docker rmi oai-ci/{imageTag}'
myCmd.run(cmd, reportNonZero=False)
if lIpAddr != 'none':
mySSH.close()
myCmd.close()
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
return True
@@ -855,16 +837,15 @@ class Containerize():
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)
imagesList = ['oai-enb', 'oai-gnb']
mySSH.command('cp docker-compose.y*ml ci-docker-compose.yml', '\$', 5)
imagesList = ['oai-enb', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s']
for image in imagesList:
imageToUse = self.ImageTagToUse(image)
mySSH.command(f'sed -i -e "s#image: {image}:latest#image: {imageToUse}#" ci-docker-compose.yml', '\$', 2)
imageTag = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
mySSH.command(f'sed -i -e "s#image: {image}:latest#image: oai-ci/{imageTag}#" ci-docker-compose.yml', '\$', 2)
localMmeIpAddr = EPC.MmeIPAddress
mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2)
# Currently support only one
mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 15)
svcName = self.services[self.eNB_instance]
if svcName == '':
logging.warning('no service name given: starting all services in ci-docker-compose.yml!')
@@ -921,7 +902,7 @@ class Containerize():
if healthyNb == 1:
cnt = 0
while (cnt < 20):
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
result = re.search('got sync|Starting F1AP at CU', mySSH.getBefore())
if result is None:
time.sleep(6)
@@ -939,24 +920,21 @@ class Containerize():
mySSH.copyin(lIpAddr, lUserName, lPassWord, logfilename, '.')
mySSH.close()
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n'
message = ''
if usedImage != '':
html_cell += f'Used Image = {usedImage} :\n'
html_cell += imageInfo
message += f'Used Image = {usedImage} :\n'
message += imageInfo
else:
html_cell += 'Could not retrieve used image info!\n'
message += 'Could not retrieve used image info!\n'
if status:
html_cell += '\nHealthy deployment!\n'
message += '\nHealthy deployment!\n'
else:
html_cell += '\nUnhealthy deployment! -- Check logs for reason!\n'
html_cell += '</pre>'
html_queue.put(html_cell)
message += '\nUnhealthy deployment! -- Check logs for reason!\n'
if status:
HTML.CreateHtmlTestRowQueue('N/A', 'OK', CONST.ENB_PROCESS_OK, html_queue)
HTML.CreateHtmlTestRowQueue('N/A', 'OK', [message])
else:
self.exitStatus = 1
HTML.CreateHtmlTestRowQueue('N/A', 'KO', CONST.ENB_PROCESS_OK, html_queue)
HTML.CreateHtmlTestRowQueue('N/A', 'KO', [message])
def UndeployObject(self, HTML, RAN):
@@ -981,6 +959,7 @@ class Containerize():
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)
svcName = self.services[self.eNB_instance]
@@ -995,8 +974,8 @@ class Containerize():
services = []
for s in allServices:
mySSH.command(f'docker-compose -f ci-docker-compose.yml ps --all -- {s}', '\$', 5, silent=False)
running = mySSH.getBefore().split('\r\n')[3:-1]
#logging.debug(f'running services: {running}')
running = mySSH.getBefore().split('\r\n')[2:-1]
logging.debug(f'running services: {running}')
if len(running) > 0: # something is running for that service
services.append(s)
logging.info(f'stopping services {services}')
@@ -1047,54 +1026,57 @@ class Containerize():
def DeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0
logging.debug('\u001B[1m Checking Services to deploy\u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose config --services'
logging.info(cmd)
try:
listServices = subprocess.check_output(cmd, shell=True, universal_newlines=True)
except Exception as e:
# Implicitly we are running locally
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'docker-compose config --services'
listServices = myCmd.run(cmd)
if listServices.returncode != 0:
myCmd.close()
self.exitStatus = 1
HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
return
for reqSvc in self.services[0].split(' '):
res = re.search(reqSvc, listServices)
res = re.search(reqSvc, listServices.stdout)
if res is None:
logging.error(reqSvc + ' not found in specified docker-compose')
self.exitStatus = 1
if (self.exitStatus == 1):
myCmd.close()
HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
return
cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml'
subprocess.run(cmd, shell=True)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
myCmd.run(cmd, silent=self.displayedNewTags)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames:
tagToUse = self.ImageTagToUse(image)
cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml'
logging.debug(cmd)
subprocess.run(cmd, shell=True)
tagToUse = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@oai-ci/{tagToUse}@" docker-compose-ci.yml'
myCmd.run(cmd, silent=self.displayedNewTags)
self.displayedNewTags = True
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml up -d ' + self.services[0]
logging.info(cmd)
try:
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
except Exception as e:
cmd = f'docker-compose -f docker-compose-ci.yml up -d {self.services[0]}'
deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0:
myCmd.close()
self.exitStatus = 1
logging.error('Could not deploy')
HTML.CreateHtmlTestRow('Could not deploy', 'KO', CONST.ALL_PROCESSES_OK)
return
logging.debug('\u001B[1m Checking if all deployed healthy\u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a'
cmd = 'docker-compose -f docker-compose-ci.yml ps -a'
count = 0
healthy = 0
restarting = 0
newContainers = []
while (count < 10):
count += 1
containerStatus = []
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
deployStatus = myCmd.run(cmd, 30, silent=True)
healthy = 0
for state in deployStatus.split('\n'):
res = re.search('Name|----------', state)
restarting = 0
for state in deployStatus.stdout.split('\n'):
state = state.strip()
res = re.search('Name|NAME|----------', state)
if res is not None:
continue
if len(state) == 0:
@@ -1109,43 +1091,45 @@ class Containerize():
if not found:
newContainers.append(cName)
self.deployedContainers.append(cName)
if re.search('Up \(healthy\)', state) is not None:
if re.search('\(healthy\)', state) is not None:
healthy += 1
if re.search('rfsim4g-db-init.*Exit 0', state) is not None:
subprocess.check_output('docker rm -f rfsim4g-db-init || true', shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
containerStatus.append(state)
if healthy == self.nb_healthy[0]:
if re.search('rfsim4g-db-init.*Exit 0', state) is not None or re.search('rfsim4g-db-init.*Exited \(0\)', state) is not None:
myCmd.run('docker rm -f rfsim4g-db-init', timeout=30, silent=True, reportNonZero=False)
if re.search('l2sim4g-db-init.*Exit 0', state) is not None or re.search('l2sim4g-db-init.*Exited \(0\)', state) is not None:
myCmd.run('docker rm -f l2sim4g-db-init', timeout=30, silent=True, reportNonZero=False)
if re.search('Restarting', state) is None:
containerStatus.append(state)
else:
restarting += 1
if healthy == self.nb_healthy[0] and restarting == 0:
count = 100
else:
time.sleep(10)
imagesInfo = ''
html_cell = ''
for newCont in newContainers:
if newCont == 'rfsim4g-db-init':
continue
cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont
imageName = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
imageName = str(imageName).strip()
cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}} bytes\t{{.Created}}\t{{.Id}}" ' + imageName
imagesInfo += subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
imageInspect = myCmd.run(cmd, timeout=30, silent=True)
imageName = str(imageInspect.stdout).strip()
cmd = 'docker image inspect --format \'{{.RepoTags}}\t{{.Size}} bytes\t{{index (split .Created ".") 0}}\n{{.Id}}\' ' + imageName
imageInspect = myCmd.run(cmd, 30, silent=True)
html_cell += imageInspect.stdout + '\n'
myCmd.close()
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n'
for imageInfo in imagesInfo.split('\n'):
html_cell += imageInfo[:-11] + '\n'
html_cell += '\n'
for cState in containerStatus:
html_cell += cState + '\n'
html_cell += '</pre>'
html_queue.put(html_cell)
if count == 100 and healthy == self.nb_healthy[0]:
if self.tsharkStarted == False:
logging.debug('Starting tshark on public network')
self.CaptureOnDockerNetworks()
HTML.CreateHtmlTestRowQueue('n/a', 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue('n/a', 'OK', [html_cell])
for cState in containerStatus:
logging.debug(cState)
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
else:
HTML.CreateHtmlTestRowQueue('Could not deploy in time', 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue('Could not deploy in time', 'KO', [html_cell])
for cState in containerStatus:
logging.debug(cState)
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
@@ -1157,57 +1141,70 @@ class Containerize():
self.UndeployGenObject(HTML, RAN, UE)
self.exitStatus = 1
# pyshark livecapture launches 2 processes:
# * One using dumpcap -i lIfs -w - (ie redirecting the packets to STDOUT)
# * One using tshark -i - -w loFile (ie capturing from STDIN from previous process)
# but in fact the packets are read by the following loop before being in fact
# really written to loFile.
# So it is mandatory to keep the loop
def LaunchPySharkCapture(self, lIfs, lFilter, loFile):
capture = pyshark.LiveCapture(interface=lIfs, bpf_filter=lFilter, output_file=loFile, debug=False)
for packet in capture.sniff_continuously():
pass
def CaptureOnDockerNetworks(self):
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
if re.search('4g.*rfsimulator', self.yamlPath[0]) is not None:
# Excluding any traffic from LTE-UE container (192.168.61.30)
# From the trf-gen, keeping only PING traffic
cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"'
elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None:
# Excluding any traffic from NR-UE containers (192.168.71.150 and 192.168.71.151)
# From the ext-dn, keeping only PING traffic
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not host 192.168.71.151 and not arp and not port 53 and not port 2152 and not port 2153)"'
elif re.search('5g_l2sim', self.yamlPath[0]) is not None:
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)"'
else:
return
for name in networkNames.split('\n'):
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
networkNames = myCmd.run(cmd, silent=True)
myCmd.close()
# Allow only: control plane RAN (SCTP), HTTP of control in CN (port 80), PFCP traffic (port 8805), MySQL (port 3306)
capture_filter = 'sctp or port 80 or port 8805 or icmp or port 3306'
interfaces = []
iInterfaces = ''
for name in networkNames.stdout.split('\n'):
if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
cmd += ' -i ' + name
cmd += ' -w /tmp/capture_'
interfaces.append(name)
iInterfaces += f'-i {name} '
ymlPath = self.yamlPath[0].split('/')
cmd += ymlPath[1] + '.pcap > /tmp/tshark.log 2>&1 &'
logging.info(cmd)
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
output_file = f'/tmp/capture_{ymlPath[1]}.pcap'
self.tsharkStarted = True
# On old systems (ubuntu 18), pyshark live-capture is buggy.
# Going back to old method
if sys.version_info < (3, 7):
cmd = f'nohup tshark -f "{capture_filter}" {iInterfaces} -w {output_file} > /tmp/tshark.log 2>&1 &'
myCmd = cls_cmd.LocalCmd()
myCmd.run(cmd, timeout=5, reportNonZero=False)
myCmd.close()
return
x = threading.Thread(target = self.LaunchPySharkCapture, args = (interfaces,capture_filter,output_file,))
x.daemon = True
x.start()
def UndeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0
# Implicitly we are running locally
ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1]
cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml'
logging.info(cmd)
subprocess.run(cmd, shell=True)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
myCmd.run(cmd, silent=self.displayedNewTags)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames:
tagToUse = self.ImageTagToUse(image)
cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml'
subprocess.run(cmd, shell=True)
tagToUse = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@oai-ci/{tagToUse}@" docker-compose-ci.yml'
myCmd.run(cmd, silent=self.displayedNewTags)
self.displayedNewTags = True
# check which containers are running for log recovery later
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
logging.info(cmd)
deployStatusLogs = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
deployStatusLogs = myCmd.run(cmd, 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 -t3'
logging.info(cmd)
try:
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
except Exception as e:
cmd = 'docker-compose -f docker-compose-ci.yml stop -t3'
deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0:
myCmd.close()
self.exitStatus = 1
logging.error('Could not stop containers')
HTML.CreateHtmlTestRow('Could not stop', 'KO', CONST.ALL_PROCESSES_OK)
@@ -1215,8 +1212,12 @@ class Containerize():
return
anyLogs = False
for state in deployStatusLogs.split('\n'):
res = re.search('Name|----------', state)
logging.debug('Working dir is now . (ie ci-scripts)')
myCmd2 = cls_cmd.LocalCmd()
myCmd2.run(f'mkdir -p {logPath}')
myCmd2.cd(logPath)
for state in deployStatusLogs.stdout.split('\n'):
res = re.search('Name|NAME|----------', state)
if res is not None:
continue
if len(state) == 0:
@@ -1225,36 +1226,26 @@ class Containerize():
if res is not None:
anyLogs = True
cName = res.group('container_name')
cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1'
logging.info(cmd)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
cmd = f'docker logs {cName} > {cName}.log 2>&1'
myCmd2.run(cmd, timeout=30, reportNonZero=False)
if re.search('magma-mme', cName) is not None:
cmd = 'cd ' + self.yamlPath[0] + ' && docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log'
logging.info(cmd)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
cmd = f'docker cp -L {cName}:/var/log/mme.log {cName}-full.log'
myCmd2.run(cmd, timeout=30, reportNonZero=False)
fullStatus = True
if anyLogs:
cmd = 'mkdir -p '+ logPath + ' && cp ' + self.yamlPath[0] + '/*.log ' + logPath
logging.info(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
# Analyzing log file(s)!
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
for container in listOfPossibleRanContainers:
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
cmd = 'ls ' + filenames
containerStatus = True
try:
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
filenames = str(lsStatus).strip()
except:
containerStatus = False
if not containerStatus:
filenames = './*-oai-' + container + '.log'
cmd = f'ls {filenames}'
lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
if lsStatus.returncode != 0:
continue
filenames = str(lsStatus.stdout).strip()
for filename in filenames.split('\n'):
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
logStatus = RAN.AnalyzeLogFile_eNB(f'{logPath}/{filename}', HTML, self.ran_checkers)
if (logStatus < 0):
fullStatus = False
self.exitStatus = 1
@@ -1264,49 +1255,42 @@ class Containerize():
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
for container in listOfPossibleUeContainers:
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
cmd = 'ls ' + filenames
containerStatus = True
try:
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
filenames = str(lsStatus).strip()
except:
containerStatus = False
if not containerStatus:
filenames = './*-oai-' + container + '.log'
cmd = f'ls {filenames}'
lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
if lsStatus.returncode != 0:
continue
filenames = str(lsStatus.stdout).strip()
for filename in filenames.split('\n'):
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
logStatus = UE.AnalyzeLogFile_UE(f'{logPath}/{filename}', HTML, RAN)
if (logStatus < 0):
fullStatus = False
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
else:
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
cmd = 'rm ' + self.yamlPath[0] + '/*.log'
logging.info(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
if self.tsharkStarted:
self.tsharkStarted = True
cmd = 'killall tshark'
myCmd2.run(cmd, reportNonZero=False)
cmd = 'killall dumpcap'
myCmd2.run(cmd, reportNonZero=False)
time.sleep(5)
ymlPath = self.yamlPath[0].split('/')
cmd = 'sudo chmod 666 /tmp/capture_' + ymlPath[1] + '.pcap'
logging.info(cmd)
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
cmd = 'cp /tmp/capture_' + ymlPath[1] + '.pcap ' + logPath
logging.info(cmd)
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
cmd = 'sudo rm /tmp/capture_' + ymlPath[1] + '.pcap'
logging.info(cmd)
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
# The working dir is still logPath
cmd = f'mv /tmp/capture_{ymlPath[1]}.pcap .'
myCmd2.run(cmd, timeout=100, reportNonZero=False)
self.tsharkStarted = False
myCmd2.close()
logging.debug('\u001B[1m Undeploying \u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml down'
logging.info(cmd)
try:
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
except Exception as e:
logging.debug(f'Working dir is back {self.yamlPath[0]}')
cmd = 'docker-compose -f docker-compose-ci.yml down'
deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0:
myCmd.close()
self.exitStatus = 1
logging.error('Could not undeploy')
HTML.CreateHtmlTestRow('Could not undeploy', 'KO', CONST.ALL_PROCESSES_OK)
@@ -1315,9 +1299,9 @@ class Containerize():
self.deployedContainers = []
# Cleaning any created tmp volume
cmd = 'docker volume prune --force || true'
logging.info(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
cmd = 'docker volume prune --force'
deployStatus = myCmd.run(cmd, timeout=100, reportNonZero=False)
myCmd.close()
if fullStatus:
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
@@ -1332,13 +1316,13 @@ class Containerize():
logPath = '../cmake_targets/log/' + ymlPath[1]
# if the containers are running, recover the logs!
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
logging.info(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
deployStatus = myCmd.run(cmd, timeout=30)
cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
anyLogs = False
for state in deployStatus.split('\n'):
res = re.search('Name|----------', state)
for state in deployStatus.stdout.split('\n'):
res = re.search('Name|NAME|----------', state)
if res is not None:
continue
if len(state) == 0:
@@ -1349,30 +1333,27 @@ class Containerize():
cmd += res.group('container_name') + ' '
message = ''
if anyLogs:
logging.info(cmd)
stats = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
for statLine in stats.split('\n'):
stats = myCmd.run(cmd, timeout=30)
for statLine in stats.stdout.split('\n'):
logging.debug(statLine)
message += statLine + '\n'
myCmd.close()
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n' + message + '</pre>'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
def PingFromContainer(self, HTML, RAN, UE):
myCmd = cls_cmd.LocalCmd()
self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1]
cmd = 'mkdir -p ' + logPath
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
cmd = f'mkdir -p {logPath}'
myCmd.run(cmd, silent=True)
cmd = 'docker exec ' + self.pingContName + ' /bin/bash -c "ping ' + self.pingOptions + '" 2>&1 | tee ' + logPath + '/ping_' + HTML.testCase_id + '.log || true'
cmd = f'docker exec {self.pingContName} /bin/bash -c "ping {self.pingOptions}" 2>&1 | tee {logPath}/ping_{HTML.testCase_id}.log'
pingStatus = myCmd.run(cmd, timeout=100, reportNonZero=False)
myCmd.close()
logging.info(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', deployStatus)
result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', pingStatus.stdout)
if result is None:
self.PingExit(HTML, RAN, UE, False, 'Packet Loss Not Found')
return
@@ -1382,7 +1363,7 @@ class Containerize():
self.PingExit(HTML, RAN, UE, False, 'Packet Loss is 100%')
return
result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', deployStatus)
result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', pingStatus.stdout)
if result is None:
self.PingExit(HTML, RAN, UE, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!')
return
@@ -1417,14 +1398,11 @@ class Containerize():
logging.info('\u001B[1m Ping Test PASS\u001B[0m')
def PingExit(self, HTML, RAN, UE, status, message):
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">UE\n' + message + '</pre>'
html_queue.put(html_cell)
if status:
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
else:
logging.error('\u001B[1;37;41m ping test FAIL -- ' + message + ' \u001B[0m')
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'KO', [message])
# Automatic undeployment
logging.warning('----------------------------------------')
logging.warning('\u001B[1m Starting Automatic undeployment \u001B[0m')
@@ -1435,39 +1413,37 @@ class Containerize():
self.exitStatus = 1
def IperfFromContainer(self, HTML, RAN, UE):
myCmd = cls_cmd.LocalCmd()
self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1]
cmd = 'mkdir -p ' + logPath
logStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
cmd = f'mkdir -p {logPath}'
myCmd.run(cmd, silent=True)
# Start the server process
cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"'
logging.info(cmd)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
myCmd.run(cmd)
time.sleep(3)
# Start the client process
cmd = f'docker exec {self.cliContName} /bin/bash -c "iperf {self.cliOptions}" 2>&1 | tee {logPath}/iperf_client_{HTML.testCase_id}.log'
logging.info(cmd)
clientStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
clientStatus = myCmd.run(cmd, timeout=100)
# Stop the server process
cmd = f'docker exec {self.svrContName} /bin/bash -c "pkill iperf"'
logging.info(cmd)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
myCmd.run(cmd)
time.sleep(3)
serverStatusFilename = f'{logPath}/iperf_server_{HTML.testCase_id}.log'
cmd = f'docker cp {self.svrContName}:/tmp/iperf_server.log {serverStatusFilename}'
logging.info(cmd)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
myCmd.run(cmd, timeout=60)
myCmd.close()
# clientStatus was retrieved above. The serverStatus was
# written in the background, then copied to the local machine
with open(serverStatusFilename, 'r') as f:
serverStatus = f.read()
(iperfStatus, msg) = AnalyzeIperf(self.cliOptions, clientStatus, serverStatus)
(iperfStatus, msg) = AnalyzeIperf(self.cliOptions, clientStatus.stdout, serverStatus)
if iperfStatus:
logging.info('\u001B[1m Iperf Test PASS\u001B[0m')
else:
@@ -1475,14 +1451,12 @@ class Containerize():
self.IperfExit(HTML, RAN, UE, iperfStatus, msg)
def IperfExit(self, HTML, RAN, UE, status, message):
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">UE\n' + message + '</pre>'
html_queue.put(html_cell)
html_cell = f'UE\n{message}'
if status:
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'OK', [html_cell])
else:
logging.error('\u001B[1m Iperf Test FAIL -- ' + message + ' \u001B[0m')
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'KO', [html_cell])
# Automatic undeployment
logging.warning('----------------------------------------')
logging.warning('\u001B[1m Starting Automatic undeployment \u001B[0m')
@@ -1508,11 +1482,6 @@ class Containerize():
result = re.search('172.21.16.128', mySSH.getBefore())
if result is None:
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev eno1', '\$', 10)
# Check if route to nepes gnb exists
mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10)
result = re.search('172.21.16.137', mySSH.getBefore())
if result is None:
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 172.21.16.137 dev eno1', '\$', 10)
# Check if forwarding is enabled
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
@@ -1582,16 +1551,28 @@ class Containerize():
mySSH.close()
if svrName == 'nepes':
mySSH.open(ipAddr, userName, password)
# Check if route to porcepix epc exists
mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10)
result = re.search('172.21.16.136', mySSH.getBefore())
# Check if route to ofqot gnb exists
mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10)
result = re.search('172.21.16.109', mySSH.getBefore())
if result is None:
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 172.21.16.136 dev enp0s31f6', '\$', 10)
# Check if X2 route to obelix enb exists
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 172.21.16.109 dev enp0s31f6', '\$', 10)
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
if result is None:
mySSH.command('echo ' + password + ' | sudo -S sysctl net.ipv4.conf.all.forwarding=1', '\$', 10)
# Check if iptables forwarding is accepted
mySSH.command('echo ' + password + ' | sudo -S iptables -L FORWARD', '\$', 10)
result = re.search('Chain FORWARD .*policy ACCEPT', mySSH.getBefore())
if result is None:
mySSH.command('echo ' + password + ' | sudo -S iptables -P FORWARD ACCEPT', '\$', 10)
mySSH.close()
if svrName == 'ofqot':
mySSH.open(ipAddr, userName, password)
# Check if X2 route to nepes enb/epc exists
mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10)
result = re.search('172.21.16.128', mySSH.getBefore())
result = re.search('172.21.16.137', mySSH.getBefore())
if result is None:
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev enp0s31f6', '\$', 10)
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.137 dev enp2s0', '\$', 10)
# Check if forwarding is enabled
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
@@ -1603,4 +1584,3 @@ class Containerize():
if result is None:
mySSH.command('echo ' + password + ' | sudo -S iptables -P FORWARD ACCEPT', '\$', 10)
mySSH.close()

View File

@@ -1,138 +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
# */
#---------------------------------------------------------------------
# Python for CI of OAI-eNB + COTS-UE
#
# Required Python Version
# Python 3.x
#
# Required Python Package
# pexpect
#---------------------------------------------------------------------
#to use isfile
import os
import sys
#to use logging.info()
import logging
#to create a SSH object locally in the methods
import sshconnection
#time.sleep
import time
#to load cots_ue dictionary
import yaml
class CotsUe:
def __init__(self,ADBIPAddr,ADBUserName,ADBPassWord):
self.cots_id = '' #cots id from yaml oppo, s10 etc...
self.ADBIPAddr = ADBIPAddr
self.ADBUserName = ADBUserName
self.ADBPassWord = ADBPassWord
self.cots_run_mode = '' #on of off to toggle airplane mode on/off
self.__cots_cde_dict_file = 'cots_ue_ctl.yaml'
self.__SetAirplaneRetry = 3
#-----------------$
#PUBLIC Methods$
#-----------------$
def Check_Airplane(self):
mySSH = sshconnection.SSHConnection()
mySSH.open(self.ADBIPAddr, self.ADBUserName, self.ADBPassWord)
status=mySSH.cde_check_value('adb shell settings get global airplane_mode_on ', ['0','1'],5)
mySSH.close()
return status
#simply check if the device id exists in the dictionary
#returns true if it exists, false otherwise
def Check_Exists(self,target_id):
#load cots commands dictionary
if (os.path.isfile(self.__cots_cde_dict_file)):
yaml_file=self.__cots_cde_dict_file
elif (os.path.isfile('ci-scripts/'+self.__cots_cde_dict_file)):
yaml_file='ci-scripts/'+self.__cots_cde_dict_file
else:
logging.error("COTS UE dictionary yaml file cannot be found")
sys.exit("COTS UE dictionary yaml file cannot be found")
#load cots commands dictionary
with open(yaml_file,'r') as file:
cots_ue_ctl = yaml.load(file,Loader=yaml.FullLoader)
#check if ue id is in the dictionary
if target_id in cots_ue_ctl:
return True
else:
return False
def Set_Airplane(self, target_id, target_state_str):
#loading cots commands dictionary
if (os.path.isfile(self.__cots_cde_dict_file)):
yaml_file=self.__cots_cde_dict_file
elif (os.path.isfile('ci-scripts/'+self.__cots_cde_dict_file)):
yaml_file='ci-scripts/'+self.__cots_cde_dict_file
else:
logging.error("COTS UE dictionary yaml file cannot be found")
sys.exit("COTS UE dictionary yaml file cannot be found")
#load cots commands dictionary
with open(yaml_file,'r') as file:
cots_ue_ctl = yaml.load(file,Loader=yaml.FullLoader)
#check if ue id is in the dictionary
if target_id in cots_ue_ctl:
mySSH = sshconnection.SSHConnection()
mySSH.open(self.ADBIPAddr, self.ADBUserName, self.ADBPassWord)
logging.info(str(self.ADBIPAddr)+' '+str(self.ADBUserName)+' '+str(self.ADBPassWord))
mySSH.command('adb start-server','\$',5)
mySSH.command('adb devices','\$',5)
logging.info("Toggling COTS UE Airplane mode to : "+target_state_str)
#get current state
current_state = self.Check_Airplane()
if target_state_str.lower()=="on":
target_state=1
else:
target_state=0
if current_state != target_state:
#toggle state
retry = 0
while (current_state!=target_state) and (retry < self.__SetAirplaneRetry):
#loop over the command list from dictionary for the selected ue, to switch to required state
for i in range (0,len(cots_ue_ctl[target_id])):
mySSH.command(cots_ue_ctl[target_id][i], '\$', 5)
time.sleep(1)
current_state = self.Check_Airplane()
retry+=1
#could not toggle despite the retry
if current_state != target_state:
logging.error("ATTENTION : Could not toggle to : "+target_state_str)
logging.error("Current state is : "+ str(current_state))
else:
logging.info("Airplane mode is already "+ target_state_str)
mySSH.command('adb kill-server','\$',5)
mySSH.close()
#ue id is NOT in the dictionary
else:
logging.error("COTS UE Id from XML could not be found in UE YAML dictionary " + self.__cots_cde_dict_file)
sys.exit("COTS UE Id from XML could not be found in UE YAML dictionary " + self.__cots_cde_dict_file)

View File

@@ -28,177 +28,201 @@
import os
import sys
import logging
#to create a SSH object locally in the methods
import sshconnection
#time.sleep
import time
import re
import subprocess
from datetime import datetime
import yaml
#for log rotation mgt
import cls_log_mgt
import cls_cmd
class Module_UE:
def __init__(self,Module):
#create attributes as in the Module dictionary
for k, v in Module.items():
setattr(self, k, v)
self.UEIPAddress = ""
#dictionary linking command names and related module scripts
self.cmd_dict= {"wup": self.WakeupScript,"detach":self.DetachScript}#dictionary of function scripts
self.ue_trace=''
def __init__(self, module_name, filename="ci_ueinfra.yaml"):
with open(filename, 'r') as f:
all_ues = yaml.load(f, Loader=yaml.FullLoader)
m = all_ues.get(module_name)
if m is None:
raise Exception(f'no such module name "{module_name}" in "{filename}"')
self.module_name = module_name
self.host = m['Host']
self.cmd_dict = {
"attach": m.get('AttachScript'),
"detach": m.get('DetachScript'),
"initialize": m.get('InitScript'),
"terminate": m.get('TermScript'),
"getNetwork": m.get('UENetworkScript'),
"check": m.get('CheckStatusScript'),
"dataEnable": m.get('DataEnableScript'),
"dataDisable": m.get('DataDisableScript'),
}
self.interface = m.get('IF')
self.MTU = m.get('MTU')
self.trace = m.get('trace') == True
self.logStore = m.get('LogStore')
self.cmd_prefix = m.get('CmdPrefix')
logging.info(f'initialized UE {self.module_name}@{self.host} from {filename}')
def __str__(self):
return f"{self.module_name}@{self.host} [IP: {self.getIP()}]"
def __repr__(self):
return self.__str__()
def _command(self, cmd, silent = False):
if cmd is None:
raise Exception("no command provided")
if self.host == "" or self.host == "localhost":
c = cls_cmd.LocalCmd()
else:
c = cls_cmd.RemoteCmd(self.host)
response = c.run(cmd, silent=silent)
c.close()
return response
#-----------------$
#PUBLIC Methods$
#-----------------$
#this method checks if the specified Process is running on the server hosting the module
#if not it will be started
def CheckCMProcess(self,CNType):
HOST=self.HostUsername+'@'+self.HostIPAddress
COMMAND="ps aux | grep --colour=never " + self.Process['Name'] + " | grep -v grep "
logging.debug(COMMAND)
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if len(result)!=0:
logging.debug(self.Process['Name'] + " process found")
return True
else:#start process and check again
logging.debug(self.Process['Name'] + " process NOT found")
#starting the process
logging.debug('Starting ' + self.Process['Name'])
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
mySSH.command('echo ' + self.HostPassword + ' | sudo -S rm -f /tmp/quectel-cm.log','\$',5)
mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S stdbuf -o0 ' + self.Process['Cmd'] + ' ' + self.Process['Apn'][CNType] + ' > /tmp/quectel-cm.log 2>&1 &','\$',5)
mySSH.close()
#checking the process
def initialize(self):
if self.trace:
raise Exception("UE tracing not implemented yet")
self._enableTrace()
# we first terminate to make sure the UE has been stopped
if self.cmd_dict["detach"]:
self._command(self.cmd_dict["detach"], silent=True)
self._command(self.cmd_dict["terminate"], silent=True)
ret = self._command(self.cmd_dict["initialize"])
logging.info(f'For command: {ret.args} | return output: {ret.stdout} | Code: {ret.returncode}')
# Here each UE returns differently for the successful initialization, requires check based on UE
return ret.returncode == 0
def terminate(self):
self._command(self.cmd_dict["terminate"])
if self.trace:
raise Exception("UE tracing not implemented yet")
self._disableTrace()
return self._logCollect()
return None
def attach(self, attach_tries = 4, attach_timeout = 60):
ip = None
while attach_tries > 0:
self._command(self.cmd_dict["attach"])
timeout = attach_timeout
logging.debug("Waiting for IP address to be assigned")
while timeout > 0 and not ip:
time.sleep(5)
timeout -= 5
ip = self.getIP()
if ip:
break
logging.warning(f"UE did not receive IP address after {attach_timeout} s, detaching")
attach_tries -= 1
self._command(self.cmd_dict["detach"])
time.sleep(5)
HOST=self.HostUsername+'@'+self.HostIPAddress
COMMAND="ps aux | grep --colour=never " + self.Process['Name'] + " | grep -v grep "
logging.debug(COMMAND)
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if len(result)!=0:
logging.debug(self.Process['Name'] + " process found")
return True
else:
logging.debug(self.Process['Name'] + " process NOT found")
return False
#Generic command function, using function pointers dictionary
def Command(self,cmd):
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
mySSH.command('echo ' + self.HostPassword + ' | sudo -S python3 ' + self.cmd_dict[cmd],'\$',10)
time.sleep(5)
logging.debug("Module "+ cmd)
mySSH.close()
#this method retrieves the Module IP address (not the Host IP address)
def GetModuleIPAddress(self):
HOST=self.HostUsername+'@'+self.HostIPAddress
response= []
tentative = 8
while (len(response)==0) and (tentative>0):
COMMAND="ip a show dev " + self.UENetwork + " | grep --colour=never inet | grep " + self.UENetwork
if tentative == 8:
logging.debug(COMMAND)
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
response = ssh.stdout.readlines()
tentative-=1
time.sleep(2)
if (tentative==0) and (len(response)==0):
logging.debug('\u001B[1;37;41m Module IP Address Not Found! Time expired \u001B[0m')
return -1
else: #check response
result = re.search('inet (?P<moduleipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', response[0].decode("utf-8") )
if result is not None:
if result.group('moduleipaddress') is not None:
self.UEIPAddress = result.group('moduleipaddress')
logging.debug('\u001B[1mUE Module IP Address is ' + self.UEIPAddress + '\u001B[0m')
return 0
else:
logging.debug('\u001B[1;37;41m Module IP Address Not Found! \u001B[0m')
return -1
else:
logging.debug('\u001B[1;37;41m Module IP Address Not Found! \u001B[0m')
return -1
def CheckModuleMTU(self):
HOST=self.HostUsername+'@'+self.HostIPAddress
response= []
tentative = 3
while (len(response)==0) and (tentative>0):
COMMAND="ip a show dev " + self.UENetwork + " | grep --colour=never mtu"
logging.debug(COMMAND)
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
response = ssh.stdout.readlines()
tentative-=1
time.sleep(10)
if (tentative==0) and (len(response)==0):
logging.debug('\u001B[1;37;41m Module NIC MTU Not Found! Time expired \u001B[0m')
return -1
else: #check response
result = re.search('mtu (?P<mtu>[0-9]+)', response[0].decode("utf-8") )
if result is not None:
if (result.group('mtu') is not None) and (str(result.group('mtu'))==str(self.MTU)) :
logging.debug('\u001B[1mUE Module NIC MTU is ' + str(self.MTU) + ' as expected\u001B[0m')
return 0
else:
logging.debug('\u001B[1;37;41m Incorrect Module NIC MTU ' + str(result.group('mtu')) + '! Expected : ' + str(self.MTU) + '\u001B[0m')
return -1
else:
logging.debug('\u001B[1;37;41m Module NIC MTU Not Found! \u001B[0m')
return -1
def EnableTrace(self):
if self.ue_trace=="yes":
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
#delete old artifacts
mySSH.command('echo ' + self.HostPassword + ' | sudo -S rm -rf ci_qlog','\$',5)
#start Trace, artifact is created in home dir
mySSH.command('echo $USER; nohup sudo -E QLog/QLog -s ci_qlog -f NR5G.cfg > /dev/null 2>&1 &','\$', 5)
mySSH.close()
def DisableTrace(self):
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
mySSH.command('echo ' + self.HostPassword + ' | sudo -S killall --signal=SIGINT *QLog*', '\$',5)
mySSH.close()
def DisableCM(self):
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
mySSH.command('echo ' + self.HostPassword + ' | sudo -S killall --signal SIGKILL *'+self.Process['Name']+'*', '\$', 5)
mySSH.close()
def LogCollect(self):
if self.ue_trace=="yes":
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
#archive qlog to USB stick in /media/usb-drive/ci_qlogs with datetime suffix
now=datetime.now()
now_string = now.strftime("%Y%m%d-%H%M")
source='ci_qlog'
destination= self.LogStore + '/ci_qlog_'+now_string+'.zip'
#qlog artifact is zipped into the target folder
mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S zip -r '+destination+' '+source+' > /dev/null 2>&1 &','\$', 10)
mySSH.close()
#post action : log cleaning to make sure enough space is reserved for the next run
Log_Mgt=cls_log_mgt.Log_Mgt(self.HostUsername,self.HostIPAddress, self.HostPassword, self.LogStore)
Log_Mgt.LogRotation()
if ip:
logging.debug(f'\u001B[1mUE IP Address for UE {self.module_name} is {ip}\u001B[0m')
else:
destination=""
logging.debug(f'\u001B[1;37;41mUE IP Address for UE {self.module_name} Not Found!\u001B[0m')
return ip
def detach(self):
self._command(self.cmd_dict["detach"])
def check(self):
cmd = self.cmd_dict["check"]
if cmd:
return self._command(cmd).stdout
else:
logging.warning(f"requested status check of UE {self.getName()}, but operation is not supported")
return f"UE {self.getName()} does not support status checking"
def dataEnable(self):
cmd = self.cmd_dict["dataEnable"]
if cmd:
self._command(cmd)
return True
else:
message = f"requested enabling data of UE {self.getName()}, but operation is not supported"
logging.error(message)
return False
def dataDisable(self):
cmd = self.cmd_dict["dataDisable"]
if cmd:
self._command(cmd)
return True
else:
message = f"requested disabling data of UE {self.getName()}, but operation is not supported"
logging.error(message)
return False
def getIP(self):
output = self._command(self.cmd_dict["getNetwork"], silent=True)
result = re.search('inet (?P<ip>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', output.stdout)
if result and result.group('ip'):
ip = result.group('ip')
return ip
return None
def checkMTU(self):
output = self._command(self.cmd_dict["getNetwork"], silent=True)
result = re.search('mtu (?P<mtu>[0-9]+)', output.stdout)
if result and result.group('mtu') and int(result.group('mtu')) == self.MTU:
logging.debug(f'\u001B[1mUE Module {self.module_name} NIC MTU is {self.MTU} as expected\u001B[0m')
return True
else:
logging.debug(f'\u001B[1;37;41m UE module {self.module_name} has incorrect Module NIC MTU or MTU not found! Expected: {self.MTU} \u001B[0m')
return False
def getName(self):
return self.module_name
def getIFName(self):
return self.interface
def getHost(self):
return self.host
def getCmdPrefix(self):
return self.cmd_prefix if self.cmd_prefix else ""
def _enableTrace(self):
raise Exception("not implemented")
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
#delete old artifacts
mySSH.command('echo ' + ' ' + ' | sudo -S rm -rf ci_qlog','\$',5)
#start Trace, artifact is created in home dir
mySSH.command('echo $USER; nohup sudo -E QLog/QLog -s ci_qlog -f NR5G.cfg > /dev/null 2>&1 &','\$', 5)
mySSH.close()
def _disableTrace(self):
raise Exception("not implemented")
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
mySSH.command('echo ' + ' ' + ' | sudo -S killall --signal=SIGINT *QLog*', '\$',5)
mySSH.close()
def _logCollect(self):
raise Exception("not implemented")
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
#archive qlog to USB stick in /media/usb-drive/ci_qlogs with datetime suffix
now=datetime.now()
now_string = now.strftime("%Y%m%d-%H%M")
source='ci_qlog'
destination= self.LogStore + '/ci_qlog_'+now_string+'.zip'
#qlog artifact is zipped into the target folder
mySSH.command('echo $USER; echo ' + ' ' + ' | nohup sudo -S zip -r '+destination+' '+source+' > /dev/null 2>&1 &','\$', 10)
mySSH.close()
#post action : log cleaning to make sure enough space is reserved for the next run
Log_Mgt=cls_log_mgt.Log_Mgt(self.HostUsername,self.HostIPAddress, self.HostPassword, self.LogStore)
return destination

View File

@@ -84,16 +84,6 @@ class HTMLManagement():
self.CpuModel = ['', '']
self.CpuMHz = ['', '']
#-----------------------------------------------------------
# Setters and Getters
#-----------------------------------------------------------
def SethtmlUEConnected(self, nbUEs):
if nbUEs > 0:
self.htmlUEConnected = nbUEs
else:
self.htmlUEConnected = 1
#-----------------------------------------------------------
@@ -101,7 +91,7 @@ class HTMLManagement():
#-----------------------------------------------------------
def CreateHtmlHeader(self, ADBIPAddress):
def CreateHtmlHeader(self):
if (not self.htmlHeaderCreated):
logging.info('\u001B[1m----------------------------------------\u001B[0m')
logging.info('\u001B[1m Creating HTML header \u001B[0m')
@@ -116,7 +106,7 @@ class HTMLManagement():
self.htmlFile.write(' <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>\n')
self.htmlFile.write(' <title>Test Results for TEMPLATE_JOB_NAME job build #TEMPLATE_BUILD_ID</title>\n')
self.htmlFile.write('</head>\n')
self.htmlFile.write('<body><div class="container">\n')
self.htmlFile.write('<body><div class="container-fluid" style="margin-left:1em; margin-right:1em">\n')
self.htmlFile.write(' <br>\n')
self.htmlFile.write(' <table style="border-collapse: collapse; border: none;">\n')
self.htmlFile.write(' <tr style="border-collapse: collapse; border: none;">\n')
@@ -183,15 +173,6 @@ class HTMLManagement():
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' </table>\n')
if (ADBIPAddress != 'none') and (ADBIPAddress != 'modules'):
self.htmlFile.write(' <h2><span class="glyphicon glyphicon-phone"></span> <span class="glyphicon glyphicon-menu-right"></span> ' + str(self.htmlNb_Smartphones) + ' UE(s) is(are) connected to ADB bench server</h2>\n')
self.htmlFile.write(' <h2><span class="glyphicon glyphicon-phone"></span> <span class="glyphicon glyphicon-menu-right"></span> ' + str(self.htmlNb_CATM_Modules) + ' CAT-M UE(s) is(are) connected to bench server</h2>\n')
elif (ADBIPAddress == 'modules'):
self.htmlUEConnected = 1
self.htmlFile.write(' <h2><span class="glyphicon glyphicon-phone"></span> <span class="glyphicon glyphicon-menu-right"></span> 1 commercial module is connected to CI bench</h2>\n')
else:
self.htmlUEConnected = 1
self.htmlFile.write(' <h2><span class="glyphicon glyphicon-phone"></span> <span class="glyphicon glyphicon-menu-right"></span> 1 OAI UE(s) is(are) connected to CI bench</h2>\n')
self.htmlFile.write(' <br>\n')
self.htmlFile.write(' <ul class="nav nav-pills">\n')
count = 0
@@ -225,16 +206,13 @@ class HTMLManagement():
self.htmlFile.write(' <div id="build-tab" class="tab-pane fade">\n')
self.htmlFile.write(' <table class="table" border = "1">\n')
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
self.htmlFile.write(' <th>Relative Time (s)</th>\n')
self.htmlFile.write(' <th>Test Id</th>\n')
self.htmlFile.write(' <th style="width:5%">Relative Time (s)</th>\n')
self.htmlFile.write(' <th style="width:5%">Test Id</th>\n')
self.htmlFile.write(' <th>Test Desc</th>\n')
self.htmlFile.write(' <th>Test Options</th>\n')
self.htmlFile.write(' <th>Test Status</th>\n')
self.htmlFile.write(' <th style="width:5%">Test Status</th>\n')
i = 0
while (i < self.htmlUEConnected):
self.htmlFile.write(' <th>UE' + str(i) + ' Status</th>\n')
i += 1
self.htmlFile.write(' <th>Info</th>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.close()
self.htmlHeaderCreated = True
@@ -247,14 +225,14 @@ class HTMLManagement():
testOkEvenIfUnstable = True
self.htmlFile = open('test_results.html', 'a')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <th bgcolor = "#33CCFF" colspan=3>Final Tab Status</th>\n')
self.htmlFile.write(' <th bgcolor = "#33CCFF" colspan="3">Final Tab Status</th>\n')
if passStatus:
self.htmlFile.write(' <th bgcolor = "green" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>\n')
self.htmlFile.write(' <th bgcolor = "green" colspan="3"><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>\n')
else:
if testOkEvenIfUnstable:
self.htmlFile.write(' <th bgcolor = "orange" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">KNOWN UNSTABLE SCENARIO <span class="glyphicon glyphicon-exclamation-sign"></span> </font></th>\n')
self.htmlFile.write(' <th bgcolor = "orange" colspan="3"><font color="white">KNOWN UNSTABLE SCENARIO <span class="glyphicon glyphicon-exclamation-sign"></span> </font></th>\n')
else:
self.htmlFile.write(' <th bgcolor = "red" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
self.htmlFile.write(' <th bgcolor = "red" colspan="3"><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' </table>\n')
self.htmlFile.write(' </div>\n')
@@ -287,45 +265,12 @@ class HTMLManagement():
self.htmlFile.write(' <p></p>\n')
self.htmlFile.write(' <table class="table table-condensed">\n')
machines = [ 'eNB', 'UE' ]
for machine in machines:
if machine == 'eNB':
idx = 0
else:
idx = 1
if self.OsVersion[idx] == '':
continue
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <th colspan=8>' + str(machine) + ' Server Characteristics</th>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td>OS Version</td>\n')
self.htmlFile.write(' <td><span class="label label-default">' + self.OsVersion[idx] + '</span></td>\n')
self.htmlFile.write(' <td>Kernel Version</td>\n')
self.htmlFile.write(' <td><span class="label label-default">' + self.KernelVersion[idx] + '</span></td>\n')
self.htmlFile.write(' <td>UHD Version</td>\n')
self.htmlFile.write(' <td><span class="label label-default">' + self.UhdVersion[idx] + '</span></td>\n')
self.htmlFile.write(' <td>USRP Board</td>\n')
self.htmlFile.write(' <td><span class="label label-default">' + self.UsrpBoard[idx] + '</span></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td>Nb CPUs</td>\n')
self.htmlFile.write(' <td><span class="label label-default">' + self.CpuNb[idx] + '</span></td>\n')
self.htmlFile.write(' <td>CPU Model Name</td>\n')
self.htmlFile.write(' <td><span class="label label-default">' + self.CpuModel[idx] + '</span></td>\n')
self.htmlFile.write(' <td>CPU Frequency</td>\n')
self.htmlFile.write(' <td><span class="label label-default">' + self.CpuMHz[idx] + '</span></td>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <th colspan=5 bgcolor = "#33CCFF">Final Status</th>\n')
self.htmlFile.write(' <th colspan="5" bgcolor = "#33CCFF">Final Status</th>\n')
if passStatus:
self.htmlFile.write(' <th colspan=3 bgcolor="green"><font color="white">PASS <span class="glyphicon glyphicon-ok"></span></font></th>\n')
self.htmlFile.write(' <th colspan="3" bgcolor="green"><font color="white">PASS <span class="glyphicon glyphicon-ok"></span></font></th>\n')
else:
self.htmlFile.write(' <th colspan=3 bgcolor="red"><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
self.htmlFile.write(' <th colspan="3" bgcolor="red"><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' </table>\n')
self.htmlFile.write(' <p></p>\n')
@@ -338,7 +283,7 @@ class HTMLManagement():
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
self.htmlFile = open('test_results.html', 'a')
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ---- Try Run #' + str(cntnumfails) + ' ---- </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> ---- Try Run #' + str(cntnumfails) + ' ---- </b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.close()
@@ -404,7 +349,7 @@ class HTMLManagement():
result = re.search('showed|Reestablishment|Could not copy eNB logfile', self.htmleNBFailureMsg)
if result is not None:
cellBgColor = 'orange'
self.htmlFile.write(' <td bgcolor = "' + cellBgColor + '" colspan=' + str(self.htmlUEConnected) + '><pre style="background-color:' + cellBgColor + '">' + self.htmleNBFailureMsg + '</pre></td>\n')
self.htmlFile.write(' <td bgcolor = "' + cellBgColor + '" colspan="1"><pre style="background-color:' + cellBgColor + '">' + self.htmleNBFailureMsg + '</pre></td>\n')
self.htmleNBFailureMsg = ''
elif (len(str(self.htmlUEFailureMsg)) > 2):
cellBgColor = 'white'
@@ -415,13 +360,10 @@ class HTMLManagement():
result = re.search('showed|Could not copy UE logfile|oaitun_ue1 interface is either NOT mounted or NOT configured', self.htmlUEFailureMsg)
if result is not None:
cellBgColor = 'orange'
self.htmlFile.write(' <td bgcolor = "' + cellBgColor + '" colspan=' + str(self.htmlUEConnected) + '><pre style="background-color:' + cellBgColor + '">' + self.htmlUEFailureMsg + '</pre></td>\n')
self.htmlFile.write(' <td bgcolor = "' + cellBgColor + '" colspan="1"><pre style="background-color:' + cellBgColor + '">' + self.htmlUEFailureMsg + '</pre></td>\n')
self.htmlUEFailureMsg = ''
else:
i = 0
while (i < self.htmlUEConnected):
self.htmlFile.write(' <td>-</td>\n')
i += 1
self.htmlFile.write(' <td>-</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.close()
@@ -432,7 +374,7 @@ class HTMLManagement():
self.htmlFile = open('test_results.html', 'a')
if bool(collectInfo) == False:
self.htmlFile.write(' <tr bgcolor = "red" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ----IMAGES BUILDING FAILED - Unable to recover the image logs ---- </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> ----IMAGES BUILDING FAILED - Unable to recover the image logs ---- </b></td>\n')
self.htmlFile.write(' </tr>\n')
else:
for image in collectInfo:
@@ -444,13 +386,13 @@ class HTMLManagement():
self.htmlFile.write(' <tr bgcolor = "red" >\n')
else:
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ---- ' + image + ' IMAGE STATUS ----> Size ' + allImagesSize[image] + ' </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> ---- ' + image + ' IMAGE STATUS ----> Size ' + allImagesSize[image] + ' </b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
self.htmlFile.write(' <th colspan="2">Element</th>\n')
self.htmlFile.write(' <th>Nb Errors</th>\n')
self.htmlFile.write(' <th>Nb Warnings</th>\n')
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + '>Status</th>\n')
self.htmlFile.write(' <th colspan="2">Status</th>\n')
self.htmlFile.write(' </tr>\n')
for fil in files:
@@ -469,11 +411,11 @@ class HTMLManagement():
else:
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')
self.htmlFile.write(' <th colspan="2" bgcolor = "green" ><font color="white">OK </font></th>\n')
elif (parameters['errors'] == 0):
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "orange" ><font color="white">OK </font></th>\n')
self.htmlFile.write(' <th colspan="2" 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')
self.htmlFile.write(' <th colspan="2" bgcolor = "red" > NOT OK </th>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.close()
@@ -485,12 +427,12 @@ class HTMLManagement():
# TabHeader
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ---- ' + DataLog['Title'] + ' ---- </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> ---- ' + DataLog['Title'] + ' ---- </b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
self.htmlFile.write(' <th colspan="3">'+ DataLog['ColNames'][0] +'</th>\n')
self.htmlFile.write(' <th colspan="2">' + DataLog['ColNames'][1] + '</th>\n')
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + '>'+ DataLog['ColNames'][2] +'</th>\n')
self.htmlFile.write(' <th colspan="2">'+ DataLog['ColNames'][2] +'</th>\n')
self.htmlFile.write(' </tr>\n')
for k in DataLog['Data']:
@@ -506,7 +448,7 @@ class HTMLManagement():
self.htmlFile.close()
def CreateHtmlTestRowQueue(self, options, status, ue_status, ue_queue):
def CreateHtmlTestRowQueue(self, options, status, infoList):
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
self.htmlFile = open('test_results.html', 'a')
currentTime = int(round(time.time() * 1000)) - self.startTime
@@ -517,25 +459,20 @@ class HTMLManagement():
self.htmlFile.write(' <td>' + self.desc + '</td>\n')
self.htmlFile.write(' <td>' + str(options) + '</td>\n')
if (str(status) == 'OK'):
self.htmlFile.write(' <td bgcolor = "lightgreen" >' + str(status) + '</td>\n')
self.htmlFile.write(f' <td bgcolor = "lightgreen" >{status}</td>\n')
elif (str(status) == 'KO'):
self.htmlFile.write(' <td bgcolor = "lightcoral" >' + str(status) + '</td>\n')
self.htmlFile.write(f' <td bgcolor = "lightcoral" >{status}</td>\n')
else:
addOrangeBK = True
self.htmlFile.write(' <td bgcolor = "orange" >' + str(status) + '</td>\n')
i = 0
while (i < self.htmlUEConnected):
if (i < ue_status):
if (not ue_queue.empty()):
if (addOrangeBK):
self.htmlFile.write(' <td bgcolor = "orange" >' + str(ue_queue.get()).replace('white', 'orange') + '</td>\n')
else:
self.htmlFile.write(' <td>' + str(ue_queue.get()) + '</td>\n')
else:
self.htmlFile.write(' <td>-</td>\n')
else:
self.htmlFile.write(' <td>-</td>\n')
i += 1
self.htmlFile.write(f' <td bgcolor = "orange" >{status}</td>\n')
if (addOrangeBK):
self.htmlFile.write(' <td bgcolor = "orange" >')
else:
self.htmlFile.write(' <td>')
for i in infoList:
self.htmlFile.write(f' <pre>{i}</pre>')
self.htmlFile.write(' </td>')
self.htmlFile.write(' </tr>\n')
self.htmlFile.close()
@@ -546,80 +483,80 @@ class HTMLManagement():
vId = 0
for version in CCR.versions:
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> Results for cppcheck v ' + version + ' </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> Results for cppcheck v ' + version + ' </b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> NB ERRORS</b></td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> NB ERRORS</b></td>\n')
if CCR.nbErrors[vId] == 0:
myColor = 'lightgreen'
elif CCR.nbErrors[vId] < 20:
myColor = 'orange'
else:
myColor = 'lightcoral'
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + ' bgcolor = "' + myColor + '"><b>' + str(CCR.nbErrors[vId]) + '</b></td>\n')
self.htmlFile.write(' <td colspan="3" bgcolor = "' + myColor + '"><b>' + str(CCR.nbErrors[vId]) + '</b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> NB WARNINGS</b></td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> NB WARNINGS</b></td>\n')
if CCR.nbWarnings[vId] == 0:
myColor = 'lightgreen'
elif CCR.nbWarnings[vId] < 20:
myColor = 'orange'
else:
myColor = 'lightcoral'
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + ' bgcolor = "' + myColor + '"><b>' + str(CCR.nbWarnings[vId]) + '</b></td>\n')
self.htmlFile.write(' <td colspan="3" bgcolor = "' + myColor + '"><b>' + str(CCR.nbWarnings[vId]) + '</b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '> ----------------- </td>\n')
self.htmlFile.write(' <td colspan="6"> ----------------- </td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Memory leak</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbMemLeaks[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Memory leak</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbMemLeaks[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Possible null pointer deference</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbNullPtrs[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Possible null pointer deference</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbNullPtrs[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Uninitialized variable</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbUninitVars[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Uninitialized variable</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbUninitVars[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Undefined behaviour shifting</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbTooManyBitsShift[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Undefined behaviour shifting</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbTooManyBitsShift[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Signed integer overflow</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbIntegerOverflow[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Signed integer overflow</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbIntegerOverflow[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '> </td>\n')
self.htmlFile.write(' <td colspan="6"> </td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Printf formatting issues</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbInvalidPrintf[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Printf formatting issues</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbInvalidPrintf[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Modulo result is predetermined</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbModuloAlways[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Modulo result is predetermined</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbModuloAlways[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Opposite Condition -> dead code</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbOppoInnerCondition[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Opposite Condition -> dead code</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbOppoInnerCondition[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td></td>\n')
self.htmlFile.write(' <td colspan=2 bgcolor = "lightcyan" ><b> Wrong Scanf Nb Args</b></td>\n')
self.htmlFile.write(' <td colspan=' + str(2+self.htmlUEConnected) + '>' + str(CCR.nbWrongScanfArg[vId]) + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" ><b> Wrong Scanf Nb Args</b></td>\n')
self.htmlFile.write(' <td colspan="3">' + str(CCR.nbWrongScanfArg[vId]) + '</td>\n')
self.htmlFile.write(' </tr>\n')
vId += 1
@@ -629,12 +566,12 @@ class HTMLManagement():
self.htmlFile = open('test_results.html', 'a')
if bool(testResult) == False and bool(testSummary) == False:
self.htmlFile.write(' <tr bgcolor = "red" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ----PHYSIM TESTING FAILED - Unable to recover the test logs ---- </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> ----PHYSIM TESTING FAILED - Unable to recover the test logs ---- </b></td>\n')
self.htmlFile.write(' </tr>\n')
else:
# Tab header
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ---- PHYSIM TEST SUMMARY---- </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> ---- PHYSIM TEST SUMMARY---- </b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
self.htmlFile.write(' <th colspan="2">LogFile Name</th>\n')
@@ -652,27 +589,27 @@ class HTMLManagement():
self.htmlFile.write(' <td gcolor = "lightcyan" >' + str(testSummary['Nbpass']) + ' </td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ---- PHYSIM TEST DETAIL INFO---- </b></td>\n')
self.htmlFile.write(' <td colspan="6"><b> ---- PHYSIM TEST DETAIL INFO---- </b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
self.htmlFile.write(' <th colspan="2">Test Name</th>\n')
self.htmlFile.write(' <th colspan="2">Test Description</th>\n')
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + '>Result</th>\n')
self.htmlFile.write(' <th colspan="2">Result</th>\n')
self.htmlFile.write(' </tr>\n')
y = ''
for key, value in testResult.items():
x = key.split(".")
if x[0] != y:
self.htmlFile.write(' <tr bgcolor = "lightgreen" >\n')
self.htmlFile.write(' <td style="text-align: center;" colspan=' + str(5+self.htmlUEConnected) + '><b>"' + x[0] + '" series </b></td>\n')
self.htmlFile.write(' <td style="text-align: center;" colspan="6"><b>"' + x[0] + '" series </b></td>\n')
self.htmlFile.write(' </tr>\n')
y = x[0]
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" >' + key + ' </td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" >' + value[0] + '</td>\n')
if 'PASS' in value:
self.htmlFile.write(' <td colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "green" >' + value[1] + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "green" >' + value[1] + '</td>\n')
else:
self.htmlFile.write(' <td colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "red" >' + value[1] + '</td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "red" >' + value[1] + '</td>\n')
self.htmlFile.close()

File diff suppressed because it is too large Load Diff

View File

@@ -81,15 +81,39 @@ class PhySim:
#once parsed move the local logfile to its folder for tidiness
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
#updating the HTML with results
html_cell = '<pre style="background-color:white">' + info + '</pre>'
html_queue=SimpleQueue()
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', [info])
return HTML
def __CheckResults_LDPCt1Test(self,HTML,CONST,testcase_id):
thrs_NOK = 500
thrs_KO = 1000
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 Decoding values
runResultsT1=[]
with open(self.__runLogFile) as g:
for line in g:
if 'decoding time' in line:
runResultsT1.append(line)
info = runResultsT1[0][15:-13]
result = int(''.join(filter(str.isdigit, info)))/100
#once parsed move the local logfile to its folder for tidiness
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
if result < thrs_NOK:
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', [info])
elif result > thrs_KO:
error_msg = f'Decoding time exceeds a limit of {thrs_KO} us'
logging.error(error_msg)
HTML.CreateHtmlTestRowQueue(self.runargs, 'KO', [info + '\n' + error_msg])
self.exitStatus = 1
else:
HTML.CreateHtmlTestRowQueue(self.runargs, 'NOK', [info])
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
@@ -97,8 +121,7 @@ class PhySim:
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)
HTML.CreateHtmlTestRowQueue("could not recover results", 'KO', [error_msg])
self.exitStatus = 1
return HTML
@@ -111,13 +134,11 @@ class PhySim:
#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)
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, ["succeeded"])
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)
HTML.CreateHtmlTestRowQueue(self.runargs, 'KO', 1, [error_msg])
self.exitStatus = 1
return HTML
@@ -216,6 +237,24 @@ class PhySim:
lHTML=self.__CheckResults_LDPCTest(htmlObj,constObj,testcase_id)
return lHTML
def Run_LDPCt1Test(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
self.__runLogFile='physim_'+str(testcase_id)+'.log'
#open a session for test run
mySSH = sshconnection.SSHConnection()
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
mySSH.command('cd '+self.__workSpacePath,'\$',5)
#run and redirect the results to a log file
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 = cls_oai_html.HTMLManagement()
lHTML=self.__CheckResults_LDPCt1Test(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}')

View File

@@ -114,7 +114,7 @@ class PhySim:
logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 30)
else:
imageTag = "develop"
imageTag = f'develop-{self.ranCommitID[0:8]}'
# logging to OC Cluster and then switch to corresponding project
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword} --server https://api.oai.cs.eurecom.fr:6443', '\$', 30)

View File

@@ -357,63 +357,43 @@ class StaticCodeAnalysis():
if nbFilesNotFormatted == 0:
HTML.CreateHtmlTestRow('File(s) Format', 'OK', CONST.ALL_PROCESSES_OK)
else:
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n'
html_cell += 'Number of files not following OAI Rules: ' + str(nbFilesNotFormatted) + '\n'
html_cell = f'Number of files not following OAI Rules: {nbFilesNotFormatted}\n'
for nFile in listFilesNotFormatted:
html_cell += str(nFile).strip() + '\n'
html_cell += '</pre>'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue('File(s) Format', 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue('File(s) Format', 'KO', [html_cell])
del(html_cell)
del(html_queue)
logging.debug('header files not respecting the circular dependency protection: ' + str(len(circularHeaderDependencyFiles)))
if len(circularHeaderDependencyFiles) == 0:
HTML.CreateHtmlTestRow('Header Circular Dependency', 'OK', CONST.ALL_PROCESSES_OK)
else:
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n'
html_cell += 'Number of files not respecting: ' + str(len(circularHeaderDependencyFiles)) + '\n'
html_cell = f'Number of files not respecting: {len(circularHeaderDependencyFiles)}\n'
for nFile in circularHeaderDependencyFiles:
html_cell += str(nFile).strip() + '\n'
html_cell += '</pre>'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue('Header Circular Dependency', 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue('Header Circular Dependency', 'KO', [html_cell])
del(html_cell)
del(html_queue)
finalStatus = -1
logging.debug('files with a GNU GPL license: ' + str(len(gnuGplLicenceFiles)))
if len(gnuGplLicenceFiles) == 0:
HTML.CreateHtmlTestRow('Files w/ GNU GPL License', 'OK', CONST.ALL_PROCESSES_OK)
else:
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n'
html_cell += 'Number of files not respecting: ' + str(len(gnuGplLicenceFiles)) + '\n'
html_cell = f'Number of files not respecting: {len(gnuGplLicenceFiles)}\n'
for nFile in gnuGplLicenceFiles:
html_cell += str(nFile).strip() + '\n'
html_cell += '</pre>'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue('Files w/ GNU GPL License', 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue('Files w/ GNU GPL License', 'KO', html_queue)
del(html_cell)
del(html_queue)
finalStatus = -1
logging.debug('files with a suspect license: ' + str(len(suspectLicenceFiles)))
if len(suspectLicenceFiles) == 0:
HTML.CreateHtmlTestRow('Files with suspect license', 'OK', CONST.ALL_PROCESSES_OK)
else:
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n'
html_cell += 'Number of files not respecting: ' + str(len(suspectLicenceFiles)) + '\n'
html_cell = f'Number of files not respecting: {len(suspectLicenceFiles)}\n'
for nFile in suspectLicenceFiles:
html_cell += str(nFile).strip() + '\n'
html_cell += '</pre>'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue('Files with suspect license', 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue('Files with suspect license', 'KO', [html_cell])
del(html_cell)
del(html_queue)
finalStatus = -1
else:

View File

@@ -172,7 +172,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
mme_ip_address = ( { ipv4 = "192.168.61.195";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
@@ -191,11 +191,11 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eno1";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.16.128";
ENB_INTERFACE_NAME_FOR_S1U = "eno1";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.16.128";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.16.128";
ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
@@ -237,7 +237,7 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.10.2";
}
);

View File

@@ -172,7 +172,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
mme_ip_address = ( { ipv4 = "192.168.61.195";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
@@ -191,11 +191,11 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eno1";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.16.128";
ENB_INTERFACE_NAME_FOR_S1U = "eno1";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.16.128";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.16.128";
ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
@@ -237,7 +237,7 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.10.2";
}
);

View File

@@ -237,7 +237,7 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.10.2";
}
);

View File

@@ -23,12 +23,6 @@ gNBs =
min_rxtxtime = 6;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon

View File

@@ -21,12 +21,6 @@ gNBs =
pusch_AntennaPorts = 2;
do_CSIRS = 1;
min_rxtxtime = 6;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{

View File

@@ -19,13 +19,6 @@ gNBs =
min_rxtxtime = 6;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon

View File

@@ -32,13 +32,6 @@ gNBs =
remote_s_portd = 2152;
min_rxtxtime = 6;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -176,7 +169,7 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.5.233";
amf_ip_address = ( { ipv4 = "192.168.70.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
@@ -185,11 +178,10 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
@@ -220,7 +212,7 @@ security = {
rlc_log_level ="debug";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
ngap_log_level ="debug";
};

View File

@@ -24,13 +24,6 @@ gNBs =
min_rxtxtime = 6;
force_256qam_off = 1;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -184,6 +177,7 @@ MACRLCs = (
remote_n_portd = 2152;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);
@@ -239,7 +233,7 @@ serveraddr = "server";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
ngap_log_level ="debug";
};

View File

@@ -26,13 +26,6 @@ gNBs =
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -281,5 +274,5 @@ security = {
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -27,13 +27,6 @@ gNBs =
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 10;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -277,5 +270,5 @@ security = {
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -0,0 +1,228 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
Num_Threads_PUSCH = 8;
sa = 1;
gNBs =
(
{
////////// Identification parameters:
gNB_CU_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
nr_cellid = 12345678L;
force_256qam_off = 1;
tr_s_preference = "f1";
local_s_if_name = "lo";
local_s_address = "192.168.72.140";
remote_s_address = "192.168.72.143";
local_s_portc = 501;
local_s_portd = 2152;
remote_s_portc = 500;
remote_s_portd = 2152;
ssb_SubcarrierOffset = 0;
min_rxtxtime = 6;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# 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;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# 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;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 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 = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
E1_INTERFACE =
(
{
type = "cp";
ipv4_cucp = "192.168.72.140";
port_cucp = 38462;
ipv4_cuup = "192.168.72.141";
port_cuup = 38462;
}
)
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
};
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="debug";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="info";
ngap_log_level ="debug";
};

View File

@@ -0,0 +1,87 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
sa = 1;
gNBs =
(
{
////////// Identification parameters:
gNB_CU_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
tr_s_preference = "f1";
local_s_if_name = "lo";
local_s_address = "192.168.72.141";
remote_s_address = "192.168.72.142";
local_s_portc = 501;
local_s_portd = 2152;
remote_s_portc = 500;
remote_s_portd = 2152;
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
E1_INTERFACE =
(
{
type = "up";
ipv4_cucp = "192.168.72.140";
ipv4_cuup = "192.168.72.141";
}
)
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.141/24";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.141/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="debug";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="info";
ngap_log_level ="debug";
};

View File

@@ -0,0 +1,238 @@
Active_gNBs = ( "du-rfsim");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
gNB_name = "du-rfsim";
// 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 = 0xffffff }) });
nr_cellid = 12345678L;
////////// Physical parameters:
min_rxtxtime = 6;
force_256qam_off = 1;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# 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;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# 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;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 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 = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_if_name = "eth0";
local_n_address = "192.168.72.142";
remote_n_address = "192.168.72.140";
local_n_portc = 500;
local_n_portd = 2152;
remote_n_portc = 501;
remote_n_portd = 2152;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 150;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "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"
}
log_config :
{
global_log_level = "info";
hw_log_level = "info";
nr_phy_log_level = "info";
nr_mac_log_level = "info";
rlc_log_level = "info";
pdcp_log_level = "info";
rrc_log_level = "info";
f1ap_log_level = "info";
ngap_log_level = "debug";
};

View File

@@ -29,13 +29,6 @@ gNBs =
do_SRS = 0;
do_CSIRS = 1;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -285,5 +278,5 @@ security = {
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -27,13 +27,6 @@ gNBs =
pusch_AntennaPorts = 2;
do_SRS = 0;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -283,5 +276,5 @@ security = {
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -27,13 +27,6 @@ gNBs =
ul_prbblacklist = "51,52,53,54"
do_SRS = 0;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -284,5 +277,5 @@ security = {
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -29,13 +29,6 @@ gNBs =
min_rxtxtime = 6;
do_SRS = 1;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -287,5 +280,5 @@ security = {
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -30,13 +30,6 @@ gNBs =
ul_prbblacklist = "79,80,81,82"
do_SRS = 0;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -286,5 +279,5 @@ security = {
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -46,9 +46,6 @@ gNBs =
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 0;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL

View File

@@ -20,13 +20,6 @@ gNBs =
min_rxtxtime = 6;
enable_sdap = 1;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon

View File

@@ -280,5 +280,5 @@ log_config :
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -158,65 +158,6 @@ gNBs =
);
# Dedicated Serving Cell Configuration
servingCellConfigDedicated = ({
# BWP-Downlink
# BWP 1 Configuration
dl_bwp-Id_1 = 1;
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
# bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
# ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
# ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
# spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
# UplinkConfig
# BWP-Uplink
# BWP 1 Configuration
ul_bwp-Id_1 = 1;
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 :
{
@@ -331,5 +272,5 @@ log_config :
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -0,0 +1,281 @@
Active_gNBs = ( "gNB-Eurecom-n78_20");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
#device :{
# name = "aw2sori_transpro";
#}
gNBs =
(
{
////////// Identification parameters:
gNB_CU_ID = 0xe00;
gNB_name = "gNB-Eurecom-n78_20";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 0x1;
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst =0x1; }) });
nr_cellid = 12345678L
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 0;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3410.4 MHz => 301 REs from PointA 25 PRBs + 1 RE
absoluteFrequencySSB = 627360;
dl_frequencyBand = 78;
# this is 3410.4 - (51*12*30e-3/2) = 3401.22 MHz
dl_absoluteFrequencyPointA = 626748;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 51;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=50 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11; # this means shift of 14, so Coreset is in PRBs 1..48, SSB starts at PRB 15
initialDLBWPsearchSpaceZero = 0;
#pdsch-ConfigCommon
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 51;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 13750;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 15;
preambleReceivedTargetPower = -104;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 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;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-96;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -96;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 5;
nrofDownlinkSlots = 2;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -10;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.21.6.100";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno33np0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.124/20";
GNB_INTERFACE_NAME_FOR_NGU = "eno33np0";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.124/20";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 10;
ul_max_mcs = 15;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 50;
pusch_dtx_threshold = 10;
}
);
RUs = (
{
local_if_name = "ens7f3";
remote_address = "192.168.80.239";
local_address = "192.168.80.24";
local_portc = 50000;
remote_portc = 55444;
local_portd = 52001;
remote_portd = 52183;
local_rf = "no"
tr_preference = "udp_ecpri_if5"
nb_tx = 2
nb_rx = 2
att_tx = 16
att_rx = 0;
num_tp_cores = 4;
rxfh_core_id = 9;
txfh_core_id = 10;
tp_cores = [11,12,13,14];
nr_flag = 1;
eNB_instances = [0];
bands = [78];
sl_ahead = 5;
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
}
);
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";
}
);
log_config :
{
global_log_level ="info";
global_log_verbosity ="medium";
hw_log_level ="info";
hw_log_verbosity ="medium";
phy_log_level ="info";
phy_log_verbosity ="medium";
mac_log_level ="info";
mac_log_verbosity ="high";
rlc_log_level ="info";
rlc_log_verbosity ="medium";
pdcp_log_level ="info";
pdcp_log_verbosity ="medium";
rrc_log_level ="info";
rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
f1ap_log_verbosity ="medium";
ngap_log_level ="debug";
ngap_log_verbosity ="medium";
};

View File

@@ -20,13 +20,6 @@ gNBs =
sib1_tda = 15;
min_rxtxtime = 6;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 2;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon

View File

@@ -20,13 +20,6 @@ gNBs =
do_CSIRS = 0;
do_SRS = 0;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -269,6 +262,6 @@ log_config :
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
f1ap_log_level ="info";
};

View File

@@ -8,14 +8,14 @@ ColNames :
- Average vs Reference Deviation (Reference Value; Acceptability Threshold)
Ref :
feprx : 46.0
feptx_prec : 11.0
feptx_prec : 15.0
feptx_ofdm : 35.0
feptx_total : 57.0
L1 Tx processing : 210.0
DLSCH encoding : 137.0
L1 Rx processing : 345.0
PUSCH inner-receiver : 184.0
PUSCH decoding : 276.0
PUSCH inner-receiver : 210.0
PUSCH decoding : 210.0
Schedule Response : 48.0
DL & UL scheduling timing : 13.0
UL Indication : 60.0

View File

@@ -14,10 +14,10 @@ Ref :
L1 Tx processing : 400.0
DLSCH encoding : 177.0
L1 Rx processing : 345.0
PUSCH inner-receiver : 184.0
PUSCH decoding : 276.0
PUSCH inner-receiver : 210.0
PUSCH decoding : 210.0
Schedule Response : 111.0
DL & UL scheduling timing : 37.0
DL & UL scheduling timing : 20.0
UL Indication : 127.0
Threshold :
feprx : 1.25

View File

@@ -14,11 +14,11 @@ Ref :
L1 Tx processing : 170.0
DLSCH encoding : 118.0
L1 Rx processing : 305.0
PUSCH inner-receiver : 117.0
PUSCH decoding : 303.0
Schedule Response : 25.0
PUSCH inner-receiver : 150.0
PUSCH decoding : 210.0
Schedule Response : 20.0
DL & UL scheduling timing : 10.0
UL Indication : 34.0
UL Indication : 30.0
Threshold :
feprx : 1.25
feptx_prec : 1.25

View File

@@ -31,8 +31,8 @@
#-----------------------------------------------------------
# Import
#-----------------------------------------------------------
import sys # arg
import re # reg
import sys # arg
import re # reg
import logging
import os
import time
@@ -43,13 +43,16 @@ from multiprocessing import Process, Lock, SimpleQueue
#-----------------------------------------------------------
# OAI Testing modules
#-----------------------------------------------------------
import sshconnection as SSH
import sshconnection as SSH
import helpreadme as HELP
import constants as CONST
import cls_cluster as OC
import cls_cmd
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
class EPCManagement():
def __init__(self):
@@ -66,9 +69,15 @@ class EPCManagement():
self.mmeConfFile = 'mme.conf'
self.yamlPath = ''
self.isMagmaUsed = False
self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap' #from xml, 'mini' is default normal for docker-network.py
self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py
self.cfgDeploy = '--type start-mini --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap' #from xml, 'mini' is default normal for docker-network.py
self.cfgUnDeploy = '--type stop-mini --scenario 1' #from xml, 'mini' is default normal for docker-network.py
self.OCUrl = "https://api.oai.cs.eurecom.fr:6443"
self.OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
self.OCUserName = ''
self.OCPassword = ''
self.OCProjectName = ''
self.imageToPull = ''
self.eNBSourceCodePath = ''
#-----------------------------------------------------------
# EPC management functions
@@ -235,9 +244,8 @@ class EPCManagement():
HELP.GenericHelp(CONST.Version)
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
sys.exit('Insufficient EPC Parameters')
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
html_cell = '<pre style="background-color:white">\n'
mySSH = cls_cmd.getConnection(self.IPAddress)
html_cell = ''
if re.match('ltebox', self.Type, re.IGNORECASE):
logging.debug('Using the SABOX simulated HSS')
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
@@ -253,18 +261,18 @@ 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.4/docker-compose', '\$', 5)
mySSH.command('cd /opt/oai-cn5g-fed-v1.5/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'
else:
dFile = 'docker-compose-mini-nrf.yaml'
mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' ps -a', '\$', 60)
mySSH.command('docker-compose -f ' + dFile + ' ps -a', '\$', 60)
if mySSH.getBefore().count('Up (healthy)') != 6:
logging.error('Not all container healthy')
else:
logging.debug('OK --> all containers are healthy')
mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' config | grep --colour=never image', '\$', 10)
mySSH.command('docker-compose -f ' + dFile + ' config | grep --colour=never image', '\$', 10)
listOfImages = mySSH.getBefore()
for imageLine in listOfImages.split('\\r\\n'):
res1 = re.search('image: (?P<name>[a-zA-Z0-9\-/]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine))
@@ -286,13 +294,44 @@ class EPCManagement():
if res4 is not None:
html_cell += '(' + res4.group('date') + ')'
html_cell += '\n'
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
self.testCase_id = HTML.testCase_id
imageNames = ["oai-nrf", "oai-amf", "oai-smf", "oai-spgwu-tiny", "oai-ausf", "oai-udm", "oai-udr", "mysql","oai-traffic-server"]
logging.debug('Deploying OAI CN5G on Openshift Cluster')
lIpAddr = self.IPAddress
lSourcePath = self.SourceCodePath
succeeded = OC.OC_login(mySSH, self.OCUserName, self.OCPassword, self.OCProjectName)
if not succeeded:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
return False
for ii in imageNames:
mySSH.run(f'helm uninstall {ii}', reportNonZero=False)
mySSH.run(f'helm spray {lSourcePath}/ci-scripts/charts/oai-5g-basic/.')
ret = mySSH.run(f'oc get pods', silent=True)
if ret.stdout.count('Running') != 9:
logging.error('\u001B[1m Deploying 5GCN Failed using helm chart on OC Cluster\u001B[0m')
for ii in imageNames:
mySSH.run('helm uninstall '+ ii)
ret = mySSH.run(f'oc get pods')
if re.search('No resources found', ret.stdout):
logging.debug('All pods uninstalled')
OC.OC_logout(mySSH)
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL)
return False
ret = mySSH.run(f'oc get pods', silent=True)
for line in ret.stdout.split('\n')[1:]:
columns = line.strip().split()
name = columns[0]
status = columns[2]
html_cell += status + ' ' + name
html_cell += '\n'
OC.OC_logout(mySSH)
else:
logging.error('This option should not occur!')
html_cell += '</pre>'
mySSH.close()
html_queue = SimpleQueue()
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [html_cell])
def SetAmfIPAddress(self):
# Not an error if we don't need an 5GCN
@@ -314,6 +353,10 @@ class EPCManagement():
else:
logging.error('no container with name oai-amf found, could not retrieve AMF IP address')
mySSH.close()
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
response=mySSH.command3('oc pods ls -f name=oai-amf', 10)
def CheckHSSProcess(self, status_queue):
try:
@@ -516,8 +559,9 @@ class EPCManagement():
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
def Terminate5GCN(self, HTML):
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
imageNames = ["mysql", "oai-nrf", "oai-amf", "oai-smf", "oai-spgwu-tiny", "oai-ausf", "oai-udm", "oai-udr", "oai-traffic-server"]
containerInPods = ["", "-c nrf", "-c amf", "-c smf", "-c spgwu", "-c ausf", "-c udm", "-c udr", ""]
mySSH = cls_cmd.getConnection(self.IPAddress)
message = ''
if re.match('ltebox', self.Type, re.IGNORECASE):
logging.debug('Terminating SA BOX')
@@ -537,24 +581,52 @@ 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.4/docker-compose', '\$', 5)
mySSH.command('cd /opt/oai-cn5g-fed-v1.5/docker-compose', '\$', 5)
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
mySSH.command('docker volume prune --force || true', '\$', 60)
time.sleep(2)
mySSH.command('tshark -r /tmp/oai-cn5g-v1.3.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
mySSH.command('tshark -r /tmp/oai-cn5g-v1.5.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
result = re.search('Tracking area update request', mySSH.getBefore())
if result is not None:
message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)'
else:
message = 'No Tracking area update request'
logging.debug(message)
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
logging.debug('Terminating OAI CN5G on Openshift Cluster')
lIpAddr = self.IPAddress
lSourcePath = self.SourceCodePath
mySSH.run(f'rm -Rf {lSourcePath}/logs')
mySSH.run(f'mkdir -p {lSourcePath}/logs')
logging.debug('OC OAI CN5G - Collecting Log files to workspace')
succeeded = OC.OC_login(mySSH, self.OCUserName, self.OCPassword, self.OCProjectName)
if not succeeded:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
return False
mySSH.run(f'oc describe pod &> {lSourcePath}/logs/describe-pods-post-test.log')
mySSH.run(f'oc get pods.metrics.k8s &> {lSourcePath}/logs/nf-resource-consumption.log')
for ii, ci in zip(imageNames, containerInPods):
podName = mySSH.run(f"oc get pods | grep {ii} | awk \'{{print $1}}\'").stdout.strip()
if not podName:
logging.debug(f'{ii} pod not found!')
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
HTML.CreateHtmlTabFooter(False)
mySSH.run(f'oc logs -f {podName} {ci} &> {lSourcePath}/logs/{ii}.log &')
mySSH.run(f'helm uninstall {ii}')
podName = ''
mySSH.run(f'cd {lSourcePath}/logs && zip -r -qq test_logs_CN.zip *.log')
mySSH.copyin(f'{lSourcePath}/logs/test_logs_CN.zip','test_logs_CN.zip')
ret = mySSH.run(f'oc get pods', silent=True)
res = re.search('No resources found in oaicicd-ran namespace.', ret.stdout)
if res is not None:
logging.debug('OC OAI CN5G components uninstalled')
message = 'OC OAI CN5G components uninstalled'
OC.OC_logout(mySSH)
else:
logging.error('This should not happen!')
mySSH.close()
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">' + message + '</pre>'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [message])
def DeployEpc(self, HTML):
logging.debug('Trying to deploy')
@@ -644,7 +716,7 @@ class EPCManagement():
expectedHealthyContainers += 1
mySSH.command('docker-compose config | grep --colour=never image', '\$', 10)
html_cell = '<pre style="background-color:white">\n'
html_cell = ''
listOfImages = mySSH.getBefore()
for imageLine in listOfImages.split('\\r\\n'):
res1 = re.search('image: (?P<name>[a-zA-Z0-9\-]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine))
@@ -666,7 +738,6 @@ class EPCManagement():
if res4 is not None:
html_cell += '(' + res4.group('date') + ')'
html_cell += '\n'
html_cell += '</pre>'
# Checking if all are healthy
cnt = 0
while (cnt < 3):
@@ -682,8 +753,6 @@ class EPCManagement():
logging.debug(' -- ' + str(healthyNb) + ' healthy container(s)')
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
html_queue = SimpleQueue()
html_queue.put(html_cell)
if healthyNb == expectedHealthyContainers:
mySSH.command('docker exec -d prod-oai-hss /bin/bash -c "nohup tshark -i any -f \'port 9042 or port 3868\' -w /tmp/hss_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
if self.isMagmaUsed:
@@ -695,11 +764,11 @@ class EPCManagement():
mySSH.command('docker exec -d prod-oai-spgwu-tiny /bin/bash -c "nohup tshark -i any -f \'port 8805\' -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
mySSH.close()
logging.debug('Deployment OK')
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [html_cell])
else:
mySSH.close()
logging.debug('Deployment went wrong')
HTML.CreateHtmlTestRowQueue(self.Type, 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.Type, 'KO', [html_cell])
def UndeployEpc(self, HTML):
logging.debug('Trying to undeploy')
@@ -767,15 +836,12 @@ class EPCManagement():
mySSH.command('docker inspect --format=\'{{.Name}}\' prod-oai-public-net prod-oai-private-net', '\$', 10)
noMoreNetworkNb = mySSH.getBefore().count('No such object')
mySSH.close()
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">' + message + '</pre>'
html_queue.put(html_cell)
if noMoreContainerNb == nbContainers and noMoreNetworkNb == 2:
logging.debug('Undeployment OK')
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [message])
else:
logging.debug('Undeployment went wrong')
HTML.CreateHtmlTestRowQueue(self.Type, 'KO', 1, html_queue)
HTML.CreateHtmlTestRowQueue(self.Type, 'KO', [message])
def LogCollectHSS(self):
mySSH = SSH.SSHConnection()
@@ -796,6 +862,8 @@ class EPCManagement():
mySSH.command('zip hss.log.zip hss_check_run.*', '\$', 60)
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
logging.debug('LogCollect is bypassed for that variant')
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
logging.debug('LogCollect is bypassed for that variant')
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
mySSH.command('zip hss.log.zip hss*.log', '\$', 60)
mySSH.command('echo ' + self.Password + ' | sudo -S rm hss*.log', '\$', 5)
@@ -810,10 +878,13 @@ class EPCManagement():
mySSH.close()
def LogCollectMME(self):
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
mySSH.command('rm -f mme.log.zip', '\$', 5)
if self.Type != 'OC-OAI-CN5G':
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
mySSH.command('rm -f mme.log.zip', '\$', 5)
else:
mySSH = cls_cmd.getConnection(self.IPAddress)
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
mySSH.command('docker inspect prod-oai-mme', '\$', 10)
result = re.search('No such object', mySSH.getBefore())
@@ -828,9 +899,13 @@ class EPCManagement():
mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60)
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
mySSH.command('cp -f /tmp/oai-cn5g-v1.3.pcap .','\$', 30)
mySSH.command('cp -f /tmp/oai-cn5g-v1.5.pcap .','\$', 30)
mySSH.command('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap','\$', 30)
mySSH.command('mv mme.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
mySSH.run('cd ' + self.SourceCodePath + '/logs')
mySSH.run('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap')
mySSH.run('mv mme.log.zip ' + self.SourceCodePath + '/scripts')
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
mySSH.command('zip mme.log.zip mme*.log', '\$', 60)
mySSH.command('echo ' + self.Password + ' | sudo -S rm mme*.log', '\$', 5)
@@ -864,6 +939,10 @@ class EPCManagement():
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
mySSH.command('zip spgw.log.zip oai-smf.log oai-spgwu.log','\$', 30)
mySSH.command('mv spgw.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
mySSH.command('zip spgw.log.zip oai-smf.log oai-spgwu.log','\$', 30)
mySSH.command('mv spgw.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
mySSH.command('zip spgw.log.zip spgw*.log', '\$', 60)
mySSH.command('echo ' + self.Password + ' | sudo -S rm spgw*.log', '\$', 5)

View File

@@ -41,7 +41,7 @@ def GenericHelp(vers):
print(' --mode=[Mode]')
print(' TesteNB')
print(' InitiateHtml, FinalizeHtml')
print(' TerminateeNB, TerminateUE, TerminateHSS, TerminateMME, TerminateSPGW')
print(' TerminateeNB, TerminateHSS, TerminateMME, TerminateSPGW')
print(' LogCollectBuild, LogCollecteNB, LogCollectHSS, LogCollectMME, LogCollectSPGW, LogCollectPing, LogCollectIperf')
def GitSrvHelp(repository,branch,commit,mergeallow,targetbranch):
@@ -70,11 +70,6 @@ def EPCSrvHelp(ipaddr, username, password, sourcepath, epctype):
print(' --EPCSourceCodePath=[EPC\'s Source Code Path] -- ' + sourcepath)
print(' --EPCType=[EPC\'s Type: OAI or ltebox or OAI-Rel14-CUPS] -- ' + epctype)
def ADBSrvHelp(ipaddr, username, password):
print(' --ADBIPAddress=[ADB\'s IP Address] -- ' + ipaddr)
print(' --ADBUserName=[ADB\'s Login User Name] -- ' + username)
print(' --ADBPassword=[ADB\'s Login Password] -- ' + password)
def XmlHelp(filename):
print(' --XMLTestFile=[XML Test File to be run] -- ' + filename)
print(' Note: multiple xml files can be specified (--XMLFile=File1 ... --XMLTestFile=FileN) when HTML headers are created ("InitiateHtml" mode)')

View File

@@ -38,14 +38,12 @@ import helpreadme as HELP
import constants as CONST
import cls_oaicitest #main class for OAI CI test framework
import cls_physim #class PhySim for physical simulators build and test
import cls_cots_ue #class CotsUe for Airplane mode control
import cls_containerize #class Containerize for all container-based operations on RAN/UE objects
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 cls_oaicitest #main class for OAI CI test framework
import cls_physim #class PhySim for physical simulators build and test
import cls_containerize #class Containerize for all container-based operations on RAN/UE objects
import cls_static_code_analysis #class for static code analysis
import cls_physim1 #class PhySim for physical simulators deploy and run
import cls_cluster # class for building/deploying on cluster
import sshconnection
import epc
@@ -70,6 +68,7 @@ import subprocess
from multiprocessing import Process, Lock, SimpleQueue
logging.basicConfig(
level=logging.DEBUG,
stream=sys.stdout,
format="[%(asctime)s] %(levelname)8s: %(message)s"
)
@@ -180,12 +179,10 @@ def GetParametersFromXML(action):
#local variable air_interface
air_interface = test.findtext('air_interface')
if (air_interface is None) or (air_interface.lower() not in ['nr','lte','ocp']):
if (air_interface is None) or (air_interface.lower() not in ['nr','lte']):
RAN.air_interface[RAN.eNB_instance] = 'lte-softmodem'
elif (air_interface.lower() in ['nr','lte']):
else:
RAN.air_interface[RAN.eNB_instance] = air_interface.lower() +'-softmodem'
else :
RAN.air_interface[RAN.eNB_instance] = 'ocp-enb'
cmd_prefix = test.findtext('cmd_prefix')
if cmd_prefix is not None: RAN.cmd_prefix = cmd_prefix
@@ -212,54 +209,13 @@ def GetParametersFromXML(action):
#local variable air_interface
air_interface = test.findtext('air_interface')
if (air_interface is None) or (air_interface.lower() not in ['nr','lte','ocp']):
if (air_interface is None) or (air_interface.lower() not in ['nr','lte']):
RAN.air_interface[RAN.eNB_instance] = 'lte-softmodem'
elif (air_interface.lower() in ['nr','lte']):
else:
RAN.air_interface[RAN.eNB_instance] = air_interface.lower() +'-softmodem'
else :
RAN.air_interface[RAN.eNB_instance] = 'ocp-enb'
elif action == 'Initialize_UE':
ue_id = test.findtext('id')
CiTestObj.ue_trace=test.findtext('UE_Trace')#temporary variable, to be passed to Module_UE in Initialize_UE call
if (ue_id is None):
CiTestObj.ue_id = ""
else:
CiTestObj.ue_id = ue_id
elif action == 'Detach_UE':
ue_id = test.findtext('id')
if (ue_id is None):
CiTestObj.ue_id = ""
else:
CiTestObj.ue_id = ue_id
elif action == 'Attach_UE':
ue_id = test.findtext('id')
if (ue_id is None):
CiTestObj.ue_id = ""
else:
CiTestObj.ue_id = ue_id
nbMaxUEtoAttach = test.findtext('nbMaxUEtoAttach')
if (nbMaxUEtoAttach is None):
CiTestObj.nbMaxUEtoAttach = -1
else:
CiTestObj.nbMaxUEtoAttach = int(nbMaxUEtoAttach)
elif action == 'Terminate_UE':
ue_id = test.findtext('id')
if (ue_id is None):
CiTestObj.ue_id = ""
else:
CiTestObj.ue_id = ue_id
elif action == 'CheckStatusUE':
expectedNBUE = test.findtext('expectedNbOfConnectedUEs')
if (expectedNBUE is None):
CiTestObj.expectedNbOfConnectedUEs = -1
else:
CiTestObj.expectedNbOfConnectedUEs = int(expectedNBUE)
elif action == 'Initialize_UE' or action == 'Attach_UE' or action == 'Detach_UE' or action == 'Terminate_UE' or action == 'CheckStatusUE' or action == 'DataEnable_UE' or action == 'DataDisable_UE':
CiTestObj.ue_ids = test.findtext('id').split(' ')
elif action == 'Build_OAI_UE':
CiTestObj.Build_OAI_UE_args = test.findtext('Build_OAI_UE_args')
@@ -279,12 +235,11 @@ def GetParametersFromXML(action):
#local variable air_interface
air_interface = test.findtext('air_interface')
if (air_interface is None) or (air_interface.lower() not in ['nr','lte','ocp']):
if (air_interface is None) or (air_interface.lower() not in ['nr','lte']):
CiTestObj.air_interface = 'lte-uesoftmodem'
elif (air_interface.lower() in ['nr','lte']):
CiTestObj.air_interface = air_interface.lower() +'-uesoftmodem'
else :
#CiTestObj.air_interface = 'ocp-enb'
logging.error('OCP UE -- NOT SUPPORTED')
CiTestObj.cmd_prefix = test.findtext('cmd_prefix') or ""
@@ -298,58 +253,31 @@ def GetParametersFromXML(action):
#local variable air_interface
air_interface = test.findtext('air_interface')
if (air_interface is None) or (air_interface.lower() not in ['nr','lte','ocp']):
if (air_interface is None) or (air_interface.lower() not in ['nr','lte']):
CiTestObj.air_interface = 'lte-uesoftmodem'
elif (air_interface.lower() in ['nr','lte']):
else:
CiTestObj.air_interface = air_interface.lower() +'-uesoftmodem'
else :
#CiTestObj.air_interface = 'ocp-enb'
logging.error('OCP UE -- NOT SUPPORTED')
elif (action == 'Ping') or (action == 'Ping_CatM_module'):
elif action == 'Ping':
CiTestObj.ping_args = test.findtext('ping_args')
CiTestObj.ping_packetloss_threshold = test.findtext('ping_packetloss_threshold')
ue_id = test.findtext('id')
if (ue_id is None):
CiTestObj.ue_id = ""
else:
CiTestObj.ue_id = ue_id
ping_rttavg_threshold = test.findtext('ping_rttavg_threshold')
if (ping_rttavg_threshold is None):
CiTestObj.ping_rttavg_threshold = ""
else:
CiTestObj.ping_rttavg_threshold = ping_rttavg_threshold
CiTestObj.ue_ids = test.findtext('id').split(' ')
ping_rttavg_threshold = test.findtext('ping_rttavg_threshold') or ''
elif action == 'Iperf':
CiTestObj.iperf_args = test.findtext('iperf_args')
ue_id = test.findtext('id')
if (ue_id is None):
CiTestObj.ue_id = ""
else:
CiTestObj.ue_id = ue_id
CiTestObj.iperf_direction = test.findtext('direction')#used for modules only
CiTestObj.ue_ids = test.findtext('id').split(' ')
CiTestObj.iperf_direction = test.findtext('direction')
CiTestObj.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold')
iperf_bitrate_threshold = test.findtext('iperf_bitrate_threshold')
if (iperf_bitrate_threshold is None):
CiTestObj.iperf_bitrate_threshold = "90" #if no threshold is specified, default will be 90%
else:
CiTestObj.iperf_bitrate_threshold = iperf_bitrate_threshold
CiTestObj.iperf_profile = test.findtext('iperf_profile')
if (CiTestObj.iperf_profile is None):
CiTestObj.iperf_bitrate_threshold = test.findtext('iperf_bitrate_threshold') or '90'
CiTestObj.iperf_profile = test.findtext('iperf_profile') or 'balanced'
if CiTestObj.iperf_profile != 'balanced' and CiTestObj.iperf_profile != 'unbalanced' and CiTestObj.iperf_profile != 'single-ue':
logging.error(f'test-case has wrong profile {CiTestObj.iperf_profile}, forcing balanced')
CiTestObj.iperf_profile = 'balanced'
else:
if CiTestObj.iperf_profile != 'balanced' and CiTestObj.iperf_profile != 'unbalanced' and CiTestObj.iperf_profile != 'single-ue':
logging.error('test-case has wrong profile ' + CiTestObj.iperf_profile)
CiTestObj.iperf_profile = 'balanced'
CiTestObj.iperf_options = test.findtext('iperf_options')
if (CiTestObj.iperf_options is None):
CiTestObj.iperf_options = test.findtext('iperf_options') or 'check'
if CiTestObj.iperf_options != 'check' and CiTestObj.iperf_options != 'sink':
logging.error('test-case has wrong option ' + CiTestObj.iperf_options)
CiTestObj.iperf_options = 'check'
else:
if CiTestObj.iperf_options != 'check' and CiTestObj.iperf_options != 'sink':
logging.error('test-case has wrong option ' + CiTestObj.iperf_options)
CiTestObj.iperf_options = 'check'
elif action == 'IdleSleep':
string_field = test.findtext('idle_sleep_time_in_sec')
@@ -471,7 +399,7 @@ def GetParametersFromXML(action):
if (string_field is not None):
CONTAINERS.cliOptions = string_field
elif action == 'Run_LDPCTest' or action == 'Run_NRulsimTest':
elif action == 'Run_LDPCTest' or action == 'Run_NRulsimTest' or action == 'Run_LDPCt1Test':
ldpc.runargs = test.findtext('physim_run_args')
elif action == 'LicenceAndFormattingCheck':
@@ -498,7 +426,15 @@ def GetParametersFromXML(action):
string_field = test.findtext('test_svr_id')
if (string_field is not None):
CONTAINERS.testSvrId = string_field
elif action == 'Custom_Command':
RAN.node = test.findtext('node')
RAN.command = test.findtext('command')
RAN.command_fail = test.findtext('command_fail') in ['True', 'true', 'Yes', 'yes']
elif action == 'Pull_Cluster_Image':
# CLUSTER.imageToPull.clear()
string_field = test.findtext('images_to_pull')
if (string_field is not None):
CLUSTER.imageToPull = string_field.split()
else:
logging.warning(f"unknown action {action} from option-parsing point-of-view")
@@ -540,22 +476,6 @@ with open(yaml_file,'r') as f:
#from YAML scalar values to Python dictionary format$
xml_class_list = yaml.load(f,Loader=yaml.FullLoader)
#loading UE infrastructure from yaml
ue_infra_file='ci_ueinfra.yaml'
if (os.path.isfile(ue_infra_file)):
yaml_file=ue_infra_file
elif (os.path.isfile('ci-scripts/'+ue_infra_file)):
yaml_file='ci-scripts/'+ue_infra_file
else:
logging.error("UE infrastructure yaml file cannot be found")
sys.exit("UE infrastructure file cannot be found")
InfraUE=cls_ci_ueinfra.InfraUE() #initialize UE infrastructure class
InfraUE.Get_UE_Infra(yaml_file) #read the UE infra, filename is hardcoded and unique for the moment but should be passed as parameter from the test suite
mode = ''
CiTestObj = cls_oaicitest.OaiCiTest()
@@ -588,15 +508,6 @@ py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj
if py_param_file_present == True:
AssignParams(py_params)
#-----------------------------------------------------------
# COTS UE instanciation
#-----------------------------------------------------------
#COTS_UE instanciation and ADB server init
#ue id and ue mode are retrieved from xml
COTS_UE=cls_cots_ue.CotsUe(CiTestObj.ADBIPAddress, CiTestObj.ADBUserName,CiTestObj.ADBPassword)
#-----------------------------------------------------------
# mode amd XML class (action) analysis
#-----------------------------------------------------------
@@ -612,18 +523,12 @@ if re.match('^TerminateeNB$', mode, re.IGNORECASE):
RAN.eNB_serverId[0]='0'
RAN.eNBSourceCodePath='/tmp/'
RAN.TerminateeNB(HTML, EPC)
elif re.match('^TerminateUE$', mode, re.IGNORECASE):
if (CiTestObj.ADBIPAddress == '' or CiTestObj.ADBUserName == '' or CiTestObj.ADBPassword == ''):
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
signal.signal(signal.SIGUSR1, receive_signal)
CiTestObj.TerminateUE(HTML,COTS_UE,InfraUE,CiTestObj.ue_trace)
elif re.match('^TerminateOAIUE$', mode, re.IGNORECASE):
if CiTestObj.UEIPAddress == '' or CiTestObj.UEUserName == '' or CiTestObj.UEPassword == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
signal.signal(signal.SIGUSR1, receive_signal)
CiTestObj.TerminateOAIUE(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
CiTestObj.TerminateOAIUE(HTML,RAN,EPC,CONTAINERS)
elif re.match('^TerminateHSS$', mode, re.IGNORECASE):
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
HELP.GenericHelp(CONST.Version)
@@ -687,9 +592,6 @@ elif re.match('^LogCollectOAIUE$', mode, re.IGNORECASE):
sys.exit('Insufficient Parameter')
CiTestObj.LogCollectOAIUE()
elif re.match('^InitiateHtml$', mode, re.IGNORECASE):
if (CiTestObj.ADBIPAddress == '' or CiTestObj.ADBUserName == '' or CiTestObj.ADBPassword == ''):
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
count = 0
foundCount = 0
while (count < HTML.nbTestXMLfiles):
@@ -709,28 +611,19 @@ elif re.match('^InitiateHtml$', mode, re.IGNORECASE):
if foundCount != HTML.nbTestXMLfiles:
HTML.nbTestXMLfiles=foundCount
if (CiTestObj.ADBIPAddress != 'none') and (CiTestObj.ADBIPAddress != 'modules'):
terminate_ue_flag = False
CiTestObj.GetAllUEDevices(terminate_ue_flag)
CiTestObj.GetAllCatMDevices(terminate_ue_flag)
HTML.SethtmlUEConnected(len(CiTestObj.UEDevices) + len(CiTestObj.CatMDevices))
HTML.htmlNb_Smartphones=len(CiTestObj.UEDevices)
HTML.htmlNb_CATM_Modules=len(CiTestObj.CatMDevices)
HTML.CreateHtmlHeader(CiTestObj.ADBIPAddress)
HTML.CreateHtmlHeader()
elif re.match('^FinalizeHtml$', mode, re.IGNORECASE):
logging.info('\u001B[1m----------------------------------------\u001B[0m')
logging.info('\u001B[1m Creating HTML footer \u001B[0m')
logging.info('\u001B[1m----------------------------------------\u001B[0m')
CiTestObj.RetrieveSystemVersion('eNB',HTML,RAN)
CiTestObj.RetrieveSystemVersion('UE',HTML,RAN)
HTML.CreateHtmlFooter(CiTestObj.finalStatus)
elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re.IGNORECASE):
logging.info('\u001B[1m----------------------------------------\u001B[0m')
logging.info('\u001B[1m Starting Scenario: ' + CiTestObj.testXMLfiles[0] + '\u001B[0m')
logging.info('\u001B[1m----------------------------------------\u001B[0m')
if re.match('^TesteNB$', mode, re.IGNORECASE):
if RAN.eNBIPAddress == '' or RAN.ranRepository == '' or RAN.ranBranch == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '' or EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '' or CiTestObj.ADBIPAddress == '' or CiTestObj.ADBUserName == '' or CiTestObj.ADBPassword == '':
if RAN.eNBIPAddress == '' or RAN.ranRepository == '' or RAN.ranBranch == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '' or EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
HELP.GenericHelp(CONST.Version)
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.SourceCodePath == '' or EPC.Type == '':
HELP.EPCSrvHelp(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath, EPC.Type)
@@ -812,20 +705,13 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
signal.signal(signal.SIGUSR1, receive_signal)
if (CiTestObj.ADBIPAddress != 'none') and (CiTestObj.ADBIPAddress != 'modules'):
terminate_ue_flag = False
CiTestObj.GetAllUEDevices(terminate_ue_flag)
CiTestObj.GetAllCatMDevices(terminate_ue_flag)
elif (CiTestObj.ADBIPAddress == 'modules'):
CiTestObj.UEDevices.append('COTS-Module')
else:
CiTestObj.UEDevices.append('OAI-UE')
HTML.SethtmlUEConnected(len(CiTestObj.UEDevices) + len(CiTestObj.CatMDevices))
HTML.CreateHtmlTabHeader()
# On CI bench w/ containers, we need to validate if IP routes are set
if EPC.IPAddress == '172.21.16.136':
CONTAINERS.CheckAndAddRoute('porcepix', EPC.IPAddress, EPC.UserName, EPC.Password)
if EPC.IPAddress == '172.21.16.137':
CONTAINERS.CheckAndAddRoute('nepes', EPC.IPAddress, EPC.UserName, EPC.Password)
if CONTAINERS.eNBIPAddress == '172.21.16.127':
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.127':
@@ -834,6 +720,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.128':
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
if CONTAINERS.eNBIPAddress == '172.21.16.109' or CONTAINERS.eNBIPAddress == 'ofqot':
CONTAINERS.CheckAndAddRoute('ofqot', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNBIPAddress == '172.21.16.137':
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.137':
@@ -866,64 +754,45 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
continue
CiTestObj.ShowTestID()
GetParametersFromXML(action)
if action == 'Initialize_UE' or action == 'Attach_UE' or action == 'Detach_UE' or action == 'Ping' or action == 'Iperf' or action == 'Reboot_UE' or action == 'DataDisable_UE' or action == 'DataEnable_UE' or action == 'CheckStatusUE':
if (CiTestObj.ADBIPAddress != 'none') and (CiTestObj.ADBIPAddress != 'modules'):
#in these cases, having no devices is critical, GetAllUEDevices function has to manage it as a critical error, reason why terminate_ue_flag is set to True
terminate_ue_flag = True
# Now we stop properly the test-suite --> clean reporting
status = CiTestObj.GetAllUEDevices(terminate_ue_flag)
if not status:
RAN.prematureExit = True
break
if action == 'Build_eNB':
RAN.BuildeNB(HTML)
elif action == 'WaitEndBuild_eNB':
RAN.WaitBuildeNBisFinished(HTML)
elif action == 'Custom_Command':
logging.info(f"Executing custom command")
RAN.CustomCommand(HTML)
if RAN.prematureExit:
CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS)
elif action == 'Initialize_eNB':
check_eNB = False
check_OAI_UE = False
RAN.pStatus=CiTestObj.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
RAN.InitializeeNB(HTML, EPC)
if RAN.prematureExit:
CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS)
elif action == 'Terminate_eNB':
RAN.TerminateeNB(HTML, EPC)
elif action == 'Initialize_UE':
CiTestObj.InitializeUE(HTML,RAN, EPC, COTS_UE, InfraUE, CiTestObj.ue_trace, CONTAINERS)
CiTestObj.InitializeUE(HTML)
elif action == 'Terminate_UE':
CiTestObj.TerminateUE(HTML,COTS_UE, InfraUE, CiTestObj.ue_trace)
CiTestObj.TerminateUE(HTML)
elif action == 'Attach_UE':
CiTestObj.AttachUE(HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS)
CiTestObj.AttachUE(HTML, RAN, EPC, CONTAINERS)
elif action == 'Detach_UE':
CiTestObj.DetachUE(HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS)
CiTestObj.DetachUE(HTML)
elif action == 'DataDisable_UE':
CiTestObj.DataDisableUE(HTML)
elif action == 'DataEnable_UE':
CiTestObj.DataEnableUE(HTML)
elif action == 'CheckStatusUE':
CiTestObj.CheckStatusUE(HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS)
CiTestObj.CheckStatusUE(HTML)
elif action == 'Build_OAI_UE':
CiTestObj.BuildOAIUE(HTML)
elif action == 'Initialize_OAI_UE':
CiTestObj.InitializeOAIUE(HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS)
CiTestObj.InitializeOAIUE(HTML,RAN,EPC,CONTAINERS)
elif action == 'Terminate_OAI_UE':
CiTestObj.TerminateOAIUE(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
elif action == 'Initialize_CatM_module':
CiTestObj.InitializeCatM(HTML)
elif action == 'Terminate_CatM_module':
CiTestObj.TerminateCatM(HTML)
elif action == 'Attach_CatM_module':
CiTestObj.AttachCatM(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
elif action == 'Detach_CatM_module':
CiTestObj.TerminateCatM(HTML)
elif action == 'Ping_CatM_module':
CiTestObj.PingCatM(HTML,RAN,EPC,COTS_UE,EPC,InfraUE,CONTAINERS)
CiTestObj.TerminateOAIUE(HTML,RAN,EPC,CONTAINERS)
elif action == 'Ping':
CiTestObj.Ping(HTML,RAN,EPC,COTS_UE, InfraUE, CONTAINERS)
CiTestObj.Ping(HTML,RAN,EPC,CONTAINERS)
elif action == 'Iperf':
CiTestObj.Iperf(HTML,RAN,EPC,COTS_UE, InfraUE, CONTAINERS)
elif action == 'Reboot_UE':
CiTestObj.RebootUE(HTML,RAN,EPC)
CiTestObj.Iperf(HTML,RAN,EPC,CONTAINERS)
elif action == 'Initialize_HSS':
EPC.InitializeHSS(HTML)
elif action == 'Terminate_HSS':
@@ -956,10 +825,17 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
HTML=ldpc.Run_LDPCTest(HTML,CONST,id)
if ldpc.exitStatus==1:
RAN.prematureExit = True
elif action == 'Run_LDPCt1Test':
HTML=ldpc.Run_LDPCt1Test(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 == 'Pull_Cluster_Image':
if not CLUSTER.PullClusterImage(HTML,RAN):
RAN.prematureExit = True
elif action == 'Build_Cluster_Image':
if not CLUSTER.BuildClusterImage(HTML):
RAN.prematureExit = True

View File

@@ -38,11 +38,6 @@ EPCSourceCodePath : s
EPCType : t
EPCContainerPrefix : u
ADBIPAddress : v
ADBUserName : w
ADBType : x
ADBPassword : y
XMLTestFile : z
UEIPAddress : qqq

View File

@@ -69,13 +69,6 @@ EPC:
EPCType : t
EPCContainerPrefix : u
ADB:
ADBIPAddress : v
ADBUserName : w
ADBType : x
ADBPassword : y
UE:
UE_inst_0:
name : UE_1

View File

@@ -38,6 +38,7 @@ import os
import time
from multiprocessing import Process, Lock, SimpleQueue
import yaml
import cls_cmd
#-----------------------------------------------------------
@@ -96,6 +97,9 @@ class RANManagement():
#checkers from xml
self.ran_checkers={}
self.cmd_prefix = '' # prefix before {lte,nr}-softmodem
self.node = ''
self.command = ''
self.command_fail = False
#-----------------------------------------------------------
@@ -128,20 +132,16 @@ class RANManagement():
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
# Check if we build an 5G-NR gNB or an LTE eNB or an OCP eNB
result = re.search('--eNBocp', self.Build_eNB_args)
# Check if we build an 5G-NR gNB or an LTE eNB
result = re.search('--RU', self.Build_eNB_args)
if result is not None:
self.air_interface[self.eNB_instance] = 'ocp-enb'
self.air_interface[self.eNB_instance] = 'oairu'
else:
result = re.search('--RU', self.Build_eNB_args)
result = re.search('--gNB', self.Build_eNB_args)
if result is not None:
self.air_interface[self.eNB_instance] = 'oairu'
self.air_interface[self.eNB_instance] = 'nr-softmodem'
else:
result = re.search('--gNB', self.Build_eNB_args)
if result is not None:
self.air_interface[self.eNB_instance] = 'nr-softmodem'
else:
self.air_interface[self.eNB_instance] = 'lte-softmodem'
self.air_interface[self.eNB_instance] = 'lte-softmodem'
# Worakround for some servers, we need to erase completely the workspace
if self.Build_eNB_forced_workspace_cleanup:
@@ -220,7 +220,7 @@ class RANManagement():
HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
self.backgroundBuildTestId[int(self.eNB_instance)] = self.testCase_id
return
mySSH.command('stdbuf -o0 ./build_oai ' + self.Build_eNB_args + ' 2>&1 | stdbuf -o0 tee compile_oai_enb.log', 'Bypassing the Tests|build have failed', 1500)
mySSH.command('stdbuf -o0 ./build_oai ' + self.Build_eNB_args + ' 2>&1 | stdbuf -o0 tee compile_oai_enb.log', 'BUILD SHOULD BE SUCCESSFUL|build have failed', 900)
mySSH.close()
self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.testCase_id, HTML)
@@ -259,6 +259,26 @@ class RANManagement():
mySSH.close()
self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)], HTML)
def CustomCommand(self, HTML):
cmd = cls_cmd.getConnection(self.node)
ret = cmd.run(self.command)
cmd.close()
logging.debug(f"Custum command : {self.command} on node : {self.node} returnCode : {ret.returncode}")
status = 'OK'
message = []
if ret.returncode != 0 and not self.command_fail:
message = [ret.stdout]
logging.warning(f'CustomCommand output: {message}')
status = 'Warning'
if self.command_fail: # important command since it would make the pipeline fail, so show output in HTML
message = [ret.stdout]
if ret.returncode != 0 and self.command_fail:
message = [ret.stdout]
logging.error(f'CustomCommand failed: output: {message}')
status = 'KO'
self.prematureExit = True
HTML.CreateHtmlTestRowQueue(self.command, status, message)
def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId, HTML):
HTML.testCase_id=testcaseId
@@ -268,7 +288,7 @@ class RANManagement():
mySSH.command('ls ran_build/build', '\$', 3)
mySSH.command('ls ran_build/build', '\$', 3)
#check if we have the build corresponding to the air interface keywords (nr-softmode, lte-softmodem, ocp-enb)
#check if we have the build corresponding to the air interface keywords (nr-softmode, lte-softmodem)
logging.info('CHECK Build with IP='+lIpAddr+' SourcePath='+lSourcePath)
result = re.search(self.air_interface[self.eNB_instance], mySSH.getBefore())
if result is None:
@@ -347,25 +367,9 @@ class RANManagement():
cwd = os.getcwd()
mySSH.copyout(lIpAddr,lUserName,lPassWord, cwd + "/active_net_interfaces.awk", "/tmp")
#reboot USRP if requested in xml
if self.USRPIPAddress!='':
logging.debug('USRP '+ self.USRPIPAddress +': reboot request')
mySSH.open(lIpAddr, lUserName, lPassWord)
cmd2usrp='ssh root@'+self.USRPIPAddress+' reboot'
mySSH.command2(cmd2usrp,1)
mySSH.close()
logging.debug('Waiting for USRP to be ready')
time.sleep(120)
if (self.pStatus < 0):
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus)
HTML.CreateHtmlTabFooter(False)
sys.exit(1)
#Get pcap on enb and/or gnb if enabled in the xml
if self.eNB_Trace=='yes':
if ((self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb')):
if self.air_interface[self.eNB_instance] == 'lte-softmodem':
pcapfile_prefix="enb_"
else:
pcapfile_prefix="gnb_"
@@ -419,16 +423,6 @@ class RANManagement():
result = re.search('^rru|^rcc|^du.band', str(config_file))
if result is not None:
rruCheck = True
# do not reset board twice in IF4.5 case
result = re.search('^rru|^enb|^du.band', str(config_file))
if result is not None:
mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 180)
result = re.search('type: b200', mySSH.getBefore())
if result is not None:
logging.debug('Found a B2xx device --> resetting it')
mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 10)
# Reloading FGPA bin firmware
mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 180)
# Make a copy and adapt to EPC / eNB IP addresses
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
localMmeIpAddr = EPC.MmeIPAddress
@@ -460,7 +454,7 @@ class RANManagement():
#hack UHD_RFNOC_DIR variable for gNB / N310 on RHEL8 server:
#if the USRP address is in the xml then we are using an eth USRP (N3xx)
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
if self.air_interface[self.eNB_instance] == 'lte-softmodem':
gNB = False
else:
gNB = True
@@ -476,7 +470,7 @@ class RANManagement():
monitor_file='../ci-scripts/stats_monitor.py'
conf_file='../ci-scripts/stats_monitor_conf.yaml'
if self.eNB_Stats=='yes':
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
if self.air_interface[self.eNB_instance] == 'lte-softmodem':
mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' ' + self.testCase_id + ' enb 2>&1 > enb_stats_monitor_execution.log &', '\$', 5)
else:
mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' ' + self.testCase_id + ' gnb 2>&1 > gnb_stats_monitor_execution.log &', '\$', 5)
@@ -499,7 +493,7 @@ class RANManagement():
mySSH.command('killall --signal SIGKILL record', '\$', 5)
mySSH.close()
doLoop = False
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
logging.error('\u001B[1;37;41m eNB/gNB logging system did not show got sync! \u001B[0m')
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
# In case of T tracer recording, we need to kill tshark on EPC side
localEpcIpAddr = EPC.IPAddress
@@ -556,7 +550,7 @@ class RANManagement():
HTML.CreateHtmlTestRow(f'{self.cmd_prefix} {self.air_interface[self.eNB_instance]} -O {config_file} {extra_options}', 'OK', CONST.ALL_PROCESSES_OK)
logging.debug('\u001B[1m Initialize eNB/gNB/ocp-eNB Completed\u001B[0m')
logging.debug('\u001B[1m Initialize eNB/gNB Completed\u001B[0m')
def CheckeNBProcess(self, status_queue):
try:
@@ -617,19 +611,19 @@ class RANManagement():
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
if self.air_interface[self.eNB_instance] == 'lte-softmodem':
nodeB_prefix = 'e'
else:
nodeB_prefix = 'g'
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem -e ocp-enb | grep -v grep', '\$', 5)
result = re.search('(-softmodem|ocp)', mySSH.getBefore())
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem | grep -v grep', '\$', 5)
result = re.search('-softmodem', mySSH.getBefore())
if result is not None:
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem ocp-enb || true', '\$', 5)
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem || true', '\$', 5)
time.sleep(10)
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem -e ocp-enb | grep -v grep', '\$', 5)
result = re.search('(-softmodem|ocp)', mySSH.getBefore())
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem | grep -v grep', '\$', 5)
result = re.search('-softmodem', mySSH.getBefore())
if result is not None:
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL -r .*-softmodem ocp-enb || true', '\$', 5)
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL -r .*-softmodem || true', '\$', 5)
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)
@@ -1091,7 +1085,7 @@ class RANManagement():
#post processing depending on the node type
if not nodeB_prefix_found:
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
if self.air_interface[self.eNB_instance] == 'lte-softmodem':
nodeB_prefix = 'e'
else:
nodeB_prefix = 'g'

View File

@@ -32,488 +32,34 @@
#Author Remi
import boto3
import shlex
import subprocess
import json #json structures
import datetime #now() and date formating
from datetime import datetime
import re
import gitlab
import yaml
import os
import time
import sys
from sqlconnect import SQLConnect
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
class Dashboard:
def __init__(self):
#init with data sources : git, yaml config file, test results databases
#init with data sources : git, test results databases
print("Collecting Data")
cmd="""curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100" """
self.git = self.__getGitData(cmd) #git data from Gitlab
self.tests = self.__loadCfg('ran_dashboard_cfg.yaml') #tests table setup from yaml
self.db = self.__loadFromDB() #test results from database
self.mr_list=[] #mr list in string format
for x in range(len(self.git)):
self.mr_list.append(str(self.git[x]['iid']))
def __loadCfg(self,yaml_file):
with open(yaml_file,'r') as f:
tests = yaml.load(f)
return tests
def __getGitData(self,cmd):
#cmd="""curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100" """
process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
output = process.stdout.readline()
tmp=output.decode("utf-8")
d = json.loads(tmp)
return d
def __loadFromDB(self):
mr_list=[]
for x in range(len(self.git)):
mr_list.append(str(self.git[x]['iid']))
mydb=SQLConnect()
for MR in mr_list:
mydb.get(MR)
mydb.close_connection()
return mydb.data
def singleMR_initHTML(self, date):
self.f_html.write('<!DOCTYPE html>\n')
self.f_html.write('<head>\n')
self.f_html.write('<link rel="stylesheet" href="../test_styles.css">\n')
self.f_html.write('<title>Test Dashboard</title>\n')
self.f_html.write('</head>\n')
self.f_html.write('<br>\n')
self.f_html.write('<br>\n')
self.f_html.write('<table>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="Main">OAI RAN TEST Status Dashboard</td>\n')
self.f_html.write('</td>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<tr></tr>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="Date">Update : '+date+'</td>\n')
self.f_html.write('</td>\n')
self.f_html.write('</tr>\n')
self.f_html.write('</table>\n')
self.f_html.write('<br>\n')
self.f_html.write('<br>\n')
def Test_initHTML(self, date):
self.f_html.write('<!DOCTYPE html>\n')
self.f_html.write('<head>\n')
self.f_html.write('<link rel="stylesheet" href="test_styles.css">\n')
self.f_html.write('<title>Test Dashboard</title>\n')
self.f_html.write('</head>\n')
self.f_html.write('<br>\n')
self.f_html.write('<br>\n')
self.f_html.write('<table>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="Main">OAI RAN TEST Status Dashboard</td>\n')
self.f_html.write('</td>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="DashLink"> <a href="https://oairandashboard.s3.eu-west-1.amazonaws.com/index.html">Merge Requests Dashboard</a></td>\n')
self.f_html.write('</td>\n')
self.f_html.write('<tr></tr>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="Date">Update : '+date+'</td>\n')
self.f_html.write('</td>\n')
self.f_html.write('</tr>\n')
self.f_html.write('</table>\n')
self.f_html.write('<br>\n')
self.f_html.write('<br>\n')
def Test_terminateHTML(self):
self.f_html.write('</body>\n')
self.f_html.write('</html>\n')
self.f_html.close()
def MR_initHTML(self,date):
self.f_html.write('<!DOCTYPE html>\n')
self.f_html.write('<head>\n')
self.f_html.write('<link rel="stylesheet" href="mr_styles.css">\n')
self.f_html.write('<title>MR Dashboard</title>\n')
self.f_html.write('</head>\n')
self.f_html.write('<br>\n')
self.f_html.write('<br>\n')
self.f_html.write('<table>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="Main">OAI RAN MR Status Dashboard</td>\n')
self.f_html.write('</td>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="DashLink"> <a href="https://oaitestdashboard.s3.eu-west-1.amazonaws.com/index.html">Tests Dashboard</a></td>\n')
self.f_html.write('</td>\n')
self.f_html.write('<tr></tr>\n')
self.f_html.write('<tr>\n')
self.f_html.write('<td class="Date">Update : '+date+'</td>\n')
self.f_html.write('</td>\n')
self.f_html.write('</tr>\n')
self.f_html.write('</table>\n')
self.f_html.write('<br>\n')
self.f_html.write('<br>\n')
self.f_html.write('<table class="MR_Table">\n')
self.f_html.write('<tr>\n')
self.f_html.write('<th class="MR">MR</th>\n')
self.f_html.write('<th class="CREATED_AT">Created_At</th>\n')
self.f_html.write('<th class="AUTHOR">Author</th>\n')
self.f_html.write('<th class="TITLE">Title</th>\n')
self.f_html.write('<th class="ASSIGNEE">Assignee</th>\n')
self.f_html.write('<th class="REVIEWER">Reviewer</th>\n')
self.f_html.write('<th class="CAN_START">CAN START</th>\n')
self.f_html.write('<th class="IN_PROGRESS">IN PROGRESS</th>\n')
self.f_html.write('<th class="COMPLETED">COMPLETED</th>\n')
self.f_html.write('<th class="REVIEW_FORM">Review Form</th>\n')
self.f_html.write('<th class="OK_MERGE">OK Merge</th>\n')
self.f_html.write('<th class="MERGE_CONFLICTS">Merge Conflicts</th>\n')
self.f_html.write('</tr>\n')
def MR_terminateHTML(self):
self.f_html.write('</table> \n')
self.f_html.write('</body>\n')
self.f_html.write('</html>\n')
self.f_html.close()
def MR_rowHTML(self,row):
self.f_html.write('<tr>\n')
self.f_html.write('<td><a href=\"'+row[0]+'\">'+row[1]+'</a></td>\n')
self.f_html.write('<td>'+row[2]+'</td>\n')
self.f_html.write('<td>'+row[3]+'</td>\n')
self.f_html.write('<td class="title_cell">'+row[4]+'</td>\n')
self.f_html.write('<td>'+row[5]+'</td>\n')
self.f_html.write('<td>'+row[6]+'</td>\n')
if row[7]=='X':
self.f_html.write('<td style="background-color: orange;">'+row[7]+'</td>\n')
else:
self.f_html.write('<td></td>\n')
if row[8]=='X':
self.f_html.write('<td style="background-color: yellow;">'+row[8]+'</td>\n')
else:
self.f_html.write('<td></td>\n')
if row[9]=='X':
self.f_html.write('<td style="background-color: rgb(144, 221, 231);">'+row[9]+'</td>\n')
else:
self.f_html.write('<td></td>\n')
if row[10]=='X':
self.f_html.write('<td style="background-color: rgb(58, 236, 58);">'+row[10]+'</td>\n')
else:
self.f_html.write('<td></td>\n')
if row[11]=='X':
self.f_html.write('<td style="background-color: rgb(58, 236, 58);">'+row[11]+'</td>\n')
else:
self.f_html.write('<td></td>\n')
if row[12]=='YES':
self.f_html.write('<td style="background-color: red;">'+row[12]+'</td>\n')
else:
self.f_html.write('<td></td>\n')
self.f_html.write('</tr>\n')
def Build(self, type, mr, htmlfilename):
if type=='MR':
self.Build_MR_Table(htmlfilename)
elif type=='Tests':
self.Build_Test_Table(htmlfilename)
elif type=='singleMR':
self.Build_singleMR_Table(mr,htmlfilename)
else :
print("Undefined Dashboard Type, options : MR or Tests")
def Build_Test_Table(self,htmlfilename):
print("Building Tests Dashboard...")
self.f_html=open(htmlfilename,'w')
###update date/time, format dd/mm/YY H:M:S
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M")
#HTML table header
self.Test_initHTML(dt_string)
#1 table per MR if test results exist
for x in range(len(self.git)):
mr=str(self.git[x]['iid'])
if 'PASS' not in self.db[mr]:
self.f_html.write('<h3><a href="https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/'+mr+'">'+mr+'</a>'+' '+self.git[x]['title'] + '</h3>\n')
self.f_html.write('<table class="Test_Table">\n')
self.f_html.write('<tr>\n')
self.f_html.write('<th class="Test_Name">Test Name</th>\n')
self.f_html.write('<th class="Test_Descr">Bench</th> \n')
self.f_html.write('<th class="Test_Descr">Test</th> \n')
self.f_html.write('<th class="Pass"># Pass</th>\n')
self.f_html.write('<th class="Fail"># Fail</th>\n')
self.f_html.write('<th class="Last_Pass">Last Pass</th>\n')
self.f_html.write('<th class="Last_Fail">Last Fail</th>\n')
self.f_html.write('</tr>\n')
#parsing the tests
for t in self.tests:
row=[]
short_name= t
hyperlink= self.tests[t]['link']
job=self.tests[t]['job']
if job in self.db[mr]:
if 'PASS' in self.db[mr][job]:
row.append(self.db[mr][job]['PASS'])
else:
row.append('')
if 'FAIL' in self.db[mr][job]:
row.append(self.db[mr][job]['FAIL'])
else:
row.append('')
#2 columns for last_pass and last_fail links
if 'last_pass' in self.db[mr][job]:
lastpasshyperlink= self.db[mr][job]['last_pass'][1]
lastpasstext= self.db[mr][job]['last_pass'][0]
else:
lastpasshyperlink=''
lastpasstext=''
if 'last_fail' in self.db[mr][job]:
lastfailhyperlink= self.db[mr][job]['last_fail'][1]
lastfailtext= self.db[mr][job]['last_fail'][0]
else:
lastfailhyperlink=''
lastfailtext=''
self.f_html.write('<tr>\n')
self.f_html.write('<td><a href='+hyperlink+'>'+short_name+'</a></td>\n')
self.f_html.write('<td>'+self.tests[t]['bench']+'</td>\n')
self.f_html.write('<td>'+self.tests[t]['test']+'</td>\n')
if row[0]!='':
self.f_html.write('<td style="background-color: rgb(58, 236, 58);">'+str(row[0])+'</td>\n')
else:
self.f_html.write('<td></td>\n')
if row[1]!='':
self.f_html.write('<td style="background-color: red;">'+str(row[1])+'</td>\n')
else:
self.f_html.write('<td></td>\n')
self.f_html.write('<td><a href='+lastpasshyperlink+'>'+lastpasstext+'</a></td>\n')
self.f_html.write('<td><a href='+lastfailhyperlink+'>'+lastfailtext+'</a></td>\n')
self.f_html.write('</tr>\n')
self.f_html.write('</table>\n')
#terminate HTML table and close file
self.Test_terminateHTML()
def Build_singleMR_Table(self,singlemr,htmlfilename):
print("Building single MR Tests Results...")
self.f_html=open(htmlfilename,'w')
###update date/time, format dd/mm/YY H:M:S
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M")
#HTML table header
self.singleMR_initHTML(dt_string)
#1 table per MR if test results exist => 1 table for matching mr
for x in range(len(self.git)):
mr=str(self.git[x]['iid'])
if mr==singlemr:
#if 'PASS' not in self.db[mr]:
self.f_html.write('<h3><a href="https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/'+mr+'">'+mr+'</a>'+' '+self.git[x]['title'] + '</h3>\n')
self.f_html.write('<table class="Test_Table">\n')
self.f_html.write('<tr>\n')
self.f_html.write('<th class="Test_Name">Test Name</th>\n')
self.f_html.write('<th class="Test_Descr">Bench</th> \n')
self.f_html.write('<th class="Test_Descr">Test</th> \n')
self.f_html.write('<th class="Pass"># Pass</th>\n')
self.f_html.write('<th class="Fail"># Fail</th>\n')
self.f_html.write('<th class="Last_Pass">Last Pass</th>\n')
self.f_html.write('<th class="Last_Fail">Last Fail</th>\n')
self.f_html.write('</tr>\n')
#parsing the tests
for t in self.tests:
row=[]
short_name= t
hyperlink= self.tests[t]['link']
job=self.tests[t]['job']
if job in self.db[mr]:
if 'PASS' in self.db[mr][job]:
row.append(self.db[mr][job]['PASS'])
else:
row.append('')
if 'FAIL' in self.db[mr][job]:
row.append(self.db[mr][job]['FAIL'])
else:
row.append('')
#2 columns for last_pass and last_fail links
if 'last_pass' in self.db[mr][job]:
lastpasshyperlink= self.db[mr][job]['last_pass'][1]
lastpasstext= self.db[mr][job]['last_pass'][0]
else:
lastpasshyperlink=''
lastpasstext=''
if 'last_fail' in self.db[mr][job]:
lastfailhyperlink= self.db[mr][job]['last_fail'][1]
lastfailtext= self.db[mr][job]['last_fail'][0]
else:
lastfailhyperlink=''
lastfailtext=''
self.f_html.write('<tr>\n')
self.f_html.write('<td><a href='+hyperlink+'>'+short_name+'</a></td>\n')
self.f_html.write('<td>'+self.tests[t]['bench']+'</td>\n')
self.f_html.write('<td>'+self.tests[t]['test']+'</td>\n')
if row[0]!='':
self.f_html.write('<td style="background-color: rgb(58, 236, 58);">'+str(row[0])+'</td>\n')
else:
self.f_html.write('<td></td>\n')
if row[1]!='':
self.f_html.write('<td style="background-color: red;">'+str(row[1])+'</td>\n')
else:
self.f_html.write('<td></td>\n')
self.f_html.write('<td><a href='+lastpasshyperlink+'>'+lastpasstext+'</a></td>\n')
self.f_html.write('<td><a href='+lastfailhyperlink+'>'+lastfailtext+'</a></td>\n')
self.f_html.write('</tr>\n')
self.f_html.write('</table>\n')
#terminate HTML table and close file
self.Test_terminateHTML()
def Build_MR_Table(self,htmlfilename):
print("Building Merge Requests Dashboard...")
self.f_html=open(htmlfilename,'w')
###update date/time, format dd/mm/YY H:M:S
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M")
#HTML table header
self.MR_initHTML(dt_string)
###MR data lines
for x in range(len(self.git)):
hyperlink= 'https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/'+ str(self.git[x]['iid'])
text= str(self.git[x]['iid'])
date_time_str = self.git[x]['created_at']
date_time_obj = datetime.strptime(date_time_str, '%Y-%m-%dT%H:%M:%S.%fZ')
milestone1=milestone2=milestone3=milestone4=""
if self.git[x]['milestone']!=None:
if self.git[x]['milestone']['title']=="REVIEW_CAN_START":
milestone1="X"
elif self.git[x]['milestone']['title']=="REVIEW_IN_PROGRESS":
milestone2="X"
elif self.git[x]['milestone']['title']=="REVIEW_COMPLETED_AND_APPROVED":
milestone3="X"
elif self.git[x]['milestone']['title']=="OK_TO_BE_MERGED":
milestone4="X"
else:
pass
else:
pass
#check if empty or not
if self.git[x]['assignee']!=None:
assignee = str(self.git[x]['assignee']['name'])
else:
assignee = ""
#check if empty or not
if len(self.git[x]['reviewers'])!=0:
reviewer = str(self.git[x]['reviewers'][0]['name'])
else:
reviewer = ""
if self.git[x]['has_conflicts']==True:
conflicts = "YES"
else:
conflicts = ""
#add a column flagging that the review form is present
#we use gitlab API to parse the MR notes
gl = gitlab.Gitlab.from_config('OAI')
project_id = 223
project = gl.projects.get(project_id)
#get the opened MR in the project
mrs = project.mergerequests.list(state='opened',per_page=100)
review_form=''
for m in range (0,len(mrs)):
if mrs[m].iid==self.git[x]['iid']:#check the iid is the one we are on
mr_notes = mrs[m].notes.list(all=True)
n=0
found=False
while found==False and n<len(mr_notes):
res=re.search('Code Review by',mr_notes[n].body)#this is the marker we are looking for in all notes
if res!=None:
review_form = "X"
found=True
n+=1
#build final row to be inserted
row =[hyperlink, text, str(date_time_obj.date()),str(self.git[x]['author']['name']), str(self.git[x]['title']),\
assignee, reviewer,\
milestone1,milestone2,milestone3,review_form,milestone4,conflicts]
self.MR_rowHTML(row)
#terminate HTML table and close file
self.MR_terminateHTML()
def CopyToS3(self,htmlfilename,bucket,key):
print("Uploading to S3 bucket")
#Creating Session With Boto3.
s3 = boto3.client('s3')
#Creating S3 Resource From the Session.
result = s3.upload_file(htmlfilename, bucket,key, ExtraArgs={'ACL':'public-read','ContentType': 'text/html'})
#unused
def CopyCSS(self,path):
s3 = boto3.resource('s3')
copy_source = {'Bucket': 'oaitestdashboard','Key':'test_styles.css'}
s3.meta.client.copy(copy_source, 'oaitestdashboard', path+'/'+ 'test_styles.css')
def PostGitNote(self,mr,commit,args):
#current date and time to be posted with test results
#now = datetime.now()
#dt_string = now.strftime("%d/%m/%Y %H:%M")
if len(args)%4 != 0:
print("Wrong Number of Arguments")
return
@@ -528,7 +74,7 @@ class Dashboard:
editable_mr = project.mergerequests.get(int(mr))
mr_notes = editable_mr.notes.list(all=True)
body = '[Consolidated Test Results](https://oaitestdashboard.s3.eu-west-1.amazonaws.com/MR'+mr+'/index.html)\\\n'
body = '[Consolidated Test Results]\\\n'
body += 'Tested CommitID: ' + commit
for i in range(0,n_tests):
@@ -544,54 +90,16 @@ class Dashboard:
})
editable_mr.save()
def AWSCleanup(self,mode):
#first build MR list from aws S3 bucket
if mode != 'report' and mode !='delete':
print("incorrect mode for awsclean")
return
aws_mr_list=[]
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('oaitestdashboard')
for my_bucket_object in my_bucket.objects.all():
#MR objects are like MR1407/index.html
res=re.search(r'^MR([0-9]+)',my_bucket_object.key)
if res!=None:
aws_mr_list.append(res.group(1))#store MR number as a string
#open MR list from GIt already exists as an attribute of this class self.mr_list
#parse aws MR list and delete those MR that are no longer open
for aws_mr in aws_mr_list:
if aws_mr not in self.mr_list:
if mode=="report":
print(aws_mr+' can be deleted from AWS S3')
else :
awspath="MR"+aws_mr+"/"
print('deleting ' + aws_mr)
my_bucket.objects.filter(Prefix=awspath).delete()
def main():
#call from slave Jenkinsfile : sh "python3 Hdashboard.py testevent ${params.eNB_MR} "
#call from master Jenkinsfile : sh "python3 Hdashboard.py gitpost ${GitPostArgs}"
if len(sys.argv)>1:
if len(sys.argv) > 1:
#individual MR test results + test dashboard, event based (end of slave jenkins pipeline)
if sys.argv[1]=="testevent" :
mr=sys.argv[2]
htmlDash=Dashboard()
if mr in htmlDash.mr_list:
#single MR test results
htmlDash.Build('singleMR',mr,'/tmp/MR'+mr+'_index.html')
htmlDash.CopyToS3('/tmp/MR'+mr+'_index.html','oaitestdashboard','MR'+mr+'/index.html')
#all MR test results
htmlDash.Build('Tests','0000','/tmp/Tests_index.html')
htmlDash.CopyToS3('/tmp/Tests_index.html','oaitestdashboard','index.html')
if sys.argv[1] != "gitpost":
print("error: only gitpost subcommand is supported")
exit(1)
#git post with MR test results, event based (end of master jenkins pipeline)
elif sys.argv[1]=="gitpost":
mr=sys.argv[2]
commit=sys.argv[3]
@@ -603,25 +111,15 @@ def main():
htmlDash.PostGitNote(mr,commit, args)
else:
print("Not a Merge Request => this build is for testing/debug purpose, no report to git")
elif sys.argv[1]=="awsclean":
mode=sys.argv[2]#report or delete
htmlDash=Dashboard()
htmlDash.AWSCleanup(mode)
else:
print("Wrong argument at position 1")
exit(1)
#test and MR status dashboards, cron based
else:
htmlDash=Dashboard()
#all MR status dashboard
htmlDash.Build('MR','0000','/tmp/MR_index.html')
htmlDash.CopyToS3('/tmp/MR_index.html','oairandashboard','index.html')
#all MR test results
htmlDash.Build('Tests','0000','/tmp/Tests_index.html')
htmlDash.CopyToS3('/tmp/Tests_index.html','oaitestdashboard','index.html')
print("error: only gitpost subcommand is supported")
exit(1)
if __name__ == "__main__":
# execute only if run as a script

View File

@@ -1,136 +0,0 @@
body {
font-family: 'lato', sans-serif;
}
.Main {
text-align:left;
font-size: 30px;
font-weight: bold;
}
.DashLink {
text-align:left;
font-size: 16px;
}
.DashLink:hover {
font-weight: bold;
}
.Date {
text-align:left;
font-size: 16px;
font-weight: bold;
}
a { text-decoration: none; }
a:visited { text-decoration: none; color:blue}
a:hover { text-decoration: none; font-weight: bold; color:blue}
.MR_Table {
border-collapse: collapse;
}
.MR_Table tr {
font-size: 12px;
text-align:center;
}
.MR_Table tr:hover {
background-color:lightgray;
}
.MR_Table td {
border: 1px solid black;
padding : 5px;
}
.MR_Table td:hover {
font-weight : bold;
}
.MR_Table th {
font-size: 14px;
text-align:center;
padding : 5px;
}
.title_cell {
text-align:left;
}
.MR {
table-layout: fixed;
width: 50px;
background-color: rgb(143, 154, 216);
}
.CREATED_AT {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}
.AUTHOR {
table-layout: fixed;
width: 150px;
background-color: rgb(143, 154, 216);
}
.TITLE {
table-layout: fixed;
width: 500px;
background-color: rgb(143, 154, 216);
}
.ASSIGNEE {
table-layout: fixed;
width: 150px;
background-color: rgb(143, 154, 216);
}
.REVIEWER {
table-layout: fixed;
width: 150px;
background-color: rgb(143, 154, 216);
}
.CAN_START {
background-color: orange;
table-layout: fixed;
width: 150px;
}
.IN_PROGRESS {
background-color: yellow;
table-layout: fixed;
width: 150px;
}
.COMPLETED {
background-color: rgb(144, 221, 231);
table-layout: fixed;
width: 150px;
}
.REVIEW_FORM {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}
.OK_MERGE {
background-color: rgb(58, 236, 58);
table-layout: fixed;
width: 150px;
}
.MERGE_CONFLICTS {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}

View File

@@ -1,405 +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
# */
#---------------------------------------------------------------------
# Merge Requests Dashboard for RAN on googleSheet
#
# Required Python Version
# Python 3.x
#
#---------------------------------------------------------------------
#-----------------------------------------------------------
# Import
#-----------------------------------------------------------
#author Remi
#import google spreadsheet API
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import subprocess
import shlex #lexical analysis
import json #json structures
import datetime #now() and date formating
from datetime import datetime
import re
import gitlab
import yaml
import os
import pickle
import time
from sqlconnect import SQLConnect
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
class gDashboard:
def __init__(self, creds_file, spreadsheet, worksheet): #"creds.json", 'OAI RAN Dashboard', 'MR Status'
self.scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
self.creds = ServiceAccountCredentials.from_json_keyfile_name(creds_file, self.scope)
self.client = gspread.authorize(self.creds)
#spreadsheet
self.ss = self.client.open(spreadsheet)
#worksheet
self.sheet = self.ss.worksheet(worksheet)
self.ss.del_worksheet(self.sheet) #start by deleting the old sheet
self.sheet = self.ss.add_worksheet(title=worksheet, rows="100", cols="30") #create a new one
#init with data sources : git, yaml config file, test results databases
cmd="""curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100" """
self.git = self.__getGitData(cmd) #git data from Gitlab
self.tests = self.__loadCfg('ran_dashboard_cfg.yaml') #tests table setup from yaml
self.db = self.__loadFromDB() #test results from database
def __loadCfg(self,yaml_file):
with open(yaml_file,'r') as f:
tests = yaml.load(f)
return tests
def __getGitData(self,cmd):
#cmd="""curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100" """
process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
output = process.stdout.readline()
tmp=output.decode("utf-8")
d = json.loads(tmp)
return d
def __loadFromDB(self):
mr_list=[]
for x in range(len(self.git)):
mr_list.append(str(self.git[x]['iid']))
mydb=SQLConnect()
for MR in mr_list:
mydb.get(MR)
mydb.close_connection()
return mydb.data
def gBuild(self, destinationSheetName):
###line 1 : update date/time, format dd/mm/YY H:M:S
now = datetime.now()
dt_string = "Update : " + now.strftime("%d/%m/%Y %H:%M")
row =[dt_string]
self.sheet.insert_row(row, index=1, value_input_option='RAW')
###line 2 is for the test short names (links to jenkins pipeline), updated at the end
###line 3 is for the column names
i=3
row =["MR","Created_at","Author","Title","Assignee", "Reviewer", "CAN START","IN PROGRESS","COMPLETED","Review Form","OK MERGE","Merge conflicts",""]
#tests
for t in range(0,len(self.tests)):
row.append("# PASS")
row.append("# FAIL")
row.append("Last Pass")
row.append("Last Fail")
self.sheet.insert_row(row, index=i, value_input_option='RAW')
###line 4 onward, MR data lines
for x in range(len(self.git)):
i=i+1
date_time_str = self.git[x]['created_at']
date_time_obj = datetime.strptime(date_time_str, '%Y-%m-%dT%H:%M:%S.%fZ')
milestone1=milestone2=milestone3=milestone4=""
if self.git[x]['milestone']!=None:
if self.git[x]['milestone']['title']=="REVIEW_CAN_START":
milestone1="X"
elif self.git[x]['milestone']['title']=="REVIEW_IN_PROGRESS":
milestone2="X"
elif self.git[x]['milestone']['title']=="REVIEW_COMPLETED_AND_APPROVED":
milestone3="X"
elif self.git[x]['milestone']['title']=="OK_TO_BE_MERGED":
milestone4="X"
else:
pass
else:
pass
#check if empty or not
if self.git[x]['assignee']!=None:
assignee = str(self.git[x]['assignee']['name'])
else:
assignee = ""
#check if empty or not
if len(self.git[x]['reviewers'])!=0:
reviewer = str(self.git[x]['reviewers'][0]['name'])
else:
reviewer = ""
if self.git[x]['has_conflicts']==True:
conflicts = "YES"
else:
conflicts = ""
#add a column flagging that the review form is present
#we use gitlab API to parse the MR notes
gl = gitlab.Gitlab.from_config('OAI')
project_id = 223
project = gl.projects.get(project_id)
#get the opened MR in the project
mrs = project.mergerequests.list(state='opened',per_page=100)
review_form=''
for m in range (0,len(mrs)):
if mrs[m].iid==self.git[x]['iid']:#check the iid is the one we are on
mr_notes = mrs[m].notes.list(all=True)
n=0
found=False
while found==False and n<len(mr_notes):
res=re.search('Code Review by',mr_notes[n].body)#this is the marker we are looking for in all notes
if res!=None:
review_form = "X"
found=True
n+=1
#build final row to be inserted, the first column is left empty for now, will be filled afterward with hyperlinks to gitlab MR
row =["", str(date_time_obj.date()),str(self.git[x]['author']['name']), str(self.git[x]['title']),\
assignee, reviewer,\
milestone1,milestone2,milestone3,review_form,milestone4,conflicts,""]
#and append the test results coming from self.db
mr=str(self.git[x]['iid'])
for t in self.tests:
if mr in self.db:
job=self.tests[t]['job']
if job in self.db[mr]:
if 'PASS' in self.db[mr][job]:
row.append(self.db[mr][job]['PASS'])
else:
row.append('')
if 'FAIL' in self.db[mr][job]:
row.append(self.db[mr][job]['FAIL'])
else:
row.append('')
#leave 2 columns for last_pass and last_fail links
row.append('')
row.append('')
else:
#4 columns are empty
row.append('')
row.append('')
row.append('')
row.append('')
#insert the final row to worksheet
self.sheet.insert_row(row, index=i, value_input_option='RAW')
time.sleep(10)
#add MR hyperlinks in a list of requests to be sent as one update batch; this to save API calls (quotas)
i=3
requests=[]
for x in range(len(self.git)):
rowIndex=i
colIndex=0
hyperlink= '\"'+"https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/"+ str(self.git[x]['iid']) +'\"'
text= '\"'+str(self.git[x]['iid'])+'"'
requests.append(self.addHyperlink(hyperlink, text, destinationSheetName, rowIndex, colIndex))
mr=str(self.git[x]['iid'])
colIndex=15
for t in self.tests:
job=self.tests[t]['job']
if job in self.db[mr]:
if 'last_pass' in self.db[mr][job]:
hyperlink= '\"'+ self.db[mr][job]['last_pass'][1] +'\"'
text= '\"'+self.db[mr][job]['last_pass'][0]+'"'
requests.append(self.addHyperlink(hyperlink, text, destinationSheetName, rowIndex, colIndex))
if 'last_fail' in self.db[mr][job]:
hyperlink= '\"'+ self.db[mr][job]['last_fail'][1] +'\"'
text= '\"'+self.db[mr][job]['last_fail'][0]+'"'
requests.append(self.addHyperlink(hyperlink, text, destinationSheetName, rowIndex, colIndex+1))
colIndex+=4 #move to next test
i=i+1 #increment row index for next MR
body = {"requests": requests}
self.ss.batch_update(body)
###line 2 is for the test names
#add MR hyperlinks in a list of requests to be sent as one update batch; this to save API calls (quotas)
requests=[]
rowIndex=1
colIndex=13
for t in self.tests :
hyperlink= '\"'+self.tests[t]['link']+'\"'
short_name= '\"'+ t +'\"'
requests.append(self.addHyperlink(hyperlink, short_name, destinationSheetName, rowIndex, colIndex))
colIndex+=4
body = {"requests": requests}
self.ss.batch_update(body)
def addHyperlink(self, hyperlink, text, destinationSheetName, rowIndex, colIndex):
sheetId = self.ss.worksheet(destinationSheetName)._properties['sheetId']
request =\
{
"updateCells": {
"rows": [
{
"values": [
{
"userEnteredValue": {
"formulaValue":"=HYPERLINK({},{})".format(hyperlink, text)
}
}
]
}
],
"fields": "userEnteredValue",
"start": {
"sheetId": sheetId,
"rowIndex": rowIndex,
"columnIndex": colIndex
}
}
}
return request
def gFormat(self,sourceSheetName,destinationSheetName): # "Formating" , "MR Status"
#the requests are appended in a list of requests to be sent as one update batch; this to save API calls (quotas)
#copy formating template
sourceSheetId = self.ss.worksheet(sourceSheetName)._properties['sheetId']
destinationSheetId = self.ss.worksheet(destinationSheetName)._properties['sheetId']
requests=[]
requests.append(
{
"copyPaste": {
"source": {
"sheetId": sourceSheetId,
"startRowIndex": 1,
"endRowIndex": 40,
"startColumnIndex": 0,
"endColumnIndex": 30
},
"destination": {
"sheetId": destinationSheetId,
"startRowIndex": 1,
"endRowIndex": 40,
"startColumnIndex": 0,
"endColumnIndex": 30
},
"pasteType": "PASTE_FORMAT"
}
}
)
#resize columns fit to data, except col 0
sheetId = self.ss.worksheet(destinationSheetName)._properties['sheetId']
requests.append(
{
'autoResizeDimensions': {
'dimensions': {
'sheetId': sheetId,
'dimension': 'COLUMNS',
'startIndex': 1,
'endIndex': 12
}
}
}
)
#resize col 0
sheetId = self.ss.worksheet(destinationSheetName)._properties['sheetId']
requests.append(
{
"updateDimensionProperties": {
"range": {
"sheetId": sheetId,
"dimension": "COLUMNS",
"startIndex": 0,
"endIndex": 1
},
"properties": {
"pixelSize": 100
},
"fields": "pixelSize"
}
}
)
#resize milestones to be cleaner
sheetId = self.ss.worksheet(destinationSheetName)._properties['sheetId']
requests.append(
{
"updateDimensionProperties": {
"range": {
"sheetId": sheetId,
"dimension": "COLUMNS",
"startIndex": 6,
"endIndex": 11
},
"properties": {
"pixelSize": 120
},
"fields": "pixelSize"
}
}
)
#group MR related columns
# sheetId = self.ss.worksheet(destinationSheetName)._properties['sheetId']
# requests.append(
# {
# "addDimensionGroup": {
# "range": {
# "dimension": "COLUMNS",
# "sheetId": sheetId,
# "startIndex": 3,
# "endIndex": 12
# },
# }
# }
# )
#
body = {"requests": requests}
self.ss.batch_update(body)
def main():
my_gDashboard=gDashboard("/opt/dashboard/g_creds.json", 'OAI RAN Dashboard', 'MR Status')
my_gDashboard.gBuild("MR Status")
my_gDashboard.gFormat("Formating" , "MR Status")
if __name__ == "__main__":
# execute only if run as a script
main()

View File

@@ -1,26 +0,0 @@
LTE-2x2 : #short name used in the dashboard
job : 'RAN-LTE-2x2-Module-OAIEPC' #job name from Jenkins, used in the database
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-LTE-2x2-Module-OAIEPC'
bench : 'Obelix-N310-OAIEPC-Quectel(nrmodule2)'
test : 'TM1 + TM2, TDD, 40MHz, MCS9, 26Mb DL, 7Mb UL'
NSA-B200 :
job : 'RAN-NSA-B200-Module-LTEBOX'
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-NSA-B200-Module-LTEBOX'
bench : 'Nepes-B200-Obelix-B200-LTEBOX-Quectel(idefix)'
test : '20MHz, 60Mb DL, 3Mb UL'
NSA-2x2 :
job : 'RAN-NSA-2x2-Module-OAIEPC'
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-NSA-2x2-Module-OAIEPC'
bench : 'Asterix-N310-Obelix-N310-OAIEPC-Quectel(nrmodule2)'
test : 'TDD, 40MHz, 60Mb DL, 3Mb UL'
SA-N310 :
job : 'RAN-SA-Module-CN5G'
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-Module-CN5G'
bench : 'Asterix-N310-OAICN5G-Quectel(nrmodule2)'
test : 'TDD, 40MHz, 60Mb DL, 3Mb UL'
SA-OAIUE-N310-X300 :
job : 'RAN-SA-OAIUE-N310-X300-CN5G'
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-N310-X300-CN5G/'
bench : 'Asterix-N310-OAICN5G-OAIUE-N310'
test : 'TDD, 40MHz, Ping, (to be implemented : iperf)'

View File

@@ -1,3 +0,0 @@
The code ran_dashboard.py was initially developped to bring MR status and test resuts to a google sheet, using google sheets API.
This method is now deprecated, and replaced by Hdashboard.py that builds the results as HTML page and loads it to AWS S3.
ran_dashboard_cfg.yaml is still used by Hdashboard.py as tests config file.

View File

@@ -1,107 +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
# */
#---------------------------------------------------------------------
# Merge Requests Dashboard for RAN on googleSheet
#
# Required Python Version
# Python 3.x
#
#---------------------------------------------------------------------
#author Remi
import pymysql
import sys
from datetime import datetime
import pickle
#This is the script/package used by the dashboard to retrieve the MR test results from the database
class SQLConnect:
def __init__(self):
self.connection = pymysql.connect(
host='172.22.0.2',
user='root',
password = 'ucZBc2XRYdvEm59F',
db='oaicicd_tests',
port=3306
)
self.data={}
#retrieve data from mysql database and organize it in a dictionary (per MR passed as argument)
def get(self,MR):
self.data[MR]={}
cur=self.connection.cursor()
#get counters per test
sql = "select TEST,STATUS, count(*) AS COUNT from test_results where MR=(%s) group by TEST, STATUS;"
cur.execute(sql,MR)
response=cur.fetchall()
if len(response)==0:#no test results yet
self.data[MR]['PASS']=''
self.data[MR]['FAIL']=''
else:
for i in range(0,len(response)):
test=response[i][0]
status=response[i][1]
count=response[i][2]
if test in self.data[MR]:
self.data[MR][test][status]=count
else:
self.data[MR][test]={}
self.data[MR][test][status]=count
#get last failing build and link
sql = "select TEST,BUILD, BUILD_LINK from test_results where MR=(%s) and STATUS='FAIL' order by DATE DESC;"
cur.execute(sql,MR)
response=cur.fetchall()
if len(response)!=0:
for i in range(0,len(response)):
test=response[i][0]
build=response[i][1]
link=response[i][2]
if 'last_fail' not in self.data[MR][test]:
self.data[MR][test]['last_fail']=[]
self.data[MR][test]['last_fail'].append(build)
self.data[MR][test]['last_fail'].append(link)
#get last passing build and link
sql = "select TEST,BUILD, BUILD_LINK from test_results where MR=(%s) and STATUS='PASS' order by DATE DESC;"
cur.execute(sql,MR)
response=cur.fetchall()
if len(response)!=0:
for i in range(0,len(response)):
test=response[i][0]
build=response[i][1]
link=response[i][2]
if 'last_pass' not in self.data[MR][test]:
self.data[MR][test]['last_pass']=[]
self.data[MR][test]['last_pass'].append(build)
self.data[MR][test]['last_pass'].append(link)
#close database connection
def close_connection(self):
self.connection.close()

View File

@@ -1,103 +0,0 @@
body {
font-family: 'lato', sans-serif;
}
.Main {
text-align: left;
font-size: 30px;
font-weight: bold;
}
.DashLink {
text-align:left;
font-size: 16px;
}
.DashLink:hover {
font-weight: bold;
}
.Date {
text-align: left;
font-size: 16px;
font-weight: bold;
}
h3 {
font-size: 16px;
}
a { text-decoration: none; }
a:visited { text-decoration: none; color:blue}
a:hover { text-decoration: none; font-weight: bold; color:blue}
.Test_Table {
border-collapse: collapse;
}
.Test_Table tr {
font-size: 12px;
text-align:center;
}
.Test_Table tr:hover {
background-color:lightgray;
}
.Test_Table td {
border: 1px solid black;
padding : 5px;
}
.Test_Table td:hover {
font-weight : bold;
}
.Test_Table th {
font-size: 14px;
text-align:center;
padding : 5px;
}
.Test_Name {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}
.Test_Descr {
table-layout: fixed;
width: 400px;
background-color: rgb(143, 154, 216);
}
.Pass {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}
.Fail {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}
.Last_Pass {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}
.Last_Fail {
table-layout: fixed;
width: 100px;
background-color: rgb(143, 154, 216);
}

341
ci-scripts/run_sl_test.py Executable file
View File

@@ -0,0 +1,341 @@
#!/usr/bin/env python3
#
# Automated tests for running 5G NR Sidelink SyncRef UE and/or Nearby UE.
# The following is an example to run remote machine (nearby) three times.
# The syncref UE is launched on the current machine, and a single
# nearby UE is launched on the machine specified by the --host and
# --user flags. The -r will enable this simulation to be repeated
# three times.
#
# python3 run_sl_test.py --user account --host 10.1.1.68 -r 3
#
# The following is an example to run just a Sidelink Nearby UE.
# By specifying -l nearby, only the nearby UE will be launched
# on the machine specified by the --host and --user flags.
# The -r will enable this simulation to be repeated two times.
#
# python3 run_sl_test.py -l nearby --user account --host 10.1.1.68 -r 2
#
# See `--help` for more information.
#
import os
import sys
import argparse
import logging
import time
import re
import glob
import subprocess
from subprocess import Popen
import threading
from typing import Dict
from queue import *
from sl_check_log import LogChecker
HOME_DIR = os.path.expanduser( '~' )
# ----------------------------------------------------------------------------
# Command line argument parsing
parser = argparse.ArgumentParser(description="""
Automated tests for 5G NR Sidelink simulations
""")
parser.add_argument('--launch', '-l', default='both', choices='syncref nearby both'.split(), help="""
Sidelink UE type to launch test scenario (default: %(default)s)
""")
parser.add_argument('--host', default='10.1.1.80', type=str, help="""
Nearby Host IP (default: %(default)s)
""")
parser.add_argument('--user', '-u', default='zaid', type=str, help="""
User id in Nearby Host (default: %(default)s)
""")
parser.add_argument('--repeat', '-r', default=1, type=int, help="""
The number of repeated test iterations (default: %(default)s)
""")
parser.add_argument('--basic', '-b', action='store_true', help="""
Basic test with basic shell commands
""")
parser.add_argument('--commands', default='sl_cmds.txt', help="""
The USRP Commands .txt file (default: %(default)s)
""")
parser.add_argument('--duration', '-d', metavar='SECONDS', type=int, default=30, help="""
How long to run the test before stopping to examine the logs
""")
parser.add_argument('--nid1', type=int, default=10, help="""
Nid1 value
""")
parser.add_argument('--nid2', type=int, default=1, help="""
Nid2 value
""")
parser.add_argument('--log-dir', default=HOME_DIR, help="""
Where to store log files
""")
parser.add_argument('--compress', action='store_true', help="""
Compress the log files in the --log-dir
""")
parser.add_argument('--no-run', '-n', action='store_true', help="""
Don't run the test, only examine the logs in the --log-dir
directory from a previous run of the test
""")
parser.add_argument('--debug', action='store_true', help="""
Enable debug logging (for this script only)
""")
parser.add_argument('--test', '-t', default='usrp', choices='psbchsim rfsim usrp'.split(), help="""
The kind of test scenario to run. The options include psbchsim, rfsim, or usrp. (default: %(default)s)
""")
OPTS = parser.parse_args()
del parser
logging.basicConfig(level=logging.DEBUG if OPTS.debug else logging.INFO,
format='>>> %(name)s: %(levelname)s: %(message)s')
LOGGER = logging.getLogger(os.path.basename(sys.argv[0]))
# ----------------------------------------------------------------------------
def redirect_output(cmd: str, filename: str) -> str:
cmd += ' >{} 2>&1'.format(filename)
return cmd
def thread_delay(thread_name: str, delay: int) -> None:
count = 0
while count < 1:
time.sleep(delay)
count += 1
class Command:
"""
Parsing USRP commands file
"""
def __init__(self, filename) -> None:
self.check_user()
self.filename = self.check_file(filename)
self.parse_commands()
def check_user(self) -> None:
if OPTS.test != 'usrp': return
if OPTS.launch != 'syncref' and OPTS.user == '':
LOGGER.error("--user followed by [user id] is mandatory to connect to remote machine")
sys.exit(1)
def check_file(self, filename) -> str:
data_file = glob.glob(filename)
if data_file:
return filename
else:
LOGGER.error(f'The file {filename} does not exist!')
sys.exit(1)
def parse_commands(self) -> None:
"""
Scan the provided commands file.
"""
self.launch_cmds: Dict[str, str] = {}
if OPTS.test == 'usrp':
launch_cmds_re = re.compile(r'^\s*(\S*)usrp\S*\s*=\s*((\S+\s*)*)')
elif OPTS.test == 'rfsim':
launch_cmds_re = re.compile(r'^\s*(\S*)rfsim\S*\s*=\s*((\S+\s*)*)')
elif OPTS.test == 'psbchsim':
launch_cmds_re = re.compile(r'^\s*(\S*)psbchsim\S*\s*=\s*((\S+\s*)*)')
else:
LOGGER.error("Provided test option not valid! %s", OPTS.test)
exit(1)
with open(self.filename, 'rt') as fh:
nearby_cmd_continued = False
syncref_cmd_continued = False
for line in fh:
if line == '\n': continue
match = launch_cmds_re.match(line)
if match:
host_role = match.group(1)
launch_cmds = match.group(2)
if host_role.lower().startswith('nearby'):
nearby_cmd_continued = True
continue
if host_role.lower().startswith('syncref'):
syncref_cmd_continued = True
continue
elif nearby_cmd_continued:
launch_cmds += line
if not line.strip().endswith('\\'):
self.launch_cmds['nearby'] = launch_cmds
LOGGER.debug('Nearby cmd is %s', launch_cmds)
nearby_cmd_continued = False
continue
elif syncref_cmd_continued:
launch_cmds += line
if not line.strip().endswith('\\'):
self.launch_cmds['syncref'] = launch_cmds
LOGGER.debug('Syncref cmd is %s', launch_cmds)
syncref_cmd_continued = False
continue
else:
LOGGER.debug('Unmatched line %r', line)
continue
if self.launch_cmds == {}:
LOGGER.error(f'usrp commands are not found in file: {self.filename} ')
exit()
class TestThread(threading.Thread):
"""
Represents TestThread
"""
def __init__(self, queue, commands, passed, log_agent):
threading.Thread.__init__(self)
self.queue = queue
self.commands = commands
self.passed = passed
self.delay = 0
self.log_file = log_agent.txlog_file_path
self.log_agent = log_agent
def run(self):
if self.queue.empty() == True:
LOGGER.error("Queue is empty!")
sys.exit(1)
try:
while not self.queue.empty():
job = self.queue.get()
if "nearby" == job:
thread_delay(job, delay = 0)
self.launch_nearby(job)
if "syncref" == job and not OPTS.no_run:
thread_delay(job, delay = self.delay)
self.launch_syncref(job)
self.queue.task_done()
except Exception as inst:
LOGGER.info(f"Failed to operate on job with type {type(inst)} and args {inst.args}")
def launch_syncref(self, job) -> Popen:
LOGGER.info('Launching SyncRef UE')
if OPTS.basic: cmd = redirect_output('uname -a', self.log_file)
else: cmd = self.commands.launch_cmds[job]
proc = Popen(cmd, shell=True)
LOGGER.info(f"syncref_proc = {proc}")
if not OPTS.basic and not OPTS.no_run:
LOGGER.info(f"Process running... {job}")
time.sleep(OPTS.duration)
self.kill_process("syncref", proc)
def launch_nearby(self, job, host=OPTS.host, user=OPTS.user) -> Popen:
LOGGER.info('#' * 42)
LOGGER.info('Launching Nearby UE')
if OPTS.basic: cmd = redirect_output('uname -a', self.log_file)
else: cmd = self.commands.launch_cmds[job]
if OPTS.test == 'usrp':
cmd = cmd[:-1] + f' -d {OPTS.duration} --nid1 {OPTS.nid1} --nid2 {OPTS.nid2}'
proc = Popen(["ssh", f"{user}@{host}", cmd],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
LOGGER.info(f"nearby_proc = {proc}")
remote_output = proc.stdout.readlines()
if remote_output == []:
nearby_result = proc.stderr.readlines()
else:
nearby_result = remote_output
self.kill_process("nearby", proc)
if nearby_result:
self.find_nearby_result_metric(nearby_result)
else:
proc = Popen(cmd, shell=True)
LOGGER.info(f"nearby_proc = {proc}")
if not OPTS.basic and not OPTS.no_run:
LOGGER.info(f"Process running... {job}")
time.sleep(OPTS.duration)
self.kill_process("nearby", proc)
nearby_result = self.log_agent.analyze_nearby_logs(OPTS.nid1, OPTS.nid2)
if nearby_result:
self.find_nearby_result_metric(nearby_result)
def find_nearby_result_metric(self, remote_log):
result_metric = None
for line in remote_log:
if type(line) is not str:
line = line.decode()
if OPTS.test == 'usrp':
LOGGER.info(line.strip())
# 'SyncRef UE found. RSRP: -100 dBm/RE. It took {delta_time_s} seconds'
if 'SyncRef UE found' in line:
fields = line.split(maxsplit=12)
if len(fields) > 6:
ssb_rsrp = float(fields[-6])
sync_duration = float(fields[-2])
counting_duration = sync_duration - self.delay
result_metric = (ssb_rsrp, sync_duration, counting_duration)
self.passed += [result_metric]
return
def kill_process(self, job: str, proc: Popen) -> None:
# Wait for the processes to end
LOGGER.info(f'kill main simulation processes... {job}')
cmd = ['sudo', 'killall']
cmd.append('-KILL')
if proc:
cmd.append('nr-uesoftmodem')
if "syncref" == job:
subprocess.run(cmd)
LOGGER.info(f'Waiting for PID proc.pid for {job}')
proc.kill()
proc.wait()
LOGGER.info(f'kill main simulation processes...done for {job}')
# ----------------------------------------------------------------------------
def main() -> int:
commands = Command(OPTS.commands)
log_agent = LogChecker(OPTS, LOGGER)
LOGGER.debug(f'Number of iterations {OPTS.repeat}')
if commands.launch_cmds is not None:
for role, cmd in commands.launch_cmds.items():
LOGGER.debug(f'{role} UE: {cmd}')
jobs = ['nearby', 'syncref'] if OPTS.launch == 'both' else [OPTS.launch]
passed_metric = []
num_tx_ssb = []
num_passed = 0
for i in range(OPTS.repeat):
threads = []
queue = Queue()
for job in jobs:
queue.put(job)
th = TestThread(queue, commands, passed_metric, log_agent)
th.setDaemon(True)
th.start()
threads.append(th)
for th in threads:
th.join()
if num_passed != len(passed_metric):
# Examine the logs to determine if the test passed
(ssb_rsrp, sync_duration, counting_duration) = passed_metric[-1]
num_ssb = log_agent.analyze_syncref_logs(counting_duration)
num_tx_ssb += [num_ssb]
LOGGER.info(f"Trial {i+1}/{OPTS.repeat} PASSED. {num_ssb} SSB(s) were generated. Measured {ssb_rsrp} RSRP (dbm/RE)")
else:
LOGGER.info(f"Failure detected during {i+1}/{OPTS.repeat} trial(s).")
num_passed = len(passed_metric)
LOGGER.info('#' * 42)
LOGGER.info(f"Number of passed = {len(passed_metric)}/{OPTS.repeat}")
if len(num_tx_ssb) > 0:
LOGGER.info(f"Avg number of SSB = {sum(num_tx_ssb) / len(num_tx_ssb)} ({num_tx_ssb})")
if len(passed_metric) > 0:
LOGGER.info(f"Avg SSB RSRP = {sum([result[0] for result in passed_metric]) / len(passed_metric)}")
LOGGER.info(f"Avg Sync duration (seconds) = {sum([result[1] for result in passed_metric]) / len(passed_metric)}")
return 0
sys.exit(main())

112
ci-scripts/sl_check_log.py Executable file
View File

@@ -0,0 +1,112 @@
#!/usr/bin/env python3
import os
import bz2
import logging
from typing import Optional, List, Generator
class LogChecker():
def __init__(self, OPTS, LOGGER):
self.OPTS = OPTS
self.LOGGER = LOGGER
self.rxlog_file_path = os.path.join(OPTS.log_dir, 'rx.log')
self.txlog_file_path = os.path.join(OPTS.log_dir, 'tx.log')
def get_lines(self, filename: str) -> Generator[str, None, None]:
"""
Yield each line of the given log file (.bz2 compressed log file if -c flag is used.)
"""
fh = bz2.open(filename, 'rb') if self.OPTS.compress else open(filename, 'rb')
for line_bytes in fh:
line = line_bytes.decode('utf-8', 'backslashreplace')
line = line.rstrip('\r\n')
yield line
def get_analysis_messages_nearby(self, filename: str) -> Generator[str, None, None]:
"""
Finding all logs in the log file with X fields for log parsing optimization
"""
self.LOGGER.info('Scanning %s', filename)
for line in self.get_lines(filename):
#796821.854505 [NR_PHY] SyncRef UE found with Nid1 10 and Nid2 1 SS-RSRP 100 dBm/RE
#796811.532881 [NR_PHY] nrUE configured
fields = line.split(maxsplit=10)
if len(fields) == 11 or len(fields) == 4:
yield line
def analyze_nearby_logs(self, exp_nid1: int, exp_nid2: int) -> bool:
found = set()
est_nid1, est_nid2, time_start_s, time_end_s = -1, -1, -1, -1
ssb_rsrp = 0
log_file = self.rxlog_file_path
result = None
if self.OPTS.compress:
log_file = f'{log_file}.bz2'
for line in self.get_analysis_messages_nearby(log_file):
#796821.854505 [NR_PHY] SyncRef UE found with Nid1 10 and Nid2 1 SS-RSRP -100 dBm/RE
#796811.532881 [NR_PHY] nrUE configured
if 'SyncRef UE found' in line and 'Nid1' in line and 'Nid2' in line:
num_split = 13 if 'RSRP' in line else 10
fields = line.split(maxsplit=num_split)
est_nid1 = int(fields[7])
est_nid2 = int(fields[10])
if 'RSRP' in line:
ssb_rsrp = int(fields[12])
found.add('found')
time_end_s = float(fields[0])
break
if time_start_s == -1 and 'nrUE configured' in line:
fields = line.split(maxsplit=3)
time_start_s = float(fields[0])
self.LOGGER.debug('found: %r', found)
if len(found) != 1:
self.LOGGER.error(f'Failed -- No SyncRef UE found.')
return
elif exp_nid1 != est_nid1 or exp_nid2 != est_nid2:
self.LOGGER.error(f'Failed -- found SyncRef UE Nid1 {est_nid1}, Ni2 {est_nid2}, expecting Nid1 {exp_nid1}, Nid2 {exp_nid2}')
return
if time_start_s == -1:
self.LOGGER.error(f'Failed -- No start time found! Fix log and re-run!')
return
delta_time_s = time_end_s - time_start_s
result = f'SyncRef UE found. RSRP: {ssb_rsrp} dBm/RE. It took {delta_time_s} seconds'
self.LOGGER.info(result)
return [result]
def get_analysis_messages_syncref(self, filename: str) -> Generator[str, None, None]:
"""
Finding all logs in the log file with X fields for log parsing optimization
"""
self.LOGGER.info('Scanning %s', filename)
for line in self.get_lines(filename):
#796811.532881 [NR_PHY] nrUE configured
#796821.854505 [NR_PHY] PSBCH SL generation started
fields = line.split(maxsplit=5)
if len(fields) == 4 or len(fields) == 6 :
yield line
def analyze_syncref_logs(self, counting_delta: float) -> int:
time_start_s, time_end_s = -1, -1
log_file = self.txlog_file_path
sum_ssb = 0
if self.OPTS.compress:
tx_log_file = f'{log_file}.bz2'
for line in self.get_analysis_messages_syncref(log_file):
#796811.532881 [NR_PHY] nrUE configured
#796821.854505 [NR_PHY] PSBCH SL generation started
if time_start_s == -1 and 'nrUE configured' in line:
fields = line.split(maxsplit=2)
time_start_s = float(fields[0])
time_end_s = time_start_s + counting_delta
if 'PSBCH SL generation started' in line:
fields = line.split(maxsplit=2)
time_st = float(''.join([ch for ch in fields[0] if ch.isnumeric() or ch =='.']))
if time_st < time_end_s:
sum_ssb += 1
return sum_ssb

45
ci-scripts/sl_cmds.txt Normal file
View File

@@ -0,0 +1,45 @@
# The lines containing 'usrp' and starts with 'syncref' or 'nearby' will be valid until it does not contain backspace.
####################
#### USRP ####
####################
### RX Nearby UE ###
nearby_usrp_cmd = cd $HOME/openairinterface5g/ci-scripts; \
python3 sl_rx_agent.py --cmd \
'sudo -E LD_LIBRARY_PATH=$HOME/openairinterface5g/cmake_targets/ran_build/build:$LD_LIBRARY_PATH \
$HOME/openairinterface5g/cmake_targets/ran_build/build/nr-uesoftmodem \
--sl-mode 2 -r 106 --numerology 1 --band 38 --SLC 2600000000 --ue-rxgain 90 \
--usrp-args "type=n3xx,addr=192.168.20.2,subdev=A:0,master_clock_rate=122.88e6" \
--log_config.global_log_options time,nocolor \
> ~/rx.log 2>&1'
### TX SyncRef UE ###
syncref_usrp_cmd = \
sudo -E LD_LIBRARY_PATH=$HOME/openairinterface5g/cmake_targets/ran_build/build:$LD_LIBRARY_PATH \
$HOME/openairinterface5g/cmake_targets/ran_build/build/nr-uesoftmodem \
--sl-mode 2 --sync-ref -r 106 --numerology 1 --band 38 --SLC 2600000000 --ue-txgain 8 \
--usrp-args "type=n3xx,addr=192.168.10.2,subdev=A:0,master_clock_rate=122.88e6" \
--log_config.global_log_options time,nocolor\
> ~/tx.log 2>&1
####################
#### RFSIM ####
####################
### RX Nearby UE ###
nearby_rfsim_cmd = \
sudo -E RFSIMULATOR=127.0.0.1 \
$HOME/openairinterface5g/cmake_targets/ran_build/build/nr-uesoftmodem \
--rfsim --sl-mode 2 --rfsimulator.serverport 4048 \
--log_config.global_log_options time,nocolor \
> ~/rx.log 2>&1
### TX SyncRef UE ###
syncref_rfsim_cmd = \
sudo -E RFSIMULATOR=server \
$HOME/openairinterface5g/cmake_targets/ran_build/build/nr-uesoftmodem \
--sync-ref --rfsim --sl-mode 2 --rfsimulator.serverport 4048 \
--log_config.global_log_options time,nocolor \
> ~/tx.log 2>&1

218
ci-scripts/sl_rx_agent.py Executable file
View File

@@ -0,0 +1,218 @@
#!/usr/bin/env python3
#
# Automated tests for running 5G NR Sidelink Nearby UE.
# The following is an example to run this script.
#
# python3 sl_rx_agent.py \
# --cmd 'sudo -E LD_LIBRARY_PATH=$HOME/openairinterface5g/cmake_targets/ran_build/build:$LD_LIBRARY_PATH \
# $HOME/openairinterface5g/cmake_targets/ran_build/build/nr-uesoftmodem \
# --sl-mode 2 -r 106 --numerology 1 --band 38 -C 2600000000 --ue-rxgain 90 \
# --usrp-args "type=n3xx,addr=192.168.20.2,subdev=A:0,master_clock_rate=122.88e6" \
# > ~/rx.log 2>&1' \
# --nid1 10 --nid2 1
#
# See `--help` for more information.
#
import os
import sys
import argparse
import logging
import time
import glob
import bz2
import subprocess
from subprocess import Popen
from typing import Optional, List
from sl_check_log import LogChecker
HOME_DIR = os.path.expanduser( '~' )
# ----------------------------------------------------------------------------
# Command line argument parsing
parser = argparse.ArgumentParser(description="""
Automated tests for 5G NR Sidelink Rx simulations
""")
parser.add_argument('--duration', '-d', metavar='SECONDS', type=int, default=30, help="""
How long to run the test before stopping to examine the logs
""")
parser.add_argument('--cmd', type=str, default='', help="""
Commands
""")
parser.add_argument('--nid1', type=int, default=10, help="""
Nid1 value
""")
parser.add_argument('--nid2', type=int, default=1, help="""
Nid2 value
""")
parser.add_argument('--log-dir', default=HOME_DIR, help="""
Where to store log files
""")
parser.add_argument('--compress', '-c', action='store_true', help="""
Compress the log files in the --log-dir
""")
parser.add_argument('--no-run', '-n', action='store_true', help="""
Don't run the test, only examine the logs in the --log-dir
directory from a previous run of the test
""")
parser.add_argument('--debug', action='store_true', help="""
Enable debug logging (for this script only)
""")
OPTS = parser.parse_args()
del parser
logging.basicConfig(level=logging.DEBUG if OPTS.debug else logging.INFO,
format='>>> %(name)s: %(levelname)s: %(message)s')
LOGGER = logging.getLogger(os.path.basename(sys.argv[0]))
log_file_path = os.path.join(OPTS.log_dir, 'rx.log')
# ----------------------------------------------------------------------------
def compress(from_name: str, to_name: Optional[str]=None, remove_original: bool=False) -> None:
"""
Compress the file `from_name` and store it as `to_name`.
`to_name` defaults to `from_name` with `.bz2` appended.
If `remove_original` is True, removes `from_name` when the compress finishes.
"""
if to_name is None:
to_name = from_name
if not to_name.endswith('.bz2'):
to_name += '.bz2'
LOGGER.info('Compress %s to %s', from_name, to_name)
with bz2.open(to_name, 'w') as outh, \
open(from_name, 'rb') as inh:
while True:
data = inh.read(10240)
if not data:
break
outh.write(data)
if remove_original:
LOGGER.debug('Remove %s', from_name)
os.remove(from_name)
class CompressJobs:
"""
Allow multiple invocations of `compress` to run in parallel
"""
def __init__(self) -> None:
self.kids: List[int] = []
def compress(self, from_name: str, to_name: Optional[str]=None, remove_original: bool=False) -> None:
if not os.path.exists(from_name):
# It's not necessarily an error if the log file does not exist.
# For example, if nfapi_trace never gets invoked (e.g., because
# NFAPI_TRACE_LEVEL is set to none), then the log file nfapi.log
# will not get created.
LOGGER.warning('No file: %s', from_name)
return
kid = os.fork()
if kid != 0:
self.kids.append(kid)
else:
LOGGER.debug('in pid %d compress %s...', os.getpid(), from_name)
compress(from_name, to_name, remove_original)
LOGGER.debug('in pid %d compress %s...done', os.getpid(), from_name)
sys.exit()
def wait(self) -> None:
LOGGER.debug('wait %s...', self.kids)
failed = []
for kid in self.kids:
LOGGER.debug('waitpid %d', kid)
_pid, status = os.waitpid(kid, 0)
if status != 0:
failed.append(kid)
if failed:
raise Exception('compression failed: %s', failed)
LOGGER.debug('wait...done')
class TestNearby():
"""
Represents TestNearby
"""
def __init__(self):
self.cmd = None
self.delay = 0 # seconds
def run(self, cmd: str) -> bool:
self.cmd = cmd
job = "nearby"
time.sleep(self.delay)
proc = self.launch_nearby(job)
LOGGER.info(f"nearby_proc = {proc}")
LOGGER.info(f"Process running... {job}")
time.sleep(OPTS.duration)
passed = self.kill_process("nearby", proc)
if OPTS.compress:
self.compress_log_file(proc)
return passed
def launch_nearby(self, job) -> Popen:
LOGGER.info('Launching Nearby UE: %s', log_file_path)
cmd = self.cmd
proc = Popen(cmd, shell=True)
time.sleep(1)
return proc
def kill_process(self, job: str, proc: Popen) -> bool:
passed = True
if proc:
status = proc.poll()
if status is None:
LOGGER.info('process is still running, which is good')
else:
#passed = False
LOGGER.info('process ended early: %r', status)
LOGGER.info(f'kill main simulation processes... {job}')
cmd = ['sudo', 'killall']
cmd.append('-KILL')
if proc:
cmd.append('nr-uesoftmodem')
if "nearby" == job:
subprocess.run(cmd)
LOGGER.info(f'Waiting for PID proc.pid for {job}')
proc.kill()
proc.wait()
LOGGER.info(f'kill main simulation processes...done for {job}')
return passed
def compress_log_file(self, proc: Popen):
jobs = CompressJobs()
jobs.compress(log_file_path)
jobs.wait()
# ----------------------------------------------------------------------------
def main(argv) -> int:
test_agent = TestNearby()
log_agent = LogChecker(OPTS, LOGGER)
passed = True
if not OPTS.no_run:
passed = test_agent.run(OPTS.cmd)
# Examine the logs to determine if the test passed
if not log_agent.analyze_nearby_logs(exp_nid1=OPTS.nid1, exp_nid2=OPTS.nid2):
passed = False
if not passed:
LOGGER.critical('FAILED')
return 1
LOGGER.info('PASSED')
return 0
sys.exit(main(sys.argv))

View File

@@ -1,65 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
<!-- main body -->
<xsl:template match="/">
<html>
<body>
<h3>TEMPLATE Results Summary</h3>
<table border="1">
<tr bgcolor="lightcyan">
<!--Header only so select first row to get headers-->
<th>Hostname</th>
<th>Nb Tests</th>
<th>Failures</th>
<th>Timestamp</th>
</tr>
<!--Get all the other rows-->
<xsl:for-each select="testsuites/testsuite">
<tr>
<td>
<xsl:value-of select="@hostname"/>
</td>
<td>
<xsl:value-of select="@tests"/>
</td>
<td>
<xsl:value-of select="@failures"/>
</td>
<td>
<xsl:value-of select="@timestamp"/>
</td>
</tr>
</xsl:for-each>
</table>
<h4>Details</h4>
<table border="1">
<tr bgcolor="lightcyan">
<!--Header only so select first row to get headers-->
<th>Test Name</th>
<th>Result</th>
<th>Time</th>
<th>Description</th>
</tr>
<!--Get all the other rows-->
<xsl:for-each select="testsuites/testsuite/testcase">
<tr>
<td>
<xsl:value-of select="@name"/>
</td>
<td>
<xsl:value-of select="@RESULT"/>
</td>
<td>
<xsl:value-of select="@time"/>
</td>
<td>
<xsl:value-of select="@description"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View File

@@ -1,7 +1,9 @@
- Build_Proxy
- Build_Cluster_Image
- Pull_Cluster_Image
- Build_PhySim
- Run_LDPCTest
- Run_LDPCt1Test
- Run_NRulsimTest
- Build_eNB
- WaitEndBuild_eNB
@@ -19,7 +21,6 @@
- CheckStatusUE
- Ping
- Iperf
- Reboot_UE
- Deploy_EPC
- Undeploy_EPC
- Initialize_HSS
@@ -30,11 +31,6 @@
- Terminate_SPGW
- Initialize_5GCN
- Terminate_5GCN
- Initialize_CatM_module
- Terminate_CatM_module
- Attach_CatM_module
- Detach_CatM_module
- Ping_CatM_module
- IdleSleep
- Perform_X2_Handover
- Build_Image
@@ -51,3 +47,4 @@
- Push_Local_Registry
- Pull_Local_Registry
- Clean_Test_Server_Images
- Custom_Command

View File

@@ -1,54 +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>build-tab</htmlTabRef>
<htmlTabName>Build</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
000001 000002
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>Build_eNB</class>
<desc>Build eNB</desc>
<Build_eNB_args>--eNB -t benetel4g -w None</Build_eNB_args>
<forced_workspace_cleanup>True</forced_workspace_cleanup>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000002">
<class>Build_eNB</class>
<desc>Build gNB</desc>
<Build_eNB_args>--gNB -t benetel5g -w None</Build_eNB_args>
<forced_workspace_cleanup>True</forced_workspace_cleanup>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
</testCase>
</testCaseList>

View File

@@ -1,147 +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-NSA-FR1-TM1</htmlTabRef>
<htmlTabName>NSA Ping DL UL with QUECTEL</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030000
040000
000002
010000
050000
050001
000001
070000
000001
070001
000001
010002
000001
080001
080000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="010000">
<class>Initialize_UE</class>
<desc>Initialize Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="030000">
<class>Initialize_eNB</class>
<desc>Initialize eNB</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/benetel-4g.conf --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<air_interface>lte</air_interface>
</testCase>
<testCase id="040000">
<class>Initialize_eNB</class>
<desc>Initialize gNB</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/benetel-5g.conf -q --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<air_interface>nr</air_interface>
</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>50</ping_packetloss_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>50</ping_packetloss_threshold>
</testCase>
<testCase id="070000">
<class>Iperf</class>
<desc>iperf (DL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 20M -t 60 -i 1</iperf_args>
<direction>DL</direction>
<id>idefix</id>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="070001">
<class>Iperf</class>
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 3M -t 60 -i 1</iperf_args>
<direction>UL</direction>
<id>idefix</id>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="080000">
<class>Terminate_eNB</class>
<desc>Terminate eNB</desc>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<air_interface>lte</air_interface>
</testCase>
<testCase id="080001">
<class>Terminate_eNB</class>
<desc>Terminate gNB</desc>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<air_interface>nr</air_interface>
</testCase>
</testCaseList>

View File

@@ -1,149 +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-NSA-FR1-TM1</htmlTabRef>
<htmlTabName>NSA Ping DL UL with QUECTEL</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030000
040000
000002
010000
000001
050000
050001
000001
070000
000001
070001
000001
010002
000001
080001
080000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="010000">
<class>Initialize_UE</class>
<desc>Initialize Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="030000">
<class>Initialize_eNB</class>
<desc>Initialize eNB</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/benetel-4g.conf --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<air_interface>lte</air_interface>
</testCase>
<testCase id="040000">
<class>Initialize_eNB</class>
<desc>Initialize gNB</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/benetel-5g.conf -q --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<air_interface>nr</air_interface>
</testCase>
<testCase id="000001">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
</testCase>
<testCase id="000002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>30</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>50</ping_packetloss_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>50</ping_packetloss_threshold>
</testCase>
<testCase id="070000">
<class>Iperf</class>
<desc>iperf (DL/20Mbps/UDP)(20 min)(single-ue profile)</desc>
<iperf_args>-u -b 20M -t 1200 -i 1</iperf_args>
<direction>DL</direction>
<id>idefix</id>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="070001">
<class>Iperf</class>
<desc>iperf (UL/3Mbps/UDP)(20 min)(single-ue profile)</desc>
<iperf_args>-u -b 2M -t 1200 -i 1</iperf_args>
<direction>UL</direction>
<id>idefix</id>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="080000">
<class>Terminate_eNB</class>
<desc>Terminate eNB</desc>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<air_interface>lte</air_interface>
</testCase>
<testCase id="080001">
<class>Terminate_eNB</class>
<desc>Terminate gNB</desc>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<air_interface>nr</air_interface>
</testCase>
</testCaseList>

View File

@@ -36,7 +36,7 @@
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<forced_workspace_cleanup>True</forced_workspace_cleanup>
<proxy_commit>a6169d8</proxy_commit>
<proxy_commit>a2fa216</proxy_commit>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,131 @@
<!--
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>rfsim-5gnr-e1</htmlTabRef>
<htmlTabName>CUCP-CUUP-DU E1+F1 split</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
111111
100021
000020
000021
000022
000023
000024
020021
020022
030021
100021
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-gnb oai-nr-cuup oai-nr-ue</images_to_pull>
</testCase>
<testCase id="000020">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000021">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services>
<nb_healthy>6</nb_healthy>
</testCase>
<testCase id="000022">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CU-CP RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>oai-cucp</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="000023">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CU-UP and DU RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>oai-cuup oai-du</services>
<nb_healthy>9</nb_healthy>
</testCase>
<testCase id="000024">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>10</nb_healthy>
</testCase>
<testCase id="020021">
<class>PingFromContainer</class>
<desc>Ping ext-dn from NR-UE</desc>
<container_name>rfsim5g-oai-nr-ue</container_name>
<options>-I oaitun_ue1 -c 20 192.168.73.135</options>
<loss_threshold>5</loss_threshold>
</testCase>
<testCase id="020022">
<class>PingFromContainer</class>
<desc>Ping NR-UE from ext-dn</desc>
<container_name>rfsim5g-oai-ext-dn</container_name>
<options>-c 20 12.1.1.2</options>
<loss_threshold>5</loss_threshold>
</testCase>
<testCase id="030021">
<class>IperfFromContainer</class>
<desc>Iperf UDP Downlink</desc>
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
<client_options>-c 12.1.1.2 -u -i 1 -t 30 -b 3M</client_options>
</testCase>
<testCase id="030022">
<class>IperfFromContainer</class>
<desc>Iperf UDP Uplink</desc>
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
<server_options>-u -i 1 -s</server_options>
<client_options>-B 12.1.1.2 -c 192.168.73.135 -u -i 1 -t 30 -b 1M</client_options>
</testCase>
<testCase id="100021">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<d_retx_th>1,0,0,0</d_retx_th>
<u_retx_th>1,0,0,0</u_retx_th>
</testCase>
</testCaseList>

View File

@@ -21,28 +21,25 @@
-->
<testCaseList>
<htmlTabRef>epc-closure</htmlTabRef>
<htmlTabName>EPC-Closure</htmlTabName>
<htmlTabIcon>log-out</htmlTabIcon>
<TestCaseRequestedList>
050201 060201 070201
</TestCaseRequestedList>
<TestCaseExclusionList>
</TestCaseExclusionList>
<htmlTabRef>rfsim-5gnr-down-e1</htmlTabRef>
<htmlTabName>CleanUp CUCP-CUUP-DU E1+F1 split</htmlTabName>
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100022
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="050201">
<class>Terminate_HSS</class>
<desc>Terminate HSS</desc>
</testCase>
<testCase id="100022">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
</testCase>
<testCase id="060201">
<class>Terminate_MME</class>
<desc>Terminate MME</desc>
</testCase>
<testCase id="070201">
<class>Terminate_SPGW</class>
<desc>Terminate SPGW</desc>
</testCase>
<testCase id="222222">
<class>Clean_Test_Server_Images</class>
<desc>Clean Test Images on Test Server</desc>
<test_svr_id>0</test_svr_id>
</testCase>
</testCaseList>

View File

@@ -0,0 +1,74 @@
<!--
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>rfsim-5gnr-f1-accelleran</htmlTabRef>
<htmlTabName>F1 DU Interop Accelleran CU</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
111111
000020
000021
020021
100021
100022
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-gnb oai-nr-ue</images_to_pull>
</testCase>
<testCase id="000020">
<class>DeployGenObject</class>
<desc>Deploy OAI-DU</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
<services>oai-du</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000021">
<class>DeployGenObject</class>
<desc>Deploy nrUE</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>2</nb_healthy>
</testCase>
<testCase id="020021">
<class>PingFromContainer</class>
<desc>Test Connectivity (ping)</desc>
<container_name>rfsim5g-oai-nr-ue</container_name>
<options>-I oaitun_ue1 -c 20 12.1.1.1</options>
<loss_threshold>0</loss_threshold>
</testCase>
<testCase id="100022">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
</testCase>
</testCaseList>

View File

@@ -21,33 +21,25 @@
-->
<testCaseList>
<htmlTabRef>epc-closure</htmlTabRef>
<htmlTabName>EPC-Closure</htmlTabName>
<htmlTabIcon>log-out</htmlTabIcon>
<TestCaseRequestedList>
040202
050201 060201 070201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<htmlTabRef>rfsim-5gnr-down-f1-accelleran</htmlTabRef>
<htmlTabName>CleanUp</htmlTabName>
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100022
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="040202">
<class>Terminate_CatM_module</class>
<desc>Terminate CAT-M Module</desc>
</testCase>
<testCase id="100022">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
</testCase>
<testCase id="050201">
<class>Terminate_HSS</class>
<desc>Terminate HSS</desc>
</testCase>
<testCase id="060201">
<class>Terminate_MME</class>
<desc>Terminate MME</desc>
</testCase>
<testCase id="070201">
<class>Terminate_SPGW</class>
<desc>Terminate SPGW</desc>
</testCase>
<testCase id="222222">
<class>Clean_Test_Server_Images</class>
<desc>Clean Test Images on Test Server</desc>
<test_svr_id>0</test_svr_id>
</testCase>
</testCaseList>

View File

@@ -36,7 +36,7 @@
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<forced_workspace_cleanup>True</forced_workspace_cleanup>
<proxy_commit>a6169d8</proxy_commit>
<proxy_commit>a2fa216</proxy_commit>
</testCase>
</testCaseList>

View File

@@ -27,12 +27,14 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<htmlTabName>Test-FDD-05MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
111110
040101
300000
040101
030101
000001
040301 000001 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201
040301 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201
030201
200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -43,6 +45,25 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<images_to_pull>oai-enb</images_to_pull>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="300000">
<class>Custom_Command</class>
<desc>Reset USRP</desc>
<node>hutch</node>
<command>sudo -S b2xx_fx3_utils --reset-device</command>
</testCase>
<testCase id="030101">
<class>Deploy_Object</class>
<desc>Deploy eNB (FDD/Band7/5MHz/B200) in a container</desc>
@@ -68,21 +89,22 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<desc>Attach UEs</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<desc>Detach UEs</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040501">
@@ -90,6 +112,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<desc>ping (5MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040603">
@@ -97,7 +120,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040604">
@@ -105,7 +129,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<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>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040605">
@@ -114,6 +139,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>unbalanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040606">
@@ -122,6 +149,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_2</id>
</testCase>
<testCase id="040607">
@@ -130,38 +159,48 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040641">
<class>Iperf</class>
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040642">
<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_args>-u -b 9M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040643">
<class>Iperf</class>
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040644">
<class>Iperf</class>
<desc>iperf (5MHz - UL/TCP)(30 sec)(balanced profile)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
</testCaseList>

View File

@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<htmlTabName>Test-FDD-05MHz-TM1-RRC-Inactivity</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
111110
040101
030102
000010 040301 040502 000011 040302 000001 000012 040303 000002 000013 040503 040401 040201
030201
200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -41,6 +43,18 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030102">
<class>Deploy_Object</class>
@@ -61,21 +75,22 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="000001">
@@ -94,34 +109,40 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<class>CheckStatusUE</class>
<desc>Check UE(s) status before attachment</desc>
<expectedNbOfConnectedUEs>0</expectedNbOfConnectedUEs>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="000011">
<class>CheckStatusUE</class>
<desc>Check UE(s) status before data disabling</desc>
<expectedNbOfConnectedUEs>2</expectedNbOfConnectedUEs>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="000012">
<class>CheckStatusUE</class>
<desc>Check UE(s) status after data disabling</desc>
<expectedNbOfConnectedUEs>0</expectedNbOfConnectedUEs>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="000013">
<class>CheckStatusUE</class>
<desc>Check UE(s) status after data re-enabling</desc>
<expectedNbOfConnectedUEs>2</expectedNbOfConnectedUEs>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040302">
<class>DataDisable_UE</class>
<desc>Disabling Data Service on UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040303">
<class>DataEnable_UE</class>
<desc>Enabling Data Service on UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040502">
@@ -129,6 +150,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<desc>ping (5MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040503">
@@ -136,6 +158,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<desc>ping (5MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
</testCaseList>

View File

@@ -28,12 +28,14 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<htmlTabName>Test-FDD-10MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
111110
040101
030111
000001
040301 040511 040613 040614 040615 040651 040652 040653 040654 040401 040201
030201
200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -43,6 +45,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030111">
<class>Deploy_Object</class>
@@ -69,21 +83,22 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040511">
@@ -91,6 +106,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<desc>ping (10MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040613">
@@ -99,6 +115,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040614">
@@ -107,6 +125,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040615">
@@ -115,6 +135,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>unbalanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040616">
@@ -123,6 +145,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040617">
@@ -131,38 +155,48 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040651">
<class>Iperf</class>
<desc>iperf (10MHz - UL/18Mbps/UDP)(30 sec)(balanced profile)</desc>
<iperf_args>-u -b 18M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 18M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040652">
<class>Iperf</class>
<desc>iperf (10MHz - UL/18Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 18M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 18M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040653">
<class>Iperf</class>
<desc>iperf (10MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040654">
<class>Iperf</class>
<desc>iperf (10MHz - UL/TCP)(30 sec)(balanced profile)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
</testCaseList>

View File

@@ -27,11 +27,14 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<htmlTabName>Test-FDD-10MHz-CDRX-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
111110
040101
030112
040301 040512 040612 040650 040401 040201
040301 040302 040512 040612 040650 040401
040201
030201
200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -41,6 +44,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030112">
<class>Deploy_Object</class>
@@ -61,21 +76,22 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040512">
@@ -83,6 +99,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<desc>ping (10MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040612">
@@ -91,14 +108,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040650">
<class>Iperf</class>
<desc>iperf (10MHz - UL/20Mbps/UDP)(30 sec)(balanced profile)</desc>
<iperf_args>-u -b 20M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 20M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
</testCaseList>

View File

@@ -27,12 +27,14 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<htmlTabName>Test-FDD-20MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
111110
040101
030121
000001
040301 040521 040623 040624 040625 040662 040401 040201
030201
200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -42,6 +44,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030121">
<class>Deploy_Object</class>
@@ -68,21 +82,22 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040521">
@@ -90,6 +105,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<desc>ping (20MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040623">
@@ -98,6 +114,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040624">
@@ -106,6 +124,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040625">
@@ -114,6 +134,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>unbalanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040626">
@@ -122,6 +144,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040627">
@@ -130,38 +154,48 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040661">
<class>Iperf</class>
<desc>iperf (20MHz - UL/12Mbps/UDP)(30 sec)(balanced profile)</desc>
<iperf_args>-u -b 12M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 12M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040662">
<class>Iperf</class>
<desc>iperf (20MHz - UL/17Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 17M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 17M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040663">
<class>Iperf</class>
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040664">
<class>Iperf</class>
<desc>iperf (20MHz - UL/TCP)(30 sec)(balanced profile)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
</testCaseList>

View File

@@ -27,11 +27,14 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<htmlTabName>Test-TDD-05MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
300000
100000
111110
040101
030104
040301 040501 040602 040601 040603 040604 040605 040642 040641 040643 040644 040645 040401 040201
030201
200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -42,6 +45,26 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<images_to_pull>oai-enb</images_to_pull>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="300000">
<class>Custom_Command</class>
<desc>Reset USRP</desc>
<node>starsky</node>
<command>sudo -S b2xx_fx3_utils --reset-device</command>
</testCase>
<testCase id="030104">
<class>Deploy_Object</class>
<desc>Deploy eNB (TDD/Band40/5MHz/B200) in a container</desc>
@@ -67,21 +90,22 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040501">
@@ -89,6 +113,7 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<desc>ping (5MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>25</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040601">
@@ -97,6 +122,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040602">
@@ -105,6 +132,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040603">
@@ -113,6 +142,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>unbalanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040604">
@@ -121,6 +152,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040605">
@@ -128,45 +161,57 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040641">
<class>Iperf</class>
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
<iperf_args>-u -b 2M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040642">
<class>Iperf</class>
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
<iperf_args>-u -b 2M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040643">
<class>Iperf</class>
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
<iperf_args>-u -b 2M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>unbalanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040644">
<class>Iperf</class>
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040645">
<class>Iperf</class>
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
</testCaseList>

View File

@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<htmlTabName>Test-TDD-05MHz-TM2</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
111110
040101
030105
040301 040502 040606 040608 040646 040648 040401 040201
030201
200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030105">
<class>Deploy_Object</class>
<desc>Deploy eNB (TDD/Band40/5MHz/B200) in a container</desc>
@@ -67,21 +80,22 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<testCase id="040101">
<class>Initialize_UE</class>
<desc>Initialize UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040201">
<class>Terminate_UE</class>
<desc>Terminate UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040301">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040401">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040502">
@@ -89,6 +103,7 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<desc>ping (5MHz - 20 sec)</desc>
<ping_args>-c 20</ping_args>
<ping_packetloss_threshold>25</ping_packetloss_threshold>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040601">
@@ -97,6 +112,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040606">
@@ -105,6 +122,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040603">
@@ -113,6 +132,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>unbalanced</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040608">
@@ -121,6 +142,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>DL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040605">
@@ -128,45 +151,57 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<direction>DL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040641">
<class>Iperf</class>
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
<iperf_args>-u -b 2M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>balanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040646">
<class>Iperf</class>
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
<iperf_args>-u -b 2M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040643">
<class>Iperf</class>
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
<iperf_args>-u -b 2M -t 30 -i 1 -R</iperf_args>
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>unbalanced</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
<testCase id="040648">
<class>Iperf</class>
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
<direction>UL</direction>
<id>adb_ue_1</id>
</testCase>
<testCase id="040645">
<class>Iperf</class>
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
<iperf_args>-t 30 -i 1 -fm</iperf_args>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<direction>UL</direction>
<id>adb_ue_1 adb_ue_2</id>
</testCase>
</testCaseList>

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