Compare commits

...

637 Commits

Author SHA1 Message Date
Romain Beurdouche
665a21f1c0 dirty commit for providing source of mistaken amduprofile test 2024-05-03 10:31:54 +02:00
Romain Beurdouche
e517291980 feat(ldpc-decoding-module-interface-rework): Use the success of the shared library loader to automatically detect slot decoding library, remove every options specific to slot decoding 2024-04-30 18:00:29 +02:00
Romain Beurdouche
8f73c89562 feat(ldpc-decoding-module-interface-rework): Documentation 2024-04-30 18:00:29 +02:00
Romain Beurdouche
26f2570e61 fix(ldpc-decoding-module-interface-rework): cleanup includes in interface demo 2024-04-30 18:00:29 +02:00
Romain Beurdouche
8fdc5dd80e fix(ldpc-decoding-module-interface-rework): add dependency on interface demo module to nr-softmodem 2024-04-30 18:00:29 +02:00
Romain Beurdouche
7e21c34d26 fix(ldpc-decoding-module-interface-rework): enable use of --loader.nr_ulsch_decoding.shlibversion flag in nr-softmodem, fix sync-ref argument of nr-softmodem 2024-04-30 18:00:29 +02:00
Romain Beurdouche
cff217bd7c fix(ldpc-decoding-module-interface-rework): Remove misleading PUSCH decoding 2024-04-30 18:00:29 +02:00
Romain Beurdouche
f4036f866b feat(ldpc-decoding-module-interface-rework): enables reworked decoding module interface in nr-softmodem, fixes ulsch enable tests 2024-04-30 18:00:29 +02:00
Romain Beurdouche
b83d16413a fix(ldpc-decoding-module-interface-rework): fixes module name, nr_ulsim help, demo module function naming and loading encoder 2024-04-30 18:00:29 +02:00
Romain Beurdouche
45e86b3314 feat(ldpc-decoding-module-interface-rework): drafts of framework ,first dummy module and usage in nr_ulsim added. compiles but fails at linking for reasons apparently unrelated to the feature (missing linker include library flag for lapack, test on belostome.sboai.cs.eurecom.fr RHEL8 laptop). 2024-04-30 18:00:29 +02:00
Robert Schmidt
d977ac8fc1 Merge branch 'integration_2024_w17' into 'develop'
Integration `2024.w17`

See merge request oai/openairinterface5g!2702

* !2659 NR bandwidth index fix
* !2693 Harmonize frequency range structures
* !2699 Add support for USRP X410 to run with 200 MHz bandwidth in FR2 at 120 kHz SCS
* !2692 Fix for the overflow issue while processing GPS based timestamp from RU
* !2665 NR UE improvements in handling RRC Release
* !2682 dci11type0
* !2686 CI: Maintenance, fixes, improvements
* !2677 NR UE trigger RA for SR failure
* !2683 Ue small fixes
* !2668 Refactor PDCP Reestablishment and introduce PDCP Suspend at gNB
* Add rhel9.4 to the list of OAI supported distributions
* !2673 speedup integrity computation
* !2706 doc: Update of CI testbenches
2024-04-30 15:38:45 +00:00
Robert Schmidt
e64e687fcd Use --continuous-tx for F1 SABox test for B200 2024-04-30 12:11:48 +02:00
Jaroslava Fiedlerova
28d9b5b004 Merge remote-tracking branch 'origin/ci-testebench-update' into integration_2024_w17 2024-04-30 11:23:00 +02:00
Jaroslava Fiedlerova
252a7cafdb Merge remote-tracking branch 'origin/bugfix-speedup-integrity' into integration_2024_w17 2024-04-30 11:22:30 +02:00
Jaroslava Fiedlerova
434b2b2245 Add rhel9.4 to the list of OAI supported distributions 2024-04-30 10:45:10 +02:00
Jaroslava Fiedlerova
b915482e9b Merge remote-tracking branch 'origin/nr-pdcp-suspend' into integration_2024_w17 2024-04-30 09:01:28 +02:00
Jaroslava Fiedlerova
ab75ad2427 Merge remote-tracking branch 'origin/ue-small-fixes' into integration_2024_w17 2024-04-30 08:56:08 +02:00
Guido Casati
2b859cd7e2 Remove PDCP Suspend from nrUE
- according to clause 5.3.7.2 of 3GPP TS 38.331
  PDCP Suspend is not required during RRCReestablishment
2024-04-30 08:40:56 +02:00
Guido Casati
f010058e45 Re-establish RLC for SRB1 only when receiving RRCReestablishmentRequest
- according to 5.3.7.4 of TS 38.331: 1> re-establish RLC for SRB1;
- gNB:
1) re-establish RLC for SRB1 in nr_rlc_update_id
2) re-establish RLC for remaining RBs concurrently with RRCReconfiguration

issue: gNB) in nr_rlc_update_id the gNB is re-establishing RLC for all
            RBs at the same time when receiving RRCReestablishmentRequest
            from UE
        UE) according to the specs, the UE is re-establishing RLC for
            SRB1 with RRCReestablishmentRequest the other RBs are
            re-established during RRCReconfiguration (in our case in
            nr_rrc_ue_process_RadioBearerConfig) when receiving
            reestablishRLC IE in rlc_BearerToAddModList
    RLC TX) this leads to RLC counters mismatch after re-establishment:
            control PDUs discarded until max nb of retx is reached
            and then UL failure occurs
2024-04-30 08:40:56 +02:00
Guido Casati
99c4e5477c Minor comments and logging 2024-04-30 08:40:56 +02:00
Jaroslava Fiedlerova
17cbd4352c Update of CI testbenches doc
- replace nrmodule2 by up2
- add matix in CI machines
- add info about RAN-SA-2x2-Module-CN5G in list of pipeline
- update of 5G OTA testbench image
2024-04-29 19:17:06 +02:00
Jaroslava Fiedlerova
960d0cc01f Merge remote-tracking branch 'origin/NR_UE_trigger_RA_UL_failure' into integration_2024_w17 2024-04-29 19:06:22 +02:00
Laurent THOMAS
445aac11b9 put dci search in trace level trace, so the trace level debug prints the decoded DCIs 2024-04-29 16:03:43 +02:00
francescomani
27975f99d3 fix for MSG3 buffer when retransmitting 2024-04-29 14:50:14 +02:00
francescomani
e31d87eee9 trigger RA also in case of no valid pucch resource configured for pending SR 2024-04-29 14:50:11 +02:00
Jaroslava Fiedlerova
1cd990c05a Merge remote-tracking branch 'origin/ci-multi-fixes' into integration_2024_w17 2024-04-29 11:07:09 +02:00
francescomani
408cebc1e7 implementing triggering RA after SR failure 2024-04-29 11:06:17 +02:00
Jaroslava Fiedlerova
132c0738c0 Merge remote-tracking branch 'origin/implement-dci11-type0-contiguous-rbs' into integration_2024_w17 2024-04-29 10:01:06 +02:00
Jaroslava Fiedlerova
94474ac660 Merge remote-tracking branch 'origin/NR_UE_RRCRelease_improvements' into integration_2024_w17 2024-04-29 10:00:12 +02:00
Cedric Roux
39a5e72818 define stream_security_context_t as a struct to get type checking
By using a struct we may have warnings at compilation time in some
cases if the type is not used properly.

The type definition becomes a bit weird, so we need to properly
comment.

If too strange, we can revert to the classical "void" definition.
2024-04-26 23:31:17 +02:00
Cedric Roux
de7bc13000 minor: rename stream_security_container_create() to stream_security_container_init() 2024-04-26 23:31:17 +02:00
Cedric Roux
fac5c1f624 minor cleanup - use variable defined above 2024-04-26 23:31:17 +02:00
Cedric Roux
61a2c085ca cleanup the structure cbc_cmac_ctx_t
- rename "lib_ctx" to "mac_implementation" which is what is stored because
  of previous commit
- rename "mac" to "mac_context" to be clearer with what is stored in this
  variable too
2024-04-26 23:31:17 +02:00
Cedric Roux
d7931ea412 bugfix: speedup integrity computation
The main work of this commit is to rewrite cipher_aes_128_cbc_cmac()
which was too slow and created issues when running the 4G eNB on some
machines (LLL when using a b210).

Instead of creating the security context, use it, and delete it, all in
cipher_aes_128_cbc_cmac(), we introduce the function init_aes_128_cbc_cmac()
to create it, and we change cipher_aes_128_cbc_cmac() to just use it,
and we also adapt free_aes_128_cbc_cmac(). The function aes_128_cbc_cmac()
is removed, it does not follow the new init/use/free API.

Doing so, on the primary test machine used to do this work (a powerful
and fast machine where it is possible to set the CPUs' frequencies)
it was possible to limit the CPUs' frequencies to 500 MHz (it was not
possible to go lower) without any LLL (using a b210, quectel UE in
idle, no data traffic, only periodic measurement reports). Before this
commit, it was necessary to set a frequency of at least 1.8 GHz
otherwise some LLL would appear.

Then we need to adapt the rest of the code to take into account those
changes.

A notion of security container (stream_security_container_t) containing
ciphering and integrity contexts is introduced.

And the code is harmonized for, hopefully, better readability.

The (opaque) type stream_security_context_t is introduced, used by
both integrity and ciphering contexts. The idea is to use a
init()/use()/free() API for all the security procedures, identical for
all the ciphering and integrity procedures.
2024-04-26 23:31:06 +02:00
Jaroslava Fiedlerova
aecc695d02 Merge remote-tracking branch 'origin/GPS_time_stamp_sync' into integration_2024_w17 2024-04-26 23:15:28 +02:00
Jaroslava Fiedlerova
55c91e726c Merge remote-tracking branch 'origin/NR_FR2_200MHz' into integration_2024_w17 2024-04-26 23:15:01 +02:00
Jaroslava Fiedlerova
da57e23637 Update config files for SA 2x2 pipeline 2024-04-26 23:03:48 +02:00
Jaroslava Fiedlerova
bb078e61e0 Create functions for OC CN deployment/undeployment
These functions enables (un)deployment of the OAI CN v2.0.1, increase
reliability and speedup overall CN (un)deployment compared to current
implementation.

Use "--wait" helm option to wait for deployment/undeployment of the CN.
Wait for pods to be in a ready state before marking the release as
successful. If not deployed/undeployed before timeout, marked as
unsuccessful.

Hardcode path for OC CN5G deployment/undeployment
2024-04-26 23:03:38 +02:00
Jaroslava Fiedlerova
6554816721 AW2S pipeline: Connect 16th UE after TCP tests with 15 UEs 2024-04-26 23:01:58 +02:00
Jaroslava Fiedlerova
de5f23c52b B200-SABOX pipeline - fix testcase descriptions 2024-04-26 23:01:58 +02:00
Jaroslava Fiedlerova
82423fba45 Change PLMN in OAIUE pipeline 2024-04-26 23:01:58 +02:00
Jaroslava Fiedlerova
09bd7b5b39 Change PLMN and frequency in AW2S pipeline
- Remove unused AmariUE config file, replace by new one - for PLMN 00102
- Change frequency of AW2S pipeline - Move center frequency by 40 MHz to avoid interferency with other setups
in the lab. Set center frequency to ~ 3450 MHz.
2024-04-26 23:01:02 +02:00
Jaroslava Fiedlerova
cc0ba68082 Merge remote-tracking branch 'origin/NR_harmonize_frequency_range' into integration_2024_w17 2024-04-26 15:56:06 +02:00
Jaroslava Fiedlerova
c4b1966fc5 Merge remote-tracking branch 'origin/NR_bw_index_fix' into integration_2024_w17 2024-04-26 15:46:50 +02:00
Robert Schmidt
18951f04e6 Update assertfatal message 2024-04-26 10:59:49 +02:00
Laurent THOMAS
309d5cacc9 remove sleep() in UE NAS that have no good purpose 2024-04-26 10:19:59 +02:00
Laurent THOMAS
d67383bd42 segv on missing if() clause 2024-04-26 10:19:59 +02:00
Laurent THOMAS
a07461813d NR UE: Implement DCI format 11 type0 for contiguous allocations 2024-04-26 10:07:23 +02:00
luis_pereira87
615284c5c8 Add support for USRP X410 to run with 200 MHz bandwidth in FR2 at 120 kHz SCS 2024-04-26 08:23:19 +01:00
francescomani
9992a19a6f release SRS/PUCCH as described in 331 section 5.3.12 2024-04-23 17:53:46 +02:00
francescomani
bff1f06350 removing MAC reset cause from reset_ra 2024-04-23 17:18:32 +02:00
francescomani
efeb538490 harmonize usage of frequency range structures 2024-04-23 12:20:42 +02:00
Cedric Roux
c0934b26da bugfix: use correct security algorithm 2024-04-23 12:06:54 +02:00
vijay chadachan
1924b3c793 Fix for the overflow issue while processing GPS based timestamp from RU
The absslot_tx overflow issue observed during integration testing of AW2S
RU with GPS as the source for the clock synchronization. Causes the gNB
not to start the TX thread and stops the processing.
2024-04-23 10:44:00 +02:00
Robert Schmidt
8a3c329e90 Merge branch 'integration_2024_w16' into 'develop'
Integration `2024.w16`

See merge request oai/openairinterface5g!2689

* !2680 CI: Modification of log collection in UndeployObject()
* !2681 remove a useless copy and specific buffer for all UE UL payload
* !2685 Clang: make executable run, fix clang warnings, fix memsan warnings
* !2690 Remove hardcoding of 5G-S-TMSI on nrUE
2024-04-22 11:50:06 +00:00
Jaroslava Fiedlerova
67fb98a16c Merge remote-tracking branch 'origin/fix-5g-s-tmsi-hardcode-nr-ue' into integration_2024_w16 2024-04-22 10:00:31 +02:00
Guido Casati
105e9b5f58 Handling Bearer Context Status Change IE in Bearer Context Modification Request
- E1 encoding /decoding
- new enum for E1 Bearer Status Change

see 9.2.2.4 BEARER CONTEXT MODIFICATION REQUEST of 3GPP TS 38.463
2024-04-21 10:23:59 +02:00
francescomani
da26eacfd4 improvements in handling RRC Release 2024-04-21 09:05:56 +02:00
Guido Casati
2c2b7416c1 Check numDlUpParam size when processing DlUpParamList 2024-04-19 14:43:26 +02:00
Jaroslava Fiedlerova
ea1921809f Merge remote-tracking branch 'origin/clang-run-warning-memsan' into integration_2024_w16 2024-04-19 11:03:37 +02:00
Jaroslava Fiedlerova
219b4b7680 Merge remote-tracking branch 'origin/remove-useless-buffer-and-copy' into integration_2024_w16 2024-04-19 11:02:38 +02:00
Guido Casati
7a9b3485b1 Remove hardcoding of 5G-S-TMSI on nrUE 2024-04-19 10:58:09 +02:00
Jaroslava Fiedlerova
e3547dfb38 CI: Modification of log collection in UndeployObject()
After the recent update of matix, collected logs contain color codes
and we did not find the way to switch them completely off.
Replacement of "docker compose logs" by "docker logs" resolves this
issue. This commit includes changes related to "docker logs" usage.
2024-04-18 17:21:27 +02:00
Robert Schmidt
593191b51a Memory sanitizer patch not required anymore
Also, the check for clang is done in CMakeLists.txt; sleep is useless
2024-04-18 14:16:09 +02:00
Robert Schmidt
507e08cd39 Memsan uninitialized read: Initialize array to zero 2024-04-18 14:16:09 +02:00
Robert Schmidt
42254e6267 Memory sanitizer: unitialized read
Reset all the circular buffer to zero; this ensures that we cannot read
uninitialized data. Since this is RFsimulator, performance is not a
problem here either (and zeroing out happens only once).
2024-04-18 14:16:09 +02:00
Robert Schmidt
c114d2f547 Fix memory sanitizer warning: uninitialized read
Memsan complains that uninitialized reads originate because of these
warnings. Most of the corresponding variables are actually read into
through by libconfig; nevertheless, initializing them should not have a
bad side-effect (because the initialized value is overwritten).
2024-04-18 14:16:09 +02:00
Robert Schmidt
ed89498c4f Use standard C initializer list syntax
Fix clang warning

  warning: use of GNU old-style field designator extension [-Wgnu-designator]
2024-04-18 14:16:09 +02:00
Robert Schmidt
24baf08c87 Load unaligned data for SIMD processing to avoid segv
We access G_N at indexes that are not necessarily 32-byte aligned,
leading to segfaults. Use simde_mm256_loadu_si256() to load from memory
at an unaligned memory address to avoid the segfault.

Discovered using clang; it is unclear why gcc did not encounter the same
segfault.
2024-04-18 14:06:05 +02:00
Jaroslava Fiedlerova
d9b87d1cb7 Fix of iperf3 BIDIR reporting 2024-04-18 13:09:34 +02:00
Jaroslava Fiedlerova
6bbcc1d275 Improve LTE-2x2 radio behavior and log collection
- change testcase IDs to get all logs
2024-04-18 13:09:34 +02:00
Robert Schmidt
8e7ecaa73a Compile using -rdynamic with clang
-rdynamic is necessary for clang as well to properly link shared
executables. Add furthermore an option to ignore unused command line
arguments, to suppress warning

  clang: warning: argument unused during compilation: '-rdynamic' [-Wunused-command-line-argument]

This is likely because -rdynamic is only relevant for the linker, but
the corresponding option add_link_options() is only available starting
cmake 3.13, while we are still at 3.12 (for Ubuntu 18, to my
understanding).
2024-04-18 00:40:39 +02:00
Guido Casati
1d10a73b95 Apply default configuration for SRB1 when receiving RRCReestablishmentRequest
- according to 5.3.7.4 of TS 38.331
2024-04-17 16:17:42 +02:00
Guido Casati
ab65bc3b08 Refactor PDCP Reestablishment of DRBs according to 5.3.5.6.5 of 3GPP TS 38.331
- remove PDCP reestablishment for DRBs from RRCReestablishment message generation
- do PDCP reestablishment and CUUP notification calls after reception or RRCReestablishmentComplete
- this is necessary to make it consistent with the RRCReconfiguration message that contains
  RadioBearerConfig with the list of bearers to add/release
  which is followed by PDCP re-establishment at UE
2024-04-17 16:17:37 +02:00
Laurent THOMAS
df9cd171f6 remove a useless copy and specific buffer for all UE UL payload 2024-04-17 10:59:13 +02:00
Guido Casati
5610ce0738 Fix PDCP re-establishment of SRB1 and SRB2
- SRB1 shall be re-established at the time of RRCReestablishmentRequest
  according to 5.3.7.4 of 3GPP TS 38.331
- SRB2 shall be re-established when creating srb-ToAddModList
  according to 5.3.5.6.3 of 3GPP TS 38.331
2024-04-16 22:04:42 +02:00
Robert Schmidt
749779247d Merge branch 'integration_2024_w15' into 'develop'
Integration `2024.w15`

Closes #727, #765, #776

See merge request oai/openairinterface5g!2676

* !2561 CI - add T2 tests to timing pipeline
* !2620 Fix cppcheck errors
* !2624 NR UE MAC SR improvements
* !2647 NR UE mixed fixes
* !2671 Reduce stack memory size for layer mapping
* !2669 CI: create SA 2x2 pipeline
* !2660 fix for 3072 fft size when using 80 MHz and -E
* !2539 CI: Add channel emulation in one test
* !2635 SCTP problems: allow to bind separate F1-C/F1-U interfaces; allow to use DNS
* !2438 PSBCH RX,TX and SLSS SEARCH procedures
* !2675 (doc): Update benetel firmware version and configuration files
* Update of O-RAN 7.2 gNB configuration file for Benetel 650
2024-04-16 06:09:52 +00:00
Jaroslava Fiedlerova
68a89e53e9 Update of O-RAN 7.2 gNB configuration file for Benetel 650 2024-04-15 16:10:47 +02:00
Robert Schmidt
6fecb6fbfe Merge remote-tracking branch 'origin/benetel-fw' into integration_2024_w15 2024-04-15 14:36:40 +02:00
Robert Schmidt
ebeb26528a Merge remote-tracking branch 'origin/NR_PSBCH_MERGE1' into integration_2024_w15 2024-04-15 14:34:36 +02:00
Robert Schmidt
3011b706ba Merge remote-tracking branch 'origin/fix-sctp-f1' into integration_2024_w15 2024-04-15 14:33:05 +02:00
Robert Schmidt
a953cd0d8b Demote periodic PHY log: floods the screen, is unhelpful 2024-04-15 13:16:10 +02:00
Robert Schmidt
0c15ee9706 commands for attach/detach 2024-04-15 13:16:10 +02:00
Robert Schmidt
a652a032b0 CI RFsim-4G noS1: use longer sleep
Unlike the previous commit, in noS1, we cannot use Attach(), as noS1
automatically brings up an interface, no matter whether the connection
succeeded or not. Therefore, consistently wait a bit longer to increase
the chance that the radio is really up.
2024-04-15 13:16:10 +02:00
Robert Schmidt
5fa52ecf76 CI RFsim-4G: wait for attach, instead of sleep
For various reasons, the UE might take longer to connect to the eNB. A
simple sleep might not be enough; instead, use Attach() to actively wait
that the UE gets an IP address. The added bonus of this function is that
it will also stop&restart a UE if it did not attach, i.e., it will try
multiple times to attach the UE.
2024-04-15 13:16:10 +02:00
Robert Schmidt
d81b617d1c Fix MCE Name parameter reading
The code (author) confused MCE_PARAMS_DESC and MCE_NETPARAMS_DESC and
tried to read the MCE name from MCE_NETPARAMS_DESC when in reality it
should come from MCE_PARAMS_DESC. This commit fixes to use the right
array.
2024-04-15 13:16:10 +02:00
Robert Schmidt
4666cddb1a Remove IPv6/active/preference fields from eNBs.[0].target_mme_m3_ip_address array
Same reasoning as in previous commit.
2024-04-15 13:16:09 +02:00
Robert Schmidt
3596955fb0 Remove IPv6/active/preference fields from eNBs.[0].target_mce_m2_ip_address array
Same reasoning as in the previous commit.
2024-04-15 13:16:09 +02:00
Robert Schmidt
27447f94bf Remove IPv6/active/preference fields from e/gNBs.[0].target_enb_x2_ip_address array
Some reasoning as in previous commit.
2024-04-15 13:16:09 +02:00
Robert Schmidt
235567bb6a Remove IPv6/active/preference fields from gNBs.[0].amf_ip_address array
Same reasoning as in the previous commit.

Remove filling of broadcast_plmn, which does not exist in the
configuration.
2024-04-15 13:16:09 +02:00
Robert Schmidt
915c106ee3 Remove IPv6/active/preference fields from eNBs.[0].mme_ip_address array
In a previous commit, the functionality of handling IPv6 (and DNS names)
as part of the IPv4 was introduced (in IPv4 field for backwards
compatibility). This commit now removes superfluous configuration
fields:
- IPv6:  handled by IPv4 field
- active: users can just remove an entry
- preference: not needed
2024-04-15 13:16:09 +02:00
Robert Schmidt
2241ed17cf CU F1+E1 test: use some service names 2024-04-15 13:16:09 +02:00
Robert Schmidt
71486a0d7e Fixup: correct gnb-cucp AMF bind address, corresponding to docker container 2024-04-15 13:16:09 +02:00
Robert Schmidt
f21c2cf822 Remove interface names from F1 and nFAPI (4G+5G) 2024-04-15 13:16:09 +02:00
Robert Schmidt
fced989d60 Remove F1 config for LTE: does not exist 2024-04-15 13:16:09 +02:00
Robert Schmidt
fd66d17214 Remove MMEs Network Inferface section's interface names: not used 2024-04-15 13:16:09 +02:00
Robert Schmidt
4b2a59b027 Remove AMF Network Interface sections's interface names: not used 2024-04-15 13:16:09 +02:00
arora
b74fc09c28 (doc): Update O-RAN 7.2 FH tutorial and configuration
- Update the configuration for benetel 650 and 550 for new firmware version
- Remove the old firmware configuration file and description in the document
- Add a new RU configuration section
- Add How to get support from the OAI Community to clarify the support procedure.
2024-04-15 11:35:22 +02:00
arora
c08fb6ccb0 Update README with mailing list contact information
Include "best practices" on how to ask questions.
2024-04-15 11:34:52 +02:00
Jaroslava Fiedlerova
eb487e0196 Merge remote-tracking branch 'origin/ci-rfsim-add-channel' into integration_2024_w15 2024-04-15 08:47:01 +02:00
Jaroslava Fiedlerova
de263d4a40 Merge remote-tracking branch 'origin/fft_size_fix_3072' into integration_2024_w15 2024-04-15 08:29:34 +02:00
francescomani
d7a2795432 moving psbch DMRS modulation function away from gold sequence file 2024-04-14 16:15:20 +02:00
Robert Schmidt
f042bd7a2d Add psbchsim charts to test in physim CI tests 2024-04-13 08:54:21 +02:00
Robert Schmidt
c547a4c1f8 Rename nr_psbchsim sidelink test case to harmonize with other tests 2024-04-13 08:54:21 +02:00
Robert Schmidt
21918ffd0a Include nr_psbchsim in image for physims 2024-04-13 08:54:21 +02:00
Robert Schmidt
9a2e080f77 Apply clang-format 2024-04-13 08:54:15 +02:00
Robert Schmidt
dfa012162b Rewrite sctp_create_new_listener() to handle DNS, IPv6
Rewrite sctp_create_new_listener() to use getaddrinfo() to look up
IPv4/IPv6 addresses via a common interface. This allows to use e.g. DNS,
and enables the SCTP library to listen on IPv6 ports.

To support the above, the corresponding message is changed to not take
an IPv4 address on 4 bytes (and separate IPv6), but a single name that
will be resolved via getaddrinfo()

The previous init message used to allow multiple IPv4/IPv6 addresses;
since this is not used anywhere, remove the corresponding functionality.

Modify all uses of this ITTI message to copy te SCTP init bind addr into
ITTI message.
2024-04-13 05:15:11 +02:00
Robert Schmidt
0d128f9cad Rewrite sctp_handle_new_association_req() to handle hostnames and IPv6
Use getaddrinfo() to look up IP (v4/v6) addresses. The old
interface of separately specifying IPv4 and IPv6 addresses is
preserved, but both fields allow to specify types of addresses, and we
will remove one field in the future.
2024-04-13 05:14:55 +02:00
Robert Schmidt
e65cb0cf42 Introduce additional option to bind on separate IFs for F1-C/U in DU
After the last commit, it is not possible to bind on separate interfaces
for F1-C and F1-U. In other words, it is for instance not possible to
have the F1-C on one subnet on one physical interface, and F1-U on
another subnet on another physical interface. This commit introduces a
second option MACRLCs.[0].local_n_address_f1u to allow to bind F1-U on
an alternative address; if it is not specified, the interface of F1-C is
reused.

The above only works for the DU; no corresponding option exists for the
CU. For the CU, use separate CU-CP and CU-UP.

Use it in the CI.
2024-04-13 05:14:55 +02:00
Robert Schmidt
a193518579 Revert "F1AP SCTP: don't bind local address"
This reverts commit 284116522b.

The problem is that (1) we don't really support multi-homing, but (2) on
some system, if the other IP addresses that the operating system
considers part of the multi-homed connection are HEARTBEAT'ed (e.g.,
docker), they answer with SCTP ABORT, which breaks the entire
connection.

In other words, force single-homing by binding. For F1-U uses, another
option will be introduced that allows to bind to a separate interface
for F1-U (separate from F1-C), if necessary.

Closes #727
2024-04-13 05:14:55 +02:00
Jaroslava Fiedlerova
a22eccc0b8 Merge remote-tracking branch 'origin/ci-sa-2x2-pipeline' into integration_2024_w15 2024-04-12 16:57:03 +02:00
Jaroslava Fiedlerova
9d2ad34b1b Merge remote-tracking branch 'origin/improve-layer-mapping' into integration_2024_w15 2024-04-12 16:54:50 +02:00
Raghavendra Dinavahi
94b23d1eb0 PSBCH RX TX and SLSS search procedures
- RX/TX Phy processing accg to 38.211, 38.212 Rel16
	- PSBCH simulator used to validate TX/RX phy processing
	- PSBCH SLSS Search procedures
	- PSBCH SIM also tests SLSS SEARCH
2024-04-12 16:07:00 +02:00
Robert Schmidt
5b0e797ef7 Updated retransmission thresholds for F1 CI RFSIM test 2024-04-12 15:53:43 +02:00
Guido Casati
243c985af8 Updated telnet documentation including latest info about CI modules 2024-04-12 15:53:43 +02:00
Guido Casati
b5f0a32ac2 Introduced channel simulator in F1 RFSIM CI test scenario
- adding a new test case
    - the test case simulate a DL radio channel with noise and runs Iperf test with such channel conditions
    - use CustomCommand class to send commands to a Telnet server
    - switched from netcat’s unsupported -N option (OpenBSD) to --send-only (Ncat 7.94) for compatibility with CI

re-sync CI test in F1 RFSIM

- to be used in the future, for CI of RRCReestablishment in RFSIM
- adding four new test cases (040021, 040022, 040023, 040023) to the RFSIM F1 configuration
- the test cases simulate a disruption of the radio channel, verify UE sync loss and resync
  and restore the original channel conditions
- use CustomCommand class to send commands to a Telnet server

temp xml
2024-04-12 15:53:43 +02:00
Guido Casati
72337b9c43 Minor fixes to CI python scripts
- enhanced CustomCommand logging
- print ParseError
2024-04-12 15:53:43 +02:00
Guido Casati
cfaa182f57 Telnet function in new ciUE library to retrieve OAI UE sync state
- created new telnet library ciUE
- using X-macro defined NR_UE_L2_STATE string array to get UE sync state
- add telnet CI to nrUE container
2024-04-12 15:53:43 +02:00
Guido Casati
6793cb300a Refactor NR_UE_L2_STATE_t enum definition using X-Macro
- this change simplifies the enum definition and makes it easier
  to add, remove, or modify states in the future
- the states are now defined in the NR_UE_L2_STATES macro,
  and the enum members are generated automatically from this macro
2024-04-12 15:53:43 +02:00
Robert Schmidt
4062d3dcb3 Add channel emulation to 5G CU-DU F1 RFsim test
Add AWGN channel with some noise and additional path loss.
2024-04-12 15:53:38 +02:00
Laurent Thomas
be3452a10e Reduce stack memory size for layer mapping
Delete small pieces of dead code
2024-04-12 11:14:08 +02:00
Jaroslava Fiedlerova
829d8c3c1b Merge remote-tracking branch 'origin/NR_more_UE_fixes' into integration_2024_w15 2024-04-12 09:20:12 +02:00
Jaroslava Fiedlerova
2ba79f3fdc Merge remote-tracking branch 'origin/NR_UE_MAC_SR_improvements' into integration_2024_w15 2024-04-12 09:19:46 +02:00
Jaroslava Fiedlerova
87242ca92a Merge remote-tracking branch 'origin/fix_cppcheck' into integration_2024_w15 2024-04-12 09:18:07 +02:00
rakesh mundlamuri
47d1f8bb82 harmonizing the IDFT index at different places 2024-04-11 16:47:32 -04:00
rakesh mundlamuri
45c00b7ad2 fix for 3072 fft size when using 80 MHz and -E 2024-04-11 16:47:32 -04:00
Jaroslava Fiedlerova
f92f7460b6 Add CN log transfer to executor machine
- allows for simplification of the log collection in SA-2x2 pipeline
- ci-scripts/Jenkinsfile-nrue can be reused
- to be tested!
2024-04-11 20:04:12 +02:00
Jaroslava Fiedlerova
4268bdad89 Add SA-2x2-Module-CN5G to parent pipeline 2024-04-11 20:04:12 +02:00
Jaroslava Fiedlerova
ca9504ec1d Modification of XML for 5GCN undeployment 2024-04-11 20:04:12 +02:00
Jaroslava Fiedlerova
cef6a0250b Add xml files for 60MHz and 100 MHz 2x2 test 2024-04-11 20:04:07 +02:00
Jaroslava Fiedlerova
8510ffa3f9 Add matix-cn5g server to ci_infra 2024-04-11 20:04:07 +02:00
Jaroslava Fiedlerova
550b713635 Add conf files and yaml files for SA 2x2 pipeline
- Note: "version" parameter reported as obsolete by docker version > 25.0.5
2024-04-11 20:03:51 +02:00
francescomani
29c3f22872 fix for a regression in !2638 (wrong MCS Table for PUSCH at UE) 2024-04-11 16:54:04 +02:00
francescomani
84e1d8205e add new state for UE detachement 2024-04-11 16:48:36 +02:00
francescomani
2baa126028 do not schedule RACH if not sync 2024-04-11 16:48:36 +02:00
francescomani
81641ea43d avoid another segfault at detach 2024-04-11 16:48:32 +02:00
francescomani
08ad45ad5e remove band number information from gNB log to configure UE via command line parameter 2024-04-11 16:46:36 +02:00
francescomani
19a51f67b2 flag for detach after RRCrelease at UE 2024-04-11 16:46:36 +02:00
francescomani
851cf96943 add detach log at MAC 2024-04-11 16:46:36 +02:00
francescomani
7c24dea132 avoid another possible segfault 2024-04-11 16:46:32 +02:00
francescomani
2a03d79389 adding a check on pusch_Config to avoid segfault 2024-04-11 16:27:44 +02:00
francescomani
e8f0700881 free RACH structures in the right place for the right triggering cause 2024-04-11 16:27:44 +02:00
Jaroslava Fiedlerova
028de7a697 Add xml files for testing T2 LDPC decoding and encoding offload
- Enable build of T2 lib in RAN-gNB-N300-Timing-Phytest-LDPC
 - Add testcases with 2 layers
2024-04-11 16:06:53 +02:00
Jaroslava Fiedlerova
efe065462d Add ulsch decoding statistics measurements
Add ulsch decoding measurements, which are reported by nr_ulsim. Start ulsch_decoding_stats measurement before
nr_ulsch_decoding is called and stop it after collection of all decoder tasks from Tpool. In the context of nr_ulsim,
ULSCH_id is allways == 0, testing is performed per one TB, therefore measurement is started and stopped only once per trial.
Reported ulsch decoding statistics show the mean ulsch decoding time over x trials (specified by -n command line option of nr_ulsim).
This measurement does not provide valid information in case of nr-softmodem, when the loop is done over multiple ULSCH IDs -
start of the measurement is done multiple times and stops only once in this case.
For unitary physical simulators, ULSCH processing loop is executed only once
- the max number of PUSCH is set to 1. This ensures exactly one start and stop
of the ULSCH decoding time measurement per processed TB.

Note: ulsch decoding statistics reports average time of segmentation, rate matching, interleaving and decoding of the TB
2024-04-11 16:06:53 +02:00
Jaroslava Fiedlerova
04357e8b45 Update CUDA analysis function and XML files 2024-04-11 16:06:53 +02:00
Jaroslava Fiedlerova
cde318ced8 Rework nr_dlsim/nr_ulsim test and analysis function
- Enable both nr_ulsim and nr_dlsim test with Run_T2Test
- Introduce time threshold variable for T2/CPU LDPC tests
  - Set threshold individually for each test - T2 encoding/decoding and CPU encoding/decoding
  - Check if encoder/decoder processing time is below the threshold
  - Remove NOK return option - keep only OK (processing time below threshold) or KO (proceesing time beyond threshold)
- Rename function to run and check results of CUDA ldpctest
- Use new SSH class in function for check T2 test results, use f-strings
2024-04-11 16:06:17 +02:00
Jaroslava Fiedlerova
3c3c1e6fe6 T2 related modifications of CMakeLists and documentation
- Modify T2 PCI adr for CI T2 test setup
- Set PKG_CONFIG_PATH env var manually if needed (DPDK lib installed into custom path)
2024-04-11 15:34:43 +02:00
francescomani
a0c5a3604a fix incorrect bw index evaluation for UE capabilities 2024-04-10 14:06:41 +02:00
francescomani
b30c9c8f3c uselessAssignmentPtrArg 2024-04-09 16:55:51 +02:00
francescomani
97b3c6bc68 adding --inline-suppr option 2024-04-09 16:55:51 +02:00
francescomani
13d33163e9 nullPointer 2024-04-09 16:55:51 +02:00
francescomani
86ca5fdd55 duplicateExpression 2024-04-09 16:55:51 +02:00
francescomani
eb60194fa3 nullPointerArithmeticRedundantCheck 2024-04-09 16:55:51 +02:00
francescomani
568973d5be incorrectLogicOperator 2024-04-09 16:55:51 +02:00
francescomani
8404da759f nullPointerRedundantCheck 2024-04-09 16:55:51 +02:00
francescomani
ddf3b1614c identicalConditionAfterEarlyExit 2024-04-09 16:53:12 +02:00
francescomani
729aa41952 funcArgOrderDifferent 2024-04-09 16:53:12 +02:00
francescomani
3f1dd8d7ba syntaxError 2024-04-09 16:53:12 +02:00
francescomani
96ff859cb7 shiftTooManyBitsSigned 2024-04-09 16:53:12 +02:00
francescomani
9cc53a43b1 invalidPrintfArgType_uint 2024-04-09 16:44:56 +02:00
francescomani
8b728a45eb redundantAssignInSwitch 2024-04-09 16:44:56 +02:00
francescomani
1e1679b668 memleak 2024-04-09 16:44:56 +02:00
francescomani
2b90061669 resourceLeak 2024-04-09 16:44:56 +02:00
francescomani
686da85d05 invalidPrintfArgType_sint 2024-04-09 16:44:56 +02:00
Robert Schmidt
4895cf14c1 Reduce iperf throughput in 5G F1 RFsim test
The next commit adds channel emulation in RFsim, so we have to reduce
the iperf, as the machine might not be fast enough.
2024-04-09 13:56:29 +02:00
Robert Schmidt
1244c9a278 Merge branch 'integration_2024_w14' into 'develop'
Integration `2024.w14`

Closes #775 and #773

See merge request oai/openairinterface5g!2663

* !2411 Simple and generic trx_write support of out of time order requests
* !2532 moving decision on DCI format type to UE MAC
* !2565 improvements in security of nrUE
* !2656 remove stored G in UE DL, not needed and creating issues with DCI format 11/type0
* !2658 Fix sleeping ue at synchro
* !2649 NR SRS RRC assrtion removal
* !2662 Avoid concurrent write while filling RX/CRC.indication
* Remove obsolete "version" parameter from yaml files used on avra
* !2664 Remove duplicated NAS message send, already done above
* !2605 Improve performance polar encoder i.e., 3GPP 38.212 5.3.1.2 function
* !2629 Msg2 and Msg3 at gNB: check allocation before committing to Msg2
* !2657 replace transient malloc by stack allocation, add defense code on block size
* !2631 chore(ci): some docker improvements
* !2654 Pucch2 polar rx dynamic range fix
* !2666 [E2 Agent] Fix E2 Setup Request for ASan
* !2661 CI: iperf/iperf3 UDP analysis function fix → review in progress, review to be completed
2024-04-09 10:12:51 +00:00
Robert Schmidt
e290b2ab1b Merge remote-tracking branch 'origin/ci-iperf3-analysis-fix' into integration_2024_w14 2024-04-09 08:09:05 +02:00
Robert Schmidt
e66588b556 Merge remote-tracking branch 'origin/e2-setup' into integration_2024_w14 2024-04-08 17:58:54 +02:00
Robert Schmidt
442af3c943 Merge remote-tracking branch 'origin/pucch2_polar_rx_dynamic_range_fix' into integration_2024_w14 2024-04-08 17:58:46 +02:00
Robert Schmidt
6719c376e2 Merge remote-tracking branch 'origin/dockerfiles-improvements-2024-03' into integration_2024_w14 2024-04-08 17:57:35 +02:00
Robert Schmidt
4b8bcf7efd Merge remote-tracking branch 'origin/replace-a-malloc-by-stack' into integration_2024_w14 2024-04-08 17:55:54 +02:00
Robert Schmidt
4f5b7fcb9e Merge remote-tracking branch 'origin/fix-msg2-gnb' into integration_2024_w14 2024-04-08 17:53:54 +02:00
Teodora
c70a9dc9eb FlexRIC commit ID update 2024-04-08 17:42:27 +02:00
Jaroslava Fiedlerova
ffe9096b0e Put Launch/StopPySharkCapture function out of the class 2024-04-08 17:37:26 +02:00
Jaroslava Fiedlerova
7732689b9b Remove unused awk scripts 2024-04-08 17:37:26 +02:00
Jaroslava Fiedlerova
8e6f7d9594 Use requested bitrate in iperf2 UDP analysis function
Simplification of the code by replacing iperf_opt by target_bitrate (returned from Iperf_ComputeModifiedBW) - no need to repeat the steps to retrieve information about requested bitrate from iperf_opt. Compute iperf bitrate performance as receiver bitrate over requested (target) bitrate.
Fix an issue with misdetection of missing report line - "result" was defined 2x in the function. With this MR, result can be only None or stores output of re.search() for matching the report line pattern, which ensure proper detection of the report line as well as presence off all required components in the report line.
2024-04-08 17:37:18 +02:00
Jaroslava Fiedlerova
ef5df38fd2 Use requested bitrate in iperf3 UDP analysis function
Sender bitrate is not always equal to the requested bitrate (set by "-b" iperf option) in iperf3 (v3.9) UDP tests, so we have to compture bitrate performance of UDP iperf3 test as receiver over requested bitrate. Bitrate performance then express percentage of requested bitrate, which is received on the receiver side.
2024-04-08 17:37:18 +02:00
Jaroslava Fiedlerova
4f60810d32 Compute and return requested bitrate from Iperf_ComputeModifiedBW
For iperf3 (version 3.9) UDP, sender bitrate is not always equal to requested bitrate (defined by '-b' option). We need to retrieve information about the requsted bitrate from iperf command line options specified for each UDP testcase. This parameter is then used in UDP analysis functions for proper evaluation of the test results.
2024-04-08 17:37:11 +02:00
Robert Schmidt
e3747ab592 Check if Msg3 start&length can be accommodated in mixed slot
Prior to this commit, it might happen that the gNB used TDA 0 (Start 0
len 13) for mixed slot, in which case the UE could not send msg3
(because a mixed slot has less than 13 symbols).
2024-04-08 17:30:37 +02:00
Teodora
f571043da8 Fix E2 Setup Request memory leakage 2024-04-08 15:26:00 +02:00
Robert Schmidt
8940400aa6 Define subband power avg through MAX_ANT, is bigger 2024-04-08 14:19:35 +02:00
Robert Schmidt
fdb993279e Add more nr_pucchsim tests for 273 PRBs 2024-04-08 12:54:42 +02:00
Robert Schmidt
e289c11b1b Order nr_pucchsim options alphabetically in help 2024-04-08 12:54:42 +02:00
Raymond Knopp
fec145cac6 Pucch2 polar rx: fix dynamic range
fixes the overflow issue in the PUCCH2 RX with 4+ RX antennas and 12+
bits (polar code format). The fix scales the polar decoding LLR
computation according to the number of RX antennas. The issue was clear
for 100 MHz 4 RX antennas. Even

  nr_pucchsim -s -5 -q 8 -P 2 -b 12 -R 273 -z4 -n1000

doesn't converge to 0 BLER with increasing SNR. The issue didn't appear
in CI because of the bandwidth and antenna count limitations.
2024-04-08 12:53:35 +02:00
Robert Schmidt
171d9950a1 Merge remote-tracking branch 'origin/perf_improv_polar_encoder' into integration_2024_w14 2024-04-08 08:29:29 +02:00
Robert Schmidt
5f652b1716 Merge remote-tracking branch 'origin/resolve-duplicate-nas' into integration_2024_w14 2024-04-08 08:29:23 +02:00
Laurent THOMAS
b380af69dc remove one useless memset 2024-04-05 15:30:00 +02:00
Jaroslava Fiedlerova
0e85db5419 Remove obsolete "version" parameter from yaml files used on avra
- docker on CI machine avra was updated to version 26.0.0, which reports
  parameter "version" as obsolete
- this additional log causes fail of the container undeployment to stage
2024-04-05 15:26:31 +02:00
Laurent
a0e7733035 Warning fix to RHEL generated message
: error: '<unknown>' may be used uninitialized [-Werror=maybe-uninitialized]
  180 |   reverse_bits_u8(tmp, N/8, D2);
2024-04-05 14:14:18 +02:00
Jaroslava Fiedlerova
16765f3545 Merge remote-tracking branch 'origin/gnb-stable-ul-many-ues' into integration_2024_w14 2024-04-05 11:19:29 +02:00
Jaroslava Fiedlerova
8a9b69984b Merge remote-tracking branch 'origin/NR_SRS_remove_assertion' into integration_2024_w14 2024-04-05 11:19:09 +02:00
Robert Schmidt
680c6b69e1 Remove duplicated NAS message send, already done above
Closes: #775
2024-04-05 09:56:06 +02:00
Robert Schmidt
5951caa91e Avoid concurrent write while filling RX/CRC.indication
We observe these asserts while running concurrent UL traffic on many
UEs:

  Assertion (crc->rnti == rx->rnti) failed!
  In handle_nr_ulsch() ../../../openair2/NR_PHY_INTERFACE/NR_IF_Module.c:193
  mis-match between CRC RNTI 7221 and RX RNTI 35cf

CRC and RX indication need to be pairwise for one UE, when here we have
each for different UE. However, investigation seemed to indicate that
both arrays for CRC and RX indication contained only one PDU; it seemed
the RNTI changed while writing the CRC/RX.indication messages in
nr_fill_indication().

In this patch, we change the logic to mark a ULSCH free AFTER calling
nr_fill_indication(). It is difficult to say if this makes the assertion
disappear, but preliminary tests did not exhibit the same failure
states.

Closes #773
2024-04-04 19:00:57 +02:00
Robert Schmidt
e6e25275ed Bugfix: make preamble_list an array
- It is only a couple of bytes
- It hid a bug: if two preambles, L1_nr_prach_procedures() overwrote the
  preamble of the first with the second one
2024-04-04 18:55:53 +02:00
Robert Schmidt
0f1f76878e NRUE: print RA RNTI when receiving RAPID 2024-04-04 18:55:53 +02:00
Robert Schmidt
087480084b increase response_window in multi-UE test 2024-04-04 18:55:53 +02:00
Robert Schmidt
0e2c9e8ebb Do not reduce RACH.ind count in loop
if we reduce, we will never do all rach indications. Go one-by-one
instead.
2024-04-04 18:55:53 +02:00
Robert Schmidt
c9f58179e4 Improve Preamble detection log and reformat code 2024-04-04 18:55:53 +02:00
Robert Schmidt
0716d1d6c0 gNB: Msg2: print used RAPID 2024-04-04 18:55:53 +02:00
Robert Schmidt
b63762f9fe Improve RA logs 2024-04-04 18:55:53 +02:00
Robert Schmidt
ca1ca5f5af Check beam before allocating Msg2/harmonize with Msg3 retx 2024-04-04 18:54:04 +02:00
Robert Schmidt
d534e444f0 Check Msg3 TDA before committing to Msg2 allocation 2024-04-04 18:54:04 +02:00
Robert Schmidt
876b2ce8f6 Refactor Msg3 TDA selection in own function 2024-04-04 18:54:04 +02:00
Robert Schmidt
defc97ec16 check Msg2 allocation frame/slot in DL scheduler
Move decision of Msg2 allocation time instant from instance we receive
RA indication (only containing preamble time information) to actual RA
scheduler (containing current DL slot time). This has the advantage:

- if Msg2 cannot be sent, we might try in a later slot
- no timing-based problems were a RACH.indication FAPI message might
  come late, we calculate a Msg2 frame/slot, but this instant has
  already passed in the DL scheduler
- no assumption about slot_ahead (an L1 constant)

The previous code calculated and verified an SSB index; I am not sure
this code is correct or used. I leave the function
ssb_index_from_prach() (hence the gcc attribute), but remove any checks.
Similarly, the beam association list might be wrong. I deleted the
corresponding code.
2024-04-04 18:54:04 +02:00
Robert Schmidt
8d37fde91f Refactor: store Msg.1 parameters in RA process
- the preamble is needed to detect when we are outside of the RA window,
  so store it
- store the rest of Msg1 variables together in struct
2024-04-04 18:54:04 +02:00
Robert Schmidt
7364d9bde7 Move find_monitoring_periodicity_offset_common() to RA file 2024-04-04 18:54:04 +02:00
Robert Schmidt
7873292f28 Reduce indentation in nr_generate_msg2(): no functional changes 2024-04-04 18:54:04 +02:00
Robert Schmidt
205cc66546 Refactor former find_nr_RA_id() to static function 2024-04-04 18:54:04 +02:00
Robert Schmidt
8f747d7aa2 Simplify nr_initiate_ra_proc()
- create function to find free RA process
- reorganize function to put Msg1 related processing first, Msg2 second
2024-04-04 18:54:04 +02:00
Robert Schmidt
6658eb28f0 Simplify nr_clear_ra_proc() 2024-04-04 18:54:04 +02:00
Robert Schmidt
3289189a2d Fix: Configure TDD beam association only in FR2; set to NULL otherwise
Before this commit, there was data that was not initialized, resulting
in Msg2 remaining unscheduled.
2024-04-04 18:53:33 +02:00
Jaroslava Fiedlerova
c5b6195a60 Merge remote-tracking branch 'origin/fix-sleeping-ue-at-synchro' into integration_2024_w14 2024-04-04 17:50:46 +02:00
Jaroslava Fiedlerova
ad77def89d Merge remote-tracking branch 'origin/remove-stored-G-in-UE-dl' into integration_2024_w14 2024-04-04 17:49:56 +02:00
Jaroslava Fiedlerova
13ac4105b9 Merge remote-tracking branch 'origin/improve-nrue-security' into integration_2024_w14 2024-04-04 16:46:43 +02:00
Jaroslava Fiedlerova
2ace33d289 Merge remote-tracking branch 'origin/NR_MAC_UE_rework_processing_DCI' into integration_2024_w14 2024-04-04 16:39:37 +02:00
francescomani
2f9fe36412 improvements in the procedures for SR at MAC UE 2024-04-04 14:34:56 +02:00
Raphael Defosseux
a227eb7720 chore(ci): some docker improvements
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-04-04 14:22:26 +02:00
francescomani
21d3a4ea51 improving the handling of sr_TransMax 2024-04-04 13:58:01 +02:00
francescomani
338426ed72 use NR_timer_t for SR-ProhibitTimer 2024-04-04 08:37:56 +02:00
Laurent THOMAS
df86214067 Add a generic function for tx write out of order (timestamps not increasing)
Add an API to allow out-of-order writes to a radio interface, unlike the
current interface.

this function is called in UE in this commit, even if the tx might
still be in order.

Later, i plan to improve UE pulti-threading, that will lead to out of
order tx.  also, the gNB will benefit of this new function to replace
several specific pieces of code that reorder tx with over complex and
slow systems
2024-04-04 08:19:52 +02:00
Laurent THOMAS
effe4f1c81 replace transient malloc by stack allocation, add defense code on block size 2024-04-03 10:31:34 +02:00
Laurent THOMAS
7106f3c15c fix sleeping UE when PSS detection is wrapping over frame buffer 2024-04-03 09:44:50 +02:00
Laurent THOMAS
a3f472a58b remove stored G in UE DL, not needed and creating issues with DCI format 11/type0 2024-04-03 09:42:46 +02:00
francescomani
aaddf3623c bugfix: new implementation prevented to find DL DCI if there was already UL DCI in the same slot 2024-04-03 09:14:50 +02:00
francescomani
fa27f9ad48 moving decision on DCI format type from L1 to MAC 2024-04-03 09:14:50 +02:00
Cedric Roux
fbe2b65ee6 nr pdcp: small improvement: LOG after unlock
Reduces time with lock acquired.
2024-04-03 08:29:26 +02:00
Cedric Roux
a323195aed nr pdcp: improve readability of integrity checking
Introduce the structure nr_pdcp_integrity_data_t and adapt code to use it.

Note: in nr_pdcp_sdu_t we keep the 'count' variable (which is also present
in nr_pdcp_integrity_data_t). They represent the same value, but 'count'
in nr_pdcp_integrity_data_t is to be specifically used for integrity while
the other one has other uses, so it's better to keep it.
2024-04-03 08:28:15 +02:00
Cedric Roux
0f9b335951 minor: move declaration of variable 2024-04-03 08:28:15 +02:00
Cedric Roux
f81a463f99 nrUE: reply SecurityModeFailure if integrity of SecurityModeCommand fails 2024-04-03 08:28:15 +02:00
Cedric Roux
d1f490243e nrUE: check integrity of SecurityModeCommand
We AssertFatal() if integrity fails. To be refined if needed.
2024-04-03 08:28:15 +02:00
Cedric Roux
4e625b01d2 nr pdcp: add an API function to check integrity 2024-04-03 08:28:15 +02:00
Cedric Roux
b9f0299165 nrUE: simplify nr_rrc_ue_process_securityModeCommand()
The case securityModeFailure didn't seem to be implemented
properly, so I just removed it entirely.

The variable 'securityMode' did not make much sense, removed as well.
Plus for integrity, there was: securityMode |= 1 << 5 for nea1
and << 6 for nea2, which does not seem correct (I would expect << 4
and << 5 respectively), so it was properly incorrect.

'securityModeCommand->criticalExtensions.choice.securityModeCommand'
was accessed before checking that
'securityModeCommand->criticalExtensions.present'
is 'NR_SecurityModeCommand__criticalExtensions_PR_securityModeCommand',
which is wrong.

The tests 'securityMode >= NO_SECURITY_MODE' and 'securityMode != 0xff'
don't make sense/are unclear, so removed too.

So let's simplify this function, wrong in several places. And put
some AssertFatal() so that the code won't do weird things. The
AssertFatal() can be removed later and the function improved later
if needed. The case securityModeFailure can also be handled later,
but I think there is more work to do than just encoding the message
and send it to the gNB, so it's not bad to remove it for the moment.
2024-04-03 08:28:15 +02:00
Cedric Roux
cc61d4f7be nr pdcp: pass MAC-I and header to upper layers
Needed by some RRC procedures to validate the integrity of a message
before accepting it.
2024-04-03 08:28:15 +02:00
Cedric Roux
d4d534f1ef nrUE: bugfix: derive and use correct security keys for DRBs 2024-04-03 08:28:15 +02:00
Cedric Roux
f85e3adc5a nrUE: bugfix/improvement in security mode handling
The use of security_mode_completed in the PDCP entity was a hack.

Plus it was not working at all with the deregistration request
when nea2 is used, sent when doing ctrl+c in the nrUE.

So let's remove it.

And let's handle activation of integrity and ciphering more in
accordance with what 38.331 says. SecurityModeComplete has to
be sent integrity protected, but not ciphered. Only after should
the ciphering be activated. (See 38.331 5.3.4.3.)
2024-04-03 08:28:12 +02:00
Cedric Roux
7cceaa3fae nrUE: report nea2 support in the capabilities 2024-04-03 08:26:39 +02:00
Robert Schmidt
1cae1879be Merge branch 'integration_2024_w13' into 'develop'
Integration `2024.w13`

Closes #696 and #762

See merge request oai/openairinterface5g!2653

* !1911 Preparatory work for NR DL 4-layer MIMO at gNB
* !2610 fix ug on pilot 2 in nr_pbch_dmrs_correlation() that is lacking signal...
* !2639 NR gNB PUCCH2 CQI workaround
* !2642 NR UE demoting to LOG_D another log that cause flooding
* !2644 NR UE prevent segfault at detach
* !2645 add error code for pdu session reject in the ue
* !2600 Handle Msg3 with SRB1 RRCReestablishmentComplete and MAC CE C-RNTI
* trigger RF-sim E1+F1 test without asan
* !2636 Fix various F1 problems
* !2641 NR DL and UL channel estimation fix
* !2652 Provide additional troubleshooting documentation for QtScope
* !2646 NRUE fix asn_sequence_del to clear a list
* !2504 CI: use iperf3, refactor Iperf_Module
* !2617 use UE ID instead of RNTI internally in NR RLC
* !2619 Minor PDCP fixes
* !2648 Minor CI fixes, stack protection, fix E1+F1 Quectel test, L2sim5G test
2024-04-03 06:04:17 +00:00
Jaroslava Fiedlerova
acd94f9d43 Merge remote-tracking branch 'origin/ci-fixes' into integration_2024_w13 2024-04-02 19:13:02 +02:00
Jaroslava Fiedlerova
4885e1d4ef EXPERIMANTAL: add -fstack-protector-strong to rhel image build 2024-04-02 18:18:12 +02:00
Jaroslava Fiedlerova
141558b812 Merge remote-tracking branch 'origin/nr-pdcp-minor-fixes' into integration_2024_w13 2024-04-02 18:16:33 +02:00
Jaroslava Fiedlerova
08b8071091 Merge remote-tracking branch 'origin/NR_RLC_UE_ID' into integration_2024_w13 2024-04-02 18:15:51 +02:00
Jaroslava Fiedlerova
0edb81dc01 Merge remote-tracking branch 'origin/ci-iperf-improvements-test' into integration_2024_w13 2024-04-02 11:40:28 +02:00
Jaroslava Fiedlerova
ded3618f70 Merge remote-tracking branch 'origin/NR_UE_fix_wrong_use_asn_sequence_del' into integration_2024_w13 2024-04-02 11:36:43 +02:00
Jaroslava Fiedlerova
4d25ee9545 Merge remote-tracking branch 'origin/dqt-troubleshoot-doc' into integration_2024_w13 2024-04-02 11:35:51 +02:00
Jaroslava Fiedlerova
06f45c462b Merge remote-tracking branch 'origin/NR_fix_layer_port_confusion_channel_estimates' into integration_2024_w13 2024-04-02 11:33:48 +02:00
Jaroslava Fiedlerova
3e9f1beea0 Merge remote-tracking branch 'origin/fix-f1-id-ues' into integration_2024_w13 2024-04-02 11:33:12 +02:00
Robert Schmidt
897e499d55 Use normal/non asan images for 5G RFsim E1 2024-04-02 11:12:09 +02:00
Sagar Arora
84d28168f7 UPF can only use IPv4 and FQDN localhost resolves to IPv6 on an IPv6 enabled machine 2024-04-02 11:06:30 +02:00
Jaroslava Fiedlerova
87db25a3bb Merge remote-tracking branch 'origin/Fix_Msg3_RRCReestablishmentComplete_with_C-RNTI' into integration_2024_w13 2024-03-29 20:44:11 +01:00
Jaroslava Fiedlerova
3dd2e5e1c3 Merge remote-tracking branch 'origin/add-message-pdu-sessio-reject' into integration_2024_w13 2024-03-29 17:03:19 +01:00
Jaroslava Fiedlerova
87d14c3cd4 Merge remote-tracking branch 'origin/NR_prevent_segfault_at_detach' into integration_2024_w13 2024-03-29 17:02:45 +01:00
Jaroslava Fiedlerova
5fc9a4bc42 Merge remote-tracking branch 'origin/demote_another_log_printed_too_many_times' into integration_2024_w13 2024-03-29 17:02:16 +01:00
Jaroslava Fiedlerova
19eb0af185 Merge remote-tracking branch 'origin/NR_PUCCH2_RX_CQI' into integration_2024_w13 2024-03-29 16:59:27 +01:00
Jaroslava Fiedlerova
c5bc442410 Merge remote-tracking branch 'origin/better-log-ue-sync' into integration_2024_w13 2024-03-29 16:08:38 +01:00
Jaroslava Fiedlerova
c92650003f Merge remote-tracking branch 'origin/NR_4_layers_MIMO' into integration_2024_w13 2024-03-29 16:06:14 +01:00
Robert Schmidt
9b8479488f Provide additional troubleshooting documentation for QtScope
On Wayland (e.g., Gnome on Ubuntu 22), additional steps might be
necessary to make QtScope run. Describe them in the doc.

Closes: #696
2024-03-29 09:50:32 +01:00
Guido Casati
914e71fdab Flag RBs as suspended in PDCP
- this prevents pulling PDUs from PDCP when re-establishment is awaiting
2024-03-28 18:28:16 +01:00
Guido Casati
f7a285cfc1 Define for PDCP Formats
- short and long SN sizes
- PDCP PDU header sizes
- PDCP integrity size
- getter for maximim PDCP PDU size
2024-03-28 18:28:11 +01:00
francescomani
e77a1468d7 use UE ID instead of RNTI internally in RLC 2024-03-28 16:39:51 +01:00
francescomani
0bb67e9552 removing an assertion in SRS RRC config that was already been removed in the past and someone has been placed back 2024-03-28 15:11:10 +01:00
francescomani
4a3beb0b48 fix usage of asn_sequence_del to clear a list 2024-03-28 13:50:11 +01:00
luis_pereira87
bbb1832c07 Handle Msg3 with SRB1 RRCReestablishmentComplete and MAC CE C-RNTI
From 3GPP TS 38.321 Section 5.4.3 Multiplexing and assembly, we need to process the highest priority subPDUs first:
- MAC CE for C-RNTI is the one with higher priority
2024-03-28 11:39:07 +00:00
Robert Schmidt
f4ac4fee42 Apply 1 suggestion(s) to 1 file(s) 2024-03-28 10:47:10 +00:00
Robert Schmidt
e0b31be148 Request release for UEs if DU disconnects
38.473 section 8.2.3.1 says that upon F1 Setup Request, UE associated
signalling should be erased. In this commit, we trigger a release of all
UEs that were still connected to a DU when we received the SCTP
shutdown, i.e., when the DU disconnects.
2024-03-28 08:55:11 +01:00
Robert Schmidt
e5e48bb2d8 RRC: take last UE activity time stamps 2024-03-28 08:55:11 +01:00
Robert Schmidt
d9abf18dab Check If UE ID exists when handling CU RRC message transfer
Closes #762
2024-03-28 08:55:11 +01:00
Robert Schmidt
1e8f194d11 Only release UE in PDCP if in E1
Explanations: see #706. TLDR: the RRC code calls nr_pdcp_remove_ue(), so
we should not call it in the E1 handler if we do not use split mode.
2024-03-28 08:55:11 +01:00
Robert Schmidt
78f6e83f55 EXPERIMANTAL: -fstack-protector-strong 2024-03-28 08:27:47 +01:00
Robert Schmidt
03312c9102 Remove L2-Sim-Test-5G from CI ContainerParent pipeline
5G L2sim is broken since some time, and there is no time to fix it.
Remove it from the Container Parent Pipeline.
2024-03-28 08:26:53 +01:00
Robert Schmidt
f86a285cb9 Improve SABOX F1+E1 radio behavior 2024-03-28 08:26:53 +01:00
Robert Schmidt
8f9c3a55de Debugging of images with core dumps: improvements
- Four mounting of files, we need the absolute path. Even if the script
  gets relative paths, realpath will give the absolute path
- Correctly recognize and handle gNB images with AW2S support
2024-03-28 08:26:53 +01:00
Robert Schmidt
4340277b3e Dockerfiles for gNB AW2S: add gdb for debugging 2024-03-28 08:26:53 +01:00
Jaroslava Fiedlerova
76900d5ca8 Remove redundant parameters (iperf_packetloss_threshold, iperf_profile) from iperf TCP testcases 2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
d456fa5620 Remove "single-ue" profile from config files
- no need to specify "single-ue" profile when running iperf test for 1 UE only
- default profile "balanced" can be used instead, computes BW for 1 UE correctly
2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
0713afd610 SA-AERIAL-CN5G - add svr_id 2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
be461a0db9 RF-Sim-Test-4G - modify xml files, use iperf3, add svr id 2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
8830529ed0 L2-Sim-Test-4G - modify xml files, use iperf3, add svr id 2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
ae544eff58 SA-OAIUE-CN5G - modify xml files, add svr id 2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
5d5032880f LTE-FDD-OAIUE-OAICN4G-Container - modify xml files, add svr id 2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
a20efee737 RAN-LTE-TDD-2x2-Container use iperf3 2024-03-27 23:19:17 +01:00
Jaroslava Fiedlerova
6563bd65cb RAN-LTE-TDD-LTEBOX use iperf3 2024-03-27 23:19:12 +01:00
Jaroslava Fiedlerova
303fb52aee RAN-LTE-FDD-LTEBOX use iperf3 2024-03-27 23:19:06 +01:00
Jaroslava Fiedlerova
723d57c29d RAN-RF-Sim-Test-5G test with iperf3 2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
150c49b47e SA-AW2S-CN5G - modify xml files, add svr id 2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
d499482653 RAN-NSA-B200-Module-LTEBOX-Container switch to iperf3 2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
546e0350ce RAN-SA-B200-Module-SABOX-Container switch to iperf3 2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
429dbae997 Switch to iperf3 in unused xml files 2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
d7d85ff9cd Remove unused iperf test and analysis functions
- Remove IperfFromContainer
- Remove unused functions IperfExit and PingExit
- Remove unused function for iperf analysis
2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
08f0040a9a Install iperf3 in gNB and UE containers 2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
2262c46308 Remove 10s sleep after object deployment 2024-03-27 23:12:02 +01:00
Jaroslava Fiedlerova
cb1f72a8a6 Refactor Iperf_Module 2024-03-27 23:11:56 +01:00
Jaroslava Fiedlerova
7eefa4ec75 Add iperf3 analysis functions 2024-03-27 22:43:52 +01:00
Jaroslava Fiedlerova
4ad8a7bd64 Add iperf_tcp_rate_target for TCP iperf3 tests 2024-03-27 22:43:52 +01:00
Jaroslava Fiedlerova
cef76f3d20 Put Iperf_ComputeModifiedBW and Iperf_ComputeTime outside the class 2024-03-27 22:43:46 +01:00
Jaroslava Fiedlerova
08353293e5 Rename and modify ci_ueinfra and cls_module_ue
- add traffic servers
- add runServer parameter
2024-03-27 22:37:55 +01:00
Jaroslava Fiedlerova
921c24ce96 Add 10ms sleep after remote and local command running in background 2024-03-27 22:37:55 +01:00
Laurent THOMAS
6b4710d36d add error code for pdu session reject in the ue 2024-03-27 13:12:35 +01:00
Laurent THOMAS
86ebebf3f5 fix merge conflicts 2024-03-27 10:06:33 +01:00
francescomani
6e9dd015f6 DCI formats 11 and 01 assume the presence of an active BWP, if not present return with an error to prevent segfault 2024-03-27 09:36:19 +01:00
Laurent THOMAS
9a4294ebab for_review_then_squash 2024-03-26 20:58:44 +01:00
Laurent THOMAS
a95dffc80e delete dead files 2024-03-26 20:57:31 +01:00
Laurent THOMAS
80d4d600f3 print the mib when decoded 2024-03-26 20:57:31 +01:00
Laurent THOMAS
88fb3c3598 change type to c16_t around dmrs computation pieces of code 2024-03-26 20:57:31 +01:00
Laurent THOMAS
99e1bb1a00 fix ug on pilot 2 in nr_pbch_dmrs_correlation() that is lacking signal processing, make the code in pbch simpler and faster 2024-03-26 20:57:31 +01:00
Laurent THOMAS
39400a458e change partially pbch detection to c16_t instead of hidden complex in int16_t and int32_t 2024-03-26 20:57:31 +01:00
Laurent THOMAS
34f260769b make better log text for ue synchronization, make better sync code, no functional change 2024-03-26 20:57:29 +01:00
francescomani
4ba44927f4 demoting to LOG_D another log that otherwise would be printed too many times at the UE because of periodic calling of to_nrarfcn 2024-03-26 17:50:06 +01:00
Robert Schmidt
883724b977 Merge branch 'integration_2024_w12' into 'develop'
Integration `2024.w12`

See merge request oai/openairinterface5g!2637

* !2640 Fix UPF crash at startup after latest Docker and Ubuntu updates
* !2579 Add telnetsrv_rrc for triggering RRCRelease
* !2613 NR UE fix for procedure after T300 expiry
* !2625 Changes to support 32 UEs in the gNB.
* !2632 NR fix for initialization of gold sequences for DMRS
* !2588 fix(doc): add ptp4l service configuration file in 7.2 documentation
* !2630 Move BladeRF config to right subfolder
* !2626 On RFsimulator end, close open connections
* !2628 NR UE fix double sync
* !2634 feat(phy-test): disable CQI and RSRP errors when running in phy-test mode → review to be addressed
* !2621 CI: set memory limit for docker build cache
* !2604 NR UE BSR improvements → waiting for final changes
* !2638 NR UE data scrambling fixes
* !2602 [E2 agent] KPM & RC SMs improvements
2024-03-26 13:42:55 +00:00
Robert Schmidt
4c07dca3bd Merge remote-tracking branch 'origin/kpm-rc-cleanup' into integration_2024_w12 2024-03-26 10:56:24 +01:00
francescomani
ca949b4c29 remove nushift in DL channel estimation 2024-03-26 10:47:19 +01:00
Robert Schmidt
0ecd346b07 Merge remote-tracking branch 'origin/NR_UE_data_scrambling_fix' into integration_2024_w12 2024-03-26 10:41:25 +01:00
francescomani
dcc107bfd9 use layer number and not dmrs port number to index pusch channel estimates (plus some code improvement) 2024-03-26 10:06:49 +01:00
francescomani
be807c92bd use layer number and not dmrs port number to index pdsch channel estimates (plus some code improvement) 2024-03-26 09:44:18 +01:00
Teodora
7535e99944 E2AP README & FlexRIC commit ID update 2024-03-25 18:13:01 +01:00
francescomani
f2c8305496 further improvements in precoding initialization at MAC 2024-03-25 16:01:09 +01:00
Teodora
7bfa2d71f4 E2SM cmake update
- hardcoded data for E2 Setup Request; fill_rnd_data_e2_setup_req.c dependancy taken
    out
2024-03-25 15:08:39 +01:00
Teodora
6a0e636f00 RAN Control cleanup
- RAN Function Definition implemented
  - use mutual E2SM UE ID file
  - write_ctrl_rc_sm function cleanup
2024-03-25 15:08:39 +01:00
Teodora
ba003cc649 KPM cleanup
- RAN Function Definition implemented
  - ran_func_kpm.c - use function pointers based on the matching condition,
    and node type
  - ran_func_kpm_subs.h/c - for measurement collection within
    MAC/RLC/PDCP layers; for CU-UP node only PDCP included (otherwise,
we would get undefined reference to MAC/RLC)
  - use mutual E2SM UE ID file
2024-03-25 15:08:28 +01:00
Teodora
fc4c4fc599 Add mutual O-RAN E2SM UE ID filling info 2024-03-25 13:10:44 +01:00
francescomani
afde7f6c51 improvements in precoding initialization at MAC 2024-03-25 13:09:31 +01:00
Raphael Defosseux
9379bf85ed Merge branch 'Fix_UPF_startup_crash' into 'develop'
Fix UPF crash at startup after latest Docker and Ubuntu updates

See merge request oai/openairinterface5g!2640
2024-03-25 09:28:29 +00:00
luis_pereira87
791531015d Fix UPF crash at startup after latest Docker and Ubuntu updates 2024-03-23 20:54:48 +00:00
Robert Schmidt
c45fb43110 Fix: handle CU-to-DU info in UE Ctxt setup Req 2024-03-23 10:21:41 +01:00
Robert Schmidt
eaff52f8e8 Merge remote-tracking branch 'origin/NR_UE_MAC_UL_improvements' into integration_2024_w12 2024-03-23 10:21:32 +01:00
Robert Schmidt
3042c70d3d Merge remote-tracking branch 'origin/ci-obelix-image-cleanup' into integration_2024_w12 2024-03-22 16:35:24 +01:00
Robert Schmidt
19092a5d15 Merge remote-tracking branch 'origin/phy-test-remove-mac-error-log' into integration_2024_w12 2024-03-22 16:35:16 +01:00
Romain Beurdouche
6cf2ab2a15 feat(phy-test): disable CQI and RSRP evaluation when running in phy-test mode
In phy-test, the scheduler has a hardcoded UE allocation; if CQI and RSRP
are not evaluated, there is no change in the scheduler function. Also,
this avoids misleading error messages if no UE is connected.
2024-03-22 15:02:10 +01:00
Robert Schmidt
c2a2e07746 Merge remote-tracking branch 'origin/NR_UE_fix_double_sync_dora' into integration_2024_w12 2024-03-22 14:58:36 +01:00
Robert Schmidt
fd5596bfad Merge remote-tracking branch 'origin/fix-rfsim-bad-fd' into integration_2024_w12 2024-03-22 14:58:29 +01:00
Jaroslava Fiedlerova
7258f78fbf CI: set mem limit for docker build cache to 1h
Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2024-03-22 14:54:01 +01:00
francescomani
b739e5357d hardcoding invalid report for PUCCH2 CQI at gNB because SNR computation is wrong 2024-03-22 12:51:28 +01:00
mir
b21552973c Remove old OAI implementation 2024-03-22 11:36:45 +01:00
mir
a6ad11a20e Remove duplicated bit reverse table 2024-03-22 11:36:41 +01:00
mir
44e31bd845 Improved polar encoder 2024-03-22 11:35:34 +01:00
francescomani
91e5d80002 correct use of dataScramblingID for PUSCH at UE 2024-03-22 11:08:19 +01:00
Robert Schmidt
07750d3a98 Merge remote-tracking branch 'origin/move-bladerf-config' into integration_2024_w12 2024-03-22 10:59:30 +01:00
Robert Schmidt
e3c22441a5 Merge remote-tracking branch 'origin/amd-return-phytest-with-fhi72' into integration_2024_w12 2024-03-22 10:59:19 +01:00
francescomani
4f884db3d6 correct use of dataScramblingID for PDSCH at UE 2024-03-22 09:48:13 +01:00
francescomani
c090b1f767 further improvements in BSR handling after being triggered 2024-03-22 09:13:01 +01:00
francescomani
310f62604c improvements in periodicBSR_Timer implementation 2024-03-22 09:13:01 +01:00
francescomani
e60af1c8f6 improvements in retxBSR_Timer implementation 2024-03-22 09:13:01 +01:00
francescomani
04ac336c80 improvements in function to update BSR status 2024-03-22 09:13:01 +01:00
francescomani
5df946fab6 improvements in Bj computation and implementing a timer to compute time elapsed since last Bj update 2024-03-22 09:12:48 +01:00
Robert Schmidt
78305b8c54 Merge remote-tracking branch 'origin/NR_fix_gold' into integration_2024_w12 2024-03-22 08:31:19 +01:00
Robert Schmidt
93d8e02c31 Merge remote-tracking branch 'origin/Multi_UE_support_for_32' into integration_2024_w12 2024-03-22 08:31:11 +01:00
Robert Schmidt
dea9271bce Merge remote-tracking branch 'origin/NR_UE_fix_T300_expiry' into integration_2024_w12 2024-03-22 08:31:02 +01:00
Robert Schmidt
00e549aa62 Merge remote-tracking branch 'origin/add_telnetsrv_rrc' into integration_2024_w12 2024-03-22 08:30:24 +01:00
francescomani
8f858af876 improvements for 4-layer MIMO at gNB 2024-03-21 18:22:25 +01:00
francescomani
de82f516fe fix gold pusch 2024-03-21 11:17:39 +01:00
francescomani
557f3e6f05 fix gold pdsch 2024-03-21 11:17:02 +01:00
francescomani
8d93ab5fed fix gold pdcch 2024-03-21 11:16:59 +01:00
Romain Beurdouche
9efc692ad5 fix(doc): fhi7.2: replace configuration file by wildcard in nr-softmodem usage example 2024-03-21 09:29:13 +01:00
vijay chadachan
5697f396f6 Adjusted the num_dl_sched > 3 while adapting DL MCS for DL grants
- The DL MCS adapted based on the BLER for the minimum number of
DL(numd_sched) grants for the UE in the pre_configured number of frames.
The current threshold value is set to be >9 for 16 UE capacity.
- With increased number of UE to 32 and when all the UEs are DL data active
the num_dl_sched is not meeting the threshold value. Due to whcih the MCS
of all the UEs are stuck with MCS 10-12 in good channel condition.
- The threshold value is adjusted to support 32 UE capacity increase.
2024-03-21 09:13:26 +01:00
vijay chadachan
740bec4ac0 Fix max_sched_ues in DL/UL Scheduler to match MAX_DCI_CORESET
- Added the limit as MAX_DCI_CORESET for max_sched_ues in DL/UL scheduler.
This is needed because gNB crashes when tested with 100MHz cell as the
scheduler tries to schedule 11 UEs in a slot and the DCI informaiton is
corrupted due to the limitation in NFAPI interface because of
MAX_DCI_CORESET size.
2024-03-21 09:13:26 +01:00
vijay chadachan
2b37edaa3c Additional memory allocation for MAC stats logging to enable 32 UE support
The memory allocation is increased to enable the periodic mac stats logging
to enable increased number of UEs data.
2024-03-21 09:13:22 +01:00
Romain Beurdouche
06c4f4690a fix(doc): fhi7.2: add config file warning after nr-softmodem usage example 2024-03-20 17:59:17 +01:00
Romain Beurdouche
9c4da620b9 feat(doc): fhi7.2: add Benetel 550 CAT-A RU support 2024-03-20 17:07:50 +01:00
Romain Beurdouche
73f2c9108d fix(doc): fhi7.2: fix missing "/cmake_targets" in OAI build directory path 2024-03-20 16:45:54 +01:00
Robert Schmidt
9e6f82399f Move BladeRF config to right subfolder 2024-03-20 15:56:19 +01:00
francescomani
a47fd7fcfb fix to avoid do-ra to perform synchronization twice on attachment 2024-03-20 10:11:09 +01:00
francescomani
ab2a08fd43 functions to map LCID to structures in the UE MAC 2024-03-19 16:07:58 +01:00
Robert Schmidt
513f56e215 One RFsimulator end, close open connections
Use the correct function in order to close open RFsim connections,
instead of a simple close(). If this is not done correctly, it might
happen that the softmodem closes, but an L1 thread might still read
samples (bug in higher layers). Then, RFsim tries to read a socket
(because it has an open connection), but the actual connection had been
close()d. This commit fixes this behavior.
2024-03-19 15:26:49 +01:00
Romain Beurdouche
8a65ca93fc fix(doc): fhi7.2: experience return from Christ 2024-03-19 10:51:40 +01:00
Robert Schmidt
c16bde2928 Demote log in to_nrarfcn() to debug: is used periodically at UE 2024-03-19 10:33:15 +01:00
francescomani
ee3dcc5c77 replacing cell_notdetected with cell_detected in initial_sync structure 2024-03-19 09:59:07 +01:00
francescomani
1fa6be2a3d fix procedure after T300 expiry 2024-03-19 09:55:05 +01:00
Romain Beurdouche
819455d375 fix(doc): FHI 7.2, add core in our environment for system core 2024-03-19 08:46:18 +01:00
Romain Beurdouche
3ecd2e6b62 fix(doc): add ptp4l service configuration file in 7.2 documentation 2024-03-19 08:46:18 +01:00
Robert Schmidt
122a5ce9b8 Merge branch 'integration_2024_w11' into 'develop'
Integration: `2024.w11`

See merge request oai/openairinterface5g!2623

* !2435 Add a sequence container in OAI
* !2552 NR UE RRC re-establishment
* !2611 RRC: ignore random value during RRC Setup Request
* !2587 NR UE RRC handle MeasConfig
* !2616 NR UE remove unused phy_config_ind queue
* !2580 Improve function that map ro to ssb in the UE: make dynamic smaller memory...
* !2614 F1AP: move GTP from enc/dec to logic handlers
* !2622 gNB LOG with UE command line parameters
* !2595 remove 5G dependency on 4G mac.h include, separate RA state enums between 4G/5G and UE/gNB
* !2615 Enhancements to traffic flow in SW architecture documentation
2024-03-19 06:31:50 +00:00
Robert Schmidt
44147a473f Merge remote-tracking branch 'origin/nr-rlc-documentation' into integration_2024_w11 2024-03-18 12:27:28 +01:00
Robert Schmidt
a9123e68fc Merge remote-tracking branch 'origin/fix-4G-5G-ra-state-confusion' into integration_2024_w11 2024-03-18 10:17:36 +01:00
Robert Schmidt
0b43620e05 Merge remote-tracking branch 'origin/print_LOG_for_UE_command_line_parameters' into integration_2024_w11 2024-03-18 09:41:15 +01:00
Robert Schmidt
bc9f95c972 Merge remote-tracking branch 'origin/fixes-gtp-f1' into integration_2024_w11 2024-03-18 09:41:07 +01:00
Laurent THOMAS
b97c70fd87 remove 5G dependency on 4G mac.h include, separate RA state enums between 4G/5G and UE/gNB
add RA stat trace by enum name instead of integer printing

fix minor a few minor typos
2024-03-15 10:55:11 +01:00
Robert Schmidt
73d21d6da0 F1AP: CU QoS refactor Flows Mapped enc into function 2024-03-15 09:51:13 +01:00
Robert Schmidt
8ce33f58a9 F1AP: CU QoS refactor QoS Param enc into function 2024-03-15 09:51:13 +01:00
Robert Schmidt
f660bd6352 F1AP: CU QoS refactor NSSAI enc into function 2024-03-15 09:51:13 +01:00
Robert Schmidt
2ae8a7b305 F1AP: CU UE Context Setup: create drb variables 2024-03-15 09:51:13 +01:00
Robert Schmidt
422d852bdb F1AP: Decode DU QoS Info in UE context setup Request 2024-03-15 09:51:13 +01:00
Robert Schmidt
200a408e0f F1AP: factor DU QoS decoding into functions 2024-03-15 09:51:13 +01:00
Robert Schmidt
2fbb41ddc5 Move GTP UE ID update out of message decoder 2024-03-15 09:51:13 +01:00
Robert Schmidt
a1f40006ce Move GTP initialization to DU F1 initialization 2024-03-15 09:51:13 +01:00
Robert Schmidt
a645e10ff5 F1AP: message encoders should no trigger GTP
The F1AP message encoders and decoders should do only that, encoding and
decoding messages. For the actual logic handling, including set up and
teardown of bearers, we should use the handlers.

In this commit, delete GTP tunnel handling from encoders/decoders. For
the CU, this happens already in the CU-UP/E1 handlers in
cucp_cuup_handler.c.  For the DU, add it in the handlers in
mac_rrc_dl_handler.c.
2024-03-15 09:51:13 +01:00
Guido Casati
b7a98b77c3 Enhancements to traffic flow in SW architecture documentation 2024-03-15 09:45:55 +01:00
francescomani
b6aefac53a Merge remote-tracking branch 'origin/rework-ue-map-ro-to-ssb' into integration_2024_w11 2024-03-15 09:30:06 +01:00
Robert Schmidt
823e127c55 Merge remote-tracking branch 'origin/NR_UE_no_leaks_dora' into integration_2024_w11 2024-03-15 08:13:01 +01:00
Robert Schmidt
e5713c9a56 Merge remote-tracking branch 'origin/NR_UE_RRC_handle_MeasConfig' into integration_2024_w11 2024-03-15 08:12:16 +01:00
Robert Schmidt
1f2656617b Merge remote-tracking branch 'origin/fix_rrc_rnti_with_dup_random_val' into integration_2024_w11 2024-03-15 08:10:19 +01:00
Robert Schmidt
6108e5b8fb Merge remote-tracking branch 'origin/NR_UE_RRC_Reestablishment' into integration_2024_w11 2024-03-15 08:10:09 +01:00
francescomani
51d60c2dae let the gNB print a LOG with the UE command line parameters to simplfy the life of the users 2024-03-14 18:55:51 +01:00
francescomani
c9cf72b33f RRCSetup fallback after re-establishment not implemented -> go back to IDLE 2024-03-13 17:59:11 +01:00
francescomani
f15606e8ad handle reestablishPDCP in RadioBearerConfig 2024-03-13 17:59:11 +01:00
francescomani
37d3e5bb58 get SSB ARFCN at RRC UE (needed to update k_gnb key according to 33.501) 2024-03-13 17:59:11 +01:00
Cedric Roux
72e10a0ee6 nrUE: handle security settings for SRB1 and reestablishment
For the moment absoluteFrequencySSB is hardcoded. Fixed in a following commit.
2024-03-13 17:59:08 +01:00
francescomani
a0e9716a5a bugfix: using pusch_config_pdu->nr_of_symbols in pusch schedule before being assigned 2024-03-13 17:57:34 +01:00
francescomani
f31cf3a68f handling reception of RRCReestablishment 2024-03-13 17:57:34 +01:00
francescomani
985802c06c T301 expiry 2024-03-13 17:57:34 +01:00
francescomani
bb19306797 transmission of RRCReestablishmentRequest message 2024-03-13 17:57:28 +01:00
francescomani
bfe77c7f29 Actions following cell selection while T311 is running 2024-03-13 17:48:45 +01:00
francescomani
8c2dc19470 reestablishment initiation 2024-03-13 17:48:45 +01:00
francescomani
f03601ed8e implement functions to handle DRB status at RRC UE 2024-03-13 17:48:39 +01:00
Xin Zhe Khooi
f89876778a RRC: Remove check for UE with random ID in RRC Setup Request
From the spec, it does not seem to be mandated to check that the random
identity needs to be unique within a cell. Also, from experience we see
that this only happens when the same UE "comes back"; so since one UE
can only have one connection, the other RRC UE contexts (with the same
identity) should be removed at some point, anyway, leaving only one with
the same identity.
2024-03-13 09:55:13 +01:00
Robert Schmidt
707c707c86 Add MIT as License exception allowed in OAI
MIT is compatible with OAI public v1.1, so it can be added.
2024-03-13 08:34:58 +01:00
mir
456009cb1f Add a sequence container in OAI
Add a sequence container in OAI. Includes for_each algorithm, doxygen
odcumentation, and test using ctest.
2024-03-12 17:48:10 +01:00
Raphael Defosseux
57483eed80 fix(ci): cacofonix new docker version complains about wrong CICDR subnet definition
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-03-12 11:12:30 +01:00
francescomani
499bd49450 fix SIB other than 1 2024-03-12 09:53:02 +01:00
Laurent THOMAS
77d749ba87 improve function that map ro to ssb in the UE: make dynamic smaller memory allocation than array[max][max][.... Saves about 100MB of memory and avoid real time glitch of milli seconds of memset(110MB) 2024-03-12 09:53:02 +01:00
Robert Schmidt
8931e13363 Merge branch 'integration_2024_w10' into 'develop'
Integration: `2024.w10`

See merge request oai/openairinterface5g!2608

* !2427 Scan build: Result of operation is garbage or undefined
* !2477 cleanup of nfapi_nr_interface.h and more
* !2523 CI: AW2S pipeline - test with 16 UEs including RAN code fixes
* !2530 Rework of MAC UE handling of DAI
* !2583 Small-bug-from- cdb18d38bfa6aee288a68d9e8881615a48addd83-and-one-gcc-warning
* !2592 NR DMRS RX comments
* !2599 Log module small cleaning
* CI: mark as failed if UE log analysis fails
* !2465 NVIDIA Aerial Integration
* !2409 Ue rework keep sync in frame
* !2603 tx_timestamp computation doesnt count slots from rx timestamp, and a small...
* !2607 preventing negative RX absolute slot in NR softmodem
* !2606 Instructions on how to debug using container images and core dump of CI
* !2609 Upgrade Open Cells Project UICC/SIM programming tool and rename FR2 SA configuration file
* fixup after merge of Aerial
2024-03-11 16:57:07 +00:00
Rúben Soares da Silva
73509757ad Move Aerial nFAPI enum entry to end
Some places (e.g., 4G eNB/UE nfapi mode) use numbers for the FAPI mode,
directly mapping to an enum. Aerial being in the middle messes up these
numbers. Put it at the end to limit possible problems.
2024-03-11 16:05:38 +01:00
Robert Schmidt
f992bee903 Merge remote-tracking branch 'origin/NR_SA_Tutorials_2' into integration_2024_w10 2024-03-11 10:51:52 +01:00
Robert Schmidt
fe9d871ac7 Merge remote-tracking branch 'origin/doc-ci-segv-debug' into integration_2024_w10 2024-03-11 10:51:45 +01:00
Robert Schmidt
127ae812f7 Merge remote-tracking branch 'origin/NR_absslot_rx_hotfix' into integration_2024_w10 2024-03-08 18:57:13 +01:00
Robert Schmidt
12517b55f6 Merge remote-tracking branch 'origin/gnb-tx_timestamp-compute-bug' into integration_2024_w10 2024-03-08 18:57:05 +01:00
Robert Schmidt
e9e67b40fe Merge remote-tracking branch 'origin/ue-rework-keep-sync-in-frame' into integration_2024_w10 2024-03-08 18:56:50 +01:00
Robert Schmidt
53c3e5ce1d Merge remote-tracking branch 'origin/Aerial_Integration' into integration_2024_w10 2024-03-08 17:50:06 +01:00
Robert Schmidt
0eba3d75b8 CI: mark as failed if UE log analysis fails 2024-03-08 17:50:01 +01:00
Laurent THOMAS
1ab3b8dd8e add version signature in core files to be able to compare with the ELF one 2024-03-08 16:29:54 +01:00
Laurent THOMAS
782a850159 tx_timestamp computation doesnt count slots from rx timestamp, and a small simplification just after 2024-03-08 16:29:54 +01:00
Robert Schmidt
1fadd7adb6 Add Aerial platform into CI
- create XML files for the Aerial pipeline
- create docker-compose to automate deployment
- add documentation
- add to main Jenkinsfile

Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
Co-authored-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
Co-authored-by: Rúben Soares da Silva <rsilva@allbesmart.pt>
2024-03-08 16:15:18 +01:00
Rúben Soares da Silva
4b3ea3f469 Add Aerial tutorial, describing usage with docker-compose 2024-03-08 15:53:42 +01:00
Rúben Soares da Silva
78cc3d4967 Remove double pusch_snrx10 calculation in _nr_rx_sdu function 2024-03-08 15:53:42 +01:00
Rúben Soares da Silva
8150a47ba5 NVIDIA Aerial Integration
- Aerial config file
- Changes for ARC1.1. Change config file to max MCS 25. Fixed pdu size errors.
- Remove taskset from Dockerfile.gNB.aerial.ubuntu20 after changing isolated CPUs
- removed the USRP from Docker file

Co-authored-by: Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
Co-authored-by: Fredrik Molander <fmolander@nvidia.com>
Co-authored-by: Reem Bahsoun <reem.bahsoun@openairinterface.org>
2024-03-08 15:53:42 +01:00
Robert Schmidt
e615321eb2 Rewrite debugging instructions for CI fail 2024-03-08 15:32:32 +01:00
Robert Schmidt
06820d372f Add debugging script for image+coredump 2024-03-08 15:32:32 +01:00
Robert Schmidt
2d4e3a0515 Merge remote-tracking branch 'origin/simplify-log-module-interface' into integration_2024_w10 2024-03-08 07:19:55 +01:00
Robert Schmidt
132949c226 Merge remote-tracking branch 'origin/NR_DMRS_rx_improved_comments' into integration_2024_w10 2024-03-08 07:19:47 +01:00
Robert Schmidt
d1c2d60d16 Merge remote-tracking branch 'origin/small-bug-from-cdb18d38bfa6aee288a68d9e8881615a48addd83-and-one-gcc-warning' into integration_2024_w10 2024-03-08 07:19:42 +01:00
Robert Schmidt
03619e1ccd Merge remote-tracking branch 'origin/NR_MAC_UE_rework_DAI' into integration_2024_w10 2024-03-08 07:19:35 +01:00
Robert Schmidt
66bdd0e801 Merge remote-tracking branch 'origin/ci-aw2s-test-15' into integration_2024_w10 2024-03-08 07:16:11 +01:00
Robert Schmidt
e24f5d635c Merge remote-tracking branch 'origin/cleanup_fapi_and_more' into integration_2024_w10 2024-03-08 07:16:04 +01:00
Laurent THOMAS
c5e4bea6b9 make explicit return of the clock drift to shift the corresponding number of samples
remove corresponding global variables
2024-03-07 15:28:22 +01:00
francescomani
fabf7e595f preventing crash caused by negative absolute slot RX value 2024-03-07 12:46:34 +01:00
mir
573e7d3a4a Comments from MR 2024-03-07 11:00:57 +01:00
mir
275c3c6aa8 Bugfix cmax and memory init 2024-03-07 11:00:57 +01:00
mir
fc8d0c59c6 Scan build: Result of operation is garbage or undefined 2024-03-07 11:00:57 +01:00
Jaroslava Fiedlerova
066aa33799 Add 16th UE to AW2S pipeline - connection and ping test 2024-03-07 09:57:31 +01:00
Jaroslava Fiedlerova
6259b62a18 CI AW2S Multi-UE: attach/detach 15 UEs, ping from 15 UEs 2024-03-07 09:57:31 +01:00
Laurent THOMAS
4245dd9be9 Remove useless declarations 2024-03-07 09:57:31 +01:00
Robert Schmidt
0128945922 nr_fill_indication(): protect with mutex
nr_fill_indication() fills CRC and RX requests, to be sent from L1 to
L2. Before this commit, nr_fill_indication() is called when
- we finally decoded LDPC (or not)
- low signal on PUSCH
This might happen at the same time, i.e., nr_fill_indication() might try
to fill both CRC and RX, in the same list, from different threads. This
can lead to this assertion:

Assertion (crc->rnti == rx->rnti) failed!
In handle_nr_ulsch() ../../../openair2/NR_PHY_INTERFACE/NR_IF_Module.c:190
mis-match between CRC RNTI e071 and RX RNTI 5e3b

e.g., e071 is low energy, and while 5e3b related message are filled in
one thread, e071 is being put into the message structure as well.

At least that is my understanding. I could not actually reproduce this
assertion; to be seen if it still happens.
2024-03-07 09:56:33 +01:00
Robert Schmidt
e80d8a01f3 delete dead code 2024-03-07 09:56:33 +01:00
Robert Schmidt
c189591827 Add header guards inr nr_ulsch.h to avoid circular dependencies 2024-03-07 09:56:20 +01:00
Robert Schmidt
09a75009ce nr_fill_ulsch(): gracefully handle case of no ulsch found 2024-03-07 09:56:20 +01:00
Robert Schmidt
8d87f0c4e2 get_phy_stats(): full list is non-fatal
Do not assert if the list of phy statistics is full; instead return
NULL.

In most places, this is handled appropriately (we do not store anything
if we can't). In nr_decode_pucch0(), the return value of get_phy_stats()
is used a little bit all over the function, and a constant
  if (uci_stats)
    uci_stats->variable++;
would look ugly, so make uci_stats point to the stack if we cannot store
in the phy_stats.
2024-03-07 09:56:20 +01:00
Robert Schmidt
98c309ffe3 Refactor nr_decode_pucch0() to not rely on uci_stats
the uci_stats variable (pointing to per-UE statistics for UCI) is used
in function nr_decode_pucch0() to store information which is important
beyond statistics, e.g., uci_stats->pucch0_thres as a threshold (which
comes from somewhere else)

This commit refactors to use original or intermediate variables to not
mix uci_stats usage with actual processing.

Also, group uci_stats a bit more.
2024-03-07 09:56:20 +01:00
Robert Schmidt
711518ba00 Move NUMBER_FRAMES_PHY_UE_INACTIVE to smaller scope 2024-03-07 09:56:20 +01:00
Robert Schmidt
7ea8833529 Use MAX_MOBILES_PER_GNB in 5G NR code
NUMBER_OF_UE_MAX is a 4G constant, use 5G one instead
2024-03-07 09:56:20 +01:00
Robert Schmidt
70be05381f remove unused UE_PF_PO and ue_pf_po_mutex
They use 4G NUMBER_OF_UE_MAX, which is not supposed to be present in 5G.
Further, the mutex and variable are global state; for Paging, we should
use F1.
2024-03-07 09:56:20 +01:00
Robert Schmidt
885611cd00 SRS config: make explicit that > 30 UEs don't work, handle gracefully at runtime
We can only support up to 30 UEs for SRS. In this commit, we change:
- if the total number of UEs is > 32, throw error during compilation to
  raise awareness (32 so that a multiple of two still works, everything
  else is confusing, see also next point)
- during runtime, handle gracefully if UID is 30 or 31 to not abort (we
  can simply not allocate SRS resources)

Also, refactor config_srs() to always give back new memory; the code is
shorter and clearer. Rename to get_contig_srs() to make it explicit.
2024-03-07 09:56:20 +01:00
Laurent THOMAS
c5c883f71d small-bug-from-cdb18d38bfa6aee288a68d9e8881615a48addd83-and-one-gcc-warning 2024-03-06 15:44:56 +01:00
francescomani
1baf2aa3a4 rework handling DAI at MAC UE, to improve the scenario where there are more than 4 harq per pucch 2024-03-06 12:54:30 +01:00
francescomani
c917825dab remove calls to LTE mac.h in NR 2024-03-06 11:38:41 +01:00
francescomani
4f32110c72 avoid usage of ASN1 structure at PHY for SRS 2024-03-06 11:38:41 +01:00
francescomani
284d07c5ae nfapi_nr_interface cleanup 2024-03-06 11:38:26 +01:00
Laurent THOMAS
24d30ae78a log module improvement: remove redundant declarations y using C macro, remove unused variables, remove unused log components, move information to smaller visibility 2024-03-06 09:03:20 +01:00
luis_pereira87
10d7b537a4 Tutorials: upgrade Open Cells Project UICC/SIM programming tool to version 3.3 2024-03-06 07:56:52 +00:00
luis_pereira87
dd5691f0ce Rename FR2 SA configuration file to be compliant with the 'Configuration files: naming style guide'
Missing u3
2024-03-06 07:56:52 +00:00
Laurent THOMAS
bc6d1ad48d reduce the hot memory for LOG_x decision from 1.2MB to less than one mem page (4KB) 2024-03-06 08:52:34 +01:00
Laurent THOMAS
d1002cc729 move declarations out from log.h to a better place 2024-03-06 08:51:24 +01:00
Laurent THOMAS
2129ee3c9c remove global visibility of log variables, remove circular .h dependancy 2024-03-06 08:51:24 +01:00
Rúben Soares da Silva
ed65b52c3c SCF222.10.02: PDUsize in DL_TTI.request is 4 bytes
SCF 222.10.02, Table 3-35: the PDUSize parameter of a DL_TTI.request PDU
includes the 4 bytes required for PDUType and PDUSize parameters (each 2
bytes), not 2.

This is required for the Aerial interoperability.
2024-03-05 19:43:24 +01:00
Robert Schmidt
b99e856733 Merge branch 'integration_2024_w09' into 'develop'
Integration: 2024.w09

See merge request oai/openairinterface5g!2593

* !2558 Fixed for the PRB allocation issue assert in DLSCH scheduler
* !2562 Fix FR2 SSB start subcarrier
* !2582 BugFix "PDCP: Handle sdap header."
* !2584 NGAP: Fix byte order of NSSAI SD
* !2590 T tracer: textlog: remove GUI code
* !2572 Harmonize computation of RA-RNTI
* !2577 Fix name clashes between OAI and E2 Agent
* !2545 E1 Re-establishment
* !2553 fix issues related to tx timing advance for HW RF board unpaired RX/TX timestaps and for 5G UE TA algorithm
* !2571 Add SDAP reconfiguration, fixes, and documentation updates
* !2576 RFSIM: cleanup and documentation
* !2586 Better dci decoding
* !2596 CI: maintenance/stability fixes
* !2601 CI: use tini for container process mgmt, describe core dump recovery
* !2589 gNB: increase some configuration defaults
* !2521 CI: Modifs of UndeployObject - log collection
2024-03-05 18:37:28 +00:00
Robert Schmidt
543250e933 Merge remote-tracking branch 'origin/ci-log-collection-modif' into integration_2024_w09 2024-03-05 15:14:58 +01:00
Jaroslava Fiedlerova
fca1561bf7 Modifs of cls_containerize - UndeployObject()
- use new ssh class
- do proper logging from multiple services
- use yaml dir
- Use splitlines(), minor modifs of syntax
- check that services are running
- Check all copyin() operations, not only last
- switch to docker compose:
  with the use of the new ssh class, we cannot (easily) use the old
  docker-compose anymore (which was an alias to docker compose). Switch to
  "docker compose".

Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2024-03-05 15:09:25 +01:00
Robert Schmidt
fc97e197fa Merge remote-tracking branch 'origin/gnb-improve-defaults' into integration_2024_w09 2024-03-05 11:11:55 +01:00
Robert Schmidt
2653897689 Merge remote-tracking branch 'origin/ci-exit-info-core-dumps' into integration_2024_w09 2024-03-05 11:06:10 +01:00
Robert Schmidt
56acd1d6d3 Add doc on how to retrieve core dumps 2024-03-05 11:02:38 +01:00
Robert Schmidt
adbb051bb7 Set ulimit for core to -1
Set ulimit of core to -1 enable core dumps for file-based core dumping.
Note that it is not necessary for e.g., systemd-coredumpd, but put it
for completeness.
2024-03-05 11:02:38 +01:00
Robert Schmidt
d7c3806f13 Use tini as init in all containers
- Print problems, e.g., segfault
- Handle signals and zombie processes properly
2024-03-05 11:02:38 +01:00
Robert Schmidt
549652353b Merge remote-tracking branch 'origin/ci-maintenance-fixes' into integration_2024_w09 2024-03-05 10:31:07 +01:00
Robert Schmidt
331fb1ce8e Merge remote-tracking branch 'origin/better-dci-decoding' into integration_2024_w09 2024-03-05 08:58:52 +01:00
Robert Schmidt
3c1ed92b80 Return success/failure of copyin()/copyout
- Return code says if copying succeeded
- Improve handling of the recursive code paths, which copy files or
  directories recursively into another directory
- both for RemoteCmd/LocalCmd
2024-03-05 08:48:54 +01:00
Jaroslava Fiedlerova
d5eb5ee0f2 Support for context manager in cls_cmd SSH class 2024-03-05 08:48:54 +01:00
Robert Schmidt
e9f0541ad0 BuildProxy: report success, correctly print HTML 2024-03-05 08:30:26 +01:00
Robert Schmidt
961981f456 CI: make docker volume always succeed in startup
Some CI users (OAI developers) expressed that the warning of the `docker
volume prune` before starting RFsim is confusing. To avoid the warning in
the HTML, force the removal; if the volume does not exist, no warning is
emitted.

To still catch possible problems, do not do this in the `terminate.xml`
so we might still see if there are other problems.
2024-03-05 08:30:26 +01:00
Robert Schmidt
b7a1b4b405 Always stop Quectel on XML terminate 2024-03-05 08:30:26 +01:00
Robert Schmidt
58c2f04b40 Adapt timing-phytest stats to new LDPC decoder iterations 2024-03-05 08:04:11 +01:00
Robert Schmidt
d60273e200 Update tutorials after default config setting changes 2024-03-05 08:04:11 +01:00
Robert Schmidt
6c015f8099 Test: reduce max_ulsch_frame_inactivity, use default of 10 2024-03-05 08:04:11 +01:00
Robert Schmidt
9a44d4b88f Increase default UL max MCS to 28
The original UL max MCS of 9 was chosen for performance reasons. In the
meantime, machines became faster, and the ULSCH decoding faster. Improve
UL max MCS to be 28 by default to use the complete range of possible
MCS.
2024-03-05 08:04:11 +01:00
Robert Schmidt
29ca077b66 Increase default max LDPC iter to 8
Doing only 5 LDPC iterations by default leads to a poor reception
performance, and correspondingly many retransmissions. Increase to 8 as
the new default to improve user experience.
2024-03-05 08:03:45 +01:00
Jaroslava Fiedlerova
64e58c1d67 Merge remote-tracking branch 'origin/739-rf-channel-sim-improvements' into integration_2024_w09 2024-03-04 17:39:13 +01:00
Jaroslava Fiedlerova
d56c7dfc07 Merge remote-tracking branch 'origin/717-sdap-reconfiguration' into integration_2024_w09 2024-03-04 17:37:50 +01:00
Jaroslava Fiedlerova
be0217aabf Merge remote-tracking branch 'origin/fix-tx-timing-offset-issues' into integration_2024_w09 2024-03-04 16:07:34 +01:00
Robert Schmidt
ebe1b711ac Print core_pattern in all entrypoint scripts 2024-03-04 15:12:41 +01:00
Laurent THOMAS
2962340a8b Add variable pointer to catch the rx gain between redundant strct members rfdevice and ifdevice 2024-03-04 10:48:13 +01:00
Laurent THOMAS
50d4d489f7 fix timing advance from msg2/rar 2024-03-04 10:07:07 +01:00
Laurent THOMAS
c92cbe67b5 fix b210 usrp tx sample error compemsation 2024-03-04 10:07:07 +01:00
Laurent THOMAS
7466297568 move command line sample offset and 3/4 sampling option at top level, as it is common option for 4G,5G xNB and UE 2024-03-04 10:07:07 +01:00
Laurent THOMAS
bedc5bea4c remove a gcc warning while making the code a bit simpler 2024-03-04 10:07:07 +01:00
Laurent THOMAS
d26f0b9196 add LOG_DDUMP() to dump a buffer in the regular tracing filter system (like PHY, MAC, ...), use it and do simple cleaning (better format) 2024-03-04 10:07:07 +01:00
Robert Schmidt
a724dfba4f Merge remote-tracking branch 'origin/e1-reestablishment' into integration_2024_w09 2024-03-04 08:45:47 +01:00
Guido Casati
b431e1442f Moved nr_reconfigure_sdap_entity to SDAP module
- improves code readability and maintainability
2024-03-01 16:56:02 +01:00
Guido Casati
4cfba89e68 Updated and enhanced channel simulation documentation
- centralized channel simulation documentation in channel_simulation.md
- removed redundant documentation repeated in multipled .md files
- updated links
- removed obsolete information
- introduced mermaid flowchart for rfsim
- added missing information about available options and usage
- deleted:    ../../../openair1/SIMULATION/TOOLS/DOC/devusage.md
- deleted:    ../../../openair1/SIMULATION/TOOLS/DOC/rtusage.md
- deleted:    ../../../openair1/SIMULATION/TOOLS/DOC/arch.md

related to issue #739
2024-03-01 15:48:24 +01:00
Robert Schmidt
9af386c761 CI: RFsim tests: Wait for IP
Ensure that the UE has an IP address before continuing the test.
Otherwise, it might happen we ping before the UE is connected.

Do not do this in do-ra and phytest, as they use --noS1, which implies
statically assigned IP address, so IP address check always succeeds(!).
2024-03-01 13:06:59 +01:00
Robert Schmidt
e845a9c3b7 CI: Make RFsim start-up faster
Make RFsim start up faster by starting core and RAN start at the same
time. This speeds up because we do not wait for "healthy" containers
serially, but parallely.

For the RAN, it is safe to start gNB and UE at the same time in SA mode
(as the UE will only attach once the radio, and hence the full gNB, is
ready).

We do not start in parallel in do-ra and phytest, as in these modes the
gNB first has to write a UE-specific configuration file. If we start
both gNB and UE at the same time, the UE might try to read the file
before it is written, leading to a failure.
2024-03-01 13:05:20 +01:00
Laurent THOMAS
56c4a6ec07 change trace to new NR_MAC_DCI and NR_PHY_DCI for DCI processing 2024-03-01 12:20:32 +01:00
Jaroslava Fiedlerova
28e13fc6ac Merge remote-tracking branch 'origin/avoid_clash_asn1_oai_flr' into integration_2024_w09 2024-03-01 11:57:01 +01:00
Jaroslava Fiedlerova
2a35d5c2f9 Merge remote-tracking branch 'origin/Harmonize_RA_RNTI' into integration_2024_w09 2024-03-01 11:56:38 +01:00
Jaroslava Fiedlerova
40987702b4 Merge remote-tracking branch 'origin/T-simplify-textlog' into integration_2024_w09 2024-03-01 10:09:57 +01:00
Jaroslava Fiedlerova
b94dd49ace Merge remote-tracking branch 'origin/fix-ngap-reading-nssai' into integration_2024_w09 2024-03-01 10:08:55 +01:00
Jaroslava Fiedlerova
01722ff8fa Merge remote-tracking branch 'origin/740-pdcp-handle-sdap-header' into integration_2024_w09 2024-03-01 10:07:40 +01:00
Robert Schmidt
60447a24a1 E1: add reestablishment test 2024-03-01 09:48:42 +01:00
Robert Schmidt
06c2ce1777 E1 Sabox test: shorten ping 2024-03-01 09:48:42 +01:00
Guido Casati
ffd176e9d5 Minor fixes, comments, Clang formatting
- comments to improve readability of the code
- Clang formatting of E1 / RRC (partial)
2024-03-01 09:48:42 +01:00
Guido Casati
72166d7ae9 E1AP procedures documentation
- new folder dedicated to E1AP docs
- new file to document E1AP procedures
2024-03-01 09:48:42 +01:00
Guido Casati
2a078c757b E1 Reestablishment
- PDCP reestablishment on CUCP (DRBs) triggering Bearer Context Modification procedures over E1
- Performing PDCP reestablishment for requested DRBs on CUUP
- Introduced function to notify re-establishment to CU-UP
- removed call to PDCP reestablishment for the DRBs on CUCP (it's done on CUUP)

cuup_notify_reestablishment:

- to fetch PDU session to setup in E1 following logic as in e1_send_bearer_updates
- fill bearer context modification request with stored F1-U tunnel information
  during E1 reestablishment, otherwise it would initialized to 0 by default
- update GTP tunnel with the stored configuration after E1 reestablishment
2024-03-01 09:48:35 +01:00
Jaroslava Fiedlerova
cd5209a782 Merge remote-tracking branch 'origin/fix_fr2_ssb_start_subcarrier' into integration_2024_w09 2024-03-01 09:48:27 +01:00
Guido Casati
c83ff4c388 Store F1-U downlink TL and TEID
- info coming from UE context setup/modification response messages in RRC
2024-03-01 09:45:50 +01:00
Jaroslava Fiedlerova
4ae0fd09f1 Merge remote-tracking branch 'origin/prb_alloc_issue' into integration_2024_w09 2024-03-01 09:44:53 +01:00
francescomani
c464c27f63 adding comments to clarify that DMRS samples generated for channel estimation at reception already takes into account complex conjugate needed for said estimation 2024-02-29 18:59:48 +01:00
francescomani
a0224e8faf assert on measurement gaps 2024-02-29 11:06:08 +01:00
francescomani
23f65d8ab6 improvements in handling measurememt identity addition, modification and removal 2024-02-29 10:42:41 +01:00
francescomani
e4b7d9fd58 improvements in handling quantityConfig 2024-02-29 10:42:41 +01:00
francescomani
0ab88e390b improvements in handling reportConfig addition, modification and removal 2024-02-29 10:42:41 +01:00
francescomani
801ebbbb5f improvements in handling measObject addition, modification and removal 2024-02-29 10:42:41 +01:00
francescomani
ab07b080dd move ASN macros to a more global file to be available also at RRC 2024-02-29 10:42:41 +01:00
vijay chadachan
3efb5b3657 Fixed for the PRB allocation issue assert in DLSCH scheduler
The following ASSERT is tirggered while testing 16 UE setup.

Assertion (NPRB>0 && (NPRB + RBstart <= BWPsize)) failed!
In PRBalloc_to_locationandbandwidth0() /home/ran/common/utils/nr/nr_common.c:286
Illegal NPRB/RBstart Configuration (1,48) for BWPsize 48

Corrected the get_start_stop_allocation calculation to fix the issue.
The implementation was wrong. The rbstop shall be the last rb that could
be allocated. Also the following two conditions are taken care

rbStart needs to be strictly smaller than rbStop

rbStart+rbSize needs to be smaller or equal to rbStop

The problem was that we confounded both conditions, so rbStart could
be equal to rbStop, which then leads to one PRB being allocated at the end.
Setting rbStop to BWPsize - 1 and making sure the above two conditions are
true does not make it lead to wrong allocations anymore.
2024-02-28 19:19:18 +01:00
Cedric Roux
1f81b3f1a2 T tracer: textlog: remove GUI code
textlog is, well, text log. The GUI part is totally useless.
Let's remove it.
2024-02-28 16:19:32 +01:00
Jaroslava Fiedlerova
c99db698ce Change USRP IP addr in OAIUE pipeline 2024-02-28 15:53:46 +01:00
Robert Schmidt
b1f9e9d57a Reestablishment: preserve additional secondaryUE data
The previous code removed the "secondary UE" data (about DU association,
DU UE ID, associated CU UP), and only filled the F1-related data. In
other words, the associated CU-UP was lost. This commit reworks this
piece of code to retrieve old data, and update the relevant data without
destroying other.
2024-02-28 11:58:59 +01:00
Guido Casati
b6087da1b2 Separated E1 Bearer Context Setup from Modification procedures
- many structs and definitions are overlapping between the two different E1 procedures
- introduced naming specific to E1 Bearer Context Modification to improve readability
- grouped SDAP and PDCP configuration IEs for better reusability and readability
- introduced functions to set and get default PDCP config (DRBs and Bearer Contexts)

find_or_next_pdu_session:
- find_or_next_pdu_session refers to the E1 Bearer Context Modification Request
-- therefore it has to return pdu_session_to_mod_t* and takes in input e1ap_bearer_mod_req_t *

see !MR2545 for more context
2024-02-28 11:58:42 +01:00
Guido Casati
f392158c40 Removed redundant definition for max SRBs number (used in RRC procedures)
- according to specs, in NR there are 4 SRBs
- in OAI the relevant define is used in the RRC procedures
- this commit harmonizes code by removing redundancy
2024-02-28 11:14:00 +01:00
Guido Casati
ea0185f84e Introduced define for uint8_t integrity and ciphering keys data structures
- the goal is to improve maintanability
2024-02-28 11:14:00 +01:00
Laurent THOMAS
8666b084d5 improve code of dci decoding and add tracing for all dci fields 2024-02-28 10:17:11 +01:00
francescomani
c54a1ff857 remove unused phy_config_ind queue 2024-02-27 17:08:10 +01:00
Laurent THOMAS
948188b200 basic C cleaning of dci decoding 2024-02-27 10:04:45 +01:00
Guido Casati
edb2dd7d6d SDAP Entity reconfiguration at UE according to TS 37.324
- triggered by RRC reconfiguration events according to clause 5.3.5.6.5 of TS 38.331
- This procedure does QoS flow to DRB mapping according to clause 5.3.1 of TS 37.324
- QoS flows to DRBs to be released are also handled
2024-02-27 09:47:26 +01:00
Guido Casati
bc0cab7a08 Minor fixes and clang formatting in SDAP procedures
- added descriptive comments to the code
- removed redundant function prototype
- removed unused function argument
2024-02-27 09:47:24 +01:00
Guido Casati
4a8815a41e Introduced function to check whether it is a transmitting or a receiving SDAP entity 2024-02-27 09:45:28 +01:00
Robert Schmidt
080510568d Merge branch 'integration_2024_w08' into 'develop'
CI: Integration Branch 2024 week 08

See merge request oai/openairinterface5g!2585

* !2540 NR UE max MIMO layers from UEcap
* !2554 NR UE RRC minor improvements
* !2563 Add missing backtick for proper code style in README.md
* !2567 Avoid integer overflows, buffer overflows, in channel levelling
* !2574 NR UE fix for configuring coreset0 and SS0
* !2575 NR UE fix init PDCP phy-test
* !2551 NR UE improvements for contention resolution timer
* !2570 CI: Replace nrmodule2 by up2
2024-02-27 07:51:59 +00:00
Robert Schmidt
2f313c9aee Merge remote-tracking branch 'origin/ci-replace-nrmodule2' into integration_2024_w08 2024-02-26 15:29:23 +01:00
mir
1b237f6abe Fix name clashes between OAI and E2 Agent generated by the linker 2024-02-26 09:57:51 +01:00
Raphael Defosseux
1adcd3fb5a Revert "fix(ci): hot-fix for E2-agent build w/ latest version of ASN1C"
This reverts commit 2b796874ca.
2024-02-26 09:54:45 +01:00
Ajit Singh
10a6ce8bdd Bugfix in PDCP when SDAP is enabled. Passing only data for chipering. 2024-02-25 05:59:41 +05:30
Jaroslava Fiedlerova
b284b09377 Replace nrmodule2 by up2 in LTE 2x2 pipeline, use mbim scripts 2024-02-23 16:05:38 +01:00
Raphael Defosseux
072d65a50e Merge remote-tracking branch 'origin/NR_UE_contention_resolution_timer' into integration_2024_w08 2024-02-23 10:25:38 +01:00
Raphael Defosseux
ab5da3fe3c Merge remote-tracking branch 'origin/NR_UE_fix_init_pdcp' into integration_2024_w08 2024-02-23 10:16:20 +01:00
Raphael Defosseux
ca2b0693fb Merge remote-tracking branch 'origin/NR_UE_fix_cset0_ss0' into integration_2024_w08 2024-02-23 10:14:16 +01:00
Raphael Defosseux
9e3163db8d Merge remote-tracking branch 'origin/fix-multiple-inexact-computations-in-nr_dlsch_channel_level' into integration_2024_w08 2024-02-23 10:11:33 +01:00
Raphael Defosseux
d2742b0bf7 Add missing backtick for proper code style in README.md: on behalf of Roger Pueyo Centelles, MR 2563
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-02-23 10:11:16 +01:00
Raphael Defosseux
7337ae8664 Merge remote-tracking branch 'origin/NR_UE_RRC_improvements' into integration_2024_w08 2024-02-23 10:08:42 +01:00
Raphael Defosseux
3972cd44d6 Merge remote-tracking branch 'origin/NR_UE_maxmimo_layers' into integration_2024_w08 2024-02-23 10:08:15 +01:00
Sakthivel Velumani
29bc4101cc NGAP: Fix byte order of NSSAI SD 2024-02-22 17:47:00 -05:00
Laurent THOMAS
8e24272a03 Fix multiple errors in nr_dlsch_channel_level_median() and nr_dlsch_channel_level()
UBsan fails with errors without this commit. The commit changes:

- avoid two possible integer overflows in nr_dlsch_channel_level() and nr_dlsch_channel_level_median()
- nr_dlsch_channel_level_median() is simplified
- use MAX_ANT in avg to handle more than 4x4 config
2024-02-22 15:55:10 +01:00
Xin Zhe Khooi
7ca22db7d2 telnetsrv_rrc: update documentation on building and usage 2024-02-21 10:43:42 +00:00
Xin Zhe Khooi
13521c681f telnetsrv_rrc: update documentation 2024-02-21 10:43:35 +00:00
Xin Zhe Khooi
819f7c1d22 telnetsrv_rrc: clean up and documentation 2024-02-21 10:43:30 +00:00
Xin Zhe Khooi
4003936da5 telnetsrv_rrc: resolve warning 2024-02-21 10:43:23 +00:00
Xin Zhe Khooi
81547750f3 added telnetsrv_rrc for rrc release 2024-02-21 10:43:13 +00:00
francescomani
71790ccbdf remove noS1 condition to init pdcp in phy-test mode 2024-02-20 15:58:48 +01:00
Guido Casati
563109a88f Cleanup of unused and outdated legacy RFSIM code
- deleted:    ../../../executables/rfsim.c
- removed unused command line options to set SINR and SNR
- removed unused functions to get SINR and SNR
- removed unused RFSIM struct members
2024-02-20 15:06:59 +01:00
Nuno Domingues
ff7c960b2c Harmonize computation of RA-RNTI 2024-02-16 18:04:57 +00:00
Robert Schmidt
c599e172f1 Add v2.1.0 to change log 2024-02-16 14:57:15 +01:00
francescomani
16c82f2598 set cset0 and ss0 independently from BWP in generic MAC structure at UE 2024-02-15 16:32:45 +01:00
Romain Beurdouche
b681779609 feat(doc): suggested changes: realtime tuned profile, kthread_cpus formulation and further details in PTP pining 2024-02-15 16:07:11 +01:00
Romain Beurdouche
0439d19849 feat(doc): add phy-test option explanation 2024-02-15 14:59:54 +01:00
Romain Beurdouche
9cf6ffe5fd feat(doc): add skip PTP configuration for bencmarking 2024-02-15 14:44:45 +01:00
Romain Beurdouche
83fdb2d800 feat(doc): add bold isolated cores reminder in OAI configuration section 2024-02-15 11:27:56 +01:00
francescomani
df739aa590 tick for MAC timers (applied to RA contention resolution) 2024-02-14 16:35:49 +01:00
Romain Beurdouche
715671022d fix(doc): fix VFs PCI addresses clarification 2024-02-14 16:03:12 +01:00
Romain Beurdouche
4921c06c04 fix(doc): fix typos 2024-02-14 15:58:40 +01:00
Romain Beurdouche
8340b86692 feat(doc): update O-RAN 7.2 doc: details in kernel thread isolation, kernel thread isolation for solving PTP clock lag, PCI address of VFs 2024-02-14 15:47:39 +01:00
luis_pereira87
3d8b38f7e6 Fix FR2 SSB start subcarrier and SSB frequency at gNB
for FR2 offsetToPointA is expressed in terms of 60 kHz SCS and k_SSB expressed in terms of the subcarrier spacing provided by the higher-layer parameter subCarrierSpacingCommon
2024-02-14 13:13:42 +00:00
luis_pereira87
c78399ee36 Update 5G RFsim FR2 SA test to have kSSB different from 0
Enable CI to test kSSB with a value different from 0 for FR2 to prevent regressions on future updates related with kSSB
2024-02-14 11:17:09 +00:00
luis_pereira87
be36b2f9bc Fix CI 5G RFsim FR2 SA ping test 2024-02-14 11:17:09 +00:00
luis_pereira87
9f315932d0 Fix CI runtime errors
Fix for CI runtime error: left shift of 1 by 31 places cannot be represented in type 'int'

Fix for CI runtime error: left shift of 128 by 24 places cannot be represented in type 'int'
2024-02-14 11:17:09 +00:00
Robert Schmidt
fd8fc31a6f Create 5G RFsim FR2 SA test
Transform the previous FR2 do-ra test to FR2 RA.

Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
2024-02-14 11:11:01 +00:00
Robert Schmidt
3f3a98696f Merge branch 'integration_2024_w06' into 'develop'
Integration: 2024.w06

Closes #733 and #732

See merge request oai/openairinterface5g!2564

* !2490 reworking configuration of LogicalChannelConfig at MAC UE
* !2548 NR UE MSG3 buffer
* !2556 Support RC SM aperiodic subscription for "UE RRC State Change"
* !2557 fix duplicate call of RCconfig_NR_L1
* !2550 use pointer to structure instead of module_id inside MAC
* address #733
* !2560 chore(ci): force rebuild of ran-base for integration branches
* !2495 Sidelink configuration passed from RRC->MAC
* !2220 L1 tx thread
* !2559 FH 7.2 improvements
* !2566 Provide right E1 instance when creating E2 agent in CU-UP
* !2513 Update NR SA tutorials
2024-02-14 07:24:12 +00:00
Robert Schmidt
24c707c33e Merge remote-tracking branch 'origin/NR_SA_Tutorials' into integration_2024_w06 2024-02-14 07:30:19 +01:00
Robert Schmidt
6069cd6b5d Merge remote-tracking branch 'origin/fix-e2-agent-cuup' into integration_2024_w06 2024-02-14 07:30:09 +01:00
Robert Schmidt
15cf5c116e Provide right E1 instance when creating E2 agent in CU-UP
CUuniqInstance is also used for GTP module identification, which
uses the UDP server socket as its ID. This leads to arbitrary IDs (>0),
which is wrong.
2024-02-13 20:13:57 +01:00
Robert Schmidt
713c84e4d4 Merge remote-tracking branch 'origin/stability-7.2-improv' into integration_2024_w06 2024-02-13 19:28:02 +01:00
Robert Schmidt
9890410a18 Merge remote-tracking branch 'origin/l1_tx_thread' into integration_2024_w06 2024-02-13 19:28:02 +01:00
Robert Schmidt
d01c147014 Merge remote-tracking branch 'origin/NR_PSBCH_MERGE2' into integration_2024_w06 2024-02-13 19:28:02 +01:00
Robert Schmidt
0e531b44e0 Merge remote-tracking branch 'origin/ci-integration-test' into integration_2024_w06 2024-02-13 19:28:02 +01:00
Robert Schmidt
ddd53b0ba3 build_oai: correct doxygen path in logging statement
Correctly show the path: it was missing cmake_targets/, although it is
there.

Closes: #733
2024-02-13 19:28:02 +01:00
beurdouc
3bb9e6b0f5 ORAN 7.2/doc: indicate CPU cores in our environment 2024-02-13 10:00:05 +00:00
Robert Schmidt
f04e5d97fa Merge remote-tracking branch 'origin/NR_UE_use_MAC_pointer_internally' into integration_2024_w06 2024-02-13 10:42:55 +01:00
Robert Schmidt
a7f56d0d52 O-RAN 7.2/doc: Update info on frame jumps 2024-02-12 19:17:37 +01:00
Robert Schmidt
5421a4d172 O-RAN 7.2/doc: Update info on L1_tx_thread (diff d.txt ../graphs/_dijkstraData.txt ) 2024-02-12 18:42:49 +01:00
Robert Schmidt
6fe655c7d4 ORAN 7.2/doc: update s-plane info 2024-02-12 18:41:42 +01:00
Robert Schmidt
4353763984 ORAN 7.2/doc: update NIC info 2024-02-12 18:41:26 +01:00
Robert Schmidt
c33a308dff Remove comments on L1_tx_thread_core param: is merged 2024-02-12 18:29:53 +01:00
Robert Schmidt
0a1651e45c Periodically check for stats freeing to prevent assert
Not periodically checking stats freeing can lead to asserts if these
lists are full. Check it once a frame to ensure that lists remain
non-empty.
2024-02-12 18:29:53 +01:00
Robert Schmidt
f3bba45bfe Update some timing stats 2024-02-12 18:29:53 +01:00
Raghavendra Dinavahi
4d411dbce3 Sidelink configuration passed from RRC->MAC, defined interface functions
- Phy configuration will be prepared by MAC
	- Sidelink preconfiguration parameters passed from RRC->MAC
	- Only 1 SSB TA allocation used
	- psbch payload prepared by MAC after receiving the tx slss req
2024-02-12 12:57:01 +01:00
Robert Schmidt
362bc481bd Remove misleading PUSCH decoding
PUSCH decoding is started multiple times in nr_ulsch_procedures() for
each ULSCH segment, and stopped once inside
phy_procedures_gNB_uespec_RX(). Not only is it not clear if that works
with the API, it also might measure more than just PUSCH decoding.

Remove the PUSCH decoding, it is misleading. Check L1 RX processing
instead.
2024-02-12 12:04:55 +01:00
Robert Schmidt
418024835b Add 100 MHz 2x2 phytest-timing test 2024-02-12 12:04:55 +01:00
Robert Schmidt
003567675c CI: phytest-timing: detect deviation from normalized values above/below
The CI would only detect a deviation from the normalized value based on
a configurable threshold, typically 1.25 (so we would tolerate a 25%
increase). However, it often happens that a timing gets shorter (e.g.,
forgot to put the timing measurements). This commit introduces a
"Deviation Threshold" (smaller than 1) to not only check that we exceed
1.0 + "Deviation Threshold" (as before), but also that are not below 1.0
- "Deviation Threshold".

In other words, assuming a maximum divergence of 25%, instead of just
checking if val > 1.25, we now also check if val < 0.75 (and flag
error).
2024-02-12 12:04:55 +01:00
Robert Schmidt
6ba8716700 Add Slot Indication to monitoring 2024-02-12 12:04:55 +01:00
Robert Schmidt
e9d6081abc Add slot indication timing 2024-02-12 12:04:55 +01:00
Raymond Knopp
d52b81798b Introduce separate thread to handle gNB TX processing
This commit introduces a separate thread (l1_tx_thread) that processes
gNB DL/TX slots. It receives a message from the ru_thread when a new
slot started, and starts processing.

The DL part of the scheduler is run in the l1_tx_thread.  Therefore,
only call UL indication (for scheduler) in UL slots.  The UL indication
previously triggered the DL scheduler -- hence, it had to be called in
every slot. Now, since the DL scheduler is moved into the DL thread, we
don't have to call the scheduler in every slot anymore.

The reorder thread is removed, as reordering with this scheme is not
necessary anymore.

The main advantage of this version is that the TX can be scheduled
earlier (sl_ahead). Further, there can no longer be race conditions in
the TX path, since the scheduler/L2, TX L1 processing and the RU tx
function are all execute in the same thread (L1_tX_thread).

Also, the scheduler prepares PRACH/PUSCH/PUCCH FAPI PDUs. As of this
commit, the scheduler runs in the TX processing chain, whereas these
PDUs are destined for RX processing.  Thus, too avoid data races,
instead of triggering the RX processing at the same time as TX
processing in the RU thread, this commit changes the code to trigger RX
processing after the scheduler has been run in TX processing to avoid
data races.

Finally, we synchronize RU and L1 threads. This is important for
rfsimulator, since unlike most radios, rfsimulator can run slower or
faster, depending on I/O and CPU (it does not have a stable "tick").

Co-authored-by: kiran <saikiran@iitj.ac.in>
2024-02-12 12:04:55 +01:00
Raphael Defosseux
4ca52ef456 fix(ci): PACKAGE_VERSION is missing from nr-cuup executable
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-02-12 11:48:52 +01:00
Robert Schmidt
fb69d9c635 Remove unused UL_INFO_mutex
The UL_INFO_mutex is used in only one place, and therefore useless.
Also, the scheduler uses a lock internally to prevent concurrent access.
Hence, the UL_INFO_mutex is not needed.

Remove kill_gNB_proc(), as it is now dead code.
2024-02-12 11:25:30 +01:00
Robert Schmidt
88852dc9af Introduce slot indication tick to run (DL) scheduler
The next commit introduces a separate gNB TX processing thread. To
properly separate DL scheduler (for scheduling decisions) from UL
indication handling (for UL packets), this commit introduces a slot
indication "tick" to run the DL scheduler which will be put into the gNB
TX processing chain instead of the UL indication.
2024-02-12 11:25:26 +01:00
Robert Schmidt
d5f11902b7 Handle PUCCH frame/slot mismatches gracefully
For different reasons, the frame/slot numbers might jump (e.g., gNB and
RU machines not properly synced). The scheduler would assert for PUCCH
allocations. Handle this gracefully by printing an error message, and
resetting the PUCCH structure.
2024-02-09 13:38:12 +01:00
Robert Schmidt
c5211b0f8c O-RAN 7.2: modify patch to switch of DPDK telemetry, bump version
Disable DPDK telemetry to skip creation of one/two threads (depending on
DPDK version). To force users to do this, bump the version of the patch
checked by cmake.

More information on DPDK telemetry:
https://doc.dpdk.org/guides/howto/telemetry.html

Closes: #732 (suggestion 2)
Suggested-by: Andrew Sergeev <andrew.sergeev@adtran.com>
2024-02-09 13:22:26 +01:00
Robert Schmidt
b5ba3a69f1 O-RAN 7.2: set CPU affinity for ru_thread explicitly
Force the CPU affinity for ru_thread explicitly to ru_thread_core. It is
already done via threadCreate(), but force again as per change request.

Delete commented 7.2 code that did the equivalent. We cannot set it in
the driver, as we don't have access to variable ru->ru_thread_core.

Closes: #732 (suggestion 2)
Suggested-by: Andrew Sergeev <andrew.sergeev@adtran.com>
2024-02-09 13:02:50 +01:00
Robert Schmidt
b32b9e836f O-RAN 7.2: make DPDK system core configurable
system_core is the core reserved for DPDK control threads. It was
hardcoded to 0, but it seems that one some systems, CPU 0 cannot be
reasonably isolated from kernel threads. Make it therefore configurable
(default: 0)

Closes: #732 (suggestion 1)
Suggested-by: Andrew Sergeev <andrew.sergeev@adtran.com>
2024-02-09 12:42:21 +01:00
Jaroslava Fiedlerova
223c63826d Merge remote-tracking branch 'origin/handle_issue_730' into integration_2024_w06 2024-02-09 12:39:03 +01:00
Jaroslava Fiedlerova
c3e7cb7e35 Merge remote-tracking branch 'origin/update-rc-sm' into integration_2024_w06 2024-02-09 12:37:12 +01:00
Raymond Knopp
0fb0a9a48e O-RAN 7.2: Set PRACH filter index correctly for FR2 2024-02-09 12:20:44 +01:00
Raymond Knopp
8dd12ba2bf O-RAN 7.2: use configured values instead of hardcoded
Use configured
- FFT size
- numerology
- slot number

Necessary for FR2 operation and different FFT sizes (as opposed to
FR1/4096).
2024-02-09 12:18:31 +01:00
Raymond Knopp
4f7464d010 Print additional information if TBS is too small for SIB1 2024-02-09 12:15:52 +01:00
Jaroslava Fiedlerova
638acd6040 Merge remote-tracking branch 'origin/NR_UE_msg3_buffer' into integration_2024_w06 2024-02-09 12:07:48 +01:00
Jaroslava Fiedlerova
83d46bb516 Merge remote-tracking branch 'origin/NR_UE_rework_LC_config' into integration_2024_w06 2024-02-09 12:06:36 +01:00
Robert Schmidt
702c608ca1 O-RAN 7.2 doc: explain layer mapping, streamline start gNB section 2024-02-09 11:49:47 +01:00
Robert Schmidt
b612e5f021 O-RAN 7.2 doc: make section Configuration, DPDK before gNB config
The gNB configuration depends on DPDK (e.g., PCI addresses). Therefore,
put DPDK config before, to keep it logically ordered.
2024-02-09 11:42:49 +01:00
Raphael Defosseux
cf183f4349 chore(ci): force rebuild of ran-base for integration branches
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-02-08 16:01:10 +01:00
francescomani
f3c61b12fe remove pointer to logicalChannelConfig in LC ordered info and store actual values in the list 2024-02-08 15:16:56 +01:00
francescomani
29ddb924e3 do not call RCconfig_NR_L1 twice in monolithic mode 2024-02-08 13:59:28 +01:00
francescomani
c093e4ed4f reworking configuration of LogicalChannelConfig at MAC UE 2024-02-08 13:19:48 +01:00
Robert Schmidt
4085544f28 O-RAN 7.2 patch: don't ignore user's PKG_CONFIG_PATH 2024-02-08 10:13:39 +01:00
Robert Schmidt
fd3c50b6c8 O-RAN 7.2 doc: Correct NUMA node capitalization 2024-02-08 10:13:39 +01:00
Robert Schmidt
970e7855c4 O-RAN 7.2 doc: describe how to interpret counters 2024-02-08 10:13:39 +01:00
Robert Schmidt
a22335a89f FH 7.2: ignore packets with no payload instead of asserting 2024-02-08 10:13:28 +01:00
luis_pereira87
60af0f1af2 Tutorials: replace oai-spgwu-tiny by oai-upf
Replace oai-spgwu-tiny by the new oai-upf

Change UE IP network address blocks for a 'Private-Use' range. Address block 12.1.0.0/16 is for public use, so we should not use it for the UEs (https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml)
2024-02-07 17:02:15 +00:00
luis_pereira87
05babdfc5c Tutorials: add link for Ettus UHD installation page and remove 'source oaienv' from instructions 2024-02-07 17:00:55 +00:00
luis_pereira87
7ee0cfc28c Tutorials: remove OAI UE SIM section
The main goal of this tutorial is to get 5G end-to-end connectivity as simple and fast as possible. For advanced topic the user should search for specific documentation.
2024-02-07 17:00:55 +00:00
luis_pereira87
e29c938130 Tutorials: simplify the pull section for the CN5G images
No need to pull every single image independently, we can pull all the images with the corresponding tag that is in the 'docker-compose.yaml' with the 'docker compose pull' command
2024-02-07 17:00:55 +00:00
luis_pereira87
99f3ef1a61 Tutorials: add FR2 SA configuration file and instructions for RFsimulator 2024-02-07 17:00:55 +00:00
luis_pereira87
6ec4918187 Tutorials: update the OAI nrUE SIM card description
This tutorial aims to achieve end-to-end connectivity as simple as possible. Let's remove this complex topic from here.
Also, if a user copy-paste the section as it was, nrUE gets a segfault because there is no imeisv here, tutorial is out-dated.
2024-02-07 17:00:55 +00:00
luis_pereira87
be08184fbe Tutorials: update UHD to v4.6.0.0 and update dependencies as described in the official Ettus website 2024-02-07 17:00:55 +00:00
Teodora
1675e6e155 Update FlexRIC commit and E2AP README 2024-02-07 17:19:18 +01:00
Teodora
d7ff30db55 Enable multiple RC subscriptions
- create hash table to save ric_req_id (key) and array of ran_param_id(s) (values), per each subscription
  - create RB tree to store list of ric_req_id(s) for each ran_param_id
    => when the async event occurs, it is easier and faster to search per ran_param_id and send the indication message to all xApps (ric_req_id(s)) subscribed to the same ran_param_id
  - it is important to mention that both data structures need to be maintained, especially when unsubscription occurs (free_aperiodic_subscription)
2024-02-07 15:14:27 +01:00
Teodora
3cc3bbbabc Support RC aperiodic subscription
- subscribe to "UE RRC State Change" RAN Parameter ID
  - expected asynchronous events from E2 node
2024-02-07 14:32:23 +01:00
Raymond Knopp
94a0704e43 Update sample config gnb.sa.band41.fr1.106PRB.usrpb210.conf 2024-02-06 16:03:56 +01:00
Raymond Knopp
bb044cf940 Update logs to NR_ version and add some new 2024-02-06 16:03:56 +01:00
Raymond Knopp
1ec528dbdb Remove commented code 2024-02-06 16:03:56 +01:00
francescomani
58ea7357f8 add option to configure max MIMO layers for PUSCH TBSLBRM computation from UE capabilities 2024-02-04 11:09:58 +01:00
francescomani
df867e533f formatting 2024-02-04 11:02:58 +01:00
francescomani
07c5cf3cad remove instance hardcoding in nsa_rrc_ue_process_ueCapabilityEnquiry 2024-02-04 10:51:46 +01:00
francescomani
3a6e93b809 radio bearers in generic RRC configuration, no need to store them per gNB 2024-02-04 10:46:05 +01:00
francescomani
9cf44c11f1 use pointer to structure instead of module_id inside MAC 2024-02-02 16:00:59 +01:00
francescomani
6b123ff217 store MSG3 buffer at UE MAC 2024-02-02 11:11:45 +01:00
francescomani
03439f9d6a code cleanup 2024-02-02 10:02:29 +01:00
francescomani
e6b02c6d12 add option to configure max MIMO layers for PDSCH TBSLBRM computation from UE capabilities 2024-01-30 14:49:33 +01:00
813 changed files with 31740 additions and 19372 deletions

View File

@@ -1,5 +1,32 @@
# RELEASE NOTES: #
## [v2.1.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.1.0) -> February 2024. ##
This release improves existing 5G support and adds various new features.
* 5G gNB
- Add support for O-RAN 7.2 fronthaul interface
(tested with 3 O-RUs: Benetel, LITEON, VVDN)
- Add support for 2-layer UL MIMO
- FDD interoperability with COTS UE
- Compiles on ARM (through SIMDE)
- Introduce E2 agent and basic support for E2SM-KPM and E2SM-RC
- Add support for E1AP
- Add support for multiple DUs and CU-UPs at one CU-CP
- FR2 SA with OAI UE
- Improve computational efficiency
* 5G UE
- Cleanup in MAC and RRC towards support of 3rd-party gNB
- FR2 SA with OAI gNB
- Improve computational efficiency
Overall the stability is improved for the same resource usage.
There is basic FR2 support between OAI gNB and OAI nrUE. COTS UE
interoperability is under testing.
This release also includes many fixes and documentation updates.
## [v2.0.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v2.0.0) -> August 2023. ##
This release adds support for 5G and maintains previous features:

View File

@@ -158,11 +158,16 @@ endif()
# add autotools definitions that were maybe used!
add_definitions("-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP")
set(commonOpts "-pipe -fPIC -Wall -fno-strict-aliasing")
# we need -rdynamic to incorporate all symbols in shared objects, see man page
set(commonOpts "-pipe -fPIC -Wall -fno-strict-aliasing -rdynamic")
# GNU C/C++ Compiler might throw many warnings without packed-bitfield-compat, see man page
# also, we need -rdynamic to incorporate all symbols in shared objects, again, see man page
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(commonOpts "${commonOpts} -Wno-packed-bitfield-compat -rdynamic")
set(commonOpts "${commonOpts} -Wno-packed-bitfield-compat")
endif()
# clang: suppress complaints about unused command line argument (-rdynamic only
# used during linking)
if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(commonOpts "${commonOpts} -Wno-unused-command-line-argument")
endif()
set(CMAKE_C_FLAGS
@@ -498,7 +503,6 @@ target_link_libraries(shlib_loader PRIVATE CONFIG_LIB)
##########################################################
add_boolean_option(ENABLE_LDPC_T2 OFF "Build support for LDPC Offload to T2 library" OFF)
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/x86_64-linux-gnu/pkgconfig")
if (ENABLE_LDPC_T2)
pkg_check_modules(LIBDPDK_T2 REQUIRED libdpdk=20.11.9)
find_library(PMD_T2 NAMES rte_baseband_accl_ldpc HINTS ${LIBDPDK_T2_LIBRARY_DIRS})
@@ -718,6 +722,7 @@ target_link_libraries(SCHED_UE_LIB PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
set(SCHED_SRC_NR_UE
${OPENAIR1_DIR}/SCHED_NR_UE/phy_procedures_nr_ue.c
${OPENAIR1_DIR}/SCHED_NR_UE/phy_procedures_nr_ue_sl.c
${OPENAIR1_DIR}/SCHED_NR_UE/fapi_nr_ue_l1.c
${OPENAIR1_DIR}/SCHED_NR_UE/phy_frame_config_nr_ue.c
${OPENAIR1_DIR}/SCHED_NR_UE/harq_nr.c
@@ -726,7 +731,6 @@ set(SCHED_SRC_NR_UE
add_library(SCHED_NR_UE_LIB ${SCHED_SRC_NR_UE})
target_link_libraries(SCHED_NR_UE_LIB PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
# nFAPI
#################################
set(NFAPI_COMMON_SRC
@@ -861,10 +865,19 @@ add_library(ldpc_cl MODULE ${PHY_LDPC_CL_SRC} )
target_link_libraries(ldpc_cl OpenCL)
add_dependencies(ldpc_cl nrLDPC_decoder_kernels_CL)
set(PHY_NR_ULSCH_DECODING_DEMO_SRC
${OPENAIR1_DIR}/PHY/CODING/nr_ulsch_decoding_interface_demo.c
${OPENAIR1_DIR}/PHY/CODING/nr_dlsch_encoding_interface_demo.c
)
set(PHY_NR_CODINGIF
${OPENAIR1_DIR}/PHY/CODING/nrLDPC_load.c
)
set(PHY_NR_ULSCH_DECODINGIF
${OPENAIR1_DIR}/PHY/CODING/nr_ulsch_decoding_interface_load.c
)
##############################################
# Base CUDA setting
##############################################
@@ -885,6 +898,7 @@ add_library(coding MODULE ${PHY_TURBOSRC} )
add_library(dfts MODULE ${OPENAIR1_DIR}/PHY/TOOLS/oai_dfts.c ${OPENAIR1_DIR}/PHY/TOOLS/oai_dfts_neon.c)
add_library(ldpc_slot_demo MODULE ${PHY_NR_ULSCH_DECODING_DEMO_SRC})
set(PHY_SRC_COMMON
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dci_tools_common.c
@@ -1074,6 +1088,7 @@ set(PHY_SRC_UE
${PHY_POLARSRC}
${PHY_SMALLBLOCKSRC}
${PHY_NR_CODINGIF}
${PHY_NR_ULSCH_DECODINGIF}
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/pucch_rx.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/srs_rx.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_uci_tools_common.c
@@ -1086,8 +1101,11 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/sss_nr.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_initial_sync_sl.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_pbch.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_psbch_rx.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_psbch_tx.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
@@ -1384,9 +1402,11 @@ set (MAC_NR_SRC_UE
${NR_UE_PHY_INTERFACE_DIR}/NR_IF_Module.c
${NR_UE_PHY_INTERFACE_DIR}/NR_Packet_Drop.c
${NR_UE_MAC_DIR}/config_ue.c
${NR_UE_MAC_DIR}/config_ue_sl.c
${NR_UE_MAC_DIR}/mac_vars.c
${NR_UE_MAC_DIR}/main_ue_nr.c
${NR_UE_MAC_DIR}/nr_ue_procedures.c
${NR_UE_MAC_DIR}/nr_ue_procedures_sl.c
${NR_UE_MAC_DIR}/nr_ue_scheduler.c
${NR_UE_MAC_DIR}/nr_ue_dci_configuration.c
${NR_UE_MAC_DIR}/nr_ra_procedures.c
@@ -1434,8 +1454,7 @@ target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT)
target_link_libraries(L2 PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2 PRIVATE E2_AGENT)
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
@@ -1461,8 +1480,7 @@ target_link_libraries(e1_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap
target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc)
if(E2_AGENT)
target_link_libraries(L2_NR PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(L2_NR PRIVATE E2_AGENT)
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
add_library(L2_LTE_NR
@@ -1981,8 +1999,7 @@ target_link_libraries(lte-softmodem PRIVATE ${T_LIB})
target_link_libraries(lte-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
if(E2_AGENT)
target_compile_definitions(lte-softmodem PRIVATE E2_AGENT)
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
add_executable(oairu
@@ -2067,6 +2084,8 @@ add_executable(nr-softmodem
${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c
)
include(${OPENAIR_DIR}/nfapi/CMakeLists.txt)
target_link_libraries(nr-softmodem PRIVATE
-Wl,--start-group
UTIL HASHTABLE SCTP_CLIENT SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU GTPV1U SECURITY
@@ -2080,11 +2099,11 @@ target_link_libraries(nr-softmodem PRIVATE ${T_LIB})
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
if(E2_AGENT)
target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
add_dependencies(nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc)
add_dependencies(nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc ldpc_slot_demo)
if (ENABLE_LDPC_T2)
add_dependencies(nr-softmodem ldpc_t2)
@@ -2093,10 +2112,6 @@ endif()
# force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries(nr-softmodem PRIVATE
asn1_lte_rrc asn1_nr_rrc asn1_s1ap asn1_ngap asn1_m2ap asn1_m3ap asn1_x2ap asn1_f1ap asn1_lpp)
if(E2_AGENT)
target_compile_definitions(nr-softmodem PRIVATE E2_AGENT)
endif()
add_executable(nr-cuup
executables/nr-cuup.c
@@ -2242,6 +2257,22 @@ target_link_libraries(nr_pbchsim PRIVATE
)
target_link_libraries(nr_pbchsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
add_executable(nr_psbchsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/psbchsim.c
${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${NR_UE_RRC_DIR}/rrc_nsa.c
${NFAPI_USER_DIR}/nfapi.c
${NFAPI_USER_DIR}/gnb_ind_vars.c
${PHY_INTERFACE_DIR}/queue_t.c
)
target_link_libraries(nr_psbchsim PRIVATE
-Wl,--start-group UTIL SIMU SIMU_ETH PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_UE_NR MAC_NR_COMMON CONFIG_LIB L2_NR -lz -Wl,--end-group
m pthread ${T_LIB} ITTI dl shlib_loader
)
target_link_libraries(nr_psbchsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
#PUCCH ---> Prashanth
add_executable(nr_pucchsim
@@ -2309,6 +2340,7 @@ add_executable(nr_ulsim
if (ENABLE_LDPC_T2)
add_dependencies(nr_ulsim ldpc_t2)
endif()
add_dependencies(nr_ulsim ldpc_slot_demo)
target_link_libraries(nr_ulsim PRIVATE
-Wl,--start-group UTIL SIMU SIMU_ETH PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_UE_NR MAC_NR_COMMON nr_rrc CONFIG_LIB L2_NR HASHTABLE x2ap SECURITY ngap -lz -Wl,--end-group
@@ -2375,7 +2407,7 @@ if (${T_TRACER})
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX
L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON MAC_UE_NR ngap
CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT SIMU SIMU_ETH OPENAIR0_LIB
ldpc_orig ldpc_optim ldpc_optim8seg ldpc_t2 ldpc_cl ldpc_cuda ldpc dfts config_internals)
ldpc_orig ldpc_optim ldpc_optim8seg ldpc_t2 ldpc_cl ldpc_cuda ldpc ldpc_slot_demo dfts config_internals)
if (TARGET ${i})
add_dependencies(${i} generate_T)
endif()

View File

@@ -76,3 +76,20 @@ openairinterface5g
├── radio : Drivers for various radios such as USRP, AW2S, RFsim, ...
└── targets : Some configuration files; only historical relevance, and might be deleted in the future
```
# How to get support from the OAI Community #
You can ask your question on the [mailing lists](https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList).
Your email should contain below information:
- A clear subject in your email.
- For all the queries there should be [Query\] in the subject of the email and for problems there should be [Problem\].
- In case of a problem, add a small description.
- Do not share any photos unless you want to share a diagram.
- OAI gNB/DU/CU/CU-CP/CU-UP configuration file in `.conf` format only.
- Logs of OAI gNB/DU/CU/CU-CP/CU-UP in `.log` or `.txt` format only.
- In case your question is related to performance, include a small description of the machine (Operating System, Kernel version, CPU, RAM and networking card) and diagram of your testing environment.
- Known/open issues are present on [GitLab](https://gitlab.eurecom.fr/oai/openairinterface5g/-/issues), so keep checking.
Always remember a structured email will help us understand your issues quickly.

View File

@@ -0,0 +1,36 @@
apiVersion: v1
name: oai-nr-psbchsim
description: A Helm subchart for nr-psbchsim network function
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
icon: http://www.openairinterface.org/wp-content/uploads/2015/06/cropped-oai_final_logo.png
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.1
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: v1
keywords:
- Physical Simulator
- nr-psbchsim
- RAN
- 5G
sources:
- https://gitlab.eurecom.fr/oai/openairinterface5g
maintainers:
- name: OPENAIRINTERFACE
email: contact@openairinterface.org

View File

@@ -0,0 +1,63 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "oai-nr-psbchsim.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "oai-nr-psbchsim.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "oai-nr-psbchsim.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Common labels
*/}}
{{- define "oai-nr-psbchsim.labels" -}}
helm.sh/chart: {{ include "oai-nr-psbchsim.chart" . }}
{{ include "oai-nr-psbchsim.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
{{/*
Selector labels
*/}}
{{- define "oai-nr-psbchsim.selectorLabels" -}}
app.kubernetes.io/name: {{ include "oai-nr-psbchsim.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{/*
Create the name of the service account to use
*/}}
{{- define "oai-nr-psbchsim.serviceAccountName" -}}
{{- if .Values.serviceAccount.create -}}
{{ default (include "oai-nr-psbchsim.fullname" .) .Values.serviceAccount.name }}
{{- else -}}
{{ default "default" .Values.serviceAccount.name }}
{{- end -}}
{{- end -}}

View File

@@ -0,0 +1,42 @@
apiVersion: batch/v1
kind: Job
metadata:
name: {{ .Chart.Name }}
spec:
template:
metadata:
labels:
app: physim
spec:
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
{{- if .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: physim
image: "{{ .Values.global.image.repository }}:{{ .Values.global.image.version }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
env:
- name: OPENAIR_DIR
value: /opt/oai-physim
command: ["/bin/sh", "-c"]
args:
- >
cmake_targets/autotests/run_exec_autotests.bash -g "nr_psbchsim" -d bin/ &&
echo "FINISHED" && sleep infinity
dnsPolicy: ClusterFirst
restartPolicy: Never
schedulerName: default-scheduler
serviceAccountName: {{ .Values.global.serviceAccountName }}
terminationGracePeriodSeconds: 30
{{- if .Values.global.nodeSelector}}
nodeSelector:
{{- toYaml .Values.global.nodeSelector | nindent 12 }}
{{- end }}
{{- if .Values.global.nodeName.nrpsbchsim}}
nodeName: {{ .Values.global.nodeName.nrpsbchsim }}
{{- end }}

View File

@@ -0,0 +1,48 @@
# Default values for oai-nr-psbchsim
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
# pullPolicy: IfNotPresent or Never or Always
pullPolicy: Always
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: "oai-nr-psbchsim"
podSecurityContext:
runAsUser: 0
runAsGroup: 0
securityContext:
privileged: false
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
tolerations: []
affinity: {}

View File

@@ -27,6 +27,7 @@ global:
nrpbschsim106rb: dedale
nrpbchsim217rb: dedale
nrpbchsim273rb: dedale
nrpsbchsim: dedale
nrprachsim: dedale
nrpucchsim: dedale
nrulschsim: theseus

View File

@@ -308,29 +308,6 @@ pipeline {
}
}
}
stage ("L2-Sim-Test-5G") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'L2-Sim-Test-5G')
}
}
post {
always {
script {
// Using a unique variable name for each test stage to avoid overwriting on a global variable
// due to parallel-time concurrency
l2Sim5GStatus = finalizeSlaveJob('RAN-L2-Sim-Test-5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += l2Sim5GStatus
}
}
}
}
stage ("LTE-B200-FDD-LTEBOX-Container") {
when { expression {do4Gtest} }
steps {
@@ -562,6 +539,52 @@ pipeline {
}
}
}
stage ("SA-AERIAL-CN5G") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-SA-AERIAL-CN5G', 'SA-AERIAL-CN5G')
}
}
post {
always {
script {
// Using a unique variable name for each test stage to avoid overwriting on a global variable
// due to parallel-time concurrency
saAERIALStatus = finalizeSlaveJob('RAN-SA-AERIAL-CN5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += saAERIALStatus
}
}
}
}
stage ("SA-2x2-Module-CN5G") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-SA-2x2-Module-CN5G', 'SA-2x2-Module-CN5G')
}
}
post {
always {
script {
// Using a unique variable name for each test stage to avoid overwriting on a global variable
// due to parallel-time concurrency
saTDD2x2Status = finalizeSlaveJob('RAN-SA-2x2-Module-CN5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += saTDD2x2Status
}
}
}
}
stage ("SA-OAIUE-CN5G") {
when { expression {do5Gtest} }
steps {

View File

@@ -1,21 +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
# */
/inet.*brd/{print "interfaceToUse="$NF"done"}

View File

@@ -1,33 +0,0 @@
BEGIN{lineIdx=0;captureUEDesc=0}
{
if ($0 ~/UE0/) {
captureUEDesc = 1
}
if (captureUEDesc == 1) {
captureLine[lineIdx] = $0
lineIdx = lineIdx + 1
}
print $0
}
END {
for (ueIdx = 1; ueIdx < num_ues; ueIdx++) {
print ""
for (k = 0; k < lineIdx; k++) {
if (captureLine[k] ~/UE0/) {
mLine = captureLine[k]
gsub("UE0", "UE"ueIdx, mLine)
print mLine
} else {
if (captureLine[k] ~/MSIN=/) {
mLine = captureLine[k]
MSIN=sprintf("%08d", 1111+int(ueIdx))
gsub("00001111", MSIN, mLine)
print mLine
} else {
print captureLine[k]
}
}
}
}
}

View File

@@ -1,27 +0,0 @@
BEGIN{lineIdx=0}
{
captureLine[lineIdx] = $0
lineIdx = lineIdx + 1
print $0
}
END{
for (ueIdx = 1; ueIdx < num_ues; ueIdx++) {
for (k = 0; k < lineIdx; k++) {
if (captureLine[k] ~/UserName=/) {
mLine = captureLine[k]
MSIN=sprintf("%08d", 1111+int(ueIdx))
gsub("00001111", MSIN, mLine)
print mLine
} else {
if (captureLine[k] ~/SubscriptionIndex/) {
mLine = captureLine[k]
MSIN=sprintf("%d", 111+int(ueIdx))
gsub("111", MSIN, mLine)
print mLine
} else {
print captureLine[k]
}
}
}
}
}

View File

@@ -25,8 +25,8 @@ allow dynamic UE creation from remote API */
rf_port: 0,
bandwidth: 20,
band: 78,
dl_nr_arfcn:627360,
ssb_nr_arfcn:627360,
dl_nr_arfcn:630048,
ssb_nr_arfcn:630048,
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: N_ANTENNA_UL,
@@ -39,7 +39,7 @@ allow dynamic UE creation from remote API */
ue_list: [
{
"ue_id" : 1,
"imsi": "208970000000111",
"imsi": "001020000000001",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -54,7 +54,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 2,
"imsi": "208970000000112",
"imsi": "001020000000002",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -69,7 +69,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 3,
"imsi": "208970000000113",
"imsi": "001020000000003",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -84,7 +84,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 4,
"imsi": "208970000000114",
"imsi": "001020000000004",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -99,7 +99,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 5,
"imsi": "208970000000115",
"imsi": "001020000000005",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -114,7 +114,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 6,
"imsi": "208970000000116",
"imsi": "001020000000006",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -129,7 +129,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 7,
"imsi": "208970000000100",
"imsi": "001020000000007",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -144,7 +144,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 8,
"imsi": "208970000000102",
"imsi": "001020000000008",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -159,7 +159,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 9,
"imsi": "208970000000103",
"imsi": "001020000000009",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -174,7 +174,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 10,
"imsi": "208970000000104",
"imsi": "001020000000010",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -189,7 +189,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 11,
"imsi": "208970000000110",
"imsi": "001020000000011",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -204,7 +204,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 12,
"imsi": "208970000000105",
"imsi": "001020000000012",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -219,7 +219,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 13,
"imsi": "208970000000106",
"imsi": "001020000000013",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -234,7 +234,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 14,
"imsi": "208970000000107",
"imsi": "001020000000014",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -249,7 +249,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 15,
"imsi": "208970000000108",
"imsi": "001020000000015",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",
@@ -264,7 +264,7 @@ allow dynamic UE creation from remote API */
},
{
"ue_id" : 16,
"imsi": "208970000000109",
"imsi": "001020000000016",
"K": "fec86ba6eb707ed08905757b1bb44b8f",
"sim_algo":"milenage",
"op": "1006020f0a478bf6b699f15c062e42b3",

View File

@@ -1,280 +0,0 @@
/* 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

@@ -74,8 +74,9 @@ then
IS_NFAPI=`echo $FILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FILE || true`
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FILE || true`
IS_MIT_LICENCE_PRESENT=`egrep -c "MIT License" $FILE || true`
IS_EXCEPTION=`echo $FILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc.h|openair1/PHY/CODING/crcext.h|openair1/PHY/CODING/types.h|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_offload.h" || true`
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ]
then
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
then
@@ -184,8 +185,9 @@ do
IS_NFAPI=`echo $FULLFILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FULLFILE || true`
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FULLFILE || true`
IS_MIT_LICENCE_PRESENT=`egrep -c "MIT License" $FULLFILE || true`
IS_EXCEPTION=`echo $FULLFILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc.h|openair1/PHY/CODING/crcext.h|openair1/PHY/CODING/types.h|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_offload.h" || true`
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ]
then
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
then

View File

@@ -9,12 +9,21 @@ idefix:
MTU: 1500
Trace: True
LogStore: /media/usb-drive/ci_qlogs
nrmodule2_quectel:
Host: nrmodule2
InitScript: sudo stdbuf -oL /home/nrmodule2/quectel-CM/quectel-CM -4 -s oai.ipv4 &> /tmp/quecel-cm.log &
up2:
Host: up2
AttachScript: sudo /opt/mbim/start_quectel_mbim.sh
DetachScript: sudo /opt/mbim/stop_quectel_mbim.sh
NetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
sphex_quectel:
Host: sphex
InitScript: sudo stdbuf -oL /home/oaicicd/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
AttachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB3 wup
DetachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB3 detach
NetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
@@ -47,9 +56,48 @@ adb_ue_2:
MTU: 1500
LogStore: /media/usb-drive/ci_adb_2-logs
oc-cn5g:
Host: avra
NetworkScript: echo "inet 172.21.6.102"
RunIperf3Server: False
matix-cn5g:
Host: matix
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
CmdPrefix: docker exec prod-trf-gen
RunIperf3Server: False
porcepix-cn4g:
Host: porcepix
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
CmdPrefix: docker exec prod-trf-gen
porcepix-cn5g:
Host: porcepix
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
CmdPrefix: docker exec prod-trf-gen
RunIperf3Server: False
nano-cn4g:
Host: nano
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
CmdPrefix: docker exec prod-trf-gen
ltebox-nano:
Host: nano
NetworkScript: ip a show dev tun1
sabox-nepes:
Host: nepes
NetworkScript: ip a show dev tun1
ltebox-nepes:
Host: nepes
NetworkScript: ip a show dev tun1
amarisoft_ue:
Host: amariue
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-20897-2x2.cfg &
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-00102-2x2.cfg &
TermScript: /root/2023-10-27/libs/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
amarisoft_ue_1:
Host: amariue
@@ -121,6 +169,48 @@ amarisoft_ue_10:
NetworkScript: ip netns exec ue10 ip a show dev pdn0
CmdPrefix: ip netns exec ue10
MTU: 1500
amarisoft_ue_11:
Host: amariue
AttachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":11}'
DetachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":11}'
NetworkScript: ip netns exec ue11 ip a show dev pdn0
CmdPrefix: ip netns exec ue11
MTU: 1500
amarisoft_ue_12:
Host: amariue
AttachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":12}'
DetachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":12}'
NetworkScript: ip netns exec ue12 ip a show dev pdn0
CmdPrefix: ip netns exec ue12
MTU: 1500
amarisoft_ue_13:
Host: amariue
AttachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":13}'
DetachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":13}'
NetworkScript: ip netns exec ue13 ip a show dev pdn0
CmdPrefix: ip netns exec ue13
MTU: 1500
amarisoft_ue_14:
Host: amariue
AttachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":14}'
DetachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":14}'
NetworkScript: ip netns exec ue14 ip a show dev pdn0
CmdPrefix: ip netns exec ue14
MTU: 1500
amarisoft_ue_15:
Host: amariue
AttachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":15}'
DetachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":15}'
NetworkScript: ip netns exec ue15 ip a show dev pdn0
CmdPrefix: ip netns exec ue15
MTU: 1500
amarisoft_ue_16:
Host: amariue
AttachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":16}'
DetachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_off","ue_id":16}'
NetworkScript: ip netns exec ue16 ip a show dev pdn0
CmdPrefix: ip netns exec ue16
MTU: 1500
oai_ue_caracal:
Host: caracal
@@ -243,6 +333,9 @@ rfsim4g_ue:
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim4g-oai-lte-ue0
IF: oaitun_ue1
AttachScript: docker start rfsim4g-oai-lte-ue0
DetachScript: docker stop rfsim4g-oai-lte-ue0
MTU: 1500
rfsim4g_ext_dn:
Host: localhost
@@ -255,6 +348,18 @@ rfsim4g_enb_nos1:
CmdPrefix: docker exec rfsim4g-oai-enb
IF: oaitun_enb1
rfsim4g_enb_fembms:
Host: localhost
NetworkScript: docker exec rfsim4g-oai-enb ip a show dev oaitun_enm1
CmdPrefix: docker exec rfsim4g-oai-enb
IF: oaitun_enm1
rfsim4g_ue_fembms:
Host: localhost
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_uem1
CmdPrefix: docker exec rfsim4g-oai-lte-ue0
IF: oaitun_uem1
l2sim5g_ue:
Host: localhost
AttachScript: docker start l2sim-oai-nr-ue0

View File

@@ -44,6 +44,9 @@ OCUrl = "https://api.oai.cs.eurecom.fr:6443"
OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
CI_OC_RAN_NAMESPACE = "oaicicd-ran"
CI_OC_CORE_NAMESPACE = "oaicicd-core-for-ci-ran"
CN_IMAGES = ["mysql", "oai-nrf", "oai-amf", "oai-smf", "oai-upf", "oai-ausf", "oai-udm", "oai-udr", "oai-traffic-server"]
CN_CONTAINERS = ["", "-c nrf", "-c amf", "-c smf", "-c upf", "-c ausf", "-c udm", "-c udr", ""]
def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
if ocUserName == '' or ocPassword == '' or ocProjectName == '':
@@ -65,6 +68,51 @@ def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
def OC_logout(cmd):
cmd.run(f'oc logout')
def OC_deploy_CN(cmd, ocUserName, ocPassword):
logging.debug('OC OAI CN5G: Deploying OAI CN5G on Openshift Cluster')
path = "/opt/oai-cn5g-fed-develop-2024-april-00102"
succeeded = OC_login(cmd, ocUserName, ocPassword, CI_OC_CORE_NAMESPACE)
if not succeeded:
return False, CONST.OC_LOGIN_FAIL
cmd.run('helm uninstall oai5gcn --wait --timeout 60s')
ret = cmd.run(f'helm install --wait --timeout 60s oai5gcn {path}/ci-scripts/charts/oai-5g-basic/.')
if ret.returncode != 0:
logging.error('OC OAI CN5G: Deployment failed')
OC_logout(cmd)
return False, CONST.OC_PROJECT_FAIL
report = cmd.run('oc get pods')
OC_logout(cmd)
return True, report
def OC_undeploy_CN(cmd, ocUserName, ocPassword):
logging.debug('OC OAI CN5G: Terminating CN on Openshift Cluster')
path = "/opt/oai-cn5g-fed-develop-2024-april-00102"
succeeded = OC_login(cmd, ocUserName, ocPassword, CI_OC_CORE_NAMESPACE)
if not succeeded:
return False, CONST.OC_LOGIN_FAIL
cmd.run(f'rm -Rf {path}/logs')
cmd.run(f'mkdir -p {path}/logs')
logging.debug('OC OAI CN5G: Collecting log files to workspace')
cmd.run(f'oc describe pod &> {path}/logs/describe-pods-post-test.log')
cmd.run(f'oc get pods.metrics.k8s &> {path}/logs/nf-resource-consumption.log')
for ii, ci in zip(CN_IMAGES, CN_CONTAINERS):
podName = cmd.run(f"oc get pods | grep {ii} | awk \'{{print $1}}\'").stdout.strip()
if not podName:
logging.debug(f'{ii} pod not found!')
else:
cmd.run(f'oc logs -f {podName} {ci} &> {path}/logs/{ii}.log &')
cmd.run(f'cd {path}/logs && zip -r -qq test_logs_CN.zip *.log')
cmd.copyin(f'{path}/logs/test_logs_CN.zip','test_logs_CN.zip')
ret = cmd.run('helm uninstall --wait --timeout 60s oai5gcn')
if ret.returncode != 0:
logging.error('OC OAI CN5G: Undeployment failed')
cmd.run('helm uninstall --wait --timeout 60s oai5gcn')
OC_logout(cmd)
return False, CONST.OC_PROJECT_FAIL
report = cmd.run('oc get pods')
OC_logout(cmd)
return True, report
class Cluster:
def __init__(self):
self.eNBIPAddress = ""
@@ -274,6 +322,11 @@ class Cluster:
if result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
# if the branch name contains integration_20xx_wyy, let rebuild ran-base
result = re.search('integration_20([0-9]{2})_w([0-9]{2})', self.ranBranch)
if not forceBaseImageBuild and result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
else:
imageTag = f'develop-{self.ranCommitID[0:8]}'
forceBaseImageBuild = True

View File

@@ -31,7 +31,8 @@ import subprocess as sp
import os
import paramiko
import uuid
import sys
import sys
import time
SSHTIMEOUT=7
@@ -86,6 +87,12 @@ class Cmd(metaclass=abc.ABCMeta):
return
class LocalCmd(Cmd):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.close()
def __init__(self, d = None):
self.cwd = d
if self.cwd is not None:
@@ -100,6 +107,7 @@ class LocalCmd(Cmd):
# 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)
time.sleep(0.1)
else:
ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
except Exception as e:
@@ -122,12 +130,40 @@ class LocalCmd(Cmd):
if src[0] != '/' or tgt[0] != '/':
raise Exception('support only absolute file paths!')
opt = '-r' if recursive else ''
self.run(f'cp {opt} {src} {tgt}')
return self.run(f'cp {opt} {src} {tgt}').returncode == 0
def copyout(self, src, tgt, recursive=False):
self.copyin(src, tgt, recursive)
return self.copyin(src, tgt, recursive)
def PutFile(client, src, tgt):
success = True
sftp = client.open_sftp()
try:
sftp.put(src, tgt)
except FileNotFoundError as error:
logging.error(f"error while putting {src}: {error}")
success = False
sftp.close()
return success
def GetFile(client, src, tgt):
success = True
sftp = client.open_sftp()
try:
sftp.get(src, tgt)
except FileNotFoundError as error:
logging.error(f"error while getting {src}: {error}")
success = False
sftp.close()
return success
class RemoteCmd(Cmd):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.close()
def __init__(self, hostname, d=None):
cIdx = 0
logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko
@@ -176,6 +212,7 @@ class RemoteCmd(Cmd):
# 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'')
time.sleep(0.1)
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))
@@ -193,36 +230,38 @@ class RemoteCmd(Cmd):
def getBefore(self):
return self.cp.stdout
# if recursive is True, tgt must be a directory (and src is file or directory)
# if recursive is False, tgt and src must be a file name
def copyout(self, src, tgt, recursive=False):
logging.debug(f"copyout: local:{src} -> remote:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}"
cmd = LocalCmd()
cmd.run(f"tar -cf {abstmpfile} {src}")
sftp = self.client.open_sftp()
sftp.put(abstmpfile, abstmpfile)
sftp.close()
cmd.run(f"rm {abstmpfile}")
self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
with LocalCmd() as cmd:
if cmd.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
return False
if not PutFile(self.client, abstmpfile, abstmpfile):
return False
cmd.run(f"rm {abstmpfile}")
ret = self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
return ret.returncode == 0
else:
sftp = self.client.open_sftp()
sftp.put(src, tgt)
sftp.close()
return PutFile(self.client, src, tgt)
# if recursive is True, tgt must be a directory (and src is file or directory)
# if recursive is False, tgt and src must be a file name
def copyin(self, src, tgt, recursive=False):
logging.debug(f"copyin: remote:{src} -> local:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}"
self.run(f"tar -cf {abstmpfile} {src}")
sftp = self.client.open_sftp()
sftp.get(abstmpfile, abstmpfile)
sftp.close()
if self.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
return False
if not GetFile(self.client, abstmpfile, abstmpfile):
return False
self.run(f"rm {abstmpfile}")
cmd = LocalCmd()
cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
with LocalCmd() as cmd:
ret = cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
return ret.returncode == 0
else:
sftp = self.client.open_sftp()
sftp.get(src, tgt)
sftp.close()
return GetFile(self.client, src, tgt)

View File

@@ -58,7 +58,7 @@ import cls_oaicitest
# Helper functions used here and in other classes
# (e.g., cls_cluster.py)
#-----------------------------------------------------------
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan']
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial']
def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
if ranCommitID == '':
@@ -169,97 +169,27 @@ def AnalyzeBuildLogs(buildRoot, images, globalStatus):
collectInfo[image] = files
return collectInfo
def AnalyzeIperf(cliOptions, clientReport, serverReport):
req_bw = 1.0 # default iperf throughput, in Mbps
result = re.search('-b *(?P<iperf_bandwidth>[0-9\.]+)(?P<magnitude>[kKMG])', cliOptions)
if result is not None:
req_bw = float(result.group('iperf_bandwidth'))
magn = result.group('magnitude')
if magn == "k" or magn == "K":
req_bw /= 1000
elif magn == "G":
req_bw *= 1000
req_dur = 10 # default iperf send duration
result = re.search('-t *(?P<duration>[0-9]+)', cliOptions)
if result is not None:
req_dur = int(result.group('duration'))
reportLine = None
# find server report in client status
clientReportLines = clientReport.split('\n')
for l in range(len(clientReportLines)):
res = re.search('read failed: Connection refused', clientReportLines[l])
if res is not None:
message = 'iperf connection refused by server!'
logging.error(f'\u001B[1;37;41mIperf Test FAIL: {message}\u001B[0m')
return (False, message)
res = re.search('Server Report:', clientReportLines[l])
if res is not None and l + 1 < len(clientReportLines):
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\.]+)%\))'
# 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:
for l in serverReport.split('\n'):
res = re.search(statusTemplate, l)
if res is not None:
reportLine = l
if reportLine is None:
logging.warning('no report in server status found!')
return (False, 'could not parse iperf logs')
logging.debug(f'found client status: {reportLine}')
result = re.search(statusTemplate, reportLine)
if result is None:
logging.error('could not analyze report from statusTemplate')
return (False, 'could not parse iperf logs')
duration = float(result.group('duration'))
bitrate = float(result.group('bitrate'))
magn = result.group('magnitude')
if magn == "k" or magn == "K":
bitrate /= 1000
elif magn == "G": # we assume bitrate in Mbps, therefore it must be G now
bitrate *= 1000
jitter = float(result.group('jitter'))
packetloss = float(result.group('packetloss'))
logging.debug('\u001B[1;37;44m iperf result \u001B[0m')
msg = f'Req Bitrate: {req_bw}'
logging.debug(f'\u001B[1;34m{msg}\u001B[0m')
br_loss = bitrate/req_bw
bmsg = f'Bitrate : {bitrate} (perf {br_loss})'
logging.debug(f'\u001B[1;34m{bmsg}\u001B[0m')
msg += '\n' + bmsg
if br_loss < 0.9:
msg += '\nBitrate performance too low (<90%)'
logging.debug(f'\u001B[1;37;41mBitrate performance too low (<90%)\u001B[0m')
return (False, msg)
plmsg = f'Packet Loss: {packetloss}%'
logging.debug(f'\u001B[1;34m{plmsg}\u001B[0m')
msg += '\n' + plmsg
if packetloss > 5.0:
msg += '\nPacket Loss too high!'
logging.debug(f'\u001B[1;37;41mPacket Loss too high \u001B[0m')
return (False, msg)
dmsg = f'Duration : {duration} (req {req_dur})'
logging.debug(f'\u001B[1;34m{dmsg}\u001B[0m')
msg += '\n' + dmsg
if duration < float(req_dur):
msg += '\nDuration of iperf too short!'
logging.debug(f'\u001B[1;37;41mDuration of iperf too short\u001B[0m')
return (False, msg)
jmsg = f'Jitter : {jitter}'
logging.debug(f'\u001B[1;34m{jmsg}\u001B[0m')
msg += '\n' + jmsg
return (True, msg)
# 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(lIfs, lFilter, loFile):
capture = pyshark.LiveCapture(interface=lIfs, bpf_filter=lFilter, output_file=loFile, debug=False)
for packet in capture.sniff_continuously():
pass
def StopPySharkCapture(testcase):
with cls_cmd.LocalCmd() as myCmd:
cmd = 'killall tshark'
myCmd.run(cmd, reportNonZero=False)
cmd = 'killall dumpcap'
myCmd.run(cmd, reportNonZero=False)
time.sleep(5)
cmd = f'mv /tmp/capture_{testcase}.pcap ../cmake_targets/log/{testcase}/.'
myCmd.run(cmd, timeout=100, reportNonZero=False)
return False
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
@@ -383,6 +313,7 @@ class Containerize():
imageNames.append(('oai-physim', 'phySim', 'oai-physim', ''))
if self.host == 'Ubuntu':
imageNames.append(('oai-lte-ru', 'lteRU', 'oai-lte-ru', ''))
imageNames.append(('oai-gnb-aerial', 'gNB.aerial', 'oai-gnb-aerial', ''))
# Building again the 5G images with Address Sanitizer
imageNames.append(('ran-build', 'build', 'ran-build-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
@@ -419,6 +350,11 @@ class Containerize():
if result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
# if the branch name contains integration_20xx_wyy, let rebuild ran-base
result = re.search('integration_20([0-9]{2})_w([0-9]{2})', self.ranBranch)
if not forceBaseImageBuild and result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
else:
forceBaseImageBuild = True
@@ -475,7 +411,11 @@ class Containerize():
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build-asan:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
elif image != 'ran-build':
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
if image == 'oai-gnb-aerial':
cmd.run('cp -f /opt/nvidia-ipc/nvipc_src.2023.11.28.tar.gz .')
ret = cmd.run(f'{self.cli} build {self.cliBuildOptions} --target {image} --tag {name}:{imageTag} --file docker/Dockerfile.{pattern}{self.dockerfileprefix} {option} . > cmake_targets/log/{name}.log 2>&1', timeout=1200)
if image == 'oai-gnb-aerial':
cmd.run('rm -f nvipc_src.2023.11.28.tar.gz')
if image == 'ran-build' and ret.returncode == 0:
cmd.run(f"docker run --name test-log -d {name}:{imageTag} /bin/true")
cmd.run(f"docker cp test-log:/oai-ran/cmake_targets/log/ cmake_targets/log/{name}/")
@@ -507,9 +447,13 @@ class Containerize():
# Remove all intermediate build images and clean up
cmd.run(f"{self.cli} image rm ran-build:{imageTag} ran-build-asan:{imageTag}")
cmd.run(f"{self.cli} volume prune --force")
# Remove any cached artifacts: we don't use the cache for now, prevent
# out of diskspace problem
cmd.run(f"{self.cli} buildx prune --filter=until=6h --force")
# Remove some cached artifacts to prevent out of diskspace problem
logging.debug(cmd.run("df -h").stdout)
logging.debug(cmd.run("docker system df").stdout)
cmd.run(f"{self.cli} buildx prune --filter until=1h --force")
logging.debug(cmd.run("df -h").stdout)
logging.debug(cmd.run("docker system df").stdout)
# create a zip with all logs
build_log_name = f'build_log_{self.testCase_id}'
@@ -657,22 +601,26 @@ class Containerize():
collectInfo['proxy'] = files
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
mySSH.close()
allImagesSize = {}
if result is not None:
imageSize = float(result.group('size')) / 1000000
logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes'
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
return True
else:
logging.debug('proxy size is unknown')
logging.error('proxy size is unknown')
allImagesSize['proxy'] = 'unknown'
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
mySSH.close()
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTabFooter(False)
return False
def BuildRunTests(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
@@ -946,12 +894,12 @@ class Containerize():
if svcName == '':
logging.warning('no service name given: starting all services in ci-docker-compose.yml!')
mySSH.command(f'docker-compose --file ci-docker-compose.yml up -d -- {svcName}', '\$', 30)
mySSH.command(f'docker compose --file ci-docker-compose.yml up -d -- {svcName}', '\$', 30)
# Checking Status
grep = ''
if svcName != '': grep = f' | grep -A3 {svcName}'
mySSH.command(f'docker-compose --file ci-docker-compose.yml config {grep}', '\$', 5)
if svcName != '': grep = f' | grep -A3 --color=never {svcName}'
mySSH.command(f'docker compose --file ci-docker-compose.yml config {grep}', '\$', 5)
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
unhealthyNb = 0
healthyNb = 0
@@ -999,8 +947,8 @@ class Containerize():
if healthyNb == 1:
cnt = 0
while (cnt < 20):
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
result = re.search('got sync|Starting E1AP at CU UP|Starting F1AP at CU|Got sync|Waiting for RUs to be configured', mySSH.getBefore())
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting|ready"', '\$', 30)
result = re.search('got sync|Starting E1AP at CU UP|Starting F1AP at CU|Got sync|Waiting for RUs to be configured|cuPHYController initialized|Received CONFIG.response, gNB is ready', mySSH.getBefore())
if result is None:
time.sleep(6)
cnt += 1
@@ -1008,7 +956,6 @@ class Containerize():
cnt = 100
status = True
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
time.sleep(10)
else:
# containers are unhealthy, so we won't start. However, logs are stored at the end
# in UndeployObject so we here store the logs of the unhealthy container to report it
@@ -1053,78 +1000,80 @@ class Containerize():
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
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)
logging.debug(f'\u001B[1m Undeploying OAI Object from server: {lIpAddr}\u001B[0m')
mySSH = cls_cmd.getConnection(lIpAddr)
yamlDir = f'{lSourcePath}/{self.yamlPath[self.eNB_instance]}'
mySSH.run(f'cd {yamlDir}')
svcName = self.services[self.eNB_instance]
forceDown = False
if svcName != '':
logging.warning(f'service name given, but will stop all services in ci-docker-compose.yml!')
svcName = ''
mySSH.command(f'docker-compose -f ci-docker-compose.yml config --services', '\$', 5)
ret = mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml config --services')
if ret.returncode != 0:
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', "cannot enumerate running services")
self.exitStatus = 1
return
# first line has command, last line has next command prompt
allServices = mySSH.getBefore().split('\r\n')[1:-1]
allServices = ret.stdout.splitlines()
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')[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}')
# outputs the hash if the container is running
ret = mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml ps --all --quiet -- {s}')
c = ret.stdout
logging.debug(f'running service {s} with container id {c}')
if ret.stdout != "" and ret.returncode == 0: # something is running for that service
services.append((s, c))
logging.info(f'stopping services {[s for s, _ in services]}')
mySSH.command(f'docker-compose -f ci-docker-compose.yml stop -t3', '\$', 30)
time.sleep(5) # give some time to running containers to stop
for svcName in services:
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml stop -t3')
copyin_res = True
for service_name, container_id in services:
# head -n -1 suppresses the final "X exited with status code Y"
filename = f'{svcName}-{HTML.testCase_id}.log'
mySSH.command(f'docker-compose -f ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}', '\$', 120)
filename = f'{service_name}-{HTML.testCase_id}.log'
mySSH.run(f'docker logs {container_id} &> {lSourcePath}/cmake_targets/log/{filename}')
copyin_res = mySSH.copyin(f'{lSourcePath}/cmake_targets/log/{filename}', f'{filename}') and copyin_res
mySSH.command('docker-compose -f ci-docker-compose.yml down -v', '\$', 5)
mySSH.close()
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml down -v')
# Analyzing log file!
files = ','.join([f'{s}-{HTML.testCase_id}' for s in services])
if len(services) > 1:
files = '{' + files + '}'
copyin_res = 0
if len(services) > 0:
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, f'{lSourcePath}/cmake_targets/log/{files}.log', '.')
if copyin_res == -1:
HTML.htmleNBFailureMsg='Could not copy logfile to analyze it!'
if not copyin_res:
HTML.htmleNBFailureMsg='Could not copy logfile(s) to analyze it!'
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
self.exitStatus = 1
# use function for UE log analysis, when oai-nr-ue container is used
elif 'oai-nr-ue' in services or 'lte_ue0' in services:
elif any(service_name == 'oai-nr-ue' or service_name == 'lte_ue0' for service_name, _ in services):
self.exitStatus == 0
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
logging.debug(f'Analyzing UE logfile {filename}')
logStatus = cls_oaicitest.OaiCiTest().AnalyzeLogFile_UE(f'{filename}', HTML, RAN)
if (logStatus < 0):
fullStatus = False
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
self.exitStatus = 1
else:
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
else:
for svcName in services:
filename = f'{svcName}-{HTML.testCase_id}.log'
logging.debug(f'\u001B[1m Analyzing logfile {filename}\u001B[0m')
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
if (logStatus < 0):
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
self.exitStatus = 1
for service_name, _ in services:
if service_name == 'nv-cubb':
msg = 'Undeploy PNF/Nvidia CUBB'
HTML.CreateHtmlTestRow(msg, 'OK', CONST.ALL_PROCESSES_OK)
else:
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
filename = f'{service_name}-{HTML.testCase_id}.log'
logging.debug(f'\u001B[1m Analyzing logfile {filename}\u001B[0m')
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
if (logStatus < 0):
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
self.exitStatus = 1
else:
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
# all the xNB run logs shall be on the server 0 for logCollecting
if self.eNB_serverId[self.eNB_instance] != '0':
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, f'./{files}.log', f'{self.eNBSourceCodePath}/cmake_targets/')
mySSH.copyout(f'./*.log', f'{lSourcePath}/cmake_targets/', recursive=True)
if self.exitStatus == 0:
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
else:
logging.error('\u001B[1m Undeploying OAI Object Failed\u001B[0m')
mySSH.close()
def DeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0
@@ -1255,17 +1204,6 @@ 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):
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: @@"'
@@ -1290,7 +1228,7 @@ class Containerize():
myCmd.run(cmd, timeout=5, reportNonZero=False)
myCmd.close()
return
x = threading.Thread(target = self.LaunchPySharkCapture, args = (interfaces,capture_filter,output_file,))
x = threading.Thread(target = LaunchPySharkCapture, args = (interfaces,capture_filter,output_file,))
x.daemon = True
x.start()
@@ -1375,24 +1313,13 @@ class Containerize():
logStatus = UE.AnalyzeLogFile_UE(f'{logPath}/{filename}', HTML, RAN)
if (logStatus < 0):
fullStatus = False
self.exitStatus = 1
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
else:
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
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('/')
# 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()
if self.tsharkStarted:
self.tsharkStarted = StopPySharkCapture(ymlPath[1])
logging.debug('\u001B[1m Undeploying \u001B[0m')
logging.debug(f'Working dir is back {self.yamlPath[0]}')
cmd = 'docker-compose -f docker-compose-ci.yml down -v'
@@ -1446,76 +1373,6 @@ class Containerize():
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
def PingExit(self, HTML, RAN, UE, status, message):
if status:
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
else:
logging.error('\u001B[1;37;41m ping test FAIL -- ' + message + ' \u001B[0m')
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'KO', [message])
# Automatic undeployment
logging.warning('----------------------------------------')
logging.warning('\u001B[1m Starting Automatic undeployment \u001B[0m')
logging.warning('----------------------------------------')
HTML.testCase_id = 'AUTO-UNDEPLOY'
HTML.desc = 'Automatic Un-Deployment'
self.UndeployGenObject(HTML, RAN, UE)
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 = 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"'
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'
clientStatus = myCmd.run(cmd, timeout=100)
# Stop the server process
cmd = f'docker exec {self.svrContName} /bin/bash -c "pkill iperf"'
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}'
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.stdout, serverStatus)
if iperfStatus:
logging.info('\u001B[1m Iperf Test PASS\u001B[0m')
else:
logging.error('\u001B[1;37;41m Iperf Test FAIL\u001B[0m')
self.IperfExit(HTML, RAN, UE, iperfStatus, msg)
def IperfExit(self, HTML, RAN, UE, status, message):
html_cell = f'UE\n{message}'
if status:
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'OK', [html_cell])
else:
logging.error('\u001B[1m Iperf Test FAIL -- ' + message + ' \u001B[0m')
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'KO', [html_cell])
# Automatic undeployment
logging.warning('----------------------------------------')
logging.warning('\u001B[1m Starting Automatic undeployment \u001B[0m')
logging.warning('----------------------------------------')
HTML.testCase_id = 'AUTO-UNDEPLOY'
HTML.desc = 'Automatic Un-Deployment'
self.UndeployGenObject(HTML, RAN, UE)
self.exitStatus = 1
def CheckAndAddRoute(self, svrName, ipAddr, userName, password):
logging.debug('Checking IP routing on ' + svrName)
mySSH = SSH.SSHConnection()

View File

@@ -41,7 +41,7 @@ import cls_cmd
class Module_UE:
def __init__(self, module_name, filename="ci_ueinfra.yaml"):
def __init__(self, module_name, filename="ci_infra.yaml"):
with open(filename, 'r') as f:
all_ues = yaml.load(f, Loader=yaml.FullLoader)
m = all_ues.get(module_name)
@@ -64,7 +64,8 @@ class Module_UE:
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}')
self.runIperf3Server = m.get('RunIperf3Server', True)
logging.info(f'initialized {self.module_name}@{self.host} from {filename}')
def __str__(self):
return f"{self.module_name}@{self.host} [IP: {self.getIP()}]"
@@ -189,6 +190,9 @@ class Module_UE:
def getHost(self):
return self.host
def getRunIperf3Server(self):
return self.runIperf3Server
def getCmdPrefix(self):
return self.cmd_prefix if self.cmd_prefix else ""

View File

@@ -437,13 +437,19 @@ class HTMLManagement():
for k in DataLog['Data']:
# TestRow
avg = DataLog['Data'][k][0]
maxval = DataLog['Data'][k][1]
count = DataLog['Data'][k][2]
valnorm = float(DataLog['Data'][k][3])
dev = DataLog['DeviationThreshold'][k]
ref = DataLog['Ref'][k]
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <td colspan="3" bgcolor = "lightcyan" >' + k + ' </td>\n')
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" >' + DataLog['Data'][k][0] + '; ' + DataLog['Data'][k][1] + '; ' + DataLog['Data'][k][2] + ' </td>\n')
if float(DataLog['Data'][k][3])> DataLog['Threshold'][k]:
self.htmlFile.write(' <th bgcolor = "red" >' + DataLog['Data'][k][3] + ' (Ref = ' + str(DataLog['Ref'][k]) + ' ; Thres = ' +str(DataLog['Threshold'][k])+') ' + '</th>\n')
self.htmlFile.write(f' <td colspan="2" bgcolor = "lightcyan" >{avg}; {maxval}; {count}</td>\n')
if valnorm > 1.0 + dev or valnorm < 1.0 - dev:
self.htmlFile.write(f' <th bgcolor = "red" >{valnorm} (Avg over Ref = {avg} over {ref}; max allowed deviation = {dev})</th>\n')
else:
self.htmlFile.write(' <th bgcolor = "green" ><font color="white">' + DataLog['Data'][k][3] + ' (Ref = ' + str(DataLog['Ref'][k]) + ' ; Thres = ' +str(DataLog['Threshold'][k])+') ' + '</th>\n')
self.htmlFile.write(f' <th bgcolor = "green" ><font color="white">{valnorm} (Avg over Ref = {avg} over {ref}; max allowed deviation = {dev})</font></th>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.close()

View File

@@ -45,6 +45,7 @@ import signal
import statistics as stat
from multiprocessing import SimpleQueue, Lock
import concurrent.futures
import json
#import our libs
import helpreadme as HELP
@@ -52,13 +53,182 @@ import constants as CONST
import cls_cluster as OC
import sshconnection
import cls_module_ue
import cls_module
import cls_cmd
logging.getLogger("matplotlib").setLevel(logging.WARNING)
import matplotlib.pyplot as plt
import numpy as np
#-----------------------------------------------------------
# Helper functions used here and in other classes
#-----------------------------------------------------------
def Iperf_ComputeModifiedBW(idx, ue_num, profile, args):
result = re.search('-b\s*(?P<iperf_bandwidth>[0-9\.]+)(?P<unit>[KMG])', str(args))
if result is None:
raise ValueError(f'requested iperf bandwidth not found in iperf options "{args}"')
iperf_bandwidth = float(result.group('iperf_bandwidth'))
if iperf_bandwidth == 0:
raise ValueError('iperf bandwidth set to 0 - invalid value')
if profile == 'balanced':
iperf_bandwidth_new = iperf_bandwidth/ue_num
if profile =='single-ue':
iperf_bandwidth_new = iperf_bandwidth
if profile == 'unbalanced':
# residual is 2% of max bw
residualBW = iperf_bandwidth / 50
if idx == 0:
iperf_bandwidth_new = iperf_bandwidth - ((ue_num - 1) * residualBW)
else:
iperf_bandwidth_new = residualBW
iperf_bandwidth_str = result.group(0)
iperf_bandwidth_unit = result.group(2)
iperf_bandwidth_str_new = f"-b {'%.2f' % iperf_bandwidth_new}{iperf_bandwidth_unit}"
args_new = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(args))
if iperf_bandwidth_unit == 'K':
iperf_bandwidth_new = iperf_bandwidth_new / 1000
return iperf_bandwidth_new, args_new
def Iperf_ComputeTime(args):
result = re.search('-t\s*(?P<iperf_time>\d+)', str(args))
if result is None:
raise Exception('Iperf time not found!')
return int(result.group('iperf_time'))
def Iperf_analyzeV3TCPJson(filename, iperf_tcp_rate_target):
if (not os.path.isfile(filename)):
return (False, 'Iperf3 TCP: Log file not present')
if (os.path.getsize(filename)==0):
return (False, 'Iperf3 TCP: Log file is empty')
with open(filename) as file:
filename = json.load(file)
try:
sender_bitrate = round(filename['end']['streams'][0]['sender']['bits_per_second']/1000000,2)
receiver_bitrate = round(filename['end']['streams'][0]['receiver']['bits_per_second']/1000000,2)
except Exception as e:
return (False, 'Could not compute Iperf3 bitrate!')
snd_msg = f'Sender Bitrate : {sender_bitrate} Mbps'
rcv_msg = f'Receiver Bitrate : {receiver_bitrate} Mbps'
success = True
if (iperf_tcp_rate_target is not None):
if (int(receiver_bitrate) < int(iperf_tcp_rate_target)):
rcv_msg += f" (too low! < {iperf_tcp_rate_target} Mbps)"
success = False
else:
rcv_msg += f" (target : {iperf_tcp_rate_target} Mbps)"
return(success, f'{snd_msg}\n{rcv_msg}')
def Iperf_analyzeV3BIDIRJson(filename):
if (not os.path.isfile(filename)):
return (False, 'Iperf3 Bidir TCP: Log file not present')
if (os.path.getsize(filename)==0):
return (False, 'Iperf3 Bidir TCP: Log file is empty')
with open(filename) as file:
filename = json.load(file)
try:
sender_bitrate_ul = round(filename['end']['streams'][0]['sender']['bits_per_second']/1000000,2)
receiver_bitrate_ul = round(filename['end']['streams'][0]['receiver']['bits_per_second']/1000000,2)
sender_bitrate_dl = round(filename['end']['streams'][1]['sender']['bits_per_second']/1000000,2)
receiver_bitrate_dl = round(filename['end']['streams'][1]['receiver']['bits_per_second']/1000000,2)
except Exception as e:
return (False, 'Could not compute BIDIR bitrate!')
msg = f'Sender Bitrate DL : {sender_bitrate_dl} Mbps\n'
msg += f'Receiver Bitrate DL : {receiver_bitrate_dl} Mbps\n'
msg += f'Sender Bitrate UL : {sender_bitrate_ul} Mbps\n'
msg += f'Receiver Bitrate UL : {receiver_bitrate_ul} Mbps\n'
return (True, msg)
def Iperf_analyzeV3UDP(filename, iperf_bitrate_threshold, iperf_packetloss_threshold, target_bitrate):
if (not os.path.isfile(filename)):
return (False, 'Iperf3 UDP: Log file not present')
if (os.path.getsize(filename)==0):
return (False, 'Iperf3 UDP: Log file is empty')
sender_bitrate = None
receiver_bitrate = None
with open(filename, 'r') as server_file:
for line in server_file.readlines():
res_sender = re.search(r'(?P<bitrate>[0-9\.]+)\s+(?P<unit>[KMG]bits\/sec)\s+(?P<jitter>[0-9\.]+\s+ms)\s+(?P<lostPack>\d+)/(?P<sentPack>\d+) \((?P<lost>[0-9\.]+).*?\s+(sender)', line)
res_receiver = re.search(r'(?P<bitrate>[0-9\.]+)\s+(?P<unit>[KMG]bits\/sec)\s+(?P<jitter>[0-9\.]+\s+ms)\s+(?P<lostPack>\d+)/(?P<receivedPack>\d+) \((?P<lost>[0-9\.]+).*?\s+(receiver)', line)
if res_sender is not None:
sender_bitrate = res_sender.group('bitrate')
sender_unit = res_sender.group('unit')
sender_jitter = res_sender.group('jitter')
sender_lostPack = res_sender.group('lostPack')
sender_sentPack = res_sender.group('sentPack')
sender_packetloss = res_sender.group('lost')
if res_receiver is not None:
receiver_bitrate = res_receiver.group('bitrate')
receiver_unit = res_receiver.group('unit')
receiver_jitter = res_receiver.group('jitter')
receiver_lostPack = res_receiver.group('lostPack')
receiver_receivedPack = res_receiver.group('receivedPack')
receiver_packetloss = res_receiver.group('lost')
if receiver_bitrate is not None and sender_bitrate is not None:
if sender_unit == 'Kbits/sec':
sender_bitrate = float(sender_bitrate) / 1000
if receiver_unit == 'Kbits/sec':
receiver_bitrate = float(receiver_bitrate) / 1000
br_perf = 100 * float(receiver_bitrate) / float(target_bitrate)
br_perf = '%.2f ' % br_perf
sender_bitrate = '%.2f ' % float(sender_bitrate)
receiver_bitrate = '%.2f ' % float(receiver_bitrate)
req_msg = f'Sender Bitrate : {sender_bitrate} Mbps'
bir_msg = f'Receiver Bitrate: {receiver_bitrate} Mbps'
brl_msg = f'{br_perf}%'
jit_msg = f'Jitter : {receiver_jitter}'
pal_msg = f'Packet Loss : {receiver_packetloss} %'
if float(br_perf) < float(iperf_bitrate_threshold):
brl_msg = f'too low! < {iperf_bitrate_threshold}%'
if float(receiver_packetloss) > float(iperf_packetloss_threshold):
pal_msg += f' (too high! > {iperf_packetloss_threshold}%)'
result = float(br_perf) >= float(iperf_bitrate_threshold) and float(receiver_packetloss) <= float(iperf_packetloss_threshold)
return (result, f'{req_msg}\n{bir_msg} ({brl_msg})\n{jit_msg}\n{pal_msg}')
else:
return (False, 'Could not analyze iperf report')
def Iperf_analyzeV2UDP(server_filename, iperf_bitrate_threshold, iperf_packetloss_threshold, target_bitrate):
result = None
if (not os.path.isfile(server_filename)):
return (False, 'Iperf UDP: Server report not found!')
if (os.path.getsize(server_filename)==0):
return (False, 'Iperf UDP: Log file is empty')
# Computing the requested bandwidth in float
statusTemplate = r'(?:|\[ *\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\.]+)%\))'
with open(server_filename, 'r') as server_file:
for line in server_file.readlines():
result = re.search(statusTemplate, str(line))
if result is not None:
break
if result is None:
return (False, 'Could not parse server report!')
bitrate = float(result.group('bitrate'))
magn = result.group('magnitude')
if magn == "k" or magn == "K":
bitrate /= 1000
elif magn == "G": # we assume bitrate in Mbps, therefore it must be G now
bitrate *= 1000
jitter = float(result.group('jitter'))
packetloss = float(result.group('packetloss'))
br_perf = float(bitrate)/float(target_bitrate) * 100
br_perf = '%.2f ' % br_perf
result = float(br_perf) >= float(iperf_bitrate_threshold) and float(packetloss) <= float(iperf_packetloss_threshold)
req_msg = f'Req Bitrate : {target_bitrate}'
bir_msg = f'Bitrate : {bitrate}'
brl_msg = f'Bitrate Perf: {br_perf} %'
if float(br_perf) < float(iperf_bitrate_threshold):
brl_msg += f' (too low! <{iperf_bitrate_threshold}%)'
jit_msg = f'Jitter : {jitter}'
pal_msg = f'Packet Loss : {packetloss}'
if float(packetloss) > float(iperf_packetloss_threshold):
pal_msg += f' (too high! >{self.iperf_packetloss_threshold}%)'
return (result, f'{req_msg}\n{bir_msg}\n{brl_msg}\n{jit_msg}\n{pal_msg}')
#-----------------------------------------------------------
# OaiCiTest Class Definition
#-----------------------------------------------------------
@@ -86,7 +256,7 @@ class OaiCiTest():
self.iperf_bitrate_threshold = ''
self.iperf_profile = ''
self.iperf_options = ''
self.iperf_direction = ''
self.iperf_tcp_rate_target = ''
self.nbMaxUEtoAttach = -1
self.UEDevices = []
self.UEDevicesStatus = []
@@ -113,6 +283,7 @@ class OaiCiTest():
self.clean_repository = True
self.air_interface=''
self.ue_ids = []
self.svr_id = None
self.cmd_prefix = '' # prefix before {lte,nr}-uesoftmodem
@@ -222,7 +393,7 @@ class OaiCiTest():
def InitializeUE(self, HTML):
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
messages = []
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(ue.initialize) for ue in ues]
@@ -438,7 +609,7 @@ class OaiCiTest():
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
def AttachUE(self, HTML, RAN, EPC, CONTAINERS):
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(ue.attach) for ue in ues]
attached = [f.result() for f in futures]
@@ -453,7 +624,7 @@ class OaiCiTest():
self.AutoTerminateUEandeNB(HTML, RAN, EPC, CONTAINERS)
def DetachUE(self, HTML):
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(ue.detach) for ue in ues]
[f.result() for f in futures]
@@ -461,7 +632,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
def DataDisableUE(self, HTML):
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(ue.dataDisable) for ue in ues]
status = [f.result() for f in futures]
@@ -473,7 +644,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not disable UE data!"])
def DataEnableUE(self, HTML):
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
logging.debug(f'disabling data for UEs {ues}')
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(ue.dataEnable) for ue in ues]
@@ -486,7 +657,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not enable UE data!"])
def CheckStatusUE(self,HTML):
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
logging.debug(f'checking status of UEs {ues}')
messages = []
with concurrent.futures.ThreadPoolExecutor() as executor:
@@ -590,7 +761,7 @@ class OaiCiTest():
if self.ue_ids == []:
raise Exception("no module names in self.ue_ids provided")
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
logging.debug(ues)
pingLock = Lock()
with concurrent.futures.ThreadPoolExecutor() as executor:
@@ -604,372 +775,65 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue(self.ping_args, 'KO', messages)
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
def Iperf_ComputeTime(self):
result = re.search('-t (?P<iperf_time>\d+)', str(self.iperf_args))
if result is None:
logging.debug('\u001B[1;37;41m Iperf time Not Found! \u001B[0m')
sys.exit(1)
return result.group('iperf_time')
def Iperf_ComputeModifiedBW(self, idx, ue_num):
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(self.iperf_args))
if result is None:
logging.error('\u001B[1;37;41m Iperf bandwidth Not Found! \u001B[0m')
sys.exit(1)
iperf_bandwidth = result.group('iperf_bandwidth')
if self.iperf_profile == 'balanced':
iperf_bandwidth_new = float(iperf_bandwidth)/ue_num
if self.iperf_profile == 'single-ue':
iperf_bandwidth_new = float(iperf_bandwidth)
if self.iperf_profile == 'unbalanced':
# residual is 2% of max bw
residualBW = float(iperf_bandwidth) / 50
if idx == 0:
iperf_bandwidth_new = float(iperf_bandwidth) - ((ue_num - 1) * residualBW)
else:
iperf_bandwidth_new = residualBW
iperf_bandwidth_str = f'-b {iperf_bandwidth}'
iperf_bandwidth_str_new = f"-b {'%.2f' % iperf_bandwidth_new}"
result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args))
if result is None:
logging.error('\u001B[1;37;41m Calculate Iperf bandwidth Failed! \u001B[0m')
sys.exit(1)
return result
def Iperf_analyzeV2TCPOutput(self, SSH, filename):
SSH.command(f'awk -f /tmp/tcp_iperf_stats.awk {filename}', '\$', 5)
result = re.search('Avg Bitrate : (?P<average>[0-9\.]+ Mbits\/sec) Max Bitrate : (?P<maximum>[0-9\.]+ Mbits\/sec) Min Bitrate : (?P<minimum>[0-9\.]+ Mbits\/sec)', SSH.getBefore())
if result is not None:
avgbitrate = result.group('average')
maxbitrate = result.group('maximum')
minbitrate = result.group('minimum')
msg = 'TCP Stats :\n'
if avgbitrate is not None:
msg += f'Avg Bitrate : {avgbitrate} \n'
if maxbitrate is not None:
msg += f'Max Bitrate : {maxbitrate} \n'
if minbitrate is not None:
msg += f'Min Bitrate : {minbitrate} \n'
return (True, msg)
return (False, "could not analyze log file")
def Iperf_analyzeV2Output(self, iperf_real_options, EPC, SSH):
result = re.search('-u', str(iperf_real_options))
if result is None:
filename = f'{EPC.SourceCodePath}/scripts/iperf_{self.testCase_id}_{device_id}.log'
response = self.Iperf_analyzeV2TCPOutput(SSH, filename)
return response
result = re.search('Server Report:', SSH.getBefore())
if result is None:
result = re.search('read failed: Connection refused', SSH.getBefore())
if result is not None:
msg = 'Could not connect to iperf server!'
return (False, msg)
else:
msg = 'Server Report and Connection refused Not Found!'
return (False, msg)
# Computing the requested bandwidth in float
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
if result is not None:
req_bandwidth = result.group('iperf_bandwidth')
req_bw = float(req_bandwidth)
result = re.search('-b [0-9\.]+K', str(iperf_real_options))
if result is not None:
req_bandwidth = '%.1f Kbits/sec' % req_bw
req_bw = req_bw * 1000
result = re.search('-b [0-9\.]+M', str(iperf_real_options))
if result is not None:
req_bandwidth = '%.1f Mbits/sec' % req_bw
req_bw = req_bw * 1000000
result = re.search('-b [0-9\.]+G', str(iperf_real_options))
if result is not None:
req_bandwidth = '%.1f Gbits/sec' % req_bw
req_bw = req_bw * 1000000000
result = re.search('Server Report:\r\n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/..\d+) +(\((?P<packetloss>[0-9\.]+)%\))', SSH.getBefore())
if result is not None:
bitrate = result.group('bitrate')
packetloss = result.group('packetloss')
jitter = result.group('jitter')
iperfStatus = True
msg = f'Req Bitrate : {req_bandwidth} \n'
if bitrate is not None:
msg += f'Bitrate : {bitrate} \n'
result = re.search('(?P<real_bw>[0-9\.]+) [KMG]bits/sec', str(bitrate))
if result is not None:
actual_bw = float(str(result.group('real_bw')))
result = re.search('[0-9\.]+ K', bitrate)
if result is not None:
actual_bw = actual_bw * 1000
result = re.search('[0-9\.]+ M', bitrate)
if result is not None:
actual_bw = actual_bw * 1000000
result = re.search('[0-9\.]+ G', bitrate)
if result is not None:
actual_bw = actual_bw * 1000000000
br_loss = 100 * actual_bw / req_bw
bitperf = '%.2f ' % br_loss
msg += f'Bitrate Perf: {bitperf} %\n'
if packetloss is not None:
msg += f'Packet Loss : {packetloss} %\n'
if float(packetloss) > float(self.iperf_packetloss_threshold):
msg += 'Packet Loss too high!\n'
iperfStatus = False
if jitter is not None:
msg += f'Jitter : {jitter} \n'
return (iperfStatus, msg)
else:
return (False, "could not analyze server log")
def Iperf_analyzeV2BIDIR(self, server_filename, client_filename):
#check the 2 files are here
if (not os.path.isfile(client_filename)) or (not os.path.isfile(server_filename)):
return (False, 'Bidir TCP: Client or Server Log File not present')
#check the 2 files size
if (os.path.getsize(client_filename)==0) and (os.path.getsize(server_filename)==0):
return (False, 'Bidir TCP: Client and Server Log File are empty')
report_msg = ''
#if client is not empty, all the info is in, otherwise we ll use the server file to get some partial info
client_filesize = os.path.getsize(client_filename)
if client_filesize == 0:
report_msg+="Client file (UE) present but !!! EMPTY !!!\n"
report_msg+="Partial report from server file"
filename = server_filename
else :
report_msg+="Report from client file (UE)"
filename = client_filename
report=[] #used to check if relevant lines were found
with open(filename, 'r') as f_client:
for line in f_client.readlines():
result = re.search(rf'^\[\s+\d+\](?P<direction>\[.+\]).*\s+(?P<bitrate>[0-9\.]+ [KMG]bits\/sec).*\s+(?P<role>\bsender|receiver\b)', str(line))
if result is not None:
report.append(str(line))
report_msg += f"\n{result.group('role')} {result.group('direction')}\t: {result.group('bitrate')}"
if len(report) == 0:
return (False, 'Bidir TCP: Could not analyze from Log file')
return (True, report_msg)
def Iperf_analyzeV2Server(self, iperf_real_options, filename, type):
if (not os.path.isfile(filename)):
return (False, 'Could not analyze from server log')
# Computing the requested bandwidth in float
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
if result is None:
return (False, 'Could not compute Iperf bandwidth!')
else:
req_bandwidth = result.group('iperf_bandwidth')
req_bw = float(req_bandwidth)
result = re.search('-b [0-9\.]+K', str(iperf_real_options))
if result is not None:
req_bandwidth = '%.1f Kbits/sec' % req_bw
req_bw = req_bw * 1000
result = re.search('-b [0-9\.]+M', str(iperf_real_options))
if result is not None:
req_bandwidth = '%.1f Mbits/sec' % req_bw
req_bw = req_bw * 1000000
result = re.search('-b [0-9\.]+G', str(iperf_real_options))
if result is not None:
req_bandwidth = '%.1f Gbits/sec' % req_bw
req_bw = req_bw * 1000000000
server_file = open(filename, 'r')
br_sum = 0.0
ji_sum = 0.0
pl_sum = 0
ps_sum = 0
row_idx = 0
for line in server_file.readlines():
if type==0:
result = re.search('(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(?P<lostPack>[0-9]+)/ +(?P<sentPack>[0-9]+)', str(line))
else:
result = re.search('^\[\s+\d\].+ (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(?P<lostPack>[0-9]+)\/\s*(?P<sentPack>[0-9]+)', str(line))
if result is not None:
bitrate = result.group('bitrate')
jitter = result.group('jitter')
packetlost = result.group('lostPack')
packetsent = result.group('sentPack')
br = bitrate.split(' ')
ji = jitter.split(' ')
row_idx = row_idx + 1
curr_br = float(br[0])
pl_sum = pl_sum + int(packetlost)
ps_sum = ps_sum + int(packetsent)
if (br[1] == 'Kbits/sec'):
curr_br = curr_br * 1000
if (br[1] == 'Mbits/sec'):
curr_br = curr_br * 1000 * 1000
br_sum = curr_br + br_sum
ji_sum = float(ji[0]) + ji_sum
server_file.close()
if (row_idx > 0):
br_sum = br_sum / row_idx
ji_sum = ji_sum / row_idx
br_loss = 100 * br_sum / req_bw
if (br_sum > 1000):
br_sum = br_sum / 1000
if (br_sum > 1000):
br_sum = br_sum / 1000
bitrate = '%.2f Mbits/sec' % br_sum
else:
bitrate = '%.2f Kbits/sec' % br_sum
else:
bitrate = '%.2f bits/sec' % br_sum
bitperf = '%.2f ' % br_loss
bitperf += '%'
jitter = '%.2f ms' % (ji_sum)
if (ps_sum > 0):
pl = float(100 * pl_sum / ps_sum)
packetloss = '%2.1f ' % (pl)
packetloss += '%'
result = float(br_loss) >= float(self.iperf_bitrate_threshold) and float(pl) <= float(self.iperf_packetloss_threshold)
req_msg = f'Req Bitrate : {req_bandwidth}'
bir_msg = f'Bitrate : {bitrate}'
brl_msg = f'Bitrate Perf: {bitperf}'
if float(br_loss) < float(self.iperf_bitrate_threshold):
brl_msg += f' (too low! <{self.iperf_bitrate_threshold}%)'
jit_msg = f'Jitter : {jitter}'
pal_msg = f'Packet Loss : {packetloss}'
if float(pl) > float(self.iperf_packetloss_threshold):
pal_msg += f' (too high! >{self.iperf_packetloss_threshold}%)'
return (result, f'{req_msg}\n{bir_msg}\n{brl_msg}\n{jit_msg}\n{pal_msg}')
else:
return (False, 'Could not analyze from server log')
def Iperf_Module(self, EPC, ue, RAN, idx, ue_num):
def Iperf_Module(self, EPC, ue, svr, RAN, idx, ue_num, CONTAINERS):
ueIP = ue.getIP()
if not ueIP:
return (False, f"UE {ue.getName()} has no IP address")
SSH = sshconnection.SSHConnection()
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
client_filename = f'iperf_client_{self.testCase_id}_{ue.getName()}.log'
if (re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE)) or (re.match('OAICN5G', EPC.Type, re.IGNORECASE)):
#retrieve trf-gen container IP address
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
SSH.command('docker inspect --format="TRF_IP_ADDR = {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" prod-trf-gen', '\$', 5)
result = re.search('TRF_IP_ADDR = (?P<trf_ip_addr>[0-9\.]+)', SSH.getBefore())
if result is None:
raise Exception("could not corver prod-trf-gen IP address")
cn_target_ip = result.group('trf_ip_addr')
SSH.close()
cn_iperf_prefix = "docker exec prod-trf-gen" # -w /iperf-2.0.13 necessary?
elif (re.match('OC-OAI-CN5G', EPC.Type, re.IGNORECASE)):
cn_target_ip = "172.21.6.102"
else: # lteboix, sabox
cn_target_ip = "192.172.0.1"
cn_iperf_prefix = ""
svrIP = svr.getIP()
if not svrIP:
return (False, f"Iperf server {ue.getName()} has no IP address")
runIperf3Server = svr.getRunIperf3Server()
iperf_opt = self.iperf_args
jsonReport = "--json"
serverReport = ""
udpIperf = re.search('-u', iperf_opt) is not None
udpSwitch = '-u' if udpIperf else ''
if udpIperf:
iperf_opt = self.Iperf_ComputeModifiedBW(idx, ue_num)
logging.info(f'iperf options modified from "{self.iperf_args}" to "{iperf_opt}" for {ue.getName()}')
iperf_time = int(self.Iperf_ComputeTime())
port = f'-p {5001+idx}'
# hack: the ADB UEs don't have iperf in $PATH, so we need to hardcode for the moment
iperf_ue = '/data/local/tmp/iperf' if re.search('adb', ue.getName()) else 'iperf'
bidirIperf = re.search('--bidir', iperf_opt) is not None
client_filename = f'iperf_client_{self.testCase_id}_{ue.getName()}.log'
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
ymlPath = CONTAINERS.yamlPath[0].split('/')
logPath = f'../cmake_targets/log/{ymlPath[1]}'
if udpIperf:
target_bitrate, iperf_opt = Iperf_ComputeModifiedBW(idx, ue_num, self.iperf_profile, self.iperf_args)
# note: for UDP testing we don't want to use json report - reports 0 Mbps received bitrate
jsonReport = ""
# note: enable server report collection on the UE side, no need to store and collect server report separately on the server side
serverReport = "--get-server-output"
logging.info(f'iperf options modified from "{self.iperf_args}" to "{iperf_opt}" for {ue.getName()}')
iperf_time = Iperf_ComputeTime(self.iperf_args)
# hack: the ADB UEs don't have iperf in $PATH, so we need to hardcode for the moment
iperf_ue = '/data/local/tmp/iperf3' if re.search('adb', ue.getName()) else 'iperf3'
ue_header = f'UE {ue.getName()} ({ueIP})'
if self.iperf_direction == "DL":
logging.debug("Iperf in DL requested")
cmd = cls_cmd.getConnection(ue.getHost())
cmd.run(f'rm {server_filename}')
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -s -B {ueIP} {udpSwitch} -i 1 -t {iperf_time * 1.5} {port} &> /tmp/{server_filename} &')
cmd.close()
cmd = cls_cmd.getConnection(EPC.IPAddress)
cmd.run(f'rm {EPC.SourceCodePath}/{client_filename}')
cmd.run(f'{cn_iperf_prefix} iperf -c {ueIP} {iperf_opt} {port} &> {EPC.SourceCodePath}/{client_filename}', timeout=iperf_time * 1.5)
cmd.copyin(f'{EPC.SourceCodePath}/{client_filename}', client_filename)
cmd.close()
cmd = cls_cmd.getConnection(ue.getHost())
cmd.copyin(f'/tmp/{server_filename}', server_filename)
cmd.close()
if svr.getName() == "rfsim4g_enb_fembms":
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(EPC.IPAddress) as cmd_svr:
port = 5002 + idx
cmd_ue.run(f'{ue.getCmdPrefix()} iperf -B {ueIP} -s -u -i1 >> {server_filename} &', timeout=iperf_time*1.5)
cmd_svr.run(f'{svr.getCmdPrefix()} iperf -c {ueIP} -B {svrIP} {iperf_opt} -i1 2>&1 | tee {client_filename}', timeout=iperf_time*1.5)
cmd_ue.run(f'cp {client_filename} {logPath}/{client_filename}')
cmd_ue.run(f'cp {server_filename} {logPath}/{server_filename}')
status, msg = Iperf_analyzeV2UDP(server_filename, self.iperf_bitrate_threshold, self.iperf_packetloss_threshold, target_bitrate)
else:
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(EPC.IPAddress) as cmd_svr:
port = 5002 + idx
# note: some core setups start an iperf3 server automatically, indicated in ci_infra by runIperf3Server: False`
if runIperf3Server:
cmd_svr.run(f'{svr.getCmdPrefix()} nohup iperf3 -s -B {svrIP} -p {port} -1 {jsonReport} &', timeout=iperf_time*1.5)
cmd_ue.run(f'rm /tmp/{client_filename}', reportNonZero=False)
cmd_ue.run(f'{ue.getCmdPrefix()} {iperf_ue} -B {ueIP} -c {svrIP} -p {port} {iperf_opt} {jsonReport} {serverReport} -O 5 >> /tmp/{client_filename}', timeout=iperf_time*1.5)
if svr.getHost() == 'localhost':
cmd_ue.run(f'mkdir -p {logPath}')
cmd_ue.run(f'cp /tmp/{client_filename} {logPath}/{client_filename}')
cmd_ue.run(f'cp /tmp/{client_filename} {client_filename}')
else:
cmd_ue.copyin(f'/tmp/{client_filename}', client_filename)
if udpIperf:
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
status, msg = Iperf_analyzeV3UDP(client_filename, self.iperf_bitrate_threshold, self.iperf_packetloss_threshold, target_bitrate)
elif bidirIperf:
status, msg = Iperf_analyzeV3BIDIRJson(client_filename)
else:
cmd = cls_cmd.getConnection(EPC.IPAddress)
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f"{EPC.SourceCodePath}/{client_filename}")
cmd.close()
elif self.iperf_direction == "UL":
logging.debug("Iperf in UL requested")
cmd = cls_cmd.getConnection(EPC.IPAddress)
cmd.run(f'rm {EPC.SourceCodePath}/{server_filename}')
cmd.run(f'{cn_iperf_prefix} iperf -s {udpSwitch} -t {iperf_time * 1.5} {port} &> {EPC.SourceCodePath}/{server_filename} &')
cmd.close()
cmd = cls_cmd.getConnection(ue.getHost())
cmd.run(f'rm /tmp/{client_filename}')
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -B {ueIP} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
cmd.copyin(f'/tmp/{client_filename}', client_filename)
cmd.close()
cmd = cls_cmd.getConnection(EPC.IPAddress)
cmd.copyin(f'{EPC.SourceCodePath}/{server_filename}', server_filename)
cmd.close()
if udpIperf:
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
else:
cmd = cls_cmd.getConnection(ue.getHost())
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f"/tmp/{client_filename}")
cmd.close()
elif self.iperf_direction=="BIDIR":
logging.debug("Bi-directional iperf requested")
cmd = cls_cmd.getConnection(EPC.IPAddress)
cmd.run(f'rm {EPC.SourceCodePath}/{server_filename}')
cmd.run(f'{cn_iperf_prefix} iperf3 -s -i 1 -1 {port} &> {EPC.SourceCodePath}/{server_filename} &')
cmd.close()
cmd = cls_cmd.getConnection(ue.getHost())
cmd.run(f'rm /tmp/{client_filename}')
cmd.run(f'iperf3 -B {ueIP} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
cmd.copyin(f'/tmp/{client_filename}', client_filename)
cmd.close()
cmd = cls_cmd.getConnection(EPC.IPAddress)
cmd.copyin(f'{EPC.SourceCodePath}/{server_filename}', server_filename)
cmd.close()
status, msg = self.Iperf_analyzeV2BIDIR(server_filename, client_filename)
elif self.iperf_direction == "IPERF3":
cmd = cls_cmd.getConnection(ue.getHost())
cmd.run(f'rm /tmp/{server_filename}', reportNonZero=False)
port = f'{5002+idx}'
cmd.run(f'{ue.getCmdPrefix()} iperf3 -B {ueIP} -c {cn_target_ip} -p {port} {iperf_opt} --get-server-output &> /tmp/{server_filename}', timeout=iperf_time*1.5)
cmd.copyin(f'/tmp/{server_filename}', server_filename)
cmd.close()
if udpIperf:
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
else:
cmd = cls_cmd.getConnection(EPC.IPAddress)
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f'/tmp/{server_filename}')
cmd.close()
else :
raise Exception("Incorrect or missing IPERF direction in XML")
status, msg = Iperf_analyzeV3TCPJson(client_filename, self.iperf_tcp_rate_target)
logging.info(f'\u001B[1;37;45m iperf result for {ue_header}\u001B[0m')
for l in msg.split('\n'):
@@ -988,12 +852,16 @@ class OaiCiTest():
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_direction "{self.iperf_direction}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
if self.ue_ids == [] or self.svr_id == None:
raise Exception("no module names in self.ue_ids or/and self.svr_id provided")
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
svr = cls_module.Module_UE(self.svr_id)
logging.debug(ues)
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(self.Iperf_Module, EPC, ue, RAN, i, len(ues)) for i, ue in enumerate(ues)]
futures = [executor.submit(self.Iperf_Module, EPC, ue, svr, RAN, i, len(ues), CONTAINERS) for i, ue in enumerate(ues)]
results = [f.result() for f in futures]
# each result in results is a tuple, first member goes to successes, second to messages
successes, messages = map(list, zip(*results))
@@ -1127,15 +995,15 @@ class OaiCiTest():
mib_found = True
except Exception as e:
logging.error(f'\033[91m MIB marker was not found \033[0m')
result = re.search("Measured Carrier Frequency (?P<measured_carrier_frequency>\d{1,15}) Hz", str(line))
result = re.search("Initial sync: pbch decoded sucessfully", str(line))
if result is not None and (not frequency_found):
try:
mibMsg = f"Measured Carrier Frequency = {result.group('measured_carrier_frequency')} Hz"
mibMsg = f"UE decoded PBCH successfully"
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + mibMsg + '\n'
logging.debug(f'\033[94m{mibMsg}\033[0m')
frequency_found = True
except Exception as e:
logging.error(f'\033[91m Measured Carrier Frequency not found \033[0m')
logging.error(f'\033[91m UE did not find PBCH\033[0m')
result = re.search("PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC", str(line))
if result is not None and (not plmn_found):
try:
@@ -1272,7 +1140,7 @@ class OaiCiTest():
return global_status
def TerminateUE(self, HTML):
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(ue.terminate) for ue in ues]
archives = [f.result() for f in futures]
@@ -1404,7 +1272,7 @@ class OaiCiTest():
time.sleep(self.idle_sleep_time)
HTML.CreateHtmlTestRow(str(self.idle_sleep_time) + ' sec', 'OK', CONST.ALL_PROCESSES_OK)
def X2_Status(self, idx, fileName):
def X2_Status(self, idx, fileName, EPC):
cmd = "curl --silent http://" + EPC.IPAddress + ":9999/stats | jq '.' > " + fileName
message = cmd + '\n'
logging.debug(cmd)

View File

@@ -33,9 +33,11 @@ import logging
import sshconnection
#to update the HTML object
import cls_oai_html
import cls_cmd
from multiprocessing import SimpleQueue
#for log folder maintenance
import os
import re
class PhySim:
def __init__(self):
@@ -63,7 +65,7 @@ class PhySim:
#PRIVATE Methods
#-----------------
def __CheckResults_LDPCTest(self,HTML,CONST,testcase_id):
def __CheckResults_LDPCcudaTest(self,HTML,CONST,testcase_id):
mySSH = sshconnection.SSHConnection()
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
#retrieve run log file and store it locally$
@@ -84,42 +86,44 @@ class PhySim:
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)
def __CheckResults_LDPCt2Test(self,HTML,CONST,testcase_id):
thrs_KO = int(self.timethrs)
mySSH = cls_cmd.getConnection(self.eNBIpAddr)
#retrieve run log file and store it locally$
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__runLogFile, '.')
mySSH.copyin(f'{self.__workSpacePath}{self.__runLogFile}', f'{self.__runLogFile}')
mySSH.close()
#parse results looking for Decoding values
runResultsT1=[]
#parse results looking for encoder/decoder processing time values
with open(self.__runLogFile) as g:
for line in g:
if 'decoding time' in line:
runResultsT1.append(line)
res_enc = re.search(r"DLSCH encoding time\s+(\d+\.\d+)\s+us",line)
res_dec = re.search(r'ULSCH total decoding time\s+(\d+\.\d+)\s+us',line)
if res_dec is not None:
time = res_dec.group(1)
info = res_dec.group(0)
break
if res_enc is not None:
time = res_enc.group(1)
info = res_enc.group(0)
break
# In case the T1 board does work properly, there is no statistics
if len(runResultsT1) == 0:
logging.error('no statistics')
# In case the T2 board does work properly, there is no statistics
if res_enc is None and res_dec is None:
logging.error(f'no statistics: res_enc {res_enc} res_dec {res_dec}')
HTML.CreateHtmlTestRowQueue(self.runargs, 'KO', ['no statistics'])
self.exitStatus = 1
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
os.system(f'mv {self.__runLogFile} {self.__runLogPath}/.')
return HTML
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:
#once parsed move the local logfile to its folder
os.system(f'mv {self.__runLogFile} {self.__runLogPath}/.')
if float(time) < thrs_KO:
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', [info])
elif result > thrs_KO:
error_msg = f'Decoding time exceeds a limit of {thrs_KO} us'
else:
error_msg = f'Processing 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):
@@ -228,7 +232,7 @@ class PhySim:
return lHTML
def Run_LDPCTest(self,htmlObj,constObj,testcase_id):
def Run_CUDATest(self,htmlObj,constObj,testcase_id):
self.__workSpacePath = self.eNBSourceCodePath+'/cmake_targets/'
#create run logs folder locally
os.system('mkdir -p ./'+self.__runLogPath)
@@ -243,25 +247,24 @@ class PhySim:
mySSH.close()
#return updated HTML to main
lHTML = cls_oai_html.HTMLManagement()
lHTML=self.__CheckResults_LDPCTest(htmlObj,constObj,testcase_id)
lHTML=self.__CheckResults_LDPCcudaTest(htmlObj,constObj,testcase_id)
return lHTML
def Run_LDPCt1Test(self,htmlObj,constObj,testcase_id):
self.__workSpacePath = self.eNBSourceCodePath+'/cmake_targets/'
def Run_T2Test(self,htmlObj,constObj,testcase_id):
self.__workSpacePath = f'{self.eNBSourceCodePath}/cmake_targets/'
#create run logs folder locally
os.system('mkdir -p ./'+self.__runLogPath)
os.system(f'mkdir -p ./{self.__runLogPath}')
#log file is tc_<testcase_id>.log remotely
self.__runLogFile='physim_'+str(testcase_id)+'.log'
self.__runLogFile=f'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)
mySSH = cls_cmd.getConnection(self.eNBIpAddr)
mySSH.run(f'cd {self.__workSpacePath}')
#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.run(f'sudo {self.__workSpacePath}ran_build/build/{self.runsim} {self.runargs} > {self.__workSpacePath}{self.__runLogFile} 2>&1')
mySSH.close()
#return updated HTML to main
lHTML = cls_oai_html.HTMLManagement()
lHTML=self.__CheckResults_LDPCt1Test(htmlObj,constObj,testcase_id)
lHTML=self.__CheckResults_LDPCt2Test(htmlObj,constObj,testcase_id)
return lHTML
def Run_NRulsimTest(self, htmlObj, constObj, testcase_id):

View File

@@ -166,7 +166,7 @@ class PhySim:
mySSH.command('oc get pods -o wide -l app=physim | tee -a cmake_targets/log/physim_pods_summary.txt', '\$', 30, resync=True)
running_count = mySSH.getBefore().count('Running')
completed_count = mySSH.getBefore().count('Completed')
if (running_count + completed_count) == 21:
if (running_count + completed_count) == 22:
logging.debug('\u001B[1m Running the physim test Scenarios\u001B[0m')
isRunning = True
podNames = re.findall('oai-[\S\d\w]+', mySSH.getBefore())

View File

@@ -137,13 +137,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
enable_measurement_reports = "no";
@@ -156,9 +150,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.45";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.45";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.45";

View File

@@ -174,13 +174,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
enable_measurement_reports = "no";
@@ -193,9 +187,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.46";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.46";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.46";

View File

@@ -134,13 +134,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.3"; port = 36412; });
enable_measurement_reports = "no";
@@ -153,9 +147,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.20";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.61.20";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.61.20";

View File

@@ -172,12 +172,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.195";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.195"; });
enable_measurement_reports = "no";
@@ -190,9 +185,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eno1";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.16.128";
ENB_INTERFACE_NAME_FOR_S1U = "eno1";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.16.128";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.16.128";
@@ -211,8 +204,8 @@ MACRLCs = (
bler_target_upper = 20.0;
bler_target_lower = 10.0;
max_ul_rb_index = 27;
puSch10xSnr = 190;
puCch10xSnr = 160;
puSch10xSnr = 250;
puCch10xSnr = 230;
}
);
@@ -231,8 +224,8 @@ RUs = (
local_rf = "yes"
nb_tx = 2
nb_rx = 2
att_tx = 10
att_rx = 5;
att_tx = 12
att_rx = 0;
bands = [38];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;

View File

@@ -172,12 +172,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.195";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.195"; });
enable_measurement_reports = "no";
@@ -190,9 +185,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eno1";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.16.128";
ENB_INTERFACE_NAME_FOR_S1U = "eno1";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.16.128";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.16.128";
@@ -211,8 +204,8 @@ MACRLCs = (
bler_target_upper = 20.0;
bler_target_lower = 10.0;
max_ul_rb_index = 27;
puSch10xSnr = 190;
puCch10xSnr = 160;
puSch10xSnr = 280;
puCch10xSnr = 250;
}
);
@@ -231,8 +224,8 @@ RUs = (
local_rf = "yes"
nb_tx = 2
nb_rx = 2
att_tx = 10
att_rx = 5;
att_tx = 18
att_rx = 0;
bands = [38];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;

View File

@@ -172,12 +172,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; });
enable_measurement_reports = "no";
@@ -190,9 +185,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eno1";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eno1";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -134,13 +134,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
enable_measurement_reports = "no";
@@ -153,9 +147,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.45";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.45";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.45";

View File

@@ -134,13 +134,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
enable_measurement_reports = "no";
@@ -153,9 +147,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.45";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.45";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.45";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.3"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.20";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.61.20";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.61.20";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.46";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.46";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.46";

View File

@@ -172,13 +172,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.3"; port = 36412; });
enable_measurement_reports = "no";
@@ -191,9 +185,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.1";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.61.1";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.61.1";
@@ -206,7 +198,6 @@ eNBs =
MACRLCs = (
{
num_cc = 1;
local_s_if_name = "lo";
remote_s_address = "127.0.0.1";
local_s_address = "127.0.0.1";
local_s_portc = 50001;

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.3"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.20";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.61.20";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.61.20";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.3"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.20";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.61.20";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.61.20";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.30";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.61.30";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.61.30";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.46";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.46";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.46";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.46";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.46";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.46";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.3"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.20";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.61.20";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.61.20";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.18.48";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.18.48"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.21.18.46";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.21.18.46";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.21.18.46";

View File

@@ -180,12 +180,7 @@ eNBs =
t_dc_overall = 2000; /* unit: millisecond */
////////// MCE parameters:
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
target_mce_m2_ip_address = ({ ipv4 = "127.0.0.7"; });
///M2
enable_enb_m2 = "yes";
@@ -208,9 +203,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
@@ -252,12 +245,7 @@ MCEs = (
//M3
enable_mce_m3 = "yes";
target_mme_m3_ip_address = ( { ipv4 = "127.0.0.18";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
target_mme_m3_ip_address = ({ ipv4 = "127.0.0.18"; });

View File

@@ -179,13 +179,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -198,9 +192,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "yes";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "172.21.16.137";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "172.21.16.137"; port = 36412; });
///X2
enable_x2 = "yes";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.68.130";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.68.130";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.68.130";

View File

@@ -22,7 +22,6 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "eth0";
local_s_address = "192.168.71.150";
remote_s_address = "192.168.71.171";
local_s_portc = 501;
@@ -40,19 +39,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.150";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.150";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -22,7 +22,6 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "eth0";
local_s_address = "192.168.68.194";
remote_s_address = "192.168.68.195";
local_s_portc = 501;
@@ -40,19 +39,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.21.16.137";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "172.21.16.137"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.68.194";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.68.194";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -23,7 +23,6 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "lo";
local_s_address = "192.168.71.150";
remote_s_address = "0.0.0.0"; # multiple DUs
local_s_portc = 501;
@@ -41,12 +40,7 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "oai-amf"; });
E1_INTERFACE =
(
@@ -61,8 +55,7 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.150/24";
};
}
);
@@ -94,5 +87,6 @@ security = {
rrc_log_level ="info";
f1ap_log_level ="info";
ngap_log_level ="debug";
sctp_log_level ="info";
};

View File

@@ -23,7 +23,6 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "eth0";
local_s_address = "192.168.68.194";
remote_s_address = "192.168.68.195";
local_s_portc = 501;
@@ -41,12 +40,7 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.21.16.137";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "172.21.16.137"; });
E1_INTERFACE =
(
@@ -61,7 +55,6 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.68.194";
};
}

View File

@@ -21,7 +21,6 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "lo";
local_s_address = "192.168.72.161";
remote_s_address = "192.168.72.171";
local_s_portc = 501;
@@ -48,9 +47,7 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.161/24";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.161/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -21,7 +21,6 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "lo";
local_s_address = "192.168.68.196";
remote_s_address = "192.168.68.195";
local_s_portc = 501;
@@ -48,9 +47,7 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.68.196";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.68.196";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -168,7 +168,6 @@ 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;

View File

@@ -162,7 +162,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_if_name = "eth0";
local_n_address = "192.168.68.195";
remote_n_address = "192.168.68.194";
local_n_portc = 500;
@@ -171,7 +170,6 @@ MACRLCs = (
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);

View File

@@ -168,7 +168,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_if_name = "eth0";
local_n_address = "192.168.71.171";
remote_n_address = "192.168.71.150";
local_n_portc = 500;
@@ -231,3 +230,31 @@ log_config: {
rlc_log_level = "info";
f1ap_log_level = "info";
};
#/* configuration for channel modelisation */
#/* To be included in main config file when */
#/* channel modelisation is used (rfsimulator with chanmod options enabled) */
channelmod = {
max_chan = 10;
modellist = "modellist_rfsimu_1";
modellist_rfsimu_1 = (
{ # DL, modify on UE side
model_name = "rfsimu_channel_enB0"
type = "AWGN";
ploss_dB = 20;
noise_power_dB = -4;
forgetfact = 0;
offset = 0;
ds_tdl = 0;
},
{ # UL, modify on gNB side
model_name = "rfsimu_channel_ue0"
type = "AWGN";
ploss_dB = 20;
noise_power_dB = -2;
forgetfact = 0;
offset = 0;
ds_tdl = 0;
}
);
};

View File

@@ -169,7 +169,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_if_name = "eth0";
local_n_address = "192.168.68.195";
remote_n_address = "192.168.68.194";
local_n_portc = 500;
@@ -178,7 +177,6 @@ MACRLCs = (
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);
@@ -187,7 +185,7 @@ L1s = (
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 150;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);

View File

@@ -0,0 +1,254 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
sa = 1;
nfapi = "AERIAL";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 208;
mnc = 97;
mnc_length = 2;
snssaiList = (
{
sst = 1;
}
);
});
nr_cellid = 12345678L;
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 0;
min_rxtxtime = 2;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
absoluteFrequencySSB = 649920;
#652860; #should be 649920
#647520;
#647540;
#649920;
#650208;
#647540;
dl_frequencyBand = 78;
# this is 3300.24 MHz
dl_absoluteFrequencyPointA = 646724;
#649104;
#646724;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
initialDLBWPlocationAndBandwidth = 1099;
#
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 1099;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 159;# testMAC 158; OAI gNB 98
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 12;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 5;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 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 = -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 = 5; #6;
nrofDownlinkSlots = 3; #7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 1; #2;
nrofUplinkSymbols = 0;
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"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.131";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.131";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
remote_s_address = "127.0.0.1"; // pnf addr [!]
local_s_address = "127.0.0.2"; // vnf addr
local_s_portc = 50001; // vnf p5 port
remote_s_portc = 50000; // pnf p5 port [!]
local_s_portd = 50011; // vnf p7 port [!]
remote_s_portd = 50010; // pnf p7 port [!]
tr_s_preference = "aerial";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200; # 150;
pucch_TargetSNRx10 = 200; #200;
ulsch_max_frame_inactivity = 10;
dl_max_mcs = 28;
ul_max_mcs = 28;
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

View File

@@ -150,19 +150,12 @@ gNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.12.26";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.12.26"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -162,20 +162,12 @@ gNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.12.26";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.12.26"; port = 36412; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -162,20 +162,12 @@ gNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.12.26";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.12.26"; port = 36412; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -162,18 +162,10 @@ gNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.12.26";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.12.26"; port = 36412; });
NETWORK_INTERFACES : {
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -0,0 +1,234 @@
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
cell_type = "CELL_MACRO_GNB";
gNB_name = "gNB-Eurecom-5GNRBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
tr_s_preference = "local_mac"
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
min_rxtxtime = 6;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 621312;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 620040;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
#initialDownlinkBWP
#genericParameters
# this is RBstart=41,L=24 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 31624;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 31624;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -118;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#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 = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_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;
};
////////// MME parameters:
mme_ip_address = ({ ipv4 = "192.168.12.26"; port = 36412; });
NETWORK_INTERFACES : {
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = ({
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
});
L1s = ({
num_cc = 1;
tr_n_preference = "local_mac";
});
RUs = ({
local_rf = "yes"
nb_tx = 2
nb_rx = 2
att_tx = 0
att_rx = 0;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 50;
eNB_instances = [0];
bf_weights = [0x00007fff, 0x0000];
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
});
THREAD_STRUCT = ({
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
});
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config : {
global_log_level = "info";
hw_log_level = "info";
phy_log_level = "info";
mac_log_level = "info";
rlc_log_level = "info";
pdcp_log_level = "info";
rrc_log_level = "info";
};

View File

@@ -158,13 +158,7 @@ gNBs =
////////// MME parameters:
# mme_ip_address = ( { ipv4 = "192.168.68.130";
# ipv6 = "192:168:30::17";
# port = 36412 ;
# active = "yes";
# preference = "ipv4";
# }
# );
# mme_ip_address = ({ ipv4 = "192.168.68.130"; port = 36412; });
///X2
enable_x2 = "yes";
@@ -173,17 +167,11 @@ gNBs =
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
target_enb_x2_ip_address = ( { ipv4 = "192.168.68.130";
ipv6 = "192:168:30::17";
preference = "ipv4";
}
);
target_enb_x2_ip_address = ({ ipv4 = "192.168.68.130"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.68.194";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.68.194";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C = "192.168.68.194";
@@ -200,7 +188,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -163,12 +163,7 @@ gNBs =
////////// MME parameters:
amf_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; });
///X2
enable_x2 = "yes";
@@ -176,19 +171,12 @@ gNBs =
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
target_enb_x2_ip_address = (
{ ipv4 = "CI_FR1_CTL_ENB_IP_ADDR";
ipv6 = "192:168:30::17";
preference = "ipv4";
}
);
target_enb_x2_ip_address = ({ ipv4 = "CI_FR1_CTL_ENB_IP_ADDR"; });
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_PORT_FOR_S1U = 2152; # Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C = "CI_GNB_IP_ADDR";
@@ -202,7 +190,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -1,41 +1,42 @@
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
sa = 1;
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
cell_type = "CELL_MACRO_GNB";
gNB_name = "gNB-Eurecom-5GNRBox";
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;});
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
tr_s_preference = "local_mac"
////////// Physical parameters:
sib1_tda = 15;
min_rxtxtime = 6;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
physCellId = 10;
# downlinkConfigCommon
#frequencyInfoDL
# this is pointA + 23 PRBs@120kHz SCS (same as initial BWP)
absoluteFrequencySSB = 2071241;
# this is pointA + 16 PRBs@120kHz SCS (same as initial BWP)
absoluteFrequencySSB = 2071387;
dl_frequencyBand = 261;
# this is 27.900 GHz
dl_absoluteFrequencyPointA = 2070833;
dl_absoluteFrequencyPointA = 2071001;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
@@ -50,7 +51,7 @@ gNBs =
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 3;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPcontrolResourceSetZero = 1;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
@@ -85,12 +86,12 @@ gNBs =
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 7;
ra_ResponseWindow = 5;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#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 = 7;
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
@@ -101,8 +102,7 @@ gNBs =
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 = 3,
msg1_SubcarrierSpacing = 3;
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
@@ -119,7 +119,7 @@ gNBs =
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 3;
ssb_PositionsInBurst_Bitmap = 0x0001000100010001L;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
@@ -152,7 +152,6 @@ gNBs =
);
# ------- SCTP definitions
SCTP :
{
@@ -162,91 +161,51 @@ gNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.18.99";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
///X2
enable_x2 = "no";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
target_enb_x2_ip_address = (
{ ipv4 = "192.168.18.199";
ipv6 = "192:168:30::17";
preference = "ipv4";
}
);
////////// AMF parameters:
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.198/24";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.198/24";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C = "192.168.18.198/24";
GNB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
}
);
MACRLCs = ({
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
});
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
prach_dtx_threshold = 120;
#pucch0_dtx_threshold = 120;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1;
nb_rx = 1;
att_tx = 0;
att_rx = 0;
bands = [7];
sl_ahead = 12;
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
if_freq = 5124520000L;
clock_src = "external";
time_src = "external";
}
);
RUs = ({
local_rf = "yes"
nb_tx = 1;
nb_rx = 1;
att_tx = 0;
att_rx = 0;
sl_ahead = 12;
bands = [261];
max_pdschReferenceSignalPower = -27;
eNB_instances = [0];
});
rfsimulator: {
serveraddr = "server";
};
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
@@ -264,14 +223,6 @@ security = {
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
};
log_config: {
global_log_level ="info";
};

View File

@@ -160,19 +160,12 @@ gNBs =
////////// MME parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -161,18 +161,11 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/26";
GNB_INTERFACE_NAME_FOR_NGU = "eno1";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/26";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -187,7 +180,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -0,0 +1,253 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
sa = 1;
usrp-tx-thread-config = 1;
tune-offset = 30720000;
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
////////// Physical parameters:
ssb_SubcarrierOffset = 0;
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 1;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.60 MHz + 81*12*30e-3 MHz = 3329.76
absoluteFrequencySSB = 673344;
# this is 3300.60 MHz
dl_absoluteFrequencyPointA = 671400;
dl_frequencyBand = 77;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 162;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
initialDLBWPlocationAndBandwidth = 31624;
#
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 77;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 162;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 31624;
# 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 = 12;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 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 =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -70;
# 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 = -20;
}
);
# ------- 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.61.132"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.61.129/26";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.61.129/26";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 300;
pucch_TargetSNRx10 = 300;
ulsch_max_frame_inactivity = 0;
pusch_FailureThres = 100;
ul_max_mcs = 28;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pusch_dtx_threshold = 20;
max_ldpc_iterations = 20;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 2;
nb_rx = 2;
att_tx = 0;
att_rx = 0;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 72;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
#clock_src = "internal";
sdr_addrs = "addr=192.168.80.53, clock_source=internal,time_source=internal"
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

View File

@@ -0,0 +1,248 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
sa = 1;
usrp-tx-thread-config = 1;
gNBs = (
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1; }); });
nr_cellid = 12345678L;
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 1;
ul_prbblacklist = "135,136,137,138"
servingCellConfigCommon = (
{
# spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
# frequencyInfoDL
# this is 3900.60 MHz + (134 PRBs + 4 SCs)@30kHz SCS (GSCN: 8158)
absoluteFrequencySSB = 673344;
dl_frequencyBand = 77;
# this is 3900.60 MHz
dl_absoluteFrequencyPointA = 670068;
# scs-SpecificCarrierList
dl_offstToCarrier = 0;
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
# initialDownlinkBWP
# genericParameters
initialDLBWPlocationAndBandwidth = 1099;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
# uplinkConfigCommon
# frequencyInfoUL
ul_frequencyBand = 77;
# scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 20;
# initialUplinkBWP
# genericParameters
initialULBWPlocationAndBandwidth = 1099;
# 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 = 12;
preambleReceivedTargetPower = -90;
# 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 =-90;
# pucch-ConfigCommon
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -70;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
# 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;
#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.61.132"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.61.129/24";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.61.129/24";
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;
pusch_FailureThres = 1000;
ulsch_max_frame_inactivity = 0;
ul_max_mcs = 25;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
max_ldpc_iterations = 15;
pucch0_dtx_threshold = 80;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 2;
nb_rx = 2;
att_tx = 12;
att_rx = 0;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 72;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
#clock_src = "internal";
sdr_addrs = "addr=192.168.80.53,clock_source=internal,time_source=internal"
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

View File

@@ -158,19 +158,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.128";
GNB_INTERFACE_NAME_FOR_NGU = "eno1";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.128";
GNB_PORT_FOR_NGU = 2152; # Spec 2152
};
@@ -181,7 +174,6 @@ gNBs =
MACRLCs = (
{
num_cc = 1;
local_s_if_name = "lo:";
remote_s_address = "127.0.0.1"; // pnf addr [!]
local_s_address = "127.0.0.2"; // vnf addr
local_s_portc = 50601; // vnf p5 port

View File

@@ -13,7 +13,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({sst = 1;}); });
plmn_list = ({ mcc = 001; mnc = 02; mnc_length = 2; snssaiList = ({sst = 1;}); });
nr_cellid = 12345678L
@@ -170,19 +170,12 @@ gNBs =
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.21.6.100";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "172.21.6.100"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno33np0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.124/22";
GNB_INTERFACE_NAME_FOR_NGU = "eno33np0";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.124/22";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -197,8 +190,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 180;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
ul_max_mcs = 16;
}
);

View File

@@ -85,7 +85,7 @@ gNBs =
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
ra_ResponseWindow = 5;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
@@ -161,19 +161,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -188,7 +181,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
#pusch_TargetSNRx10 = 150;
#pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
dl_max_mcs = 16; # there are retransmissions if more
}
);

View File

@@ -88,7 +88,7 @@ gNBs =
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
ra_ResponseWindow = 5;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
@@ -164,19 +164,12 @@ gNBs =
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

View File

@@ -163,19 +163,12 @@ gNBs =
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
GNB_INTERFACE_NAME_FOR_NGU = "em1";
GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -190,7 +183,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 220;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -156,19 +156,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.21.16.137";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "172.21.16.137"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.68.194";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.68.194";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -184,7 +177,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 10;
ul_max_mcs = 9;
}
);

View File

@@ -176,19 +176,12 @@ gNBs =
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
GNB_INTERFACE_NAME_FOR_NGU = "em1";
GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -203,7 +196,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 220;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -177,19 +177,12 @@ gNBs =
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
GNB_INTERFACE_NAME_FOR_NGU = "em1";
GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -204,7 +197,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
# pusch_TargetSNRx10 = 200;
# pucch_TargetSNRx10 = 150;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -82,7 +82,7 @@ gNBs =
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
ra_ResponseWindow = 5;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
@@ -159,19 +159,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "192.168.71.132"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -186,7 +179,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);

View File

@@ -16,7 +16,7 @@ gNBs =
// 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; }) });
plmn_list = ({ mcc = 001; mnc = 02; mnc_length = 2; snssaiList = ({ sst =0x1; }) });
nr_cellid = 12345678L
@@ -35,10 +35,10 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# this is 3410.4 MHz => 301 REs from PointA 25 PRBs + 1 RE
absoluteFrequencySSB = 627360;
absoluteFrequencySSB = 630048;
dl_frequencyBand = 78;
# this is 3410.4 - (51*12*30e-3/2) = 3401.22 MHz
dl_absoluteFrequencyPointA = 626748;
dl_absoluteFrequencyPointA = 629436;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
@@ -166,19 +166,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.21.6.100";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "172.21.6.100"; });
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
};
@@ -192,8 +185,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 10;
ul_max_mcs = 28;
}
);

View File

@@ -156,19 +156,12 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.21.16.137";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
amf_ip_address = ({ ipv4 = "172.21.16.137"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.68.194";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.68.194";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -184,7 +177,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -13,7 +13,6 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "eno1";
remote_n_address = "127.0.0.1";
local_n_address = "127.0.0.1";
local_n_portc = 50000;

View File

@@ -21,7 +21,6 @@ MACRLCs = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "eno1";
remote_n_address = "127.0.0.1"; //Proxy IP
local_n_address = "127.0.0.1";
local_n_portc = 50600;

View File

@@ -5,3 +5,31 @@ uicc0 = {
dnn= "oai";
nssai_sst=1;
}
#/* configuration for channel modelisation */
#/* To be included in main config file when */
#/* channel modelisation is used (rfsimulator with chanmod options enabled) */
channelmod = {
max_chan = 10;
modellist = "modellist_rfsimu_1";
modellist_rfsimu_1 = (
{ # DL, modify on UE side
model_name = "rfsimu_channel_enB0"
type = "AWGN";
ploss_dB = 20;
noise_power_dB = -4;
forgetfact = 0;
offset = 0;
ds_tdl = 0;
},
{ # UL, modify on gNB side
model_name = "rfsimu_channel_ue0"
type = "AWGN";
ploss_dB = 20;
noise_power_dB = -2;
forgetfact = 0;
offset = 0;
ds_tdl = 0;
}
);
};

View File

@@ -176,12 +176,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; });
enable_measurement_reports = "yes";
@@ -194,9 +189,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.1";

View File

@@ -166,12 +166,7 @@ gNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 "CI_MME_IP_ADDR"; });
///X2
enable_x2 = "yes";
@@ -179,19 +174,12 @@ gNBs =
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
target_enb_x2_ip_address = (
{ ipv4 = "127.0.0.1";
ipv6 = "192:168:30::17";
preference = "ipv4";
}
);
target_enb_x2_ip_address = ({ ipv4 = "127.0.0.1"; });
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "CI_GNB_IP_ADDR";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
GNB_IPV4_ADDRESS_FOR_S1U = "CI_GNB_IP_ADDR";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24";

View File

@@ -173,13 +173,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
///X2
enable_x2 = "yes";
@@ -190,9 +184,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152

View File

@@ -354,13 +354,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port 36412; });
enable_measurement_reports = "no";
@@ -373,9 +367,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -175,13 +175,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -176,13 +176,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -194,12 +188,7 @@ eNBs =
t_dc_overall = 2000; /* unit: millisecond */
///M2
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
target_mce_m2_ip_address = ({ ipv4 = "127.0.0.7"; });
enable_enb_m2 = "yes";
@@ -219,9 +208,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
@@ -244,12 +231,7 @@ MCEs = (
//M3
enable_mce_m3 = "yes";
target_mme_m3_ip_address = ( { ipv4 = "127.0.0.18";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
target_mme_m3_ip_address = ({ ipv4 = "127.0.0.18"; });
NETWORK_INTERFACES :

View File

@@ -134,13 +134,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412 ; });
enable_measurement_reports = "no";
@@ -153,9 +147,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -134,13 +134,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -153,9 +147,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -134,13 +134,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -153,9 +147,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -134,13 +134,7 @@ eNBs =
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
///X2
enable_x2 = "no";
@@ -151,9 +145,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -171,13 +171,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -190,9 +184,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -174,13 +174,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -190,18 +184,11 @@ eNBs =
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
target_enb_x2_ip_address = (
{ ipv4 = "CI_RCC_IP_ADDR";
ipv6 = "192:168:30::17";
preference = "ipv4";
}
);
target_enb_x2_ip_address = ({ ipv4 = "CI_RCC_IP_ADDR"; });
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
///X2
enable_x2 = "no";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -177,13 +177,7 @@ eNBs =
enable_measurement_reports = "yes";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
///X2
enable_x2 = "yes";
@@ -194,9 +188,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -174,13 +174,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
enable_measurement_reports = "no";
@@ -193,9 +187,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";

View File

@@ -173,31 +173,19 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "CI_MME_IP_ADDR"; port = 36412; });
///X2
enable_x2 = "yes";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
target_enb_x2_ip_address = (
{ ipv4 = "CI_RCC_IP_ADDR";
ipv6 = "192:168:30::17";
preference = "ipv4";
}
);
target_enb_x2_ip_address = ({ ipv4 = "CI_RCC_IP_ADDR"; });
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152

View File

@@ -21,7 +21,6 @@ MACRLCs = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "ens3";
remote_n_address = "127.0.0.1"; //Proxy IP
local_n_address = "127.0.0.1";
local_n_portc = 50600;

View File

@@ -172,13 +172,7 @@ eNBs =
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.195";
ipv6 = "192:168:30::17";
port = 36412 ;
active = "yes";
preference = "ipv4";
}
);
mme_ip_address = ({ ipv4 = "192.168.61.195"; port = 36412; });
enable_measurement_reports = "yes";
@@ -191,9 +185,7 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "ctrl0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.16.0.1";
ENB_INTERFACE_NAME_FOR_S1U = "ctrl0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.16.0.1";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.16.0.1";
@@ -206,7 +198,6 @@ eNBs =
MACRLCs = (
{
num_cc = 1;
local_s_if_name = "lo";
remote_s_address = "127.0.0.1";
local_s_address = "127.0.0.1";
local_s_portc = 50001;

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