Compare commits

...

926 Commits

Author SHA1 Message Date
turletti
be27b70468 temporary hack proposed by Teodora Vladic to allow other sd than 0xffffff 2024-11-07 07:30:48 +01:00
Robert Schmidt
220d851deb Merge branch 'integration_2024_w44' into 'develop'
Integration: `2024.w44`

See merge request oai/openairinterface5g!3081

* !2988 Add functional DFT test
* !3072 snow3g: fix array size
* !3073 small fix for 3 digit mnc usage in sib1
* !3040 Update pbchsim to work with other numerologies
* !3078 Simplify logs in gNB&UE
* !3080 Add Fedora 41, build_oai cleanup
* !3061 RLC optimization
* !3008 Fix regression 4g
* !3084 Fix a typo in nrue.uicc.yaml file
* !3085 chore(ci): creating a develop tag on top of develop-commit-id tag for the local private registry
2024-11-05 11:58:33 +00:00
Robert Schmidt
e3c3a8a6ff Merge remote-tracking branch 'origin/ci-add-develop-tag-in-private-repo' into integration_2024_w44 (!3085)
chore(ci): creating a develop tag on top of develop-commit-id tag for the local private registry

Create a 2nd tag of develop for all images on the local registry.  We
are doing this in order to simplify cross-repository testing between
FlexRIC and RAN.
2024-11-05 11:03:02 +01:00
Robert Schmidt
70885cc959 Merge remote-tracking branch 'origin/nrue-yaml-hotfix' into integration_2024_w44 (!3084)
Fix two issues with softmodem yaml files

- Fix a typo that prevents casting max_chan to integer in nrue.uicc.yaml
- Remove unused field ssb_PositionsInBurst_PR from gNB example config
  yaml file
2024-11-05 11:02:24 +01:00
Robert Schmidt
f216c47ace Merge remote-tracking branch 'origin/fix-regression-4G' into integration_2024_w44 (!3008)
Fix Regression 4G

- Fix various bugs and/or regressions in 4G code
- Also, the CI does not test RFsim 4G with --sanitize, enables this to
  detect problems.
2024-11-04 19:43:52 +01:00
Robert Schmidt
01aadcac1f Merge remote-tracking branch 'origin/rlc-optimization' into integration_2024_w44 (!3061)
RLC optimization

Two improvements:

- using functions instead of function pointers which enables inlining
- avoid 1 malloc/free per SDU

Benchmark results:

before:

    BM_nr_rlc_am_entity/20000           5036721 ns      5036541 ns          138
    BM_nr_rlc_am_entity/20000           5032061 ns      5031849 ns          138
    BM_nr_rlc_am_entity/20000           5037071 ns      5037056 ns          138
    BM_nr_rlc_am_entity/20000           5035472 ns      5035248 ns          138
    BM_nr_rlc_am_entity/20000           5032860 ns      5032681 ns          138
    BM_nr_rlc_am_entity/20000_mean      5034837 ns      5034675 ns            5
    BM_nr_rlc_am_entity/20000_median    5035472 ns      5035248 ns            5
    BM_nr_rlc_am_entity/20000_stddev       2267 ns         2315 ns            5
    BM_nr_rlc_am_entity/20000_cv           0.05 %          0.05 %             5

after:

    BM_nr_rlc_am_entity/20000           4974403 ns      4974202 ns          140
    BM_nr_rlc_am_entity/20000           4976705 ns      4976444 ns          140
    BM_nr_rlc_am_entity/20000           5004550 ns      5004508 ns          140
    BM_nr_rlc_am_entity/20000           4974652 ns      4974460 ns          140
    BM_nr_rlc_am_entity/20000           4976447 ns      4976225 ns          140
    BM_nr_rlc_am_entity/20000_mean      4981351 ns      4981168 ns            5
    BM_nr_rlc_am_entity/20000_median    4976447 ns      4976225 ns            5
    BM_nr_rlc_am_entity/20000_stddev      13009 ns        13087 ns            5
    BM_nr_rlc_am_entity/20000_cv           0.26 %          0.26 %             5
2024-11-04 19:42:43 +01:00
Raphael Defosseux
5e7fa3fc64 chore(ci): creating a develop tag on top of develop-commit-id tag for the local private registry
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-11-04 15:12:20 +01:00
Bartosz Podrygajlo
63fb3af917 Remove unused ssb_PositionsInBurst_PR field from gNB yaml file example 2024-11-04 14:47:46 +01:00
Bartosz Podrygajlo
7a4aa41c90 Fix a typo in nrue.uicc.yaml file
Fix a typo that prevents casting max_chan to integer
2024-11-04 13:07:56 +01:00
Robert Schmidt
1b1be2ebea Merge remote-tracking branch 'origin/fedora-41-cleanup' into integration_2024_w44 (!3080)
Add Fedora 41, build_oai cleanup

- Add Fedora 41 to list of supported distributions
- Remove some dependencies in RHEL that are not necessary
- Cleanup some build_oai documentation of non-supported options
2024-11-01 11:59:44 +01:00
Robert Schmidt
da7a028a3f Merge remote-tracking branch 'origin/logs-refactor-orange' into integration_2024_w44 (!3078)
Simplify logs in gNB&UE

- reduce the amount of printf() that outputs useless info
- in MAC, PHY, NGAP, RRC, mark some "important" UE events with LOG_A for
  better visibility -> can put log_config.global_log_level analysis to
  only see important stuff
- in RRC, use some macro to consistently print logs
- track the cellID of a UE in RRC
2024-11-01 11:58:47 +01:00
Robert Schmidt
25405d1720 Merge remote-tracking branch 'origin/NR_PBCHSIM_changes' into integration_2024_w44 (!3040)
Update pbchsim to work with other numerologies

NR PBCHSIM updated to work with 15Khz and 120Khz.
2024-11-01 11:58:13 +01:00
Robert Schmidt
9d96326ce7 Remove RHEL8 from list of supported distributions 2024-10-31 12:53:08 +01:00
Robert Schmidt
d6938e7b2a Remove useless options: -x does nothing 2024-10-31 12:53:08 +01:00
Robert Schmidt
8d62bc38c0 Remove documented but unsupported build_oai options 2024-10-31 12:53:08 +01:00
Robert Schmidt
a93ad34c6b Remove non-required dependencies from install list
openssl and libffi are not required for building OAI. Remove them.
2024-10-31 12:53:08 +01:00
Robert Schmidt
9f56b8e21f Add Fedora 41 to list of supported distributions 2024-10-31 12:53:08 +01:00
Robert Schmidt
24e591df59 Merge remote-tracking branch 'origin/3-digit-mnc-in-sib1' into integration_2024_w44 (!3073)
small fix for 3 digit mnc usage in sib1

When 3 digit MNC is used in PLMN, during preparation of SIB1, first
digit of MNC was not taking into account. UE derives Serving Network
Name (SNN) using PLMN info from sib1. Because of 5GCore and UE has
different SNNs, this leads to XRES*, RES* mismatch during Authentication
Procedure between 5GCore and UE. (SNN is used for derivation of these
keys)
2024-10-31 08:41:20 +01:00
Robert Schmidt
571d1fceab Merge remote-tracking branch 'origin/hotfix-snow3g' into integration_2024_w44 (!3072)
snow3g: fix array size
2024-10-31 08:40:57 +01:00
Robert Schmidt
84db6fd9f3 Merge remote-tracking branch 'origin/add-functional-test-dft' into integration_2024_w44 (!2988)
Add functional DFT test

- clean up code on (i)dft calls
- add DFT test for some DFT sizes against trivial implementation: it
  tests a simple square signal in only real values
- correctly scale DFT-16
2024-10-31 08:40:21 +01:00
Robert Schmidt
55feed3645 Add chart for nr_pbchsim.otherSCS execution 2024-10-31 08:26:00 +01:00
Laurent THOMAS
ae8df083fc Add functional test for DFT 2024-10-30 18:04:59 +01:00
Laurent THOMAS
576d468809 Clean up intermediate DFT macros, remove non-existing DFTs
DFT for 9216 and 73728 don't exist and/or assert, so remove them from
the list.
2024-10-30 18:04:43 +01:00
Robert Schmidt
ffa3260ab5 Set explicit wd, set LD_LIBRARY_PATH to find dfts.so 2024-10-30 17:55:11 +01:00
Laurent THOMAS
5cd5f72533 case DFT12 processing with specific data organization: remove intermediate pointer 2024-10-30 17:54:58 +01:00
Robert Schmidt
f00ee9af2f review comment: to squash 2024-10-30 16:45:26 +01:00
Robert Schmidt
9395a0673e change macros for UE logging 2024-10-30 15:45:11 +00:00
Bartosz Podrygajlo
54a57bd2d6 RLC optimization - allocate SDU header and SDU data together
By allocating sdu data and sdu header together the total amount of
free/malloc calls per SDU is reduced by 1 increasing overall performance.
2024-10-30 16:03:01 +01:00
Bartosz Podrygajlo
7ae1aa21f4 RLC optimization - using function instead of function pointers
Moved some functions around so that instead of a function pointer a function
call is used. This enables inlining of functions which reduces number of function calls.
2024-10-30 16:02:50 +01:00
Laurent THOMAS
4cf2719bd9 scale in DFT16 as per normal scaling sqrt(16) = 4 2024-10-29 18:47:15 +01:00
Laurent THOMAS
f1f02ec0a1 use existing functions to retrieve (i)dft enum value 2024-10-29 18:47:15 +01:00
batuhan duyuler
edeb7b8f61 handling 1st digit of mnc in SIB1
During preparation of SIB1, first digit of MNC was not taking into account.
This leads to XRES*, RES* mismatch during Authentication Procedure between 5GCore and UE because of derived serving network names.
2024-10-29 16:43:26 +01:00
Robert Schmidt
d5cd07e37c Correct RRC log: remove trailing whitespace 2024-10-29 16:41:20 +01:00
Robert Schmidt
21d31e4359 RRC: more UE tracability through LOG_A
It is difficult to keep track of a "UE lifecycle". To make this more
easy, add LOG_A at major UE RRC messages.
2024-10-29 16:38:54 +01:00
Robert Schmidt
14d238baee RRC: keep track of UE's CellID
It will be used in the next commit
2024-10-29 16:38:07 +01:00
Robert Schmidt
a0a4096f95 Mark "gNB event" of NG connection thru LOG_A 2024-10-29 16:37:17 +01:00
Robert Schmidt
b8b921d49f Mark major "UE events" in in PHY+MAC thru LOG_A 2024-10-29 16:36:53 +01:00
Robert Schmidt
68f8ef7c7a Reduce amount of logs in L1/L2
This commit removes many logs that just show memory addresses, indices,
etc., which, I presume, do not mean anything to the "average user" and
developers alike.
2024-10-29 16:36:13 +01:00
Robert Schmidt
8cc6c0cbbb Various places: remove printf and/or transform to LOG_D 2024-10-29 16:35:47 +01:00
Robert Schmidt
83d9397002 MeasTimingConfig: only print ASN.1 when requested 2024-10-29 16:35:47 +01:00
Robert Schmidt
5180d4df74 nr-ru: remove "low-density" printf, transform rest to LOG_D
Most printf() do not show much information (like only a "X is ready",
which is not useful for subsystems). Remove those. The rest, make them
LOG_D.
2024-10-29 15:55:19 +01:00
Robert Schmidt
cbd5f1671f nr-softmodem.c: remove unnecessary printfs 2024-10-29 15:55:19 +01:00
Robert Schmidt
925566b075 module loader: remove printf(), put error into printf(stderr) 2024-10-29 15:55:19 +01:00
Robert Schmidt
85e198b178 Config module: use printf_params() to print log messages 2024-10-29 09:37:10 +01:00
Robert Schmidt
3e86e457b9 Logging: remove useless printf 2024-10-29 09:23:55 +01:00
Robert Schmidt
6c1d94a321 Merge branch 'integration_2024_w43' into 'develop'
Integration: `2024.w43`

Closes #769 and #841

See merge request oai/openairinterface5g!3069

* !2994 Refactor file descriptor handling in rfsimulator
* !3010 Fix heap overflow in websrv
* !3043 CI: Update RAN-gNB-N300-Timing-Phytest-LDPC test cases
* !3060 process registration reject in UE
* !3062 fix nr rlc tests
* !3067 Bugfix: Fill QFI for N3 GTP messages
* !3057 Bugfix in ue pusch mac pdu creation
* !3068 getopt() returns int
* !3056 F1AP Enc/Dec Library follow-up
* !3064 T: don't check argument in optimized version of T IDs
* !2786 Add F1 Handover procedures
* !2980 Refactor NAS 5GS PDU Session Establishment Accept handling and other NAS improvements
* !3063 Update yaml-cpp dependency handling
* !2989 NR gNB scheduler improvements for BWP operation
2024-10-29 06:55:10 +00:00
Cedric Roux
5ffa655902 snow3g: fix array size 2024-10-28 22:16:22 +01:00
Robert Schmidt
26fa3300e6 Merge remote-tracking branch 'origin/NR_gNB_sched_improvements' into integration_2024_w43 (!2989)
This MR removes limitations on BWP scheduler operation for which only
the information from the first UE of the list was taken into account. To
do so, I moved the VRB map check for DL and UL scheduler out of the
preprocessor and in the scheduler itself.

Closes: #769
2024-10-28 19:35:27 +01:00
Robert Schmidt
39f006926c Merge remote-tracking branch 'origin/yaml-cpp-fix-dependency' into integration_2024_w43 (!3063)
Update yaml-cpp dependency handling

- Added CPM fallback in case package is not found automatically.
- Using yaml-cpp::yaml-cpp target instead of yaml-cpp to silence
  deprecation warnings on newer cmake versions.
2024-10-28 19:34:48 +01:00
Robert Schmidt
d8d11d36c0 Mark CPM_SOURCE_CACHE as a CACHE variable
By omitting the variable CPM_SOURCE_CACHE as CACHE'd, it is actually
given to CPM, but does not appear when viewing it's content, e.g.,
through ccmake. Mark is as CACHE so that it will also appear.
2024-10-28 18:03:11 +01:00
Bartosz Podrygajlo
e086334a08 Update yaml-cpp dependency handling
- Added CPM fallback in case package is not found automatically.
 - Using yaml-cpp::yaml-cpp target instead of yaml-cpp to silence deprecation
   warnings on newer cmake versions.
2024-10-28 18:02:34 +01:00
Jaroslava Fiedlerova
538c115fb7 CI: reduce RX gain in 4G pipelines to avoid false RACH attempts 2024-10-28 13:42:19 +01:00
Robert Schmidt
7b2e4a8ce7 Merge remote-tracking branch 'origin/nr-nas-issue-841' into integration_2024_w43 (!2980)
Refactor NAS 5GS PDU Session Establishment Accept handling

- Closes #841
- address minor code issues
2024-10-28 11:53:00 +01:00
luis_pereira87
ad9b91627c Prevent DLSCH scheduler to allocate PRBs outside of current BWP 2024-10-26 11:19:40 +02:00
francescomani
62301e9eef remove bf_weights from 2step RA config file 2024-10-26 11:19:40 +02:00
francescomani
c8387d706c making ULSCH preprocessor agnostic to UEs BWP and TDA 2024-10-26 11:19:37 +02:00
Robert Schmidt
5b73319278 Merge remote-tracking branch 'origin/f1-handover-procedures' into integration_2024_w43 (!2786)
Add F1 Handover procedures

- Clean up at RRC and MAC
- Add DU handover procedures, completely handle CellGroupConfig at DU
- Add CU handover procedures
- Maintain reestablishment working between/after handover
- Changes at UE to resync on different frequency DUs

Instructions: see doc/handover-tutorial.md

Things not implemented/open/missing: see #855
2024-10-25 20:22:01 +02:00
Robert Schmidt
ca8ca63744 Merge remote-tracking branch 'origin/hotfix-t-tracer' into integration_2024_w43 2024-10-25 20:18:58 +02:00
Robert Schmidt
6c6b10d020 Merge remote-tracking branch 'origin/f1ap-msg-encdec-followup' into integration_2024_w43 (!3056)
F1AP Enc/Dec Library follow-up

Follow-up after !2890
2024-10-25 20:18:33 +02:00
Robert Schmidt
f2c6fce30f Add 5G RRC documentation 2024-10-25 20:13:47 +02:00
Robert Schmidt
05f10decee Add handover tutorial
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:13:47 +02:00
Robert Schmidt
ad81d48285 MAC doc: minor clarifications 2024-10-25 20:13:47 +02:00
Robert Schmidt
5c8ee81683 Update FEATURE_SET.md with F1 handover procedures 2024-10-25 20:13:47 +02:00
Robert Schmidt
e02aae4624 Open TODOs at RRC 2024-10-25 20:10:26 +02:00
Roberto Magueta
c956de6f27 Trigger F1 Handover on A3 event
When receiving a measurement report including an A3 event, trigger
handover towards the indicated cell.

Note that currently, we are still limited to one Cell by DU, hence
looking up a cell comes down to looking up a DU, as is done here.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2024-10-25 20:10:26 +02:00
Robert Schmidt
8b4259c047 Ignore UE Context Modification Required during handover
During handover, we might receive a UE context Modification required
message. Currently, we cannot handle this; ignore the message.
2024-10-25 20:10:26 +02:00
Robert Schmidt
546ffee56b DU dies during HO: free HO context of UE to avoid dangling data 2024-10-25 20:10:26 +02:00
Robert Schmidt
b6ccf8aa77 Handle reestablishment during handover
This commit implements reestablishment during handover when occurring at
the source DU, either as a handover Failure or "normal" reestablishment
(something else went wrong). In this case, the CU will trigger HO
cancel, which in F1, means to cancel on the target DU. Also, undo any
previous ID changes. Retain the old CellGroupConfig (before handover)
for the case of reestablishment at source. If not needed, it is freed
after the reconfiguration complete.

Reestablishment on target cell during handover cannot be handled by the
gNB (yet). It is the same as with a normal reestablishment (not during
handover) on a different cell: that cell has no notion of the old UE, so
we cannot simply indicate the old UE to reestablish; at least, we would
need to cleanup the CellGroupConfig, and I am not sure this works out of
the box, either.
2024-10-25 20:10:26 +02:00
Robert Schmidt
c6434c80fd Reestablishment hack: free reconfigurationWithSync
After handover, the last CellGroupConfig received is the one for
handover, containing a reconfigurationWithSync. Resending this
CellGroupConfig to the UE after reestablishment would trigger a
handover. Free the reconfigurationWithSync to have the UE complete
reestablishment at the current cell.

The CU implementation of reestablishment modifies the CellGroupConfig.
It should not do this, but does as of now. The specification (38.473 Sec
8.7) foresees an optional F1 UE context modification procedure (which
can be used to receive the CellGroupConfig). This should be done instead
to retrieve the correct CellGroupConfig.

Note that the F1 UE context setup procedure, similar to the UE context
modification procedure, would also allow to perform reestablishment on a
DU that is not the original one.
2024-10-25 20:10:26 +02:00
Robert Schmidt
145fd2b415 Handle Release request during handover
If we release a request from a DU during, handle as follows:

- from the source: Handover is still ongoing, so ignore it by
  acknowledging the release, and marking handover as done. In this case,
  we did not receive an acknowledgement from the target, but since the
  source DU does not keep the UE context, we could not cancel the
  handover anymore either. The UE might come back on any DU through
  reestablishment (or simply be connected on the target)
- from the target: consider this to be a genuine release, and forward to
  AMF.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt
a2da391e70 Handle successful HO after reconfigurationComplete
The HO is completed (from a pure RAN perspective) when receiving
reconfiguration complete. In that case, remove the HO context, and
signal successful handover through the callback. For the F1 handover,
this means releasing the UE at the source DU.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt
e42c303bd7 Handle UE Context Modification Response in HO case
We expect the UE's RRC Reconfiguration Complete to come through the
target DU, as the "new UE" at the target CU. Also, function
CU_handle_UL_RRC_MESSAGE_TRANSFER() checks that the UL RRC Message,
through which we will receive RRC Reconfiguration Complete, matches the
DU UE ID stored in RRC. Since the DU UE ID will be the one at the target
DU, while up to now, we stored the DU UE ID at the source DU.

Correspondingly, update the DU UE ID to the one at the target DU; also
update the corresponding assoc_id.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt
0e20c4c257 Handle UE context setup resp for HO: trigger reconfiguration on source
In this commit, handle the reception of a UE context setup response, in
the case of handover. In that case, store the gNB-DU UE ID and C-RNTI of
the UE at the target DU, and trigger a reconfiguration towards the UE at
the source DU via the callback.

To ensure that the CU-UP's PDCP is SN-aligned with the UE, use
cuup_notify_reestablishment() to reset the bearers with PDCP
reestablishment, which has already been implemented in the last commit.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt
7b163f1688 Harmonize UE context setup resp bearer handling
This is preparatory work to handle the UE context setup response from
the target DU. There are two cases:

- "Initial" UE context setup response (during connection setup): we need
  to inform the CU-UP via an E1 message of the new bearers (GTP tunnel
  update)
- F1 handover:  we need to inform the CU-UP via an E1 message that there
  are DRBs to reestablish

There are two different functions, e1_send_bearer_updates() and
cuup_notify_reestablishment(), to do this. Harmonize the code, before
implementing the actual handover logic in the next commit.
2024-10-25 20:10:26 +02:00
Robert Schmidt
66b548060e Implement F1 Handover Trigger
Add a function to trigger an F1 handover, including the corresponding
telnet function implementation. The function looks up source&target DU,
creates a HO context, and reads PDU information to send a UE context
setup request to the target DU towards which to handover.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt
c0770cc19b Make QoS characteristics function available
Functions get_qos_char_from_qos_flow_param() and
get_qos_characteristics() will be used in rrc_gNB_mobility.c to read PDU
information for handover. Move the definitions to a header to reuse
later.
2024-10-25 20:10:26 +02:00
Robert Schmidt
746dc29a46 Add HandoverPreparationInformation() ASN.1 encoder function
HandoverPreparationInformation will be used in the follow-up commit to
trigger a handover.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:26 +02:00
Robert Schmidt
90d8eefa59 Add new handover context structures for handover operation 2024-10-25 20:10:26 +02:00
Robert Schmidt
b4bf59c55b Add telnet module function to trigger F1 HO 2024-10-25 20:10:26 +02:00
Robert Schmidt
b5e3507764 Fix: store CellGroupConfig from initial UL RRC message
This F1 message sends us the CellGroupConfig of the UE. Store it in case
we need it. For instance, at least in OAI, it is possible to make a
handover without a DRB (this might or might not be standard compliant).
However, in this case, we did never receive a UE context setup request,
which stores the CellGroupConfig. Hence, store the first CellGroupConfig
we receive, to be able to do e.g., handover.
2024-10-25 20:10:26 +02:00
Robert Schmidt
35995c8a10 Move RETURN_IF_INVALID_ASSOC_ID() to header for use elsewhere
RETURN_IF_INVALID_ASSOC_ID() checks if an assoc_id (of a DU) is valid.
It will be also used in the mobility RRC module later. Move it to the DU
header (where it logically belongs) to move it from there.
2024-10-25 20:10:26 +02:00
Robert Schmidt
6cd76ff862 Remove unused includes and comment with resolved issue 2024-10-25 20:10:25 +02:00
Roberto Magueta
67eb94db3f Print RRC neighbor cell measurements, if present
Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
2024-10-25 20:10:25 +02:00
Robert Schmidt
c3ef6df44b Bugfix: request release in case of failed RA
Prior to this commit, after RA failure, the DU would send a UE context
release complete, without actually requesting one. This could lead to
inconsistent state between DU and CU, because the CU might just discard
this (unrequested) message, and not actually trigger a release [1].

Thus, refactor the release request into a function, and use it to
request release of a UE for which RA has not been completed. If the CU
does not know the UE, release the UE immediately.

[1] One possibility would be that during reestablishment, the CU would
request to look up an old DU UE ID when it has been released, resulting
in

    Assertion (oldUE) failed!
    In dl_rrc_message_transfer() /home/oaicicd/robert/openairinterface5g/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c:860
    CU claims we should know UE bc7f, but we don't
2024-10-25 20:10:25 +02:00
rmagueta
ecd941e946 Remove old RA process(es) when removing UE
In handover, we might need to remove a UE that we knew under it's
C-RNTI, for which we also have the RA process. Hence, when removing a UE
by RNTI, remove it also from RA.
2024-10-25 20:10:25 +02:00
Roberto Magueta
cddffe6f30 Add config files (TDD/FDD) for multiple DUs scenario
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-25 20:10:25 +02:00
rmagueta
4a5bf53caa UE: Improve synchronization for reconfigurationWithSync
Improve synchronization to also handle handover between gNB-DUs with
differing carrier freqs.
2024-10-25 20:09:41 +02:00
Guido Casati
c3f1824f0b Use capture_pdu_session_establishment_accept_msg in handleDownlinkNASTransport
* DL NAS Transport messages can piggy-back 5GSM messages
* the relevant decoding functions can be called in the handler (e.g. capture_pdu_session_establishment_accept_msg)
2024-10-25 12:43:44 +02:00
Guido Casati
9a67c5e5b5 Fix scoping issues for variable declarations in switch-case blocks (capture_pdu_session_establishment_accept_msg) 2024-10-25 11:52:28 +02:00
Guido Casati
b5f4c55d88 Use capture_pdu_session_establishment_accept_msg with NAS_DOWNLINK_DATA_IND:FGS_PDU_SESSION_ESTABLISHMENT_ACC
* the capture_pdu_session_establishment_accept_msg function is already handling
  the code in the case FGS_PDU_SESSION_ESTABLISHMENT_ACC of NAS_DOWNLINK_DATA_IND

Closes: #841
2024-10-25 11:50:52 +02:00
Guido Casati
66231badaf Refactor PDU address IE in PDU Session Establishment Accept
* take 3 bits for PDU session type value
* add define for SMF's IPv6 link local address
2024-10-25 11:44:14 +02:00
Guido Casati
a85be06c72 Add defines for IPv4 and IPv6 PDU address header fields 2024-10-25 11:42:22 +02:00
Robert Schmidt
78587d6cf0 Merge remote-tracking branch 'origin/getopt-int' into integration_2024_w43 (!3068)
getopt() returns int
2024-10-24 19:23:05 +02:00
Robert Schmidt
1a834a704a Merge remote-tracking branch 'origin/NR_UE_fix_mac_pdu' into integration_2024_w43 (!3057)
Bugfix in ue pusch mac pdu creation

When more than one sdu with equal priority is present, there could be
buffer left after serving the lcids and also not enough to equally serve
all lcids. This commit checks for this condition. Before this fix the ue
would send malformed mac pdus when serving multiple lcids.
2024-10-24 19:22:40 +02:00
Robert Schmidt
cf9854601c getopt() returns int
See getopt(3): returns int, so store it in an int variable.
I went through all occurrences, project-wide. All return values of
getopt() should be stored in ints now.
2024-10-24 19:22:06 +02:00
Guido Casati
f85271a349 Free F1AP messages in RRC task after processing 2024-10-24 16:23:05 +02:00
Guido Casati
b17f1d1b57 Free F1 UL RRC Message Transfer after use in F1AP_DU_task 2024-10-24 16:22:04 +02:00
Guido Casati
74804f2ba3 Free F1 DL RRC Message Transfer after use in F1AP_CU_task 2024-10-24 16:22:04 +02:00
Guido Casati
5e5d17b05b Free F1 Setup Response in the context where it was allocated 2024-10-24 16:22:03 +02:00
Guido Casati
a29cbf0543 Cleanup of cast in gNB_DU_name memcpy 2024-10-24 16:22:03 +02:00
Guido Casati
46fadda22f Add license header to f1ap_lib_test.c 2024-10-24 16:22:03 +02:00
Guido Casati
52f96fd91b Complete adoption of Equality Check macros in f1ap_lib_common.c 2024-10-24 16:22:03 +02:00
Robert Schmidt
ee4301b013 Merge remote-tracking branch 'origin/fix-qfi-gtp' into integration_2024_w43 (!3067)
Bugfix: Fill QFI for N3 GTP messages
2024-10-24 16:13:56 +02:00
Robert Schmidt
981f18dd18 Merge remote-tracking branch 'origin/hotfix-rlc-tests' into integration_2024_w43 (!3062)
fix nr rlc tests

in openair2/LAYER2/nr_rlc/tests:

    ./run_tests.sh

was failing.
2024-10-24 16:13:26 +02:00
Robert Schmidt
4a8575eaf2 Merge remote-tracking branch 'origin/registration-reject' into integration_2024_w43 (!3060)
process registration reject in UE

when the 5GC rejects the ue, the message was not processed (information
element not declared)
this MR process it to print it and stop the UE
a more complete code should be done when the UE will be able to select
another cells than the most powerful PBCH, but it require larger
enhancement
2024-10-24 16:12:45 +02:00
Robert Schmidt
dc05c39e28 Merge remote-tracking branch 'origin/ci-timing-improvements' into integration_2024_w43 (!3043)
CI: Update RAN-gNB-N300-Timing-Phytest-LDPC test cases

- update enc/decoder tests in RAN-gNB-N300-Timing-Phytest-LDPC - test
  only for given SNR value (check of the test results to be added in the
  following MR)
- add cores to Tpool in the nr_dlsim test cases, currently we test with
  only one core
- always execute all the nr_ulsim/nr_dlsim tests, even if one of them
  fails
- add new nr_dlsim test cases - test with 4 antennas, 2 layers
2024-10-24 16:11:16 +02:00
Robert Schmidt
223e6eee3d Merge remote-tracking branch 'origin/fix-websrv' into integration_2024_w43 (!3010)
Fix heap overflow in websrv
2024-10-24 16:10:56 +02:00
Robert Schmidt
8eae2ff07b Merge remote-tracking branch 'origin/refactor-rfsim-fds' into integration_2024_w43 (!2994)
Refactor file descriptor handling in rfsimulator

- add hashtable iterator to hashtable.c
- use hashtable for file descriptor to buffer_t mapping in rfsimulator

This enables the use of file descriptors above 250. The linux file
descriptors can reach the value of FD_SETSIZE which could be e.g. 1024.
This is not an issue in most cases but if the UE or gNB process opens a
lot of file descriptors for other purposes we might see rfsimulator file
descriptors reach > 250 and cause a segfault.

Also added tests for new hashtable functions.
2024-10-24 16:10:00 +02:00
francescomani
38a05d8aad making DLSCH preprocessor agnostic to UEs BWP and TDA 2024-10-24 15:04:27 +02:00
francescomani
3add576195 remove use of VRB map bitwise not in dlsch and ulsch preprocessor 2024-10-24 13:03:22 +02:00
Robert Schmidt
7c13c790d7 Bugfix: Fill QFI for N3 GTP messages
Instead of hardcoding to 0, instruct the GTP module to send N3 GTP
packets with the right GTP.

We currently only support one QoS Flow, so check that it is really only
one.
2024-10-24 10:42:45 +02:00
Bartosz Podrygajlo
883333bfe6 Use hashtable for mapping FDs to buffer_ts in rfsimulator.
Use hashtable for determining which buffer_t does a sock map to. This
lifts the restriction for number of FDs used by applications using rfsimulator.
2024-10-24 10:11:00 +02:00
Bartosz Podrygajlo
e7f858f6b2 Add iterator to hashtable and hashtable unit tests 2024-10-24 09:43:35 +02:00
Sakthivel Velumani
9333662cd8 Update logging in mac 2024-10-23 11:40:37 -04:00
Sakthivel Velumani
5855f766f8 Bugfix in ue pusch mac pdu creation
When more than one sdu with equal priority is present, there could be
buffer left after serving the lcids and also not enough for equaly
serving all lcids. This commit checks for this condition. Before this
fix the ue would send malformed mac pdus when serving multiple lcids.
2024-10-23 11:40:33 -04:00
Cedric Roux
78a4d0754d T: don't check argument in optimized version of T IDs 2024-10-23 14:28:11 +02:00
Laurent THOMAS
345bd9cc82 remove duplicated code, add registration reject cause 2024-10-23 10:51:17 +02:00
Robert Schmidt
5378c4d8d9 Refactor RRC Reconfiguration function
Refactor the RRC reconfiguration function to reuse it also later for
sending the reconfiguration including the handover trigger.
2024-10-22 18:12:51 +02:00
Robert Schmidt
1783932e37 Msg2: Apply CellGroupConfig if necessary
After RA, in the case of HO, we need to make sure to use the right radio
configuration (MCS table, etc). This commit is important to make HO
actually work.
2024-10-22 18:12:51 +02:00
Robert Schmidt
dadd05e0eb Skip adding of second LCID1
Our initial CellGroupConfig always contains LCID1, because in normal
connection setup, the DU has to automatically set it up anyway. In
handover/UE Context Setup, the CU requests to set up SRB1 (which we
assume to be LCID1), but we reuse the initial CellGroupConfig. To not
have SRB1 added twice, skip in this case.
2024-10-22 18:12:51 +02:00
Robert Schmidt
0b2757b36a Implement handler for F1 UE context Setup in HO case
This commit implements adding a new UE on the target DU in case of
handover. We identify this case by the fact that the gNB-CU did not send
a gNB-DU UE ID (which is optional in F1AP, but not in our
implementation), such that we know there is no corresponding UE, which
therefore has to be created.

If it happens that there is a handover preparation information, we read
the UE capabilities from this information, and subsequently trigger the
creation of a new UE.

Another change is that for all bearers that we are asked to setup, we
add reestablishRLC so that the UE does a reestablishment during the
reconfiguration.

As we have to remove the reconfigurationWithSync and reestablishRLC IE
after application of the CellGroupConfig (because we might reuse the
CellGroupConfig later), free these IEs. As there are now multiple fields
to free, introduce a separate nr_mac_clean_cellgroup() function that
handles cleaning of the CellGroupConfig.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-22 18:12:51 +02:00
Robert Schmidt
e7b56b3d08 UE context setup req: gNB_DU_ue_id optional, use 0xffffffff to signal 2024-10-22 18:12:51 +02:00
Robert Schmidt
c4a9bd1718 Refactor reading of NR cap from capability list
The next commit will modify the UE context setup request procedure to
(possibly) receive UE capabilities through Handover Preparation
Information, which extracts the UE capabilities for the UE to be setup.
To avoid code duplication, extract the code that will be needed in UE
capability extraction from Handover Preparation Information.
2024-10-22 18:12:51 +02:00
rmagueta
a927db9ef6 Add c-rnti to UE context setup response
No logic changes in this commit; to be used for the handover case later.

Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-22 18:12:51 +02:00
Robert Schmidt
5c2b725654 Refactor new-RNTI functionality in separate function
This function will be used in the case of a handover for getting a new
RNTI (checking that we do not reuse an already used RNTI).
2024-10-22 18:12:50 +02:00
Robert Schmidt
fef589cf88 Refactor reconfigurationWithSync ASN.1 to separate function
Will be reused later for handover.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
2024-10-22 18:12:50 +02:00
Robert Schmidt
c854b9cebb get_UE_waiting_CFRA_msg3(): check that RA process is for given RNTI
Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
2024-10-22 18:12:50 +02:00
Robert Schmidt
004403c84d Implement F1 UE Ctxt Modif Transmission Action Indicator
Implement the Transmission Action Indicator F1AP forwarding logic, and
add it to the F1 internal representation structure. After the
transmission interrupt timer (during which SRB1 can send messages), the
UE will be out-of-sync (we assume it's not there anymore).

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-22 18:12:50 +02:00
Robert Schmidt
d70561d509 Implement F1 UE Ctxt HandoverPrepInfo in F1
Implement the HandoverPreparationInformation F1AP forwarding logic, and
add it to the F1 internal representation structure.

No logic is implemented in this commit.

Co-authored-by: batuhanduyuler <batuhan.duyuler@firecell.io>
Co-authored-by: rmagueta <rmagueta@allbesmart.pt>
2024-10-22 18:12:50 +02:00
Robert Schmidt
5c6d90aaff Use NR_timer_t for UE transmission interrupt, e.g., RRC processing
Refactor the RRC processing timer to be a generic "transmission
interrupt" timer, and use NR_timer_t for it. Also,
depending on the kind of RRC processing (see 38.331 table 12.1-1),
timing requirements might be different. However, the DU does not always
know which RRC processing is ongoing, and does not get this information
via F1. Hence, introduce a "worst case" delay time, which aligns with
the spec (it says these times are "minima") and is accepted by COTS UE.

The gNB MAC might need to stop transmission either for some time (RRC
processing), or continuously (transmission stop requested by CU). Those
can be handled in one common timer implementation. The continuous case
will be used in a follow-up commit.

Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
2024-10-22 18:12:50 +02:00
Cedric Roux
b2b418fc2c fix nr rlc tests
in openair2/LAYER2/nr_rlc/tests:

    ./run_tests.sh

was failing.
2024-10-22 17:37:14 +02:00
Laurent THOMAS
21a7f994c3 process registration reject in UE 2024-10-22 17:03:19 +02:00
Robert Schmidt
2c07f0081e Merge branch 'ci-remove-unused-code' into 'develop' (!3058)
CI: remove unused code, clean up imports

* Remove pyshark, matplotlib imports, as they are not used
* Remove stats_monitor.py, as the CI does not use it
* Clean up many warnings shown by pyflakes regarding includes that we don't use
2024-10-22 13:12:14 +00:00
Laurent THOMAS
6cedca1c1d fix error of grouping UE to free list for phy layer and ue to free list for fapi 2024-10-22 12:25:30 +02:00
Laurent THOMAS
9898c673d8 print rnti as hexadecimal 2024-10-22 11:05:20 +02:00
Laurent THOMAS
1614ae19e8 trace as information UE RACH steps for 4G 2024-10-22 11:05:20 +02:00
Robert Schmidt
6b32dd6e8e Avoid array buffer overflow in ue_pmch_procedures()
Adapt as code above offending line to not overflow array. Avoids UBSan
error

    openair1/SCHED_UE/phy_procedures_lte_ue.c:2983:36: runtime error: index 8 out of bounds for type 'int [8][1]'
2024-10-22 11:05:20 +02:00
Robert Schmidt
76860fd44b put_UE_in_freelist(): avoid array overflow 2024-10-22 11:05:20 +02:00
Robert Schmidt
985f44c1dd 4G RFsim docker-compose: suppress ASan leak check, lte-{ue,}softmodem is leaky 2024-10-22 11:05:20 +02:00
Robert Schmidt
712988d437 NAS message encoding: avoid unaligned access through memcpy() 2024-10-22 11:05:20 +02:00
Robert Schmidt
e94f59edb1 IES_DECODE_U16 macro: load from 16-bit aligned address
The IES_DECODE_U16 macro loads a 16 bit integer from an arbitrary
address; this can lead to reads from misaligned addresses, and undefined
behavior sanitizer warns, like, e.g., so:

    openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c:62:5: runtime error: load of misaligned address 0x7f3c24032c01 for type 'uint16_t', which requires 2 byte alignment

To fix this, first use memcpy() to load to a 16-bit aligned address,
then do the actual decoding.
2024-10-22 11:05:20 +02:00
Robert Schmidt
71bd10b4a2 docker-compose: write correct container image to use for 4G and asan 2024-10-22 11:05:20 +02:00
Robert Schmidt
cb7942d460 Build CI images for eNB/lteUE with sanitizers, and use in 4G RF sim 2024-10-22 11:05:20 +02:00
Laurent THOMAS
e48e38650d Fix various problems in 4G NAS handling
- rename as_nas_info_t member data to nas_data to have a uniq name to
  trace between complex malloc/free of this pointer
- fix, maybe not perfect, these pais od malloc/free
- remove typedef name changes across transmission of these as_nas_info_t
  over itti, as name changing makes it even more confusing
- remove globals that are likely possible races
- in as_message_decode() fix memcpy size, it is hard to understand the
  initial idea, likely the author beleives a struct of struct makes a
  intermediate pointer
- in network_api.c remove globals (static but used globally)
- remove casts that are there to hide gcc warnings on probable unaligned
  access
- remain a weird mix of packed/unpacked versions of the same typedef,
  but gcc is happy
2024-10-22 11:05:20 +02:00
Laurent THOMAS
8df8de894b get out statistic array in case the rnti is not found 2024-10-22 11:05:20 +02:00
Laurent THOMAS
972a251798 bug in code duplication 2024-10-22 11:05:20 +02:00
Laurent THOMAS
a1fc1972e1 one old bug, one regression 2024-10-22 11:05:20 +02:00
Robert Schmidt
670e1fb8b4 CI: remove unknown imports and uses of names
pyflakes warns about various errors, addressed here. For cls_cluster.py,
remove (unknown) sys.exit and replace through Exception, as sys.exit()
has the unwanted effect that the CI script would stop.  Instead, raise
an Exception that would show the problem in the HTML, and ensures that
the script runs until the end.

These are the warnings flagged by pyflakes.

    cls_cluster.py:297:4: undefined name 'sys'

    cls_containerize.py:39:1: 'subprocess' imported but unused
    cls_containerize.py:41:1: 'threading' imported but unused
    cls_containerize.py:43:1: 'multiprocessing.Process' imported but unused
    cls_containerize.py:43:1: 'multiprocessing.Lock' imported but unused
    cls_containerize.py:43:1: 'multiprocessing.SimpleQueue' imported but unused
    cls_containerize.py:49:1: 'cls_cluster as OC' imported but unused
    cls_containerize.py:50:1: redefinition of unused 'cls_cmd' from line 42

    cls_module.py:28:1: 'os' imported but unused
    cls_module.py:29:1: 'sys' imported but unused
    cls_module.py:34:1: 'subprocess' imported but unused
    cls_module.py:35:1: 'datetime.datetime' imported but unused
    cls_module.py:211:11: undefined name 'sshconnection'

    cls_oaicitest.py:37:1: 'pexpect' imported but unused
    cls_oaicitest.py:47:1: 'cls_cluster as OC' imported but unused
    cls_oaicitest.py:54:1: 'matplotlib.pyplot as plt' imported but unused
    cls_oaicitest.py:55:1: 'numpy as np' imported but unused

    cls_oai_html.py:34:1: 'sys' imported but unused
    cls_oai_html.py:41:1: 'multiprocessing.Process' imported but unused
    cls_oai_html.py:41:1: 'multiprocessing.Lock' imported but unused
    cls_oai_html.py:41:1: 'multiprocessing.SimpleQueue' imported but unused

    cls_physim.py:37:1: 'multiprocessing.SimpleQueue' imported but unused

    cls_static_code_analysis.py:39:1: 'time' imported but unused
    cls_static_code_analysis.py:40:1: 'multiprocessing.Process' imported but unused
    cls_static_code_analysis.py:40:1: 'multiprocessing.Lock' imported but unused
    cls_static_code_analysis.py:40:1: 'multiprocessing.SimpleQueue' imported but unused

    epc.py:41:1: 'multiprocessing.Process' imported but unused
    epc.py:41:1: 'multiprocessing.Lock' imported but unused
    epc.py:41:1: 'multiprocessing.SimpleQueue' imported but unused

    main.py:60:1: 'pexpect' imported but unused
    main.py:66:1: 'datetime' imported but unused
    main.py:68:1: redefinition of unused 'subprocess' from line 63
    main.py:70:1: 'multiprocessing.Process' imported but unused
    main.py:70:1: 'multiprocessing.Lock' imported but unused
    main.py:70:1: 'multiprocessing.SimpleQueue' imported but unused

    provideUniqueImageTag.py:2:1: 'os' imported but unused
2024-10-22 09:51:23 +02:00
Robert Schmidt
a736bec570 Remove eNB_Trace: it is not used by the CI 2024-10-22 09:23:21 +02:00
Robert Schmidt
f8b480be3e Remove stats_monitor.py: it is not used by the CI 2024-10-22 09:23:01 +02:00
Robert Schmidt
8ef52d5432 Remove pyshark import: is not used 2024-10-22 09:08:51 +02:00
Robert Schmidt
ec06c78b30 Merge branch 'integration_2024_w42' into 'develop'
Integration: `2024.w42`

Closes #547, #853, #854, #858, #859, #862, #844, and #746

See merge request oai/openairinterface5g!3053

* !3047 Resolve compilation warnings on ARM
* !3052 Optimize T_ID() macro.
* !3045 CI: Reduce tested DL throughput on Aerial
* !3039 fix for Other SI reception when BWP start != 0
* !2997 websrv regression
* !3041 Update NR SA Tutorials
* !3042 Update TESTBenches.md to reflect current testbench
* !3004 Hotfix to remove an unwanted TX power reduction when using multiple TX antenna ports.
* reduce ssPBCH_BlockPower in gNB config of FHI7.2 pipeline
* !3046 A testsuite and a benchmark for RLC AM mode
* !3038 Various bugfixes for gNB stability, cleanup
* !3051 PUCCH2 DTX detection
* nr_psbchsim: fix segv by providing correct get_nrUE_params()
* !3049 Improve PUSCH and PUCCH SNR stability
* !3054 Allocate and add sD to DRB NSSAI in case sD != 0xffffff
2024-10-21 19:17:56 +00:00
Jaroslava Fiedlerova
3f51197548 Merge remote-tracking branch 'origin/fix-nssai-f1ap' into integration_2024_w42 (!3054)
Currently, sD has not been allocated, so the octet string is empty. Fix the
allocation to correctly write&read NSSAIs in UE context setup/modification
request messages.
2024-10-21 16:32:14 +02:00
Jaroslava Fiedlerova
784ae2a4df Merge remote-tracking branch 'origin/Improve_UL_SNR_stability' into integration_2024_w42 (!3049)
Reset TPC to 0 dB, after sending it to the UE, to not request new gain multiple
times before computing new value for SNR.
2024-10-21 16:23:07 +02:00
Robert Schmidt
2fe1c2f749 Correctly read NSSAI in UE Context Setup Request 2024-10-21 14:36:31 +02:00
Robert Schmidt
78fc47229b psbchsim.c: add license banner 2024-10-21 11:06:25 +02:00
Robert Schmidt
44616a6a19 nr_psbchsim: fix segv by providing correct get_nrUE_params()
When running, nr_psbchsim, we get this UBsan error:

    openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c:79:16: runtime error: member access within misaligned address 0x0ff4278c791c for type 'struct nrUE_params_t', which requires 8 byte alignment

The problem is that the corresponding definition of
get_nrUE_params() in psbchsim.c does not actually return the UE params,
but void, so we might or might not get something that resembles valid
data in nr_adjust_synch_ue.c. Fix this by including nr-uesoftmodem.h
(that provides the correct declaration) and define it correctly. Due to
type mismatches, also adapt downlink_frequency, uplink_frequency_offset,
and openair_cfg (which might result in the same type of bugs).
2024-10-21 11:04:43 +02:00
V. Tuan Ngo
da84a70414 Allocate and add sD to DRB NSSAI in case sD != 0xffffff 2024-10-21 10:45:11 +02:00
Robert Schmidt
dd7c3f80e8 Merge remote-tracking branch 'origin/pucch2_dtx' into integration_2024_w42 (!3051)
This adds DTX detection in PUCCH 2 receiver. This is detected by MAC
already which will drop PUCCH 2 indications that are detected as DTX.
For the moment this uses the same pucch0_dtx_threshold value indicated
in L1 section of the configuration file. The feature firstly reduces
unnecessary logging on stdout and the use of invalid CSI measurements in
the MAC scheduler.

Closes: #547
2024-10-19 12:56:21 +02:00
Robert Schmidt
4c0fa90818 Merge remote-tracking branch 'origin/bugfixes-gnb-stability' into integration_2024_w42 (!3038)
- Fixes #853, #854, #858, #859, #862
- handle repeated NGAP Initial context setup requests, thereby fixing assert:

      Assertion (!ue_p->as_security_active) failed!
      In rrc_gNB_generate_SecurityModeCommand() /home/eurecom/raymond/openairinterface5g/openair2/RRC/NR/rrc_gNB.c:2590
      logic error: security already activ

- A lot of cleanup: remove almost all use of protocol_ctxt_t in 5G RRC and use
  existing pointers instead
2024-10-19 12:48:50 +02:00
Robert Schmidt
5f5d859694 Merge remote-tracking branch 'origin/rlc-benchmark' into integration_2024_w42 (!3046)
Introduce two tests for NR RLC AM entity:

- test_nr_rlc_am_entity
- benchmark_nr_rlc_am_entity

The benchmark can be used to verify processing time improvements for NR RLC AM
entity. The benchmark creates two entities and creates an unbalanced
communication channel between them with 10% loss packet loss and 100:1 PDU sent
ratio. This allows the lists in RLC to build up and triggers RLC AM code
related to looking through the segment/pdu lists.

Example benchmark output:

    ubuntu@zeus:~/bpodrygajlo/openairinterface5g/cmake_targets/build$ ./openair2/LAYER2/nr_rlc/tests/benchmark_nr_rlc_am_entity
    [LOG] init aborted, configuration couldn't be performed
    log init done
    CMDLINE: "./openair2/LAYER2/nr_rlc/tests/benchmark_nr_rlc_am_entity"
    [CONFIG] debug flags: 0x00400000
    2024-10-16T14:58:20+02:00
    Running ./openair2/LAYER2/nr_rlc/tests/benchmark_nr_rlc_am_entity
    Run on (8 X 4700 MHz CPU s)
    CPU Caches:
      L1 Data 48 KiB (x4)
      L1 Instruction 32 KiB (x4)
      L2 Unified 1280 KiB (x4)
      L3 Unified 12288 KiB (x1)
    Load Average: 0.48, 0.27, 0.20
    ***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
    --------------------------------------------------------------------
    Benchmark                          Time             CPU   Iterations
    --------------------------------------------------------------------
    BM_nr_rlc_am_entity/100        50096 ns        50097 ns        13101
    BM_nr_rlc_am_entity/256       140386 ns       140387 ns         4868
    BM_nr_rlc_am_entity/1024      536323 ns       536311 ns         1309
    BM_nr_rlc_am_entity/4096     2084464 ns      2084385 ns          338
    BM_nr_rlc_am_entity/16384    8309318 ns      8309458 ns           81
    BM_nr_rlc_am_entity/20000    9843792 ns      9843774 ns           68
2024-10-19 12:47:46 +02:00
Jaroslava Fiedlerova
08972f35cb CI: lower ssPBCH_BlockPower in gNB conf for RAN-SA-FHI72-CN5G pipeline
Tests showed that a UE connected much faster, and did not fail as often
on Msg3.
2024-10-19 12:44:33 +02:00
Jaroslava Fiedlerova
d156661ce3 CI: decrease test SNR for nr_pucchsim with 8 antennas 2024-10-18 16:29:28 +02:00
Raymond Knopp
03b24c1ee6 fixed signal level computation for PUCCH2 and threshold in pucchsim.
Threshold allows detection with -9 dB SNR with 8 RX antennas
2024-10-18 15:43:08 +02:00
Jaroslava Fiedlerova
6a54905b2e Merge remote-tracking branch 'origin/remove_power_reduction_for_MIMO' into integration_2024_w42 (!3004)
This hotfix removes division by num_antenna_ports in PDSCH precoding matrix generation.
These matrices are defined for CSI reporting in this way but here we are using them for
transmission and this results in an unwanted 10*log10(num_antenna_ports) reduction in
transmit power (3dB for 2 antenna ports, 6dB for 4 antenna ports, etc.)
2024-10-18 14:54:28 +02:00
Raghavendra Dinavahi
22dd82556d New tests for nr_pbchsim 2024-10-18 14:47:26 +02:00
francescomani
af53f35824 avoid processing PUCCH2 without polar if declared missed detection 2024-10-18 11:17:58 +02:00
luis_pereira87
de887a1d2a Improve PUSCH and PUCCH SNR stability
Reset TPC to 0 dB, after sending it to the UE, to not request new gain multiple times before computing new value for SNR
2024-10-18 09:06:28 +01:00
Jaroslava Fiedlerova
0d4c6b8c4f CI: add new testcases for nr_dlsim testing in timing pipeline
Add new nr_dlsim test cases for testing with 4 antennas, 2 layers
in both scenarios - with and without T2 card.
2024-10-18 09:36:13 +02:00
Jaroslava Fiedlerova
61e7c0ae39 CI: Enable thread-pool in RAN-gNB-N300-Timing-Phytest-LDPC
Enable multi-threading in the nr_dlsim test with CPU, set 5 cores for
thread-pool using "-X 8,9,10,11,12" option.
2024-10-18 09:35:20 +02:00
Robert Schmidt
1917f5486d Merge remote-tracking branch 'origin/update-TESTBenches-doc' into integration_2024_w42 (!3042) 2024-10-18 06:32:07 +02:00
Robert Schmidt
d6e81682fc Merge remote-tracking branch 'origin/NR_SA_Tutorials' into integration_2024_w42 (!3041)
- Update links for the latest Ubuntu 24.04 LTS iso file
- Update docker install to the latest instructions on the official website
- Update UHD to v4.7.0.0 and update dependencies for Ubuntu 24.04
2024-10-18 06:31:47 +02:00
Robert Schmidt
d07044de7f Merge remote-tracking branch 'origin/websrv-small-regression' into integration_2024_w42 (!2997) 2024-10-18 06:31:34 +02:00
Robert Schmidt
eafca88d1a Merge remote-tracking branch 'origin/NR_UE_FIX_DECODE_OTHERSI' into integration_2024_w42 (!3039)
Test configuration: Tested SIB19 reception on SCS120 Khz + 50Mhz bw
config file used:
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band257.u3.32prb.usrpx410.conf
+ NTN config commands used

    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band257.u3.32prb.usrpx410.conf --sa --rfsim -d
    sudo ./nr-uesoftmodem --band 261 -C 27533280000 -r 32 --numerology 3 --ssb 72 --sa --rfsim -d --ue-scan-carrier

The Issue is that SIB19 is not being received because of CRC error, only
SIB1 was being received.
2024-10-18 06:27:55 +02:00
Robert Schmidt
839a16f477 Merge remote-tracking branch 'origin/Aerial_reduce_throughput' into integration_2024_w42 (!3045)
Reduce tested DL throughput on Aerial pipeline from 700 to 600Mbps
2024-10-18 06:27:20 +02:00
Robert Schmidt
39af48fafc Merge remote-tracking branch 'origin/log-optimization' into integration_2024_w42 (!3052)
This changes the way T_IDs are defined. The T_ID macro was using a
integer to pointer cast in order to provide type safety. This trick
disables some compiler optimizations, as explained here:
https://clang.llvm.org/extra/clang-tidy/checks/performance/no-int-to-ptr.html.
Removing the type cast reenables the compiler optimizations.
2024-10-18 06:26:38 +02:00
Robert Schmidt
3f9d9f81d4 Merge remote-tracking branch 'origin/Address-ARM-warnings' into integration_2024_w42 (!3047)
This MR aims to address warnings raised when compiling for ARM ( tested
with cross compilation, not directly on ARM hardware ).  The addressed
warnings are as follows:

- An unused variable in file oai_dfts_neon.c
- Wrong printf format specifier related to oai_cputime_t
- Wrong parameter type in qam64_qam64 call

This MR closes issue #844

Also, correctly set the pkg-config search path for libraries for the
target system. Also closes: #746
2024-10-18 06:24:51 +02:00
Robert Schmidt
c4344f26d1 Correctly pass ID to rrc_gNB_get_next_transaction_identifier() 2024-10-17 19:06:45 +02:00
Robert Schmidt
132cd64bb0 Handle empty RRC ULInformationTransfer
A UE might send a ULInformationTransfer without the actual content present
(intentionally or not). Check this and handle appropriately to avoid
a segfault when reading the empty NAS message.

Closes: #862
2024-10-17 19:06:45 +02:00
Robert Schmidt
304372d5e6 Remove unused protocol_ctxt_t 2024-10-17 19:06:45 +02:00
Robert Schmidt
63a0785430 Cleanup rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(): pass UE context directly 2024-10-17 19:06:45 +02:00
Robert Schmidt
759b0ec39e Cleanup rrc_CU_process_ue_modification_required(): remove protocol_ctxt_t 2024-10-17 19:06:45 +02:00
Robert Schmidt
ff3a14f7f9 Cleanup rrc_gNB_modify_dedicatedRRCReconfiguration: pass UE context directly 2024-10-17 19:06:45 +02:00
Robert Schmidt
01b240ebf1 Cleanup rrc_gNB_generate_dedicatedRRCReconfiguration(): pass UE context directly 2024-10-17 19:06:45 +02:00
Robert Schmidt
452ccc3235 Cleanup rrc_gNB_generate_dedicatedRRCReconfiguration_release()
Pass RRC and UE context pointers directly.
2024-10-17 19:06:45 +02:00
Robert Schmidt
dbeb1ea691 Cleanup nr_rrc_reconfiguration_req(): pass UE context directly 2024-10-17 19:06:45 +02:00
Robert Schmidt
145ab259e8 Cleanup rrc_gNB_generate_RRCRelease(): pass context directly 2024-10-17 19:06:45 +02:00
Robert Schmidt
fce17f873b Remove nr_rrc_common.c: declared functions are not used 2024-10-17 19:06:45 +02:00
Robert Schmidt
e497526543 Remove function declaration with non-existant definition 2024-10-17 19:06:45 +02:00
Robert Schmidt
788bc623e3 Cleanup rrc_gNB_decode_dcch(): use F1 message type, pass rrc pointer 2024-10-17 19:06:45 +02:00
Robert Schmidt
da9f4cec18 Cleanup: pass UE context directly into handle_rrcReestablishmentComplete() 2024-10-17 19:06:45 +02:00
Robert Schmidt
118674ae4e Cleanup handle_ueCapabilityInformation()
Pass UE context pointer directly. In the switch, do not return to not
create memory leaks (after the switch, memory is freed). Move the
function up to make it appear before the use of the function.
2024-10-17 19:06:45 +02:00
Robert Schmidt
88d6117d99 Cleanup in securityModeFailure handling
The xer_fprintf() call is already present in rrc_gNB_decode_dcch()
above.
2024-10-17 19:06:45 +02:00
Robert Schmidt
a5a746ee36 Cleanup: Pass UE context directly into rrc_gNB_generate_UECapabilityEnquiry() 2024-10-17 19:06:45 +02:00
Robert Schmidt
cec54f1c89 Cleanup: Pass UE context directly into rrc_gNB_send_NGAP_UPLINK_NAS() 2024-10-17 19:06:45 +02:00
Robert Schmidt
098f45c14d Cleanup: Pass RRC/UE context directly into handle_rrcReconfigurationComplete() 2024-10-17 19:06:45 +02:00
Robert Schmidt
7836fe5090 Cleanup: Pass UE context into handle_rrcSetupComplete()
Pass UE context, without protocol_ctxt_t, for cleanup. Remove the return
from within the switch, as this would lead to memory leaks; nothing is
executed after the switch statement (except for freeing memory).
2024-10-17 19:06:45 +02:00
Robert Schmidt
0056ac7bc9 Cleanup: Pass UE context into rrc_gNB_process_MeasurementReport() 2024-10-17 19:06:45 +02:00
Robert Schmidt
d5274af0ec Bugfix: correctly check for GTP initialization
The existing check for the initialization of GTP is wrong; GTP returns
-1 if it could not initialize. Correct this, such that the DU will stop
if GTP cannot be initialize.

If we continue, the DU is requested to set up a GTP tunnel; because GTP
is not initialized, it assumes it is in monolithic/no F1, and does not
set up a tunnel. The F1 UE Context setup response encoder then fails
with this assertion:

    Assertion (tnl->teid > 0) failed!
    In DU_send_UE_CONTEXT_SETUP_RESPONSE() ../../../openair2/F1AP/f1ap_du_ue_context_management.c:415

    Exiting execution
    ../../../openair2/F1AP/f1ap_du_ue_context_management.c:415 DU_send_UE_CONTEXT_SETUP_RESPONSE() Exiting OAI softmodem: _Assert_Exit_
    Aborted

Closes: #853
2024-10-17 19:06:45 +02:00
Robert Schmidt
30054b809e Handle faulty MeasurementReport gracefully
A UE might send a MeasurementReport without the actual IEs present
(intentionally or not). Check this and handle appropriately to avoid
assertion

    Assertion (measurementReport->criticalExtensions.present == NR_MeasurementReport__criticalExtensions_PR_measurementReport && measurementReport->criticalExtensions.choice.measurementReport != ((void*)0)) failed!
    In rrc_gNB_process_MeasurementReport() ../../../openair2/RRC/NR/rrc_gNB.c

Closes: #859
2024-10-17 19:06:45 +02:00
Robert Schmidt
e815972492 Handle unsolicited UE Capability Information gracefully
A UE might send a UE Capability Information without unsolicitatedly
(intentionally or not). Check this and handle appropriately to avoid
assertion

    Assertion (UE->xids[xid] == RRC_UECAPABILITY_ENQUIRY) failed!
    In handle_ueCapabilityInformation() ../../../openair2/RRC/NR/rrc_gNB.c

Closes: #858
2024-10-17 19:06:45 +02:00
Robert Schmidt
542ef1c1c6 Handle fault rrcReestablishmentComplete gracefully
A UE might send a rrcReestablishmentComplete without the actual IEs
present (intentionally or not). Check this and handle appropriately to
avoid assertion

    Assertion (reestablishment_complete->criticalExtensions.present == NR_RRCReestablishmentComplete__criticalExtensions_PR_rrcReestablishmentComplete) failed!
    In handle_rrcReestablishmentComplete() ../../../openair2/RRC/NR/rrc_gNB.c:1364

Closes: #854
2024-10-17 19:06:45 +02:00
Robert Schmidt
d71104da51 Handle repeated NGAP Initial Context Setup Request
Prior to this commit, if we receive an Initial Context Setup Request for
a UE that has AS security set up, the gNB asserts with

    Assertion (!ue_p->as_security_active) failed!
    In rrc_gNB_generate_SecurityModeCommand() openairinterface5g/openair2/RRC/NR/rrc_gNB.c:2590
    logic error: security already activ

However, TS 38.413 says:

> The AMF may initiate the Initial Context Setup procedure if a
> UE-associated logical NG-connection exists for the UE

(I interpret this as "it might happen anytime")

> store the received Security Key in the UE context and, if the NG-RAN
> node is required to activate security for the UE, take this security key
> into use.

(I interpret this as "do not set up AS security again")

In this commit, handle if we receive an Initial Context Setup Request
for an existing UE context. As said in the spec, we store the keys. If
security is not active, we trigger RRC Security Mode Command. If it is
active, we skip Security, and directly set up a PDU session. If there is
also no PDU session, we simply forward the NAS message, and acknowledge.

If there was no AS security, after security, the gNB would trigger the
setup of PDU sessions (if any), and then forward any NAS PDUs, which is
stated in the if block if AS security is already active.
2024-10-17 18:59:22 +02:00
Robert Schmidt
94a3a61e17 Reuse rrc_forward_ue_nas_message() for DL Information Transfer 2024-10-17 18:45:50 +02:00
Bartosz Podrygajlo
cd475ca07a Optimize T_ID() macro
This changes the way T_IDs are defined. The T_ID macro was using a integer to pointer cast in
order to provide type safety. This trick disables some compiler optimizations, as explained
here: https://clang.llvm.org/extra/clang-tidy/checks/performance/no-int-to-ptr.html.
Removing the type cast reenables the compiler optimizations.
2024-10-17 16:11:15 +02:00
Robert Schmidt
312f23189a Cross-build: add -Werror for CI build 2024-10-17 15:05:57 +02:00
Robert Schmidt
99d251b29d Correct pkg-config include path when cross-compiling
Prior to this commit, the include path for some libraries found through
pkg-config when cross compiling is not correct:

    $ grep include CMakeCache.txt
    blas_INCLUDEDIR:INTERNAL=/usr/include/x86_64-linux-gnu
    ...

This is because we did not tell pkg-config to search in the right path.
Since for cross-compilation, we install packages in parallel in the
system, override the primary directory where the .pc files located, in
the cross-compilation toolchain file for cmake.

Closes: #746
2024-10-17 10:48:24 +01:00
Rúben Soares Silva
57cccd633f Correctly cast qam64_qam64 parameters in dlsch_llr_computation.c
Change call to qam64_qam64 to use (short *) parameters as defined in the function declaration
2024-10-17 10:48:24 +01:00
Rúben Soares Silva
b46e20abb9 Address warnings in lte-enb.c by changing oai_cputime_t type.
Since long long is the bigger type ( 8 bytes ) of the two used ( long long and uint32_t ),
and long long is also available on ARM, change this parameter to always have this type.

This allows to always use format specifier '%lld' in the logs that use TICK_TO_US, which would otherwise return long long or uint32_t depending on architecture.
2024-10-17 10:42:20 +01:00
Jaroslava Fiedlerova
f97c6ceb6c CI: Update enc/decoder tests in RAN-gNB-N300-Timing-Phytest-LDPC
Set a maximum SNR value using the "-S" option to ensure that nr_dlsim
or nr_ulsim is executed only for a given SNR. This approach allows us
to verify the success of the encoding/decoding process at the specified
SNR. Check if the test succeeds is not yet implemented (currently we
only retrieve an information about encoding/decoding processing time).
To be implemented in the separate MR.

Always execute all the nr_dlsim/nr_ulsim tests even if one of them
fails. Each test takes around 5s, so we can execute them all to get
results for all the test scenarios.
2024-10-17 10:50:24 +02:00
Raymond Knopp
eb9cb2f988 added DTX detection in PUCCH 2 receiver. This is detected by MAC already
which will drop PUCCH 2 indications that are detected as DTX. For the
moment this uses the same pucch0_dtx_threshold value indicated in L1
section of the configuration file.
2024-10-17 10:08:08 +02:00
Robert Schmidt
65b9af543a Cleanup rrc_gNB_generate_SecurityModeCommand()
Cleanup this function: pass UE context directly, remove protocol_ctxt_t.
2024-10-16 19:13:48 +02:00
Robert Schmidt
8c14bf4921 Simplify rrc_gNB_process_security()
rrc_gNB_process_security() does not only set (process) the security
algorithms, but also checks for those. However, we don't use the check.
Simplify the function, to reintroduce the check later. Rename to
set_UE_security_algos() to better reflect what the functions do.
2024-10-16 19:13:48 +02:00
Robert Schmidt
0cea0395e8 Cleanup and rename process_gNB_security_key()
Rename to set_UE_security_key(), as it is for the UE. pass UE context
directly.
2024-10-16 19:13:48 +02:00
Robert Schmidt
4a40efede3 Clean up rrc_gNB_process_security() and called functions
Pass rrc pointer and UE context directly instead of protocol_ctxt_t.
2024-10-16 19:13:48 +02:00
Robert Schmidt
1d85ae0245 Cleanup nr_rrc_pdcp_config_security()
Pass directly pointer to UE context, remove protocol_ctxt_t (which
simply is not required, and supposed to be removed anyway).
2024-10-16 19:13:33 +02:00
Jaroslava Fiedlerova
4f5c73394d doc: Update TESTBenches.md
- remove Sphex UE - not used anymore
- remove RAN-L2-Sim-Test-5G from a list of pipelines - currently disabled
- 4G RFSim was moved to cacofonix
- minor cleanup
2024-10-16 17:08:49 +02:00
Bartosz Podrygajlo
698b5e3dcf A testsuite and a benchmark for RLC AM mode 2024-10-16 16:19:37 +02:00
Reem Bahsoun
1e73a95b58 Reduce tested DL throughput from 700 to 600Mbps 2024-10-16 14:40:37 +02:00
Guido Casati
d2fca6bba4 Update TESTBenches.md to reflect current testbench 2024-10-16 11:14:21 +02:00
luis_pereira87
9a3162f049 Tutorials: update UHD to v4.7.0.0 and update dependencies for Ubuntu 24.04 2024-10-16 08:54:01 +01:00
luis_pereira87
156aedb96b Tutorials: Update docker install to the latest instructions on the official website 2024-10-16 08:53:30 +01:00
luis_pereira87
1ff4ff1455 Tutorials: Update links for the latest Ubuntu 24.04 LTS iso file 2024-10-16 08:52:50 +01:00
Rúben Soares Silva
d9a5866bcd Address warning unused variable 'tw512_128p' 2024-10-15 16:48:23 +01:00
Raghavendra Dinavahi
586a4b76f8 Update pbchsim to work with other numerologies 2024-10-15 17:26:03 +02:00
Raghavendra Dinavahi
1bf4ca7d97 fix for Other SI reception when BWP start != 0 2024-10-15 13:11:13 +02:00
Robert Schmidt
65d8d410b5 Merge branch 'integration_2024_w41' into 'develop'
Integration: `2024.w41`

See merge request oai/openairinterface5g!3032

* !3006 Fix some sizeof and switch-case issues
* !3028 Add CMakePresets.json
* !3011 Aerial: cleanup unused code, avoid superfluous memcpy(), avoid L1 structures
* !3022 NR CSI-RS L1 refactoring → check CI
* !2935 Improvements in handling the beamforming procedure via FAPI
* !3026 NR ULSCH scheduler fix when using transform precoding
* !3031 CI: Increase test bitrates for 100 MHz scenario in SA-2x2 pipeline
* !3017 Fix SRS
* !2731 Implementation of 2-Step RA
* !3027 Add dockerized include what you use tool
2024-10-15 07:26:22 +00:00
Jaroslava Fiedlerova
6a72669a1b Merge remote-tracking branch 'origin/iwyu' into integration_2024_w41 2024-10-14 15:10:47 +02:00
Jaroslava Fiedlerova
75af74c731 Merge remote-tracking branch 'origin/RA_2-Step' into integration_2024_w41 2024-10-14 14:47:19 +02:00
francescomani
eccecde2c7 Merge remote-tracking branch 'origin/fix-SNR-based-on-SRS' into integration_2024_w41 2024-10-14 14:31:17 +02:00
Jaroslava Fiedlerova
e4cb68a750 Merge remote-tracking branch 'origin/ci-sa-2x2-increase-bitrate' into integration_2024_w41 2024-10-14 13:23:11 +02:00
Jaroslava Fiedlerova
a177dfa3bb Merge remote-tracking branch 'origin/transform_precoding_hotfix' into integration_2024_w41 2024-10-14 13:22:54 +02:00
Laurent THOMAS
a6576db51b websrv regression 2024-10-14 11:32:49 +02:00
Robert Schmidt
4398a57eb2 Increase SC-FDMA test UL iperf traffic to 18Mbps 2024-10-13 19:03:33 +02:00
francescomani
4528be42de Merge remote-tracking branch 'origin/NR_gNB_BF_matrix' into integration_2024_w41 2024-10-11 16:55:25 +02:00
rmagueta
be6dcccd93 Add CI test for SRS in nr_ulsim 2024-10-11 11:12:53 +01:00
rmagueta
765bb64b5c Fix SNR based on SRS 2024-10-11 11:12:21 +01:00
Robert Schmidt
e8597a16ed Merge remote-tracking branch 'origin/NR_CSI_improvements' into integration_2024_w41 2024-10-11 11:56:53 +02:00
Robert Schmidt
3d32ce3904 Merge remote-tracking branch 'origin/aerial-cleanup' into integration_2024_w41 2024-10-11 11:56:46 +02:00
ndomingues
c7e9d687c6 Set msg1_SubcarrierSpacing to the same value as the UL SCS
3GPP 38.331: If absent, the UE applies the SCS as derived from the prach-ConfigurationIndex in RACH-ConfigGeneric (see tables Table 6.3.3.1-1, Table 6.3.3.1-2, Table 6.3.3.2-2 and Table 6.3.3.2-3, TS 38.211 [16]).

This procedure for msg1_SubcarrierSpacing NULL is not implemented, so we aplly the same value of UL SCS.
2024-10-11 10:12:06 +01:00
Jaroslava Fiedlerova
444961470a Merge remote-tracking branch 'origin/cmake-presets' into integration_2024_w41 2024-10-11 11:09:12 +02:00
Jaroslava Fiedlerova
cab28f0f5a Merge remote-tracking branch 'origin/misc-fixes' into integration_2024_w41 2024-10-11 11:09:00 +02:00
Bartosz Podrygajlo
b69b4dc0f4 Add CMakePresets.json
Introduce CMakePresests.json which is a simple way to perform incremental build using cmake

New configure resets were added:
 - default: Configure compilation with default options
 - tests: Same as above but ENABLE_TESTS and SANITIZE_ADDRESS is ON

New build presets were added:
 - 5gdefault: Build the software for NR rfsimulator test
 - default: same as 5gdefault
 - 4gdefault: Build the software for LTE rfsimulator test
 - tests: build all unit tests

To configure using configuration preset:

`cmake --preset <preset_name>`

To build using a build preset:

`cmake --build --preset <preset_name>`
2024-10-11 09:12:49 +02:00
francescomani
a4c211f2b4 removing p7 prach beamforming assertion 2024-10-11 08:02:06 +02:00
francescomani
3f550a27be decouple call for config scc from init of MAC 2024-10-11 08:02:06 +02:00
francescomani
7af574dd54 adding new config file parameters in FR2 RFsim CI config file 2024-10-11 08:02:06 +02:00
francescomani
abc5069a55 handling beams in PHY RX channels 2024-10-11 08:02:06 +02:00
francescomani
014338105e remove unused bf_weights feild from config files 2024-10-11 08:02:06 +02:00
francescomani
64ed4e9262 handling beams in PHY TX channels 2024-10-11 08:02:06 +02:00
francescomani
7e82854b29 improvements to set beam index via FAPI message
use of number of SSBs transmitted before current one as fapi index, creation of a mapping vector from SSB to fapi index
2024-10-11 07:59:36 +02:00
francescomani
2a9a038dbd improvements in RU beamforming handling procedures 2024-10-11 07:59:31 +02:00
Jaroslava Fiedlerova
bdefd02f27 CI: increase tested bitrate for 100 MHz scenario in SA-2x2
Modify the UL/DL UDP iperf test cases to use a higher requested bitrate
for the scenario with 100 MHz bandwidth in the SA-2x2 pipeline. Adjust
gNB config file to allow for higher UL throughput.
2024-10-11 07:57:34 +02:00
francescomani
f3b6155f17 OAI specific config_request field for analog beamforming 2024-10-10 16:14:32 +02:00
Robert Schmidt
eb98aa690e Docker: Use -Werror in Aerial build 2024-10-10 16:04:08 +02:00
Robert Schmidt
3da3ec1907 Resolve error "unknown type name"
Resolve error:

   nfapi/oai_integration/aerial/fapi_nvIPC.h:56:16: error: unknown type name ‘nvipc_params_t’
   56 | int nvIPC_Init(nvipc_params_t nvipc_params_s);

By including the header. Also, move the definiton of the struct to the
MAC, where it is actually stored, and out of the radio common_lib.h,
since this is not a radio (split 7/8) parameter.
2024-10-10 16:02:29 +02:00
Robert Schmidt
35174d7917 Remove useless code
We don't use CUDA (see previous commit). Further, the variables
referenced in this piece of code are not used later.
2024-10-10 16:02:29 +02:00
Robert Schmidt
da5601b8bf Remove code enclosed in NVIPC_CUDA_ENABLE
When compiling aerial, we compile without CUDA support (see e.g.,
docker/Dockerfile.gNB.aerial.ubuntu22). Hence, do not check for it in
aerial for the moment, we won't use it for the foreseeable future.
2024-10-10 16:02:29 +02:00
Robert Schmidt
c648dfd078 Bugfix: preamble_list is an array
Since commit e6e25275ed, preamble_list is
an array, not a pointer. Hence, we don't need to call free().
2024-10-10 16:02:29 +02:00
Robert Schmidt
c945bef2f1 Remove check for NFAPI_MODE_AERIAL, it's pointless
In Aerial bindings (FAPI-Aerial), the NFAPI mode must be
NFAPI_MODE_AERIAL (otherwise, we would not be executing this code).
Hence, the switches don't make sense. Remove them.

The check can more easily be checked with

    git show <commit> --ignore-all-space
2024-10-10 16:02:29 +02:00
Robert Schmidt
f2f08ac52a Remove ENABLE_AERIAL switch in aerial bindings
As is visible at the top of the patch, for compiling aerial_lib (the
binding FAPI-Aerial), we always add ENABLE_AERIAL. Thus, all the code
within ENABLE_AERIAL will be compiled; we can also simply take it out.
2024-10-10 16:02:29 +02:00
Robert Schmidt
f7afc8e8ee Aerial: compile P5 with Aerial-specfic modifications 2024-10-10 16:02:29 +02:00
Robert Schmidt
e04ed98994 Remove unused code 2024-10-10 16:02:29 +02:00
Rúben Soares Silva
0609d31dc7 Only copy RX_DATA.indication pdu if there's data 2024-10-10 16:02:29 +02:00
Robert Schmidt
83838962fd Aerial: Avoid superfluous memcpy(), reduce scope
We can directly read from buffers, so the memcpy() only takes time.
Also, limit the scope of the variables for the unpacking of
RX_DATA.indication.

Co-authored-by: Rúben Soares Silva <rsilva@allbesmart.pt>
2024-10-10 16:01:29 +02:00
Robert Schmidt
1a97aa359e aerial_phy_nr_srs_indication(): implement without relying on L1 structures 2024-10-10 16:00:39 +02:00
Robert Schmidt
77d62cbf57 Remove aerial_phy_nrach_indication(): this is a 4G callback 2024-10-10 16:00:39 +02:00
Robert Schmidt
d91e80beba Remove aerial_phy_nb_harq_indication(): this is a 4G callback 2024-10-10 16:00:39 +02:00
Robert Schmidt
8150328353 Remove aerial_phy_lbt_dl_indication(): this is a 4G callback 2024-10-10 16:00:39 +02:00
Robert Schmidt
f1cbbc9f83 Remove aerial_phy_sr_indication(): this is a 4G callback 2024-10-10 16:00:38 +02:00
Robert Schmidt
88d548fbc2 Remove aerial_phy_cqi_indication(): this is a 4G callback 2024-10-10 16:00:38 +02:00
Robert Schmidt
17ed5d345e Remove aerial_phy_srs_indication(): this is a 4G callback 2024-10-10 16:00:38 +02:00
Robert Schmidt
8888a6bd70 Remove aerial_phy_harq_indication(): this is a 4G callback 2024-10-10 16:00:38 +02:00
Robert Schmidt
24c8e6c5c1 Remove aerial_phy_sync_indication(): this is a 4G callback 2024-10-10 16:00:38 +02:00
Robert Schmidt
3b4df11078 Remove aerial_phy_slot_indication(): this is a 4G callback 2024-10-10 16:00:38 +02:00
francescomani
6b58d357d9 moving beamforming matrix to MAC and feeding it to FAPI structures 2024-10-10 12:42:17 +02:00
francescomani
7fdae002b9 remove UL MCS limitation on CI transform precoding test 2024-10-10 12:06:47 +02:00
francescomani
a343ec03fd changes in get_transformPrecoding to follow what's written in 6.1.3 of 214 2024-10-10 11:58:07 +02:00
Bartosz Podrygajlo
de4a737131 Add dockerized include what you use tool
Introduces a tool that organizes C/C++ header includes. The tools output
should still be manually reviewed by a contributor.
2024-10-10 09:41:11 +02:00
ndomingues
64ee6a4776 Use common function to get mu at UE for PRACH 2024-10-09 19:04:43 +02:00
rmagueta
aaf9b57abb Call active=0 for CSI-RS early 2024-10-09 10:01:46 +01:00
ndomingues
88a9515321 Update FEATURE_SET with 2-Step RA feature 2024-10-09 09:11:16 +01:00
ndomingues
acd776fe28 Implementation of RA 2-Step MsgB procedures at UE 2024-10-09 09:11:16 +01:00
ndomingues
9d786bdee7 Implementation of RA 2-Step MsgB procedures at gNB 2024-10-09 09:11:16 +01:00
ndomingues
19e0df13a9 Add support for Random Access MsgB RNTI 2024-10-09 09:04:44 +01:00
ndomingues
160210ebae Baseline implementation of RA 2-Step MsgA procedures at UE 2024-10-09 09:04:44 +01:00
ndomingues
cbbbeb8051 Baseline implementation of RA 2-Step MsgA procedures at gNB 2024-10-09 09:04:41 +01:00
francescomani
a6f03b3f79 ULSCH scheduler fix when using transform precoding
Bug in ULSCH scheduler for transform precoding. It ignores transform precoding specific tables when building ul_pf_tbs.
2024-10-09 09:45:01 +02:00
Robert Schmidt
c609dd8fcf Implement common nr_get_mu() in nr_mac_common
These functions look up the numerology, and code can be harmonized:

- ssb_index_from_prach()
- find_SSB_and_RO_available()
- schedule_nr_prach()

The next commits also need to look up the numerology from the
UplinkConfigCommon. This provides the common implementation to be used
in follow-up commits.
2024-10-08 14:19:57 +01:00
ndomingues
3083f4f3d1 Common parameters to apply successRAR 2024-10-08 14:19:57 +01:00
ndomingues
c4b51b78d6 Decode msgA_ConfigCommon_r16 from received SIB1 at UE and save it in bwp->msgA_ConfigCommon_r16 2024-10-08 14:19:57 +01:00
ndomingues
9d84ba7fbf Refactor enum nr_ra_type_t and make it common for both gNB and UE 2024-10-08 14:19:57 +01:00
ndomingues
abb7439b8a Compute RA 2-Step MsgB_RNTI as specified in 3GPP TS 38.321 Section 5.1.3a 2024-10-08 14:19:57 +01:00
ndomingues
e4655154ee Add RA 2-Step configuration parameters to SIB1 2024-10-08 14:19:55 +01:00
ndomingues
22a4480c2a Add configuration file with support for RA 2-Step 2024-10-08 14:15:43 +01:00
francescomani
f25ad2b098 remove unnecessary return at the end of nr_ue_csi_rs_procedures 2024-10-08 09:46:43 +02:00
francescomani
46beda91ee moving CSI-RS common functions to a new file 2024-10-08 09:46:43 +02:00
francescomani
a54a919bd8 removing UE dependence on gNB CSI FAPI structure and decoupling UE from gNB procedures 2024-10-08 09:46:43 +02:00
francescomani
26fd99ff61 terminal independent common functions in nr_generate_csi_rs 2024-10-08 09:46:43 +02:00
francescomani
ddbbaef302 remove nr_csi_info_t from gNB (unused) 2024-10-08 09:46:43 +02:00
francescomani
7e009781cd moving out CSI mapping parameters from nr_generate_csi_rs 2024-10-08 09:46:43 +02:00
francescomani
ad96697d10 common function for CSI-RS mapping parameters 2024-10-08 09:46:43 +02:00
Robert Schmidt
e15fa14c57 Merge branch 'integration_2024_w40b' into 'develop'
Integration: `2024.w40b`

See merge request oai/openairinterface5g!3021

* !2890 F1AP encoding/decoding library
* !2969 Time domain samples scope for NR UE & gNB
* !2998 warmup RF board in UE
* !3009 Fix the ratio of PDSCH EPRE to DM-RS EPRE
* !2965 Refactoring of prepare_scc in gNB config
* !3002 CI: Change frequency used by AW2S pipeline
* !3007 Enable gNB configuration through YAML file
* !3001 Minor ue fixes
* !2971 Use getaddrinfo() when connecting to rfsimulator
2024-10-07 20:28:28 +00:00
Jaroslava Fiedlerova
36682aa76f Merge remote-tracking branch 'origin/ue-sim-use-getaddrinfo' into integration_2024_w40b 2024-10-07 16:41:46 +02:00
Jaroslava Fiedlerova
dbd37dac38 Merge remote-tracking branch 'origin/minor-ue-fixes' into integration_2024_w40b 2024-10-07 16:40:09 +02:00
Robert Schmidt
d6f0ff37c2 RFsim: doc serveraddr: mention IPv4v6 and DNS 2024-10-07 14:17:12 +02:00
Robert Schmidt
ac7c02d8e5 CI 5G E1 RFsim test: Use DNS name for RFsim 2024-10-07 14:17:12 +02:00
Robert Schmidt
a648afd4c6 RFsim Client: Improve logs
- Remove double "Connection ... established" (already printed in
  caller)
- Remove useless, there is already the logging module
- Print getaddrinfo() error as LOG_E (error)
2024-10-07 14:16:15 +02:00
Laurent THOMAS
8f46b07b22 Lacking RRC check: avoid SEGV if the received packet is not what we believe 2024-10-07 13:39:29 +02:00
Jaroslava Fiedlerova
169dddf8c0 Merge remote-tracking branch 'origin/gnb-yaml' into integration_2024_w40b 2024-10-07 13:37:57 +02:00
Jaroslava Fiedlerova
1136e4cafd Merge remote-tracking branch 'origin/ci-aw2s-change-frequency' into integration_2024_w40b 2024-10-07 13:37:42 +02:00
Laurent THOMAS
f77f428767 Small optimization L2 to wireshark
the code creates a sink to read all traced packets and drop it.  but
this works only if we send to a local address and if there is not
another sink (like if we trace both UE and gNB in the same machine).
this sink's purpose is only to prevent to get automatic packets back
from the kernel saying "no listener". So, instead of killing the trace
when we can't create the sink (as done previously), we now just let the
trace in operation.
2024-10-07 13:37:34 +02:00
Bartosz Podrygajlo
01066a3f0d Fix some sizeof and switch-case errors reported by CodeChecker
CodeChecker is a python application that collects reports from static analyzers like
clang-tidy, clangsa, cppcheck.
2024-10-07 09:35:24 +02:00
Bartosz Podrygajlo
0daabdeb87 Update the aw2s entrypoint to support new yaml config and updated images 2024-10-07 09:15:44 +02:00
Bartosz Podrygajlo
8e6234a2f5 Enable gNB configuration through YAML file 2024-10-07 09:10:42 +02:00
Jaroslava Fiedlerova
fa6840c05e Merge remote-tracking branch 'origin/gnb-config-code-refactoring' into integration_2024_w40b 2024-10-04 16:36:23 +02:00
Jaroslava Fiedlerova
8584da1636 CI: add 1x1 AW2S test with multi UEs 2024-10-04 11:46:22 +02:00
Jaroslava Fiedlerova
5e9c432b41 CI: change frequency used by AW2S 2024-10-04 11:46:22 +02:00
Jaroslava Fiedlerova
406227699b CI: rename AW2S configs/files used for 2x2 testing 2024-10-04 11:46:17 +02:00
Jaroslava Fiedlerova
9ef7e6dec0 Merge remote-tracking branch 'origin/fix-Beta_DMRS_PDSCH' into integration_2024_w40b 2024-10-04 11:00:31 +02:00
Jaroslava Fiedlerova
9ca37d1b94 Merge remote-tracking branch 'origin/ue-RF-warmup' into integration_2024_w40b 2024-10-04 07:53:17 +02:00
Jaroslava Fiedlerova
b824e55cdd Merge remote-tracking branch 'origin/imscope-td-plot' into integration_2024_w40b 2024-10-04 07:52:36 +02:00
Jaroslava Fiedlerova
7be2a165b3 Merge remote-tracking branch 'origin/f1ap-msg-encdec-tests' into integration_2024_w40b 2024-10-04 07:52:01 +02:00
Robert Schmidt
d8a6c5c9d5 Merge branch 'integration_2024_w40' into 'develop'
Integration: `2024.w40`

Closes #756 and #849

See merge request oai/openairinterface5g!3014

* !2886 (doc): Added a new doc on hardware requirements
* !2955 dockerized clang-format error detection tool
* !3005 Fix symbol size in nr_dlsch_mmse
* !2930 SRS tx power
* SA-B200-Module-SABOX pipeline: improve radio
* SA-AW2S-CN5G: accept 5% ping packet loss
* !3003 Resolve "SEGFAULT in L1_rx_thread" - CI
* !3016 fix tests for log2_approx and log2_approx64
* patch to move RFsim-4G to cacofonix
2024-10-03 08:45:25 +00:00
Robert Schmidt
4c85eb4a9e More CI RFsim4G to cacofonix 2024-10-03 09:10:33 +02:00
Robert Schmidt
fa5ca8d7ea Merge remote-tracking branch 'origin/756-segfault-in-l1_rx_thread' into integration_2024_w40 2024-10-02 17:06:57 +02:00
Robert Schmidt
c2535df334 Merge remote-tracking branch 'origin/fix_log2_approx_tests' into integration_2024_w40 2024-10-02 17:06:33 +02:00
Robert Schmidt
27d073d4f6 Free CellGroup 2024-10-02 17:04:53 +02:00
Robert Schmidt
ba10db149a Logs when UE cannot use CCCH 2024-10-02 17:04:53 +02:00
andrewse
2335f5b6cf Don't call mac_rlc_data_ind when SRB0 already exist for UE.
It can happen that L1 gives us a TB that we interpret as receiving UL
MAC TB with LCID "UL_SCH_LCID_CCCH1". This might or might not be
correct, but currently, we observe segfaults when trying to encode the
cellgroup in send_initial_ul_rrc_message() (encode_cellGroupConfig()).

This fix prevents a segfault by not delivering a MAC SDU to RLC if CCCH
is already present. Note that in some cases, this could still happen,
e.g. Resume Request. However, we don't support this message, so ignore
it for the moment.

This fix enables a gNB to operate continuously for extended periods
(days), which is essential for real deployment scenarios.

Closes: #756
2024-10-02 17:04:53 +02:00
Ghislain Bourgeois
6344fce6e4 Reinitialize sock to -1 after closing
Prevents bug where a closed socket is returned.
2024-10-02 10:34:27 -04:00
rmagueta
73b00e8c1c Fix the ratio of PDSCH EPRE to DM-RS EPRE
This fix gets DL 4-layer working with COTS UE
2024-10-02 15:30:11 +01:00
Thomas Schlichter
28656a1adf add test log2_approx.boundaries 2024-10-02 13:30:16 +02:00
Thomas Schlichter
d6f9bcd1cc fix test log2_approx64.boundaries
The test was actually never executed correctly (unsigned -10 is never <= 10), and log2_approx64_ref() was not accurate enough.
Therefore replace it by directly comparing one value above and one value below each rounding boundary.
2024-10-02 13:30:16 +02:00
Thomas Schlichter
6bf68c81c8 skip the test log2_approx.complete when using ctest
To skip the test, we use the gtest command line parameter "--gtest_filter" to filter out the unwanted test.
This parameter is described as follows:

--gtest_filter=POSITIVE_PATTERNS[-NEGATIVE_PATTERNS]
      Run only the tests whose name matches one of the positive patterns but
      none of the negative patterns. '?' matches any single character; '*'
      matches any substring; ':' separates two patterns.
2024-10-02 13:30:16 +02:00
Robert Schmidt
5ed1dcd2fc CI SA-AW2S-CN5G: adjust ping loss threshold
In this pipeline, we frequently see losses of a single packet; we did
not find the true reason yet.

Accept 5% losses, assuming that serious packet loss would be catched by
(1) higher ping losses (2) iperf would be affected.
2024-10-02 12:37:22 +02:00
Robert Schmidt
0699f1a993 CI SA-B200-Module-SABOX: improve behavior by adjusting radio parameters 2024-10-02 12:34:58 +02:00
Guido Casati
48bb594e30 Cleanup gnb_config.c 2024-10-02 11:39:24 +02:00
Guido Casati
1438dfbd35 Refactored fill_scc_sim
* clang formatted
* code cleanup
* improve readability
2024-10-02 11:39:24 +02:00
Guido Casati
8d222bc474 Refactoring of prepare_scc
* improved readability
* clang formatted
2024-10-02 11:39:23 +02:00
Guido Casati
a32a8504c9 Use a macro to initialize NR_SetupRelease structs
* introduced macro INIT_SETUP_RELEASE to optimize code in gnb_config.c
2024-10-02 11:36:43 +02:00
Guido Casati
56e510b2f2 Use calloc_or_fail in gnb_config.c 2024-10-02 11:36:43 +02:00
Guido Casati
ee26e51015 Use abort instead to exit in calloc_or_fail
* abort generates a core dump
2024-10-02 11:36:43 +02:00
Guido Casati
13757cfd28 Cleanup of long-time commented out code in prepare_scc 2024-10-02 11:36:43 +02:00
Thomas Laurent
5811ab1dc8 Apply 2 suggestion(s) to 2 file(s)
Co-authored-by: Robert Schmidt <robert.schmidt@eurecom.fr>
2024-10-02 09:11:49 +00:00
Ghislain Bourgeois
320747e0b0 Use getaddrinfo() and add IPv6 support in startServer
This commit refactors startServer to use getaddrinfo() to
prepare the socket creation. Doing so, it also adds support for
IPv6 by using AF_UNSPEC as the address family.
2024-10-02 09:34:24 +02:00
Ghislain Bourgeois
53d31eb26e Use getaddrinfo() when connecting to rfsimulator
This commits uses getaddrinfo(3) when connecting as client to the
rfsimulator. This enables name lookups, through DNS or a hosts file.

This change makes it easier to use the simulator in a dynamic
environment like Docker or Kubernetes by only targeting the name of
the container or service.
2024-10-02 09:34:24 +02:00
Jaroslava Fiedlerova
dcd09069b6 Merge remote-tracking branch 'origin/srs-tx-power' into integration_2024_w40 2024-10-01 22:17:55 +02:00
Jaroslava Fiedlerova
5636d77ce7 Merge remote-tracking branch 'origin/issue_849' into integration_2024_w40 2024-10-01 19:05:06 +02:00
Jaroslava Fiedlerova
b8401a189a Merge remote-tracking branch 'origin/clang-format-tool' into integration_2024_w40 2024-10-01 19:04:33 +02:00
Jaroslava Fiedlerova
a700da57b3 Merge remote-tracking branch 'origin/hardware-documentation' into integration_2024_w40 2024-10-01 18:53:40 +02:00
Bartosz Podrygajlo
fecff5f346 Reset SRS power control adjustment state if p0 or alpha is provided
Reset h_b_f_c (SRS power control adjustment state) when SRS-ResourceSet
p0 or alpha is provided by higher layers, accroding to 38.213 7.3.1.
2024-10-01 10:15:40 +02:00
Bartosz Podrygajlo
7359c6b66e Move h_b_f_c to UL BWP
Move h_b_f_c (or SRS power control adjustment state) to UL BWP structure. This is a per
bwp parameter so it makes sense to make its lifetime the same as BWP, even if we dont support
>1 UL BWPs.
2024-10-01 10:15:33 +02:00
Bartosz Podrygajlo
bfc47445ee SRS tx power with power control state 2024-10-01 10:15:23 +02:00
Robert Schmidt
fc0cbc3147 Create_Workspace: exit 0 at end
the create_workspace.sh script checks if a branch should be merged into
what we are trying to checkount (i.e., typically develop into
feature-branch). The problem is that it uses a short-hand for an if
branch.

    [ -n "${merge}"] && git merge...

If we don't request a merge, [ -n XX ] will evalute to 1, and not do the
git merge. Since it's the last command in the script, this makes the
script return 1 (failure), when it actually succeeded.

Add exit 0 to ensure we return 0 after successful end of the script. If
there is a failure, the script will terminate early. It can be tested by
e.g., giving a wrong commit ID.

Reviewed-by: Jaroslava Fiedlerova <Jaroslava.Fiedlerova@openairinterface.org>
2024-10-01 09:19:43 +02:00
Robert Schmidt
54f927b2cb Merge branch 'integration_2024_w39' into 'develop'
Integration: `2024.w39`

Closes #846

See merge request oai/openairinterface5g!2990

* !2718 Added Jenkins job for Colosseum testing integration
* !2901 Fix log2_approx
* !2983 fix(docker): making tini download platform specific to support ARM64 native builds
* !2919 Add E2 SM in the target dockerfiles
* !2981 NR gNB fix PMI report evaluation
* !2979 NR-UE: Merging different UE NR SLOT FEP procedures into one.
* !2899 SIB19 initialization and scheduling on gNB
* !2953 Remove unnecessary c includes
* !2926 Fix SRS FAPI at gNB
* !2987 fix for variable power in PDSCH REs in case of 25 PRBs Bandwidth
* !2993 remove DRX from UE capabilities: not supported yet
* !2711 NR UE UL time alignment handling improvements
* !2995 some small fixes for 5G NR
* !2992 cleaner faster nr_pdcch_demapping_deinterleaving() inner loop
* !2986 NR PDCP ticks for F1 split
* !2982 CI framework cleanup
2024-10-01 06:24:27 +00:00
Sakthivel Velumani
f8a51921a8 Update default path for websrv resources 2024-09-30 21:02:29 -04:00
Sakthivel Velumani
56d05276bd Fix bug in websrv opening page
allocating enough memory to hold url to index page.
2024-09-30 20:29:59 -04:00
Jaroslava Fiedlerova
66b34d1ef1 Merge remote-tracking branch 'origin/ci-framework-cleanup' into integration_2024_w39 2024-09-30 22:21:59 +02:00
Bartosz Podrygajlo
b2c49fbc27 Add time-domain scope to gNB imscope. 2024-09-30 20:41:08 +02:00
Bartosz Podrygajlo
80f90b5599 Add time domain sample scope before sync
Added new data sync for UE which displays time domain samples read from RF device
before synchronization to PSS/SSS
2024-09-30 20:36:38 +02:00
Bartosz Podrygajlo
43a9236963 Improve imscope's scatterplot
- Reduce point size to 1 pixel
 - call ImPlot::PlotScatter as many times as needed
2024-09-30 20:36:18 +02:00
Bartosz Podrygajlo
7986a4de8e Time domain samples scope for NR UE
Add a new scope data source (ueTimeDomainSamples) which provides time domain samples
for antenna 0 to the scope. Add graphical representation of the data in imscope.

Removed C-define from ENABLE_IMSCOPE cmake option, the #define was unused and this way
code does not have to be recompiled when imscope enable state changes.
2024-09-30 20:34:09 +02:00
arora
f648c09df6 system requirements, cpu frequency information
Signed-off-by: arora <sagar.arora@openairinterface.org>
2024-09-30 16:43:05 +02:00
Robert Schmidt
0e23b795b7 CI: use Custom_Script to execute SR-IOV/setup scripts for FHI72 pipeline 2024-09-30 16:08:58 +02:00
Robert Schmidt
5ee9e20f7d SAbox: consistently pull/clean test images in each step 2024-09-30 15:31:41 +02:00
Robert Schmidt
d3b4a6b788 Fix: clear HTML global's internal state 2024-09-30 15:25:10 +02:00
Jaroslava Fiedlerova
6984c05aad Merge remote-tracking branch 'origin/fix_nr_pdcp_tick' into integration_2024_w39 2024-09-30 13:14:06 +02:00
francescomani
601ad40490 fix for nr_dlsch_mmse rxdataF_comp symbol size (Closes: #849) 2024-09-30 09:14:44 +02:00
Robert Schmidt
17c148b7a5 Merge remote-tracking branch 'origin/nr_pdcch_demapping_deinterleaving-improve' into integration_2024_w39 2024-09-29 22:10:38 +02:00
Robert Schmidt
51bb3d25cf Merge remote-tracking branch 'origin/small_fixes_for_5G_NR' into integration_2024_w39 2024-09-29 22:09:26 +02:00
francescomani
2d3ac5803e formatting 2024-09-29 17:55:28 +02:00
Xin Zhe Khooi
163d058d4a introduce dedicated nr pdcp tick thread for F1 split
Currently, NR PDCP ticks are active only with monolithic gNB, triggered by the MAC scheduler in gNB_scheduler.c.
In F1 split mode, as there is no MAC, there’s no source to advance the NR PDCP timer via "nr_pdcp_wakeup_timer_thread()".
This commit introduces a dedicated thread for NR PDCP ticks in gNB-CU and CU-UP mode.
Without it, packet losses at the F1 uplink would cause indefinite buffering, as t-Reordering won't expire due to the lack of NR PDCP timer ticks.
2024-09-29 15:10:54 +00:00
Raymond Knopp
d2ebc356a0 removed division by num_antenna_ports in PDSCH precoding matrix generation. These matrices are defined for CSI reporting in this way but here we are using them for transmission and this results in an unwanted 10*log10(num_antenna_ports) reduction in transmit power 2024-09-29 10:17:56 +02:00
Robert Schmidt
2b67b0e1de CI PullImage(): HTML: indicate pulled images 2024-09-28 12:58:22 +02:00
Robert Schmidt
904534f0da Reboot USRP: use infinitive to harmonize with other steps 2024-09-28 12:58:22 +02:00
Robert Schmidt
60b9649e00 Implement CreateWorkspace() through script, print dir in HTML
Use a script, which can be tested independently of CI code (by running
it on the host on which it will be used), and print the directory that
has been prepared in the HTML.  Also, in the description, use the
infinitive/imperative(?) of the verb to harmonize with other steps.
2024-09-28 12:58:06 +02:00
Robert Schmidt
e541aee49e Implement runScript in cls_cmd for LocalCmd/RemoteCmd, add test
A lot of CI code is python mixed with bash, e.g.,

    ssh = getConnection(host)
    ssh.run('ls')
    ssh.run('echo')

At least some of this CI code would benefit if it was written in a
simple bash script, returning error codes and potentially other
information either through stdout/stderr or files, to the calling Python
code:

    ssh = runScript(host, script)
    # script does: ls; echo

This commit introduces the possibility to run entire scripts. The idea
is that the executor has a script (on localhost), which is either
executed locally or on a remote host. For the remote host, the script is
not copied but piped into a remotely executed bash. In both cases,
output is either returned like the Cmd.run() function with returncode
and mixed stdout/stderr, or optionally redirected into a file on the
(remote) host, which can be treated further by the Python code in later
steps.
2024-09-28 12:52:59 +02:00
Robert Schmidt
fc0bc2357c Modify all YAML files to work with .env files from DeployObject() 2024-09-28 12:46:04 +02:00
Robert Schmidt
51bf5c0fc9 Introduce CI deployment tests based on OAI images 2024-09-28 12:46:04 +02:00
Robert Schmidt
5201a5c37a Reimplement DeployObject()/UndeployObject()
This reimplements the CI deployment functions, and makes them a bit more
robust.  Concretely:

- Introduce a generic "deployment tag" option that can be used to
  override the tag to use for specific images. By default, it is the
  current "branch-commitID[0:8]" tag name (requires the change from
  function ImageTagToUse() to CreateTag(), impacting also pull/push
  image functions)
- Avoid sed for image names, and use an .env file that docker-compose
  picks up automatically; the deployment analyzes a potentially existing
  .env file and updates instead of simply overriding. For instance, some
  pipelines might use -asan images for the gNB and "normal" (non-asan)
  images for UE, and a simple overwriting might make the -asan image
  name tag disappear for the gNB, resulting in deployment failures).
  Finally, undeployment removes the .env file, so that there are no
  modifications in the repository after undeployment.
- Redo the previous behavior of autodetecting asan, and use that (the
  current function always uses asan, no matter what)
- Remove deployKind/displayedNewTags globals, as they are not necessary
- Make the usedImage output in HTML slimmer
- On undeployment, print service names next to undeploy analysis, and
  return success/failure.
- Make the functions generally less verbose and easier to read

Note that as of and only in this commit, deployment does not work, as
all the YAML files have not been updated to work with this updated
version.  The next commit adds tests for the new deployment, and updates
one YAML file (also being used in the tests). The follow-up commit then
modifies all YAML files.
2024-09-28 12:46:04 +02:00
Robert Schmidt
d81abdaf7b Reimplement Native Build (CI step Build_eNB)
The BuildeNB steps either does things that are already implemented
(created workspace), or things that we don't use (separate build_wait),
and is generally quite convoluted when all it does is calling build_oai.
Reimplement by reusing Create_Workspace, and make build_oai in a single
step. To clean up, make a new module in which this function does not
need a class instantiation. Instead, we give all necessary parameters
directly.
2024-09-28 12:45:34 +02:00
Robert Schmidt
3feaa93ba0 cls_cmd: print the host on which a command is executed 2024-09-28 12:45:34 +02:00
Robert Schmidt
0d63861bf1 cls_cmd.py: local copy: don't copy if src/tgt identical 2024-09-28 12:45:34 +02:00
Robert Schmidt
f21b5d2ef4 CI: Add basic unittest for cls_cmd 2024-09-28 12:45:33 +02:00
Robert Schmidt
606e2c749a cls_cmd: execute commands through bash
The next commit will use "echo -e". The problem with that is that bash
and sh differ:

- in bash: this results in "a\nb" (a+newline+b)
- in sh: this results in -e a\nb (-e a+newline+b)

The problem is that by default, commands are executed through sh, which
nobody expects. Change to bash, which is likely more aligned with what
people want to use.
2024-09-28 12:45:33 +02:00
Robert Schmidt
5d5ade1697 Remove superfluous cleanup/terminate/teardown XMLs
After the previous commit, the CI will always do an undeployment step
even if the CI failed. Hence, these XMLs are not necessary anymore. Some
XMLs are updated to do what their "cleanup XML" counterparts did, such
as removing additional images.
2024-09-28 12:45:07 +02:00
Robert Schmidt
8bdc399b27 Remove AutoTerminateUEeNB() functions, use auto_exec to make CI always undeploy 2024-09-28 12:45:07 +02:00
Robert Schmidt
041b2b2d7a Remove prematureExit/exitStatus, and implement in task main loop
Use the previous commit on returning success from each task execution
function, and implement handling of errors in the main loop. Add a
script with which this is visible using Custom_Commands.
2024-09-28 12:45:07 +02:00
Robert Schmidt
7b89548867 Consistently return success true/false from task steps 2024-09-28 12:45:07 +02:00
Robert Schmidt
e969ddb897 IdleSleep(): no need for class members 2024-09-28 12:45:07 +02:00
Robert Schmidt
71807db4ab Custom_Command(): no need for class members 2024-09-28 12:45:07 +02:00
Robert Schmidt
61ea76e7af Remove CI repeatCount XML property
The repeatCount property is useless: it would be enough to specify the
same XML multiple times to achieve the same thing.
2024-09-28 12:45:07 +02:00
Robert Schmidt
77a8f5fa99 Basic test runner script 2024-09-28 12:45:07 +02:00
Robert Schmidt
d108648312 Handle parameter reading and test case execution together
For reasons I don't understand, the XML option reading and actual test
case execution are at different places in the code. This is problematic,
because what this led to is that options are not passed as function
arguments, but indirectly through class members. This led to a lot of
"indirect code"; it's a total mess

To improve this, move them together, so that parameters can be passed
directly as function arguments later on.

Because we reference the globals, mark them inside
ExecuteActionWithParam(). That is a Python antipattern, but necessary at
this moment. I believe that we can remove the following globals over
time:

- SSH (with new cls_cmd, which we don't need to pass)
- EPC (replaced through a class similar to ue_module, i.e., refer to
  core networks on specific hosts through an ID, instead of a global)
- HTML (should use templating, where individual functions give back a
  dictionary of what they want to print, and a final pass assembles the
  entire HTML file)
- RAN/SCA/PHYSIM/CLUSTER/ldpc (can be replaced with stateless scripts
  build/run eNB/gNB on a specific node)
2024-09-28 12:45:07 +02:00
Jaroslava Fiedlerova
e9f9718f63 CI: add more unit tests for UDP iperf3 analysis function 2024-09-28 12:45:07 +02:00
Jaroslava Fiedlerova
5fd5ed43c7 CI: Adjust regex patterns for Iperf3 UDP log parsing
Update the regex for both sender and receiver data to allow optional
bitrate unit prefixes - accepts also no prefix. Modify the patterns for
lost and total packets to accept negative values (`-?\d+`).
2024-09-28 12:45:07 +02:00
Jaroslava Fiedlerova
9d92c0e477 CI: add unit test for UDP iperf3 analysis function 2024-09-28 12:45:07 +02:00
Jaroslava Fiedlerova
1ba5677056 CI: get UDP iperf3 results even if packet count is negative 2024-09-28 12:45:07 +02:00
Robert Schmidt
0da2f27fa7 CI Ping/Iperf: add tests, print without lock, reduce code lines
Add some basic unit tests to verify that Iperf/Ping work. Harmonize the
logging by only print in the "main" iperf/ping function, to avoid that
if we test with multiple UEs, the output intermixes. Also, do one common
mkdir before starting multiple pings/iperfs. Finally, harmonize the
paths so that Iperf and Ping log their files in the same place.
2024-09-28 12:45:07 +02:00
Robert Schmidt
02d5f953a8 Add simple unit test cases for Deployment, including instructions 2024-09-27 19:59:54 +02:00
Robert Schmidt
25f7f61d73 Simplify GetContainerHealth(): we never use unhealthy count 2024-09-27 19:59:54 +02:00
Robert Schmidt
4bf7c45be1 SSHConnection class: don't exit, raise Exception to have main loop handle 2024-09-27 19:59:54 +02:00
Robert Schmidt
1620994f0a DeployObject: EPC not needed 2024-09-27 19:59:54 +02:00
Robert Schmidt
7c1920aea9 Fixup: no HTML in create_workspace, so can't print to HTML 2024-09-27 19:59:54 +02:00
Robert Schmidt
6f868b038f Remove more unused CI files 2024-09-27 19:59:54 +02:00
Robert Schmidt
cded721189 Remove unused CI XML and Python code 2024-09-27 19:50:41 +02:00
Jaroslava Fiedlerova
6d09b2179e Merge remote-tracking branch 'origin/NR_UE_UL_time_alignment' into integration_2024_w39 2024-09-27 17:40:15 +02:00
Guido Casati
5daad21ca6 Reworked F1AP documentation and added info about the library
* moved F1AP related docs to a separate folder in docs
2024-09-27 17:39:00 +02:00
Guido Casati
3aa9f4c0be Use F1 gNB-DU Configuration Update Acknowledge lib in stack 2024-09-27 17:39:00 +02:00
Guido Casati
b8ee622f1c Add test for F1 DU Configuration Update Acknowledge lib 2024-09-27 17:38:55 +02:00
Guido Casati
b91e1b0a12 Add enc/dec lib for F1AP gNB-DU Configuration Update Acknowledge (Interface Management) 2024-09-27 17:38:52 +02:00
Guido Casati
3ce1f0e2c5 Use F1 gNB-CU Configuration Update Acknowledge lib in stack 2024-09-27 17:38:51 +02:00
Guido Casati
c936aabd9a Add test for CU Configuration Update Acknowledge lib 2024-09-27 17:38:43 +02:00
Guido Casati
3724e84fed Add enc library for F1 gNB-CU Configuration Update Acknowledge (Interface Management) 2024-09-27 17:38:38 +02:00
Guido Casati
d2863d9693 Refactored f1ap_gnb_cu_configuration_update_acknowledge_t
* add transaction_id
* refactored remaining members
2024-09-27 17:38:38 +02:00
Guido Casati
80a05271d6 Use F1AP gNB-CU Configuration Update lib in stack 2024-09-27 17:38:38 +02:00
Guido Casati
3626366228 Add test for F1 gNB-CU Configuration Update enc/dec lib 2024-09-27 17:38:38 +02:00
Guido Casati
8e3d6583a5 Add enc/dec library for F1AP gNB-CU Configuration Update (Interface Management) 2024-09-27 17:38:38 +02:00
Guido Casati
c416c57f92 Simplified F1AP gNB-CU Configuration Update message struct
* removed optional IEs, whose encoding/decoding is not done
2024-09-27 17:38:38 +02:00
Guido Casati
3b11764d1d Minor comments 2024-09-27 17:38:38 +02:00
Guido Casati
07da84ede2 Use F1 gNB-DU Configuration Update lib in stack 2024-09-27 17:38:38 +02:00
Guido Casati
2cc50832d1 Add test for F1AP gNB-DU Configuration Update enc/dec library 2024-09-27 17:38:38 +02:00
Guido Casati
9958e53cb1 Add encoding/decoding library for F1AP gNB-DU Configuration Update (Interface Management) 2024-09-27 17:38:38 +02:00
Guido Casati
df62abca0c Removed gNB_CU_name from f1ap_gnb_du_configuration_update_t
* not defined in 9.2.1.8 of 3GPP TS 38.473
2024-09-27 17:38:38 +02:00
Guido Casati
289fdfe381 Use F1AP Setup Failure enc/dec lib in stack 2024-09-27 17:38:38 +02:00
Guido Casati
6146c470e2 Add test for F1AP Setup Failure enc/dec lib 2024-09-27 17:38:38 +02:00
Guido Casati
7e495db5ec Add encoding/decoding lib for F1 Setup Failure (interface management) 2024-09-27 17:38:38 +02:00
Guido Casati
28e2d67ee5 Fixes to F1 Setup Failure
* added missing Transaction ID to te F1 Setup Failure message struct
* fill F1 Setup Failure transaction ID in RRC before calling the F1 Setup Failure function
2024-09-27 17:38:38 +02:00
Guido Casati
3a5ace00d2 Use F1AP lib for F1 Setup Response in stack 2024-09-27 17:38:38 +02:00
Guido Casati
df2c92e652 Add test for F1AP Setup Response enc/dec lib 2024-09-27 17:38:35 +02:00
Guido Casati
30628b820c Add encoding/decoding lib for F1AP Setup Response (Interface Management) 2024-09-27 17:38:30 +02:00
Jaroslava Fiedlerova
ed4af19590 Merge remote-tracking branch 'origin/remove-DRX-UE-capabilities' into integration_2024_w39 2024-09-27 17:33:20 +02:00
Jaroslava Fiedlerova
16d8281418 Merge remote-tracking branch 'origin/NR_GNB_PDSCH_FIX' into integration_2024_w39 2024-09-27 17:13:18 +02:00
Jaroslava Fiedlerova
36ade4a153 Merge remote-tracking branch 'origin/fix_fapi_SRS_gNB' into integration_2024_w39 2024-09-27 17:12:52 +02:00
Jaroslava Fiedlerova
2ba7d59dfe Merge remote-tracking branch 'origin/remove-includes' into integration_2024_w39 2024-09-27 17:12:39 +02:00
Thomas Schlichter
60c2b3fe00 nrscope: fix label on gNB scope - it is NR not LTE ;-) 2024-09-27 17:07:20 +02:00
Thomas Schlichter
9f8a2573ee gNB: update DL and UL bler_stats.mcs for logging also in case of harq_round_max == 1 2024-09-27 17:07:15 +02:00
Thomas Schlichter
60ca088e51 gNB: respect config value dl_max_mcs also in case of harq_round_max == 1 2024-09-27 17:07:11 +02:00
Thomas Schlichter
d9940b1bc4 NR UE: fix logical error in nr_ue_process_dci_dl_10()
Fixing this avoids the theoretical possibility of dereferencing a NULL pointer.
2024-09-27 17:07:03 +02:00
Thomas Schlichter
b0eedd3bbd gNB: fix a comment - current TA interval is 100 frames, not 10 2024-09-27 17:06:52 +02:00
Thomas Schlichter
791cc4f648 NR UE: set time sync PI controller integral weight to 0.0 by default
Experiments did show that the time sync is less stable in terrestrial mode if the integral part of the PI controller is used.
So set it to 0.0 by default. For NTN LEO use case we can still use it by providing the command line parameter --time-sync-I 0.2 .
fixes #846
2024-09-27 17:06:42 +02:00
Thomas Schlichter
64380eaca2 gNB: consider NTN_Koffset when scheduling PRACH 2024-09-27 17:03:36 +02:00
Thomas Schlichter
0ecf35de84 gNB: print error message if PRACH resources are already occupied in schedule_nr_prach() 2024-09-27 17:03:21 +02:00
Thomas Schlichter
656a87bb8a gNB: make sure not to write behind end of prach_pdu_indication_list in L1_nr_prach_procedures() 2024-09-27 16:59:48 +02:00
Laurent THOMAS
711afedfe1 warmup RF board in UE 2024-09-27 14:39:41 +02:00
Jaroslava Fiedlerova
fb1cc6c253 Merge remote-tracking branch 'origin/sib19-gnb' into integration_2024_w39 2024-09-27 14:10:17 +02:00
Jaroslava Fiedlerova
01524428d4 Merge remote-tracking branch 'origin/NR_UE_SLOTFEP_MERGE' into integration_2024_w39 2024-09-27 14:10:04 +02:00
Laurent THOMAS
8471922028 remove DRX from UE capabilities as we have not developped the feature 2024-09-27 11:48:33 +02:00
Laurent THOMAS
5a5063bddc cleaner faster nr_pdcch_demapping_deinterleaving() inner loop 2024-09-27 11:46:59 +02:00
Jaroslava Fiedlerova
3dbd8b9b3c Merge remote-tracking branch 'origin/PMI_extraction_fix' into integration_2024_w39 2024-09-27 11:40:55 +02:00
Jaroslava Fiedlerova
d2347a7c89 Merge remote-tracking branch 'origin/add_e2_sm_in_dockerfiles' into integration_2024_w39 2024-09-27 11:40:39 +02:00
Guido Casati
1d8e896567 Use F1AP lib for F1 Setup Request in stack 2024-09-27 11:22:03 +02:00
Guido Casati
c433f4de15 Add test for F1 Setup Request enc/dec lib 2024-09-27 11:22:03 +02:00
Guido Casati
f278b00837 Add encoding/decoding library for F1AP Setup Request (Interface Management) 2024-09-27 11:22:03 +02:00
Guido Casati
1a8ed8642f Use F1AP lib for UL RRC Message Trasfer in stack 2024-09-27 11:22:03 +02:00
Guido Casati
cc0ad07aa0 Add test for F1AP UL RRC Message Transfer enc/dec lib 2024-09-27 11:22:03 +02:00
Guido Casati
b85fd159b8 Add encoding/decoding lib for UL RRC Message Trasfer 2024-09-27 11:22:03 +02:00
Guido Casati
1d0d7e7baf Use F1AP lib for DL RRC Message Transfer in stack 2024-09-27 11:22:03 +02:00
Guido Casati
718269f1eb Add test for F1AP DL RRC Transfer enc/dec messages 2024-09-27 11:22:03 +02:00
Guido Casati
3374327752 Add encoding/decoding lib for F1AP DL RRC Transfer message 2024-09-27 11:22:03 +02:00
Robert Schmidt
57ecb11d53 Use F1AP lib Init UL RRC Msg in stack
Co-authored-by: Guido Casati <hello@guidocasati.com>
2024-09-27 11:22:03 +02:00
Robert Schmidt
ca6eb7bd10 Add message enc&dec for F1AP Initial UL RRC msg, and test
Co-authored-by: Guido Casati <hello@guidocasati.com>
2024-09-27 11:22:03 +02:00
Guido Casati
648ed19544 Use _F1_EQ_CHECK_INT in eq_f1ap_plmn 2024-09-27 11:22:03 +02:00
Guido Casati
11df3c743f Introduce new macros to improve debugging capabilities in F1AP library
* _F1_EQ_CHECK_GENERIC can be used to check the equality of two different members of F1AP structs
  and return `false` if the condition is not met.

When the condition fails, the macros will print a debug message to the standard error stream,
including the function name, line number, and the provided format string and arguments.
2024-09-27 11:22:01 +02:00
Jaroslava Fiedlerova
6b9ddbabd2 Merge remote-tracking branch 'origin/tini-for-arm' into integration_2024_w39 2024-09-27 11:17:07 +02:00
Jaroslava Fiedlerova
e0800d4225 Merge remote-tracking branch 'origin/fix_log2_approx' into integration_2024_w39 2024-09-27 11:16:22 +02:00
Jaroslava Fiedlerova
4093a485ce Merge remote-tracking branch 'origin/nu-ci-colosseum-integration' into integration_2024_w39 2024-09-27 11:16:06 +02:00
Robert Schmidt
28e30d24f7 Remove unused CI StatsFromGenObject() 2024-09-26 16:53:04 +02:00
Robert Schmidt
de2bf7ad8b Remove unused CI CaptureOnDockerNetworks() 2024-09-26 16:53:04 +02:00
Robert Schmidt
b9e56104d8 Remove unused CI code 2024-09-26 16:53:04 +02:00
Robert Schmidt
29383373de Remove unused code 2024-09-26 16:53:04 +02:00
Robert Schmidt
c5f090c23d Remove useless rm log 2024-09-26 16:53:04 +02:00
Robert Schmidt
87d28848dd Remove useless log: we see it in iperf call, and the XML 2024-09-26 16:53:04 +02:00
Bartosz Podrygajlo
65f14490c3 Remove additional unnecessary includes 2024-09-26 15:07:35 +02:00
Bartosz Podrygajlo
23cc049157 Remove unnecessary includes in rfsimulator 2024-09-26 14:59:14 +02:00
Thomas Schlichter
ed7750aba2 fix debug output for DEBUG_DLSCH_MAPPING 2024-09-26 13:21:32 +02:00
arora
8f5327527e Disable UHD unit tests to avoid gcc13 warnings 2024-09-26 11:41:59 +02:00
arora
c1641b66af Bump rhel to gcc13, to avoid gcc12 warnings in openair1 2024-09-26 11:41:45 +02:00
arora
ad74106548 Add E2 SM in the target dockerfiles to use e2 agent in container deployment
- Update builder dockerfiles to build Flexric for E2 SM
- Update target dockerfiles to copy E2 SM
2024-09-26 11:41:18 +02:00
Raghavendra Dinavahi
42ab4b4a0c fix for variable power in PDSCH REs
- correctly scale REs. Some REs have higher power during PDSCH RE-Mapping which is corrected.
	- Closes: Issue 811
2024-09-26 10:31:20 +02:00
Leonardo Bonati
18a5152994 Add Jenkins job for Colosseum testing integration
- Add Jenkinsfile, triggering Colosseum test run
- Add test scripts that interact with Colosseum running
2024-09-26 09:22:34 +02:00
Robert Schmidt
ab27d02e1c Add new F1AP msg enc&dec library
Add a new target f1ap_lib that groups F1AP ASN.1 encoding&decoding for
messages defined f1ap_messages_types.h. The objective is to, for each
F1AP message,
- add encoder&decoder (similar to what already exists, but without
  mandatory message sending afterwards)
- eq_X() function that checks two messages for equality (to be used
  mostly in tests)
- cp_X() function that deep-copies a message, e.g., to be used when
  sending ITTI messages, instead of manual copying done currently
- free_X() function that frees the memory associated to a memory, to
  avoid memory leaks.

Each message will be tested, notably that encoding&decoding as well as
copying yield identical messages.

The actual message encoding & decoding, tests, and their use will be
done in the forthcoming commits.
2024-09-25 17:15:48 +02:00
Robert Schmidt
ba208c0fc2 Group 5G platform types for common 5G-specific types
Co-authored-by: Guido Casati <hello@guidocasati.com>
2024-09-25 16:00:32 +02:00
Robert Schmidt
ea28b9bb5b F1AP: RLC mode: introduce separate type
The currently used type does not cover all possibilities. While we don't
encode&decode them, it might still be good to be able to express it, so
introduce the new type.

Co-authored-by: Guido Casati <hello@guidocasati.com>
2024-09-25 15:56:03 +02:00
Guido Casati
da6b1a4be4 Fixes to SI message struct item in CU messages
* num_SI is the size of the list of gNB-CU System Information messages
* the new struct member is an array, sized after the maximum nb
  of SIB types, which contains the SI container, the container length
  and the SIB type
2024-09-25 15:38:41 +02:00
Robert Schmidt
4b5ea6dcf8 Fix header inclusion: NGAP message types depends on S1AP 2024-09-25 15:38:41 +02:00
Robert Schmidt
c9da5aabff Use primitive type for TEID
teid_t is defined in platfrom_types.h, which defines a bunch of
4G-specific things. In an attempt to decouple from 4G types, do not use
it.
2024-09-25 15:38:41 +02:00
Robert Schmidt
bacf713299 Use char * for DU/CU IP address
The previously used net_ip_address_t type is limited to some bytes, but
the CU name might be longer. Use char * to allow longer DNS names.

Also, this type separates IPv4/v6, which is not necessary, as it is now
handled by the same C API (getaddrinfo()), since !2635.

Co-authored-by: Guido Casati <hello@guidocasati.com>
2024-09-25 15:38:41 +02:00
Guido Casati
deb63888d9 Cleanup of long-time unused F1AP interface management functions 2024-09-25 15:38:41 +02:00
Guido Casati
3554b33f37 Cleanup unused F1AP message transmission and system information files 2024-09-25 15:38:41 +02:00
Raghavendra Dinavahi
114ea60c42 removed nr_slot_fep_init_sync and used nr_slot_fep in UE 2024-09-25 09:50:34 +02:00
Raphael Defosseux
af1158140e fix(docker): making tini download platform specific to support ARM64 native builds
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-09-24 15:46:05 +02:00
francescomani
e1218f9b3f use n_TimingAdvanceOffset according to what set in the RU for FDD CI test with COTS UE 2024-09-24 10:39:25 +02:00
francescomani
3166f20383 trigger RA DL or UL data arrival during RRC_CONNECTED when UL synchronisation status is non-synchronised 2024-09-24 10:39:25 +02:00
francescomani
e4a6d60dc2 implementation of time alignment timer at MAC UE 2024-09-24 10:39:25 +02:00
francescomani
25b94f12b3 configuration of timeAlignmentTimerCommon at MAC UE 2024-09-24 10:39:25 +02:00
francescomani
2a85d9905e configure TAG list 2024-09-24 10:39:25 +02:00
francescomani
ee4f95fd51 improvements in handling TAG-Id 2024-09-24 10:39:25 +02:00
francescomani
15279d8732 common function for default N_TA_offset (not sure what in develop is correct) 2024-09-24 10:39:25 +02:00
francescomani
a494580210 configuring n_TimingAdvanceOffset from upper layers, if present 2024-09-24 10:39:25 +02:00
francescomani
900a78fd9b preliminary cleanup 2024-09-24 10:20:40 +02:00
Robert Schmidt
ccdabb4c2c Merge branch 'integration_2024_w38b' into 'develop'
Integration: `2024.w38b`

Closes #839

See merge request oai/openairinterface5g!2977

* !2704 nr pdcp: add support for nea1
* !2800 UE improvements
* !2920 Receive SIB19 on nrUE
* !2975 Remove hardcoding of CPU measurements (respect option `-q`)
* !2976 Update latest SIMDE version
* !2957 T: increase max number of args
* !2916 NR UE PUSCH resource mapping optimization
* !2787 CI: increase max number of concurrent workers to 64
* !2974 fhi_72: allow to provide dpdk_mem_size to xran
* !2964 CI: Replacing the UE on Aerial setup
* !2973 CI: remove unused code and files
2024-09-24 08:16:36 +00:00
Thomas Schlichter
1b97cdafcd improve LLR scaling for better performance 2024-09-23 17:58:05 +02:00
Thomas Schlichter
4b679c0793 add test for log2_approx64() 2024-09-23 17:58:05 +02:00
Thomas Schlichter
58a2966499 add test for log2_approx() 2024-09-23 17:58:05 +02:00
Thomas Schlichter
4e09353b43 use SIMDE intrinsic to count leading zeroes and make rounding exact 2024-09-23 17:58:03 +02:00
francescomani
d304865489 fix for log2_approx to approximate to the nearest neighbor, instead of ceil 2024-09-23 17:56:50 +02:00
Jaroslava Fiedlerova
0dae0551eb Merge remote-tracking branch 'origin/ci-remove-unused-code' into integration_2024_w38b 2024-09-23 17:26:14 +02:00
Jaroslava Fiedlerova
11aeba0699 Merge remote-tracking branch 'origin/up2_on_Aerial' into integration_2024_w38b 2024-09-23 16:37:56 +02:00
Jaroslava Fiedlerova
1ada1c2635 Merge remote-tracking branch 'origin/fhi-72-dpdkMemorySize' into integration_2024_w38b 2024-09-23 12:45:13 +02:00
Jaroslava Fiedlerova
015257856d Merge remote-tracking branch 'origin/ci-fix-multi-ue' into integration_2024_w38b 2024-09-23 12:44:48 +02:00
Robert Schmidt
ec2afa22b1 Fix: egrep is obsolescent, use grep -E
See e.g., egrep(1) [https://linux.die.net/man/1/egrep]:

> two variant programs egrep and fgrep are available. egrep is the same
> as grep -E. fgrep is the same as grep -F. Direct invocation as either
> egrep or fgrep is deprecated

See also the rationale of the POSIX description of grep
(https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html):

> This grep has been enhanced in an upwards-compatible way to provide
> the exact functionality of the historical egrep and fgrep commands as
> well. It was the clear intention of the standard developers to
> consolidate the three greps into a single command.

Closes: #839
2024-09-23 12:19:49 +02:00
Robert Schmidt
40bde2ae75 Jenkinsfiles: Print if an XML file is not present 2024-09-23 12:19:49 +02:00
Robert Schmidt
de310c6e82 Remove unused CI Jenkinsfiles
As of now, these seem to be the Jenkinsfiles used on Jenkins

ci-scripts/Jenkinsfile-cluster
ci-scripts/Jenkinsfile-colosseum
ci-scripts/Jenkinsfile-GitLab-Container
ci-scripts/Jenkinsfile-GitLab-COTS-UE-Test
ci-scripts/Jenkinsfile-nrue
ci-scripts/Jenkinsfile-physim-deploy
ci-scripts/Jenkinsfile-push-registry
ci-scripts/Jenkinsfile-tmp-full-ran
ci-scripts/Jenkinsfile-tmp-multi-enb
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
ci-scripts/Jenkinsfile-tmp-ran

(gather all files in a file, then cat <file> | sort | uniq)

Remove all others.
2024-09-23 12:19:49 +02:00
Robert Schmidt
4a9944bf06 Remove unused OaiCiTest class members 2024-09-23 12:19:49 +02:00
Robert Schmidt
3e2ee3878e Remove unused python files 2024-09-23 12:19:49 +02:00
Robert Schmidt
6147a83f0b Remove unused Perform_X2_Handover XML step: no XML uses this 2024-09-23 12:19:49 +02:00
Robert Schmidt
ec64826fde Remove unused Terminate_OAI_UE XML step: no XML uses this
- Fix Jenkinsfile-tmp-full-ran: python test stage TerminateOAIUE() has been removed
2024-09-23 12:19:38 +02:00
francescomani
196effa114 fix PMI extraction, X1 and X2 order was wrong 2024-09-23 11:54:48 +02:00
Robert Schmidt
68c28a4828 Modify default xran DPDK socket memory/limit to 0
The default values set by xran for DPDK socket memory/limit is 8192. It
is changed when the variable for the memory size, given down to xran, is
non-zero (cf also previous patch). Since the last patch, if nothing is
given in OAI configuration, OAI will pass down a size of 8192. However,
a configuration value of 0 is a valid choice (it is a pre-allocation,
DPDK will allocate dynamically), so modify the default in xran to be 0
so that all sizes, including 0, can be given to DPDK.

Note that the currently used implementation of xran will always try to
allocate this memory on NUMA node 0. If you want to use another one,
this field has to be set to 0 (no pre-allocation), and DPDK will
allocate it dynamically.

Co-authored-by: Sagar Arora <sagar.arora@openairinterface.org>
2024-09-21 07:12:07 +02:00
Robert Schmidt
513f0beb37 Parse xran version strings for Bronze, E, F 2024-09-21 07:12:07 +02:00
Robert Schmidt
645e9dd3cd fhi_72: allow to provide dpdk_mem_size to xran
xran has a mechanism to request DPDK to allocate a configurable amount
of bytes for huge pages. We set it to 0 until now; expose this variable
through configuration, and provide a meaningful default 8192 MiB.
Provide documentation.
2024-09-21 07:12:06 +02:00
francescomani
385999dc5e logging improvements 2024-09-20 18:58:27 +02:00
Robert Schmidt
2932551f2c Update 5G-OTA testbench image: add aerial, fhi72 2024-09-20 18:08:20 +02:00
Reem Bahsoun
e96a7eed20 Replace UE on sphex with up2, improve throughput
- Change XML and YAML to use up2 in aerial pipeline
- Modify gNB config to improve throughput
- Reflect changes in documentation
2024-09-20 18:07:48 +02:00
Jaroslava Fiedlerova
d017afaded Merge remote-tracking branch 'origin/NR_UE_pusch_optimization' into integration_2024_w38b 2024-09-20 16:43:31 +02:00
Jaroslava Fiedlerova
05bb40d7ea Merge remote-tracking branch 'origin/t-tracer-increase-maxargs' into integration_2024_w38b 2024-09-20 16:42:57 +02:00
Jaroslava Fiedlerova
77fe56d38e Merge remote-tracking branch 'origin/simde-update' into integration_2024_w38b 2024-09-20 13:59:15 +02:00
Jaroslava Fiedlerova
63609313d2 Merge remote-tracking branch 'origin/remove-incoherent-set-cpumeas' into integration_2024_w38b 2024-09-20 13:59:00 +02:00
Jaroslava Fiedlerova
b64b2e310d Merge remote-tracking branch 'origin/sib19-ue-reception' into integration_2024_w38b 2024-09-20 13:58:45 +02:00
Jaroslava Fiedlerova
b565eb01e8 Merge remote-tracking branch 'origin/ue-fixes-gnb-testion' into integration_2024_w38b 2024-09-20 13:58:24 +02:00
Jaroslava Fiedlerova
b3d264f29a Merge remote-tracking branch 'origin/nr-pdcp-nea1' into integration_2024_w38b 2024-09-20 13:57:59 +02:00
Roberto Rosca
b6b3cc5197 Refactor SIB scheduling
- refactor nr_fill_nfapi_dl_SIB_pdu to use it on both SIB1 and OtherSI
  - extract tbs related calculations into function get_tbs to avoid duplicates
  - moved OtherSI search space initializations to nr_mac_config_scc
2024-09-20 10:17:39 +03:00
Sakthivel Velumani
321a20ea78 Fix vector mult function for out of bound access 2024-09-19 09:56:25 -04:00
Sakthivel Velumani
a50cb354f4 Simplify map_current_symbol() function 2024-09-19 09:56:25 -04:00
Sakthivel Velumani
e4c37fb3b2 Simplify data in DMRS symbol function
Mapping of data REs in DMRS symbol depends only on number of CDM group
no data. So the special case function that depended on delta is removed
and a single function is used.
2024-09-19 09:56:25 -04:00
Robert Schmidt
952052127a Avoid ubsan error
like this:

  /oai-ran/openair3/SECU/snow3g.c:429:23: runtime error: left shift of 232 by 24 places cannot be represented in type 'int'
2024-09-19 10:47:46 +02:00
Cedric Roux
523d84634a snow3g: add a test program
To use:

    cd <top directory of openair>
    mkdir build
    cd build
    cmake .. -GNinja -DENABLE_TESTS=ON
    ninja tests (alternatively: ninja snow3g_tests)
    ctest (alternatively: ctest -R snow3g_tests)
2024-09-19 10:40:55 +02:00
Laurent THOMAS
c8116b3fa3 remove dead code 2024-09-19 09:29:02 +02:00
Robert Schmidt
06ec6150a1 Update latest SIMDE version
Build on ARM fails in the previous version, while the current master
(1a09d3bc) works. So let's update to a newer version to avoid problems
on ARM, and assuming x86 works.
2024-09-18 19:23:05 +02:00
Raghavendra Dinavahi
dfbedadd5f Use nr_slot_fep for sidelink, removed sl_nr_slot_fep 2024-09-18 17:17:19 +02:00
Laurent THOMAS
31f770978c option q is to set cpu measurements but it is hardcoded in some places 2024-09-18 16:02:14 +02:00
Robert Schmidt
99226fc66c Remove unused Initialize_OAI_UE XML step: no XML uses this 2024-09-18 15:13:13 +02:00
Robert Schmidt
aeb6442f71 Remove unused Build_OAI_UE XML step: no XML uses this 2024-09-18 15:13:13 +02:00
Robert Schmidt
85efd54f3b Remove unused CI Test XML files
As of now, these XMLs seem to be used:

  xml_files/cluster_image_build.xml
  xml_files/container_4g_l2sim_tdd_down.xml
  xml_files/container_4g_l2sim_tdd.xml
  xml_files/container_4g_rfsim_down.xml
  xml_files/container_4g_rfsim_fdd_05MHz_down.xml
  xml_files/container_4g_rfsim_fdd_05MHz_noS1_down.xml
  xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml
  xml_files/container_4g_rfsim_fdd_05MHz.xml
  xml_files/container_4g_rfsim_fdd_10MHz_down.xml
  xml_files/container_4g_rfsim_fdd_10MHz.xml
  xml_files/container_4g_rfsim_fdd_20MHz_down.xml
  xml_files/container_4g_rfsim_fdd_20MHz.xml
  xml_files/container_4g_rfsim_fembms_down.xml
  xml_files/container_4g_rfsim_fembms.xml
  xml_files/container_4g_rfsim_mbms_down.xml
  xml_files/container_4g_rfsim_mbms.xml
  xml_files/container_4g_rfsim.xml
  xml_files/container_5g_e1_rfsim_down.xml
  xml_files/container_5g_e1_rfsim.xml
  xml_files/container_5g_f1_rfsim_down.xml
  xml_files/container_5g_f1_rfsim.xml
  xml_files/container_5g_fdd_rfsim_down.xml
  xml_files/container_5g_fdd_rfsim.xml
  xml_files/container_5g_flexric_rfsim_down.xml
  xml_files/container_5g_flexric_rfsim.xml
  xml_files/container_5g_l2sim_proxy.xml
  xml_files/container_5g_l2sim_tdd_down.xml
  xml_files/container_5g_l2sim_tdd.xml
  xml_files/container_5g_rfsim_24prb_down.xml
  xml_files/container_5g_rfsim_24prb.xml
  xml_files/container_5g_rfsim_2x2_down.xml
  xml_files/container_5g_rfsim_2x2.xml
  xml_files/container_5g_rfsim_down.xml
  xml_files/container_5g_rfsim_f1_accelleran_down.xml
  xml_files/container_5g_rfsim_f1_accelleran.xml
  xml_files/container_5g_rfsim_fdd_phytest_down.xml
  xml_files/container_5g_rfsim_fdd_phytest.xml
  xml_files/container_5g_rfsim_fr2_32prb_down.xml
  xml_files/container_5g_rfsim_fr2_32prb.xml
  xml_files/container_5g_rfsim_ntn_geo_down.xml
  xml_files/container_5g_rfsim_ntn_geo.xml
  xml_files/container_5g_rfsim_sidelink_down.xml
  xml_files/container_5g_rfsim_sidelink.xml
  xml_files/container_5g_rfsim_tdd_dora_down.xml
  xml_files/container_5g_rfsim_tdd_dora.xml
  xml_files/container_5g_rfsim_u0_25prb_down.xml
  xml_files/container_5g_rfsim_u0_25prb.xml
  xml_files/container_5g_rfsim.xml
  xml_files/container_image_build_cross.xml
  xml_files/container_image_build.xml
  xml_files/container_l2sim_proxy.xml
  xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml
  xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml
  xml_files/container_lte_b200_fdd_05Mhz_tm1.xml
  xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml
  xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue_cleanup.xml
  xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml
  xml_files/container_lte_b200_fdd_10Mhz_tm1.xml
  xml_files/container_lte_b200_fdd_20Mhz_tm1.xml
  xml_files/container_lte_b200_fdd_cleanup.xml
  xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml
  xml_files/container_lte_b200_tdd_05Mhz_tm1.xml
  xml_files/container_lte_b200_tdd_10Mhz_tm1.xml
  xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml
  xml_files/container_lte_b200_tdd_20Mhz_tm1.xml
  xml_files/container_lte_b200_tdd_cleanup.xml
  xml_files/container_lte_n3xx_tdd_2x2_tm1.xml
  xml_files/container_lte_n3xx_tdd_2x2_tm2.xml
  xml_files/container_nsa_b200_quectel.xml
  xml_files/container_nsa_b200_terminate.xml
  xml_files/container_sa_aerial_quectel_cleanup.xml
  xml_files/container_sa_aerial_quectel.xml
  xml_files/container_sa_aw2s_2x2_asue.xml
  xml_files/container_sa_aw2s_asue_cleanup.xml
  xml_files/container_sa_aw2s_asue.xml
  xml_files/container_sa_b200_quectel.xml
  xml_files/container_sa_b200_terminate.xml
  xml_files/container_sa_e1_b200_quectel.xml
  xml_files/container_sa_e1_b200_terminate.xml
  xml_files/container_sa_f1_b200_quectel.xml
  xml_files/container_sa_f1_b200_terminate.xml
  xml_files/container_sa_fhi72_benetel_asue_cleanup.xml
  xml_files/container_sa_fhi72_benetel_asue.xml
  xml_files/container_sa_fhi72_vvdn_up2_cleanup.xml
  xml_files/container_sa_fhi72_vvdn_up2.xml
  xml_files/container_sa_n310_2X2_100MHz_cleanup.xml
  xml_files/container_sa_n310_2X2_100MHz_quectel.xml
  xml_files/container_sa_n310_2X2_60MHz_cleanup.xml
  xml_files/container_sa_n310_2X2_60MHz_quectel.xml
  xml_files/container_sa_n310_nrue_cleanup.xml
  xml_files/container_sa_n310_nrue.xml
  xml_files/container_sa_sc_b200_quectel.xml
  xml_files/container_sa_sc_b200_terminate.xml
  xml_files/cppcheck.xml
  xml_files/fr1_5gc_closure.xml
  xml_files/fr1_5gc_start.xml
  xml_files/fr1_cn5g_basic_deploy.xml
  xml_files/fr1_cn5g_basic_undeploy.xml
  xml_files/fr1_enb_build.xml
  xml_files/fr1_epc_closure.xml
  xml_files/fr1_epc_start.xml
  xml_files/fr1_oai_cn_deploy.xml
  xml_files/fr1_oai_cn_undeploy.xml
  xml_files/gnb_phytest_usrp_run_100_2x2.xml
  xml_files/gnb_phytest_usrp_run_60_2x2.xml
  xml_files/gnb_phytest_usrp_run_60.xml
  xml_files/gnb_phytest_usrp_run.xml
  xml_files/gnb_usrp_build.xml
  xml_files/ldpc_gpu_test.xml
  xml_files/lte_2x2_tm1_quectel.xml
  xml_files/lte_2x2_tm2_quectel.xml
  xml_files/lte_oai_cn_deploy.xml
  xml_files/lte_oai_cn_undeploy.xml
  xml_files/physim_deploy_run.xml
  xml_files/sa_cn5g_20897_closure.xml
  xml_files/sa_cn5g_20897_start.xml
  xml_files/sa_cn5g_closure.xml
  xml_files/sa_cn5g_start.xml
  xml_files/t1_offload_test.xml
  xml_files/t2_offload_dec_nr_ulsim.xml
  xml_files/t2_offload_enc_nr_dlsim.xml

Obtained by going through all RAN pipelines, copying out the XMLs of all
pipelines, then doing

  cat xml.dump | sort | uniq
2024-09-18 15:13:13 +02:00
Laurent THOMAS
7a5da40d0b Improve tracing for DLSCH decoding results
- Better trace DLSCH decoding result
- Rename the decode result variable to separate with later ack/nack
  encode of this decoding result from 3GPP (not trivial true=1 coding)
- Cleanup decodeResult usage
- Remove unused defines

Co-authored-by: Francesco Mani <email@francescomani.it>
2024-09-18 14:40:07 +02:00
Roberto Rosca
8bc2271001 conf parameters added (commented) + schedule sib19 only if parameters present in conf file 2024-09-18 12:17:17 +03:00
Roberto Rosca
a197c0a41a Schedule SIB19 based on scheduling info from SIB1 2024-09-18 12:17:17 +03:00
Roberto Rosca
b9d2f916bc Added scheduling info for sib19 to sib1 2024-09-18 12:17:17 +03:00
Roberto Rosca
d994d537e9 Added sib19 structure with initialization 2024-09-18 12:17:17 +03:00
Robert Schmidt
ba2d7aad18 Merge branch 'integration_2024_w38' into 'develop'
Integration: `2024.w38`

See merge request oai/openairinterface5g!2970

* !2932 Minor: Set correct USRP flags when not transmitting
* !2961 prevent UE to declare RLF in phy-test mode
* !2962 prevent UE to print HARQ processing error log for MSG2
* !2958 Automatic selection of SSB bitmap length
* !2967 bugfix: reject malformed rrcSetupComplete message
* !2947 Add 5G/NR MAC documentation
* !2959 nr rlc: fix standalone tests
2024-09-18 09:00:27 +00:00
Jaroslava Fiedlerova
93a3abaf80 Merge remote-tracking branch 'origin/nr-rlc-fix-standalone-tests' into integration_2024_w38 2024-09-17 21:10:16 +02:00
Bartosz Podrygajlo
771d11a148 dockerized clang-format error detection tool 2024-09-17 13:52:01 +02:00
Roberto Rosca
4c15a04b87 Receive SIB19 on UE 2024-09-17 14:13:11 +03:00
Jaroslava Fiedlerova
dd2ba2235b Merge remote-tracking branch 'origin/add-mac-doc' into integration_2024_w38 2024-09-17 11:32:19 +02:00
Jaroslava Fiedlerova
3ca4f66e05 Merge remote-tracking branch 'origin/bugfix-rrcSetupComplete' into integration_2024_w38 2024-09-17 11:24:40 +02:00
Jaroslava Fiedlerova
ad6e189f8d Merge remote-tracking branch 'origin/issue_836' into integration_2024_w38 2024-09-17 08:40:57 +02:00
Jaroslava Fiedlerova
4b453b9dd8 Merge remote-tracking branch 'origin/NR_UE_MSG2_error' into integration_2024_w38 2024-09-16 14:33:39 +02:00
Jaroslava Fiedlerova
3f6630acbd Merge remote-tracking branch 'origin/no_RLF_phytest' into integration_2024_w38 2024-09-16 14:33:11 +02:00
Jaroslava Fiedlerova
872981f207 Merge remote-tracking branch 'origin/NR_UE_fix_usrp_flag' into integration_2024_w38 2024-09-16 14:32:22 +02:00
Robert Schmidt
93a8bb4032 Clarification on how often we want to make releases 2024-09-16 13:45:13 +02:00
Robert Schmidt
1696d28e0d Add 5G/NR MAC documentation 2024-09-16 10:58:43 +02:00
Robert Schmidt
6a4ceb2921 Print deltaMCS dB information 2024-09-16 09:47:24 +02:00
Cedric Roux
24de83d3cd bugfix: reject malformed rrcSetupComplete message 2024-09-11 16:57:06 +02:00
Jaroslava Fiedlerova
2eff246d64 ci: modification of SA-2x2, 60 MHz TDD testcase conf to use nea1/nia1 2024-09-11 16:25:07 +02:00
Cedric Roux
18f7a702a4 snow3g: provide a faster implementation 2024-09-11 16:25:00 +02:00
Cedric Roux
73ae18dabb nr pdcp: add support for nea1 2024-09-11 16:00:08 +02:00
francescomani
f1c8134d4f prevent UE to declare RLF in phy-test mode 2024-09-11 15:05:49 +02:00
Raphael Defosseux
469d58f989 Merge branch 'integration_2024_w36' into 'develop'
Integration Branch : 2024 Week 36

See merge request oai/openairinterface5g!2956
2024-09-11 11:14:20 +00:00
Sakthivel Velumani
76cec45e80 Set correct USRP flags when not transmitting
Flags are set to INVALID when it is not a UL slot. This is important
when using GPIO to control TRX switch.
2024-09-10 14:41:05 -04:00
francescomani
ece206758a prevent UE to print HARQ processing error log for MSG2 2024-09-10 16:33:59 +02:00
francescomani
b377107273 add missing cast for short bitmap in configuration at gNB and UE 2024-09-09 18:37:56 +02:00
Raphael Defosseux
1691c607cc Merge remote-tracking branch 'origin/fix-nas-ue-memory-leaks' into integration_2024_w36 2024-09-09 12:08:56 +02:00
Raphael Defosseux
fd6cf5aaf7 Merge remote-tracking branch 'origin/pusch-tx-power-workaround' into integration_2024_w36 2024-09-09 12:08:38 +02:00
Cedric Roux
a373a8da6b nr rlc: fix standalone tests
./run_tests.sh was not functional anymore because of the introduction
of AssertFatal() in nr_rlc_entity.c

Including the .h and providing exit_function() solves the problem.
2024-09-09 11:30:59 +02:00
francescomani
e6e0602da0 removing ssb_PositionsInBurs_BitmapPR from config files 2024-09-08 11:40:47 +02:00
francescomani
a14782f1a8 automatic selection of ssb bitmap length 2024-09-08 10:33:37 +02:00
Cedric Roux
de3a214990 T: support up to 19 variables in the T() macro
Some people needed that.

Let's stop to 19 for the time being. It's tricky enough.
We can increase later if needed. (A previous commit
made the tracers to accept up to 32 variables.)
2024-09-06 16:51:34 +02:00
Cedric Roux
9e698bd534 T: cleanup: make shorter lines
80 columns are enough.
2024-09-06 16:51:14 +02:00
Cedric Roux
105eaa607f T: increase max number of args in an event and make the define more private
T_MAX_ARGS was 16 and some people start to use the T machinery with
more than 16 values. So be it. Let tracers be friendly and accept 32.
(More commits to follow for full support.)

Also why is T_MAX_ARGS in T_defs.h when it's only used by event.h?
Hum?
2024-09-06 16:49:12 +02:00
Cedric Roux
1e645c514f T: bugfix: check limits 2024-09-06 16:38:15 +02:00
Raphael Defosseux
4c9c26a307 Merge remote-tracking branch 'origin/yaml-config' into integration_2024_w36 2024-09-06 14:27:06 +02:00
Raphael Defosseux
b86f157c6d Merge remote-tracking branch 'origin/f1-ho-prep' into integration_2024_w36 2024-09-06 14:26:02 +02:00
Raphael Defosseux
5043f6e282 Merge remote-tracking branch 'origin/wip-imscope' into integration_2024_w36 2024-09-06 14:25:04 +02:00
Raphael Defosseux
99d2ad8e1a chore(ci): entitlement folder should be created before copying
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-09-06 14:24:15 +02:00
Raphael Defosseux
b5ac09de34 Merge remote-tracking branch 'origin/rhsm-oc' into integration_2024_w36 2024-09-06 14:23:18 +02:00
Raphael Defosseux
7a7aaf5d83 Merge remote-tracking branch 'origin/switch-to-rocky9' into integration_2024_w36 2024-09-06 14:22:50 +02:00
Raphael Defosseux
2d675bc3e8 Merge remote-tracking branch 'origin/NR_PHY_common_LLR' into integration_2024_w36 2024-09-06 14:22:32 +02:00
Raphael Defosseux
e2e57a050d Merge remote-tracking branch 'origin/minor-doc-improvements' into integration_2024_w36 2024-09-06 14:22:09 +02:00
Robert Schmidt
ab89324b1e Pretty-print PLMN in F1 Setup Request 2024-09-06 10:20:08 +02:00
Robert Schmidt
5d05078f4e Validate neighbour config when DUs connect 2024-09-06 10:20:08 +02:00
Roberto Louro Magueta
3cfc10ddaa Bugfix: an A3 configuration is for a specific PCI
Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
2024-09-06 10:20:08 +02:00
Robert Schmidt
d6d7064c0b A3 Event is for a PCI: Rename variable to make this clear 2024-09-06 10:20:08 +02:00
Robert Schmidt
fde10b9203 Use u64 for neighbour nr_cellid: is up to 38 bits 2024-09-06 10:20:08 +02:00
Roberto Magueta
327baf2938 Bugfix: an A3 configuration is for a specific PCI
Co-authored-by: Luis Pereira <lpereira@allbesmart.pt>
2024-09-06 10:20:08 +02:00
Robert Schmidt
b01810a858 Introduce an_release flag: only free UE in RRC+ack if requested by core
The F1AP UE context release procedure can happen in at least two cases:

1. core requested a release of a UE
2. CU requests DU a release of a UE without a core release (e.g.,
   handover)

In case 1., the CU has to fully release the UE in the CU, then ack the
NGAP message from the core, whilst in 2., nothing of that should happen
after the DU acknowledges the F1AP UE context release cmd.
2024-09-06 10:20:08 +02:00
Robert Schmidt
b3d04c1bbf RETURN_IF_INVALID_ASSOC_ID(): use assoc_id directly
In some cases, we don't have the ue_data that is used until this commit.
Make this macro more general by only requiring the assoc_id to check.
2024-09-06 10:20:08 +02:00
Robert Schmidt
1a9df52cf3 Fixup get_drb(): can have up to 32 DRBs 2024-09-06 10:20:08 +02:00
Robert Schmidt
35f7225fb4 Correct cuup_notify_reestablishment() look up errors
cuup_notify_reestablishment() used
  &ue_p->established_drbs[drb_id]
to look up a bearer, which is wrong, because it should be drb_id - 1
as in the top of the loop. Also, it used the dedicated get_drb()
function; harmonize to use only this function.
2024-09-06 10:20:08 +02:00
Robert Schmidt
fe9c0fba2f Refactor DRB filling from E1 response in separate function
Refactor this to allow the reuse of this function for handover later.
2024-09-06 10:20:08 +02:00
Robert Schmidt
e7eb1b1c3b Store DRB UL TEID information at RRC
To be used later in the case of handover.
2024-09-06 10:20:08 +02:00
Robert Schmidt
605dfa0142 Refactor: Store DU's DRB TEID/address through separate function
A follow-up commit refactors the filling of information of DRBs to set
up in a separate function (to be reused for handover later). Hence, we
cannot store the DRB TEID/address in the same functions, because it is
a logically separate step, and might not always be available.
2024-09-06 10:20:08 +02:00
Robert Schmidt
d00ac2031c Correct F1-U TEID variable names, simplify code
In e1_send_bearer_updates(), we send the DL (DU) TEID and address to the
CU-UP. Therefore, correct the variable names to reflect that the F1-U
information pertains to the DU.

Also, move the tunnel info update function f1u_dl_gtp_update() to a more
prominent place, and take the pointer to the struct containing the
"interesting" information.
2024-09-06 10:20:08 +02:00
Robert Schmidt
29d8e3ce3a Remove unused defines and structures 2024-09-06 10:20:08 +02:00
Robert Schmidt
44d427bf7b Rename RRC_BUF_SIZE for 5G to increase size
A maximum RRC buffer size of 1024 might be very small. We should
increase it, but then the 5G RRC_BUF_SIZE does conflict with other
definitions. To make it unique, also rename to NR_RRC_BUF_SIZE.
2024-09-06 10:20:08 +02:00
Robert Schmidt
d2073d924e Remove unused information from PDU session 2024-09-06 10:20:08 +02:00
Robert Schmidt
94258b0fb9 Remove unused fields of DRB 2024-09-06 10:20:08 +02:00
Robert Schmidt
125210fa1e RRC: Correct some logs 2024-09-06 10:20:08 +02:00
Robert Schmidt
e01957e890 Remove RRC status: it is not needed 2024-09-06 10:20:08 +02:00
Robert Schmidt
e63232576e RRC stats: print DU's SSB ARFCN 2024-09-06 10:20:08 +02:00
luis_pereira87
303e724845 Always set firstActive/defaultBWP
Always set the firstActive and defaultBWP in the initial
cellGroupConfig. This is necessary to make the Quectel accept the
handover RRCReconfiguration; it seems that this also works reliably in
normal connection set up, so we can add it.
2024-09-06 10:20:08 +02:00
Robert Schmidt
ea171c75c0 nr_timer: consistently pass by ref, rename to nr_timer_is_active()
Pass consistently the NR_timer_t object through a pointer. Since we have
to modify all occurrences of is_nr_timer_active(), we use that occasion
and rename that function to nr_timer_is_active() to make it consistent
with all other functions, starting with nr_timer.
2024-09-06 10:20:08 +02:00
Robert Schmidt
8d6b6676c5 Reorganize sequence of reestablishment checks
Reorganize the sequence of checks done in reestablishment to make it
more logical:

- check conditions of request (correct C-RNTI)
- check conditions of DU (has MIB/SIB1, MTC)
- check the UE, and from which DU it comes

This will also help to extend it towards reestablishment coming from
different DUs in the case of handover.
2024-09-06 10:20:08 +02:00
Robert Schmidt
31bad32b57 Reestablishment with RRC setup fallback: release old UE if applicable 2024-09-06 10:20:08 +02:00
Robert Schmidt
4e7e8a6fa0 Fix bug: correctly fill LCID in ue context setup resp
Before this bug fix, when using F1, we get this warning:

  Constraint validation failed: LCID: constraint failed (/home/richie/openairinterface5g/cmake_targets/ran_build/build/openair2/F1AP/MESSAGES/F1AP_LCID.c:30)

This is because (1) we don't actually store the LCID, then (2) we did
not put it into the F1 ASN.1 structures. Fix both, to make this warning
disappear.

To actually print the full error message, increase the error buffer
size. Also, for the future, to avoid guessing, print ASN.1 XML when we
encounter a failed constraint validation.
2024-09-06 10:20:08 +02:00
Robert Schmidt
32b2ad259d Harmonize Msg3 PUSCH LOG_A to be only one, demote RA cont res timer 2024-09-06 10:20:08 +02:00
Robert Schmidt
ba0b63fe2f F1AP: Handle SCTP communication lost
It can happen that SCTP communication is simply lost, e.g.

  [SCTP]   SCTP_ASSOC_CHANGE to SCTP_COMM_LOST
  [SCTP]   sctp_recvmsg (fd 104, len -1 ): Connection reset by peer:104

The previous code only handled the SHUTDOWN event, but in abnormal
situations, we should also handle the connection state change and signal
to RRC that the endpoint is dead, which is now implemented.
2024-09-06 10:20:08 +02:00
Robert Schmidt
25430e9b25 Fixup: on SCTP conn event, transmit assoc_id
User of the SCTP module use the assoc_id for connection identification.
The previous code set the assoc_id to -1, so there is no way of telling
which connection broke. Use the assoc_id instead
2024-09-06 10:20:08 +02:00
Robert Schmidt
ec6469d088 F1AP: Remove unnecessary logs 2024-09-06 10:20:08 +02:00
Robert Schmidt
9b7d3351a1 DU: if requested to remove non-existing UE, just ack
The failure mode observed here was that the CU sent a release command
for a UE that the DU does not know. Given, that the outcome of the
release command (no UE) is equal to the current state (no UE), from
the DU point of view, we can safely ack the command.
2024-09-06 10:20:08 +02:00
Robert Schmidt
798a62271c DL RRC message: print log if oldUE unknown 2024-09-06 10:20:08 +02:00
Bartosz Podrygajlo
ca217f8f5b Workaround for PUSCH TX power not applied in PHY
This is a temporary workaround for issue with UE PHY not applying TX power
instructions from MAC. To be reverted once implementation of TX gain control
is finished.
2024-09-06 08:39:54 +02:00
Bartosz Podrygajlo
9b59ba6326 Enable configuration of NR UE through a YAML file
This commit adds yaml-cpp library to required docker images and build commands. There is one workaround
in cross-compilation for apt behavior for installing libyaml-cpp-dev. Apt will uninistall previous
versions of the package whenever another one is installed. This means that installing the arm version
breaks amd version and vice versa. This makes it impossible to have both libs installed at the same
time which is required by the cross-compilation build command (it calls cmake twice, once with native
and once with target architecture)
2024-09-06 08:34:18 +02:00
Bartosz Podrygajlo
0b684732ee YAML as a drop-in replacement for libconfig
This commit introduces a substitute module library for setting up softmodems using YAML instead of libconfig.
The softmodems should work the same with both types of files. Extra care was put to make sure the behavior
of both modules is the same.

Example yaml config files were added for the UE and gNB
2024-09-06 08:33:10 +02:00
Bartosz Podrygajlo
e1879c07bc Fix segfault when attempting to use unsupported scope types in nrscope
Do not attempt to copy scope types >= MAX_SCOPE_TYPES in nrscope as it does
not support them at this point.
2024-09-05 15:21:07 +02:00
Bartosz Podrygajlo
8eb9e3d902 Fix pdschRxdataF_comp phy scope data source
pdschRxdataF_comp data source was handled incorrectly. Each symbol entire slot data was copied. This
caused pdschRxdataF_comp to mostly contain zeros. The call to UEscopeCopy was moved from symbol loop
into last symbol processing. In case imscope is used padding and unused REs are not copied to the
sink.

Added checks inside scope functions to ensure correct functionality.
2024-09-05 15:19:37 +02:00
Guido Casati
70dd524e2b Define softmodem bits in a separate header for either C and C++ 2024-09-05 15:19:26 +02:00
Bartosz Podrygajlo
d8bba3124f Add imscope to optional libraries in ./build_oai 2024-09-05 15:19:17 +02:00
Bartosz Podrygajlo
6dcd3ae8c4 Use --imscope flag to enable/disable imscope 2024-09-05 15:19:09 +02:00
Bartosz Podrygajlo
bdc6df8c42 NR UE & gNB imscope.
A new phy scope based on ImGui and ImPlot. This scope uses a different concurrency model than previous
scopes.

The PHY thread writing the data first checks if the data is ready to be written. If its not, nothing is copied.
The GUI thread reads data if available and marks it ready to write. This makes sure that the PHY threads are not
busy copying data that would never be displayed.

Some of the scopes also have a freeze functionality that further limit the amount of data that needs to be copied
from PHY threads. If a scope is "frozen" it still allows the user to explore the data using plots zoom/pan functions
but doesn't cause PHY threads to perform extra writes on the displayed data.

A compile option was added to enable/disable the scope. Use cmake -DENABLE_IMSCOPE=ON to enable the scope.

Update CXX standard to 17; it is required by some libraries (e.g., dear imgui). The oldest gcc version in
use by a distribution supported is Ubuntu 20, which has gcc 9.4 with c++17 support.
2024-09-05 15:19:00 +02:00
Robert Schmidt
419a14a813 Demote log message of ITTI thread creation 2024-09-05 07:41:32 +02:00
Robert Schmidt
aef863591b CI: increase max number of concurrent workers to 64
According to the ThreadPoolExecutor documentation [1], the default
number of maximum workers min(32, os.cpu_count() + 4). The problem is
that we execute many pipelines from nano, on which os.cpu_count()
reports 4, so we can only have up to 8 concurrent workers by default.
This leads to the fact that on pipelines with many UEs (e.g.,
AW2S-AmariUE), we don't ping/iperf on all UEs at the same time.

Fix this by increasing the number of workers to 64. This should be fine,
as there is almost no real work being done in the Workers (only opening
a shell and execute programs such as ping/iperf).

[1] https://docs.python.org/3/library/concurrent.futures.html#threadpoolexecutor
2024-09-04 18:49:54 +02:00
Robert Schmidt
69a84825fb Merge branch 'ci-deploy-restructure' into 'develop'
chore(ci): CI Infrastructure Refactoring: Streamlining Deployment function, Logging, and docker images

See merge request oai/openairinterface5g!2770
2024-09-04 15:53:35 +00:00
Raphael Defosseux
3393ca948b chore(ci): concatenating deploy message into a single row
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-09-04 15:58:20 +02:00
Bipin Adhikari
e42b2c0389 xml changes for NTN GEO and SIDELINK tests 2024-09-04 15:45:18 +02:00
Bipin
f3033533bb moving module id and node checks to parameter checks 2024-09-04 15:45:18 +02:00
Bipin
db1f2649ee Used Image Info in HTML 2024-09-04 15:45:18 +02:00
Bipin
6053e22684 xml tab formatting cleanup 2024-09-04 15:45:18 +02:00
Bipin Adhikari
3afbf8e39a Patch to resolve MR comments 2024-09-04 15:43:46 +02:00
Bipin Adhikari
9890896b9c patch for Iperf2_Unidir ci_infra %currenthost% 2024-09-04 15:43:46 +02:00
Bipin Adhikari
dad8edb448 Improved UndeployObject cohesion
- Introduced additional helper functions: CopyinContainerLog, GetRunningServices, CheckLogs.
2024-09-04 15:43:46 +02:00
Bipin Adhikari
bc950aaaec Improved DeployObject cohesion
- Introduced helper functions: GetCredentials, GetContainerName, GetImageInfo, GetContainerHealth, ReTagImages, DeployServices.
2024-09-04 15:43:46 +02:00
Bipin Adhikari
ab1564aa1c All log files are now stored in scenario-specific folders in python executor 2024-09-04 15:43:46 +02:00
Bipin Adhikari
f99552419e Use DeployObject/UndeployObject for pipelines using DeployGenObject/UndeployGenObject
XML file changed accordingly
2024-09-04 15:43:46 +02:00
Bipin Adhikari
44d0c88863 Seperated Create_Workspace as a seperate XML task
Create_Workspace is used used in XML files instead of directly being
executed in DeployObject(). This can be problematic if we deploy
multiple services on the same host, since a previous workspace will be
deleted. Also, it removes futile git clones.

There are other XML steps (CppCheckAnalysis, LicenceAndFormattingCheck,
BuildImage, BuildProxy, BuildClusterImage) that implicitly called
Create_Workspace. Those calls have been removed and care has been taken
to insert the corresponding Create_Workspace steps in the XML.
2024-09-04 15:43:46 +02:00
Bipin Adhikari
150a00bd23 support for %%currenthost%% host names for modules in ci_infra
It can be set using nodes and svr_node tags in xml files
2024-09-04 15:38:51 +02:00
Bipin Adhikari
5a49dd9afa aligning all test docker-compose files for image tagging 2024-09-04 15:38:51 +02:00
Bipin Adhikari
ea123a2ac0 Use new SSH class for Deploy_Object 2024-09-04 15:38:51 +02:00
Raphael Defosseux
ee4b193877 chore(ci): removing the workspace creation for the LicenceAndFormattingCheck method
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-09-04 12:47:46 +02:00
Guido Casati
dbe5c5ee61 Minor additions to UnitTests.md 2024-09-03 09:51:29 +02:00
Guido Casati
5764422342 Section about connecting to an NG-Core in NR_SA_Tutorial_OAI_nrUE.md 2024-09-03 09:51:29 +02:00
Guido Casati
9102e10747 Updated F1-design.md
* restructured the documentation
* add details from specs
* add tables and Mermaid diagrams whenever possible
2024-09-03 09:51:23 +02:00
Sakthivel Velumani
28b2de5ac9 Add comments to the new RE mapping functions
Use the new struct as function argument instead of individual parameters
2024-09-03 09:21:29 +02:00
Sakthivel Velumani
f5d22ab85a Gracefully exit PUSCH proc if encoding fails 2024-09-03 09:21:29 +02:00
Sakthivel Velumani
26b3fcca3b Remove SIMD operation for DMRS amplitude scaling
There was concern that someone in the future might call the function
with the wrong inputs. So, based on the discussion on the MR below
https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/2916#note_132506
the SIMD for multiplying DMRS vector with amplitude is removed and is
now done with plain C (no SIMD).

The execution time for the function dmrs_amp_mult() in this commit is
10x higher that the previous commit.
2024-09-03 09:21:29 +02:00
Sakthivel Velumani
393363e253 Refactor PUSCH RE mapping
RE mapping time is reduced by 10x. Functions are made generic to be
later reused for PDSCH RE mapping at gNB.
2024-09-03 09:21:29 +02:00
Sakthivel Velumani
add341e2f1 multi dmrs amp by vector 2024-09-03 09:18:26 +02:00
Sakthivel Velumani
2b7e0a0519 Change loop order to maximize cache hit
It is better to write to memory that are grouped together to reduce
probability of cache miss. This simple change improved the function's
execution speed by 70%.

Removed the unnecessary memset for the buffer.
2024-09-03 09:18:26 +02:00
Sakthivel Velumani
9c8bdd6db5 Add PUSCH timing stats 2024-09-03 09:18:26 +02:00
arora
01ec929ddb Removing rhsm certificates, not needed. 2024-09-02 18:17:04 +02:00
francescomani
db098651b0 improvements in nr_dlsch_llr function 2024-09-02 17:28:44 +02:00
francescomani
2991370169 32byte aligned DLSCH RX symbol size 2024-09-02 17:28:44 +02:00
francescomani
cda82edf78 adapt LLR unit test to a generic UL/DL scenario 2024-09-02 17:28:44 +02:00
francescomani
98a8e5dca3 use common LLR functions at UE for DLSCH 2024-09-02 17:12:43 +02:00
francescomani
aeb562756a moving LLR functions to phy_common 2024-09-02 17:12:43 +02:00
francescomani
ec40b34b1d initial cleanup 2024-09-02 17:12:43 +02:00
Robert Schmidt
9126e3dda8 Merge branch 'integration_2024_w35' into 'develop'
Integration: `2024.w35`

Closes #825

See merge request oai/openairinterface5g!2943

* !2181 ULSCH power computation
* !2915 benchmark for rotate_cpx_vector
* !2936 Avoid complete rebuild on cmake run with git info change
* !2855 NR UE replace phy_config_request_sent
* !2937 small fixes for rfsim
* !2925 CI: Increase tested throughput in SA 2x2 pipeline
* !2934 Run optimized parity check in ldpc encoder only on supported Zc values
* !2912 changes for multi-RU support in fhi72
* !2928 Distribution check: check for F40, remove old U/RHEL releases
* !2913 NR gNB cleanup
* !2927 Update Aerial docs to reference current version
* !2940 remove double define with nr_common.h
2024-09-02 13:26:45 +00:00
Robert Schmidt
d97249d2cf Merge remote-tracking branch 'origin/refactor_rm_double_define' into integration_2024_w35 2024-09-02 11:48:30 +02:00
Robert Schmidt
9924d9d77f Merge remote-tracking branch 'origin/update_aerial_docs' into integration_2024_w35 2024-09-02 11:48:22 +02:00
Robert Schmidt
450346c7dc Merge remote-tracking branch 'origin/NR_gNB_cleanup' into integration_2024_w35 2024-09-02 10:31:57 +02:00
Robert Schmidt
fa7040f3c5 Merge remote-tracking branch 'origin/build-update-distribution-check' into integration_2024_w35 2024-09-01 19:54:22 +02:00
Robert Schmidt
574c4df949 Merge remote-tracking branch 'origin/oaioran_multi_ru' into integration_2024_w35 2024-09-01 19:51:01 +02:00
Robert Schmidt
aab4698fcf Merge remote-tracking branch 'origin/fix-ldpc' into integration_2024_w35 2024-09-01 19:50:41 +02:00
Robert Schmidt
cbcc552643 Merge remote-tracking branch 'origin/ci-increase-test-bitrate' into integration_2024_w35 2024-08-30 17:46:00 +02:00
Robert Schmidt
6b3529b29b Merge remote-tracking branch 'origin/small-fixes-rfsim' into integration_2024_w35 2024-08-30 17:45:24 +02:00
Robert Schmidt
af9f422a84 Merge remote-tracking branch 'origin/NR_UE_MAC_PHY_separation_improvements' into integration_2024_w35 2024-08-30 17:45:18 +02:00
Robert Schmidt
67da31a8b6 Add CentOS stream support, remove CentOS 7+8 and RHEL7
At least in Eurecom, there are no RHEL 7/CentOS 7+8 servers. Existing
installations will work, but we don't want to encourage people to use
these old distributions, so remove it. Also, they reached EOL

Add CentOS stream as an alternative.
2024-08-30 16:25:06 +02:00
Robert Schmidt
140efe0ec0 Merge remote-tracking branch 'origin/fix-excessive-rebuilds' into integration_2024_w35 2024-08-30 16:18:23 +02:00
Robert Schmidt
fdd2994620 Merge remote-tracking branch 'origin/rotate-cpx-vector-benchmark' into integration_2024_w35 2024-08-30 16:18:10 +02:00
Robert Schmidt
468ba05441 Merge remote-tracking branch 'origin/develop-ul-power' into integration_2024_w35 2024-08-30 16:18:03 +02:00
Robert Schmidt
72f7d0409c OCRegistry: do not add /
In the past, it seemed that we had to add a trailing slash (/) after the
OpenShift Registry URI. Now, at least on the CI machine matix, this
makes it fail:

    INFO: oc whoami -t | docker login -u oaicicd --password-stdin default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/
    INFO: docker pull default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/oaicicd-ran/oai-gnb:develop-46a1d2a6
    WARNING: command "docker pull default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/oaicicd-ran/oai-gnb:develop-46a1d2a6" returned non-zero returncode 1: output:
    Error response from daemon: Head "https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/v2/oaicicd-ran/oai-gnb/manifests/develop-46a1d2a6": unauthorized: authentication required

Remove the trailing slash makes it work, like so:

    INFO: oc whoami -t | docker login -u oaicicd --password-stdin default-route-openshift-image-registry.apps.oai.cs.eurecom.fr
    INFO: docker pull default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/oaicicd-ran/oai-gnb:develop-46a1d2a6

The docker pull succeeds.
2024-08-30 16:14:41 +02:00
Guido Casati
47833b1aeb Free NAS PDU buffer in NAS task, which has ownership 2024-08-30 15:04:08 +02:00
Guido Casati
0265607a95 Fix memory leaks in NAS generatePduSessionEstablishRequest
>Direct leak of 7 byte(s) in 1 object(s) allocated from:
    >0 0x7ffff74b4887 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
    >1 0x55555819ab3c in generatePduSessionEstablishRequest /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:938
    >2 0x5555581a8a9f in nas_nrue /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1295
    >3 0x5555581a3078 in nas_nrue_task /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1215
    >4 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442

> Direct leak of 4 byte(s) in 1 object(s) allocated from:
    >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    >1 0x55555819c025 in generatePduSessionEstablishRequest /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:993
    >2 0x5555581a8a9f in nas_nrue /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1295
    >3 0x5555581a3078 in nas_nrue_task /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1215
    >4 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442

> Direct leak of 1 byte(s) in 1 object(s) allocated from:
    >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    >1 0x55555819c8f7 in generatePduSessionEstablishRequest /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:987
    >2 0x5555581a9b75 in nas_nrue /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1299
    >3 0x5555581a414e in nas_nrue_task /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1219
    >4 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-30 15:03:15 +02:00
Guido Casati
8e9f6385cc Fix memory leak in generateAuthenticationResp
> Direct leak of 16 byte(s) in 1 object(s) allocated from:
    >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    >1 0x55555818ef1c in generateAuthenticationResp /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:588
    >2 0x5555581b0fca in nas_nrue /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1405
    >3 0x5555581a3069 in nas_nrue_task /home/guido/repo/openairinterface5g/fix-ue-memory-leaks/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1213
    >4 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-30 14:57:45 +02:00
Guido Casati
0ef6153bb9 Fix memory leak of NAS buffer transfered to RRC with NAS_UPLINK_DATA_REQ
* Data buffer for NAS Registration Complete and Authentication Response is malloced in
  the NAS thread and transfered with ITTI message to RRC, where needs to be freed

Direct leak of 24 byte(s) in 1 object(s) allocated from:
    >0 0x7ffff74b4887 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
    >1 0x5555572b0607 in generateAuthenticationResp /repo/openairinterface5g/develop/openair3/NAS/NR_UE/nr_nas_msg_sim.c:608
    >2 0x5555572b0607 in nas_nrue /repo/openairinterface5g/develop/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1402
    >3 0x5555572baef6 in nas_nrue_task /repo/openairinterface5g/develop/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1198
    >4 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442

Direct leak of 10 byte(s) in 1 object(s) allocated from:
    >0 0x7ffff74b4887 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
    >1 0x55555729754e in generateRegistrationComplete /repo/openairinterface5g/develop/openair3/NAS/NR_UE/nr_nas_msg_sim.c:782
    >2 0x555557299ad3 in handle_registration_accept /repo/openairinterface5g/develop/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1212
    >3 0x5555572b06a0 in nas_nrue /repo/openairinterface5g/develop/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1411
    >4 0x5555572baef6 in nas_nrue_task /repo/openairinterface5g/develop/openair3/NAS/NR_UE/nr_nas_msg_sim.c:1198
    >5 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-30 14:51:54 +02:00
Matthias Mehlhose
d055cc0004 remove double define with nr_common.h 2024-08-30 11:49:12 +00:00
francescomani
01ae8fbb38 prach code cleanup 2024-08-29 15:52:46 +02:00
francescomani
dc5df35fe1 remove a couple of global variables from pusch_vars and some further cleanup 2024-08-29 15:52:42 +02:00
francescomani
1a04ebaa02 cleanup of gNB PHY procedures and removal of global PBCH structure 2024-08-29 15:36:16 +02:00
Cedric Roux
532aa1a904 rfsim: print error if write fails
Some strange behavior may happen if write() to the rfsim socket fails.
Let's print some error, can be useful in case of problem.
2024-08-29 15:06:29 +02:00
Cedric Roux
42539b0bec rfsim: add a check on 'sock'
It is very possible that the operating system returns a file
descriptor bigger than the size of bridge->buf (MAX_FD_RFSIMU, which
is 250 as of now). As a minimum, let's fail if the socket file
descriptor is out of bounds.

A proper solution may be implemented later, if needed.
2024-08-29 14:59:51 +02:00
Rúben Soares Silva
94050d5ec1 Update Aerial docs to reference current version
Updated links to latest available L1 documentation
Removal of unneeded environment variable in aerial_l1_entrypoint.sh
Removal of unneeded checkout command from doc
Reword Aerial Entrypoint script paragraph to separate in multiple sentences
New UE has been tested with Aerial setup
Change bash blocks to reflect that cuBB container no longer uses root
Add alternative instructions to obtain nvipc sources from container
Add note in Prepare the L1 image section specifying default config file and location

Co-Authored by: Reem Bahsoun <reem.bahsoun@openairinterface.org>
2024-08-29 13:15:53 +01:00
Raphael Defosseux
1793e7e56d fix(docker): aligning all rockylinux-9 Dockerfiles with the RHEL9 ones
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-08-29 11:14:50 +02:00
francescomani
d04a83ea93 defs_gNB cleanup 2024-08-29 08:54:42 +02:00
luis_pereira87
8172da04c8 CI: Set max_rxgain to 75 (max value for N310) in SA 2x2 pipeline 2024-08-28 21:09:37 +01:00
Bartosz Podrygajlo
97dfa90cf2 Add two ldpc testcases for checking small block sizes
Added 2 testcases for Zc = 64 for ldpc encoder. These testcases check optimized ldpc
implementation against reference.
2024-08-28 17:48:42 +02:00
francescomani
c93dcc0484 cleanup of encode_parity_check_part_optim including asserting for case not handled 2024-08-28 17:40:26 +02:00
Bartosz Podrygajlo
732555ddc3 Run optimized parity check in ldpc encoder only on supported Zc values
Optimized ldpc encoder was run for Zc values that are not supported (Zc == 64). This
commit fixes the fallback condition to Zc >= 72 for BG 2
2024-08-28 17:40:19 +02:00
Jaroslava Fiedlerova
24c01d8fda CI: Increase tested DL bitrate in SA 2x2 pipeline 2024-08-28 16:33:24 +02:00
Jaroslava Fiedlerova
4684666430 CI: Increase tested UL bitrate in SA 2x2 pipeline 2024-08-28 16:33:24 +02:00
Robert Schmidt
8bffd1666d Avoid complete rebuild on cmake run with git info change
Before this commit, the following will trigger a complete rebuild:

- create another git name (git checkout -b test)
- run cmake again manually (cmake ..)
- run ninja again

The top-level CMakeLists.txt uses add_definitions() to add git
information to all targets; if some git information changes, this will
mark all command lines as dirty, triggering the build.

There is an easy solution: instead of passing this information on the
command line, pass it in a header. This commit uses configure_file() to
generate a file oai_version.h in the build directory with the same
information. Various sources files, e.g., main executables, use this to
output the same information as before. It is then also not necessary to
use header guards, as cmake takes care to create this file.

If cmake is re-run, it will update the header, and trigger only files
including this header will be rebuilt (which can be shown with the above
stpes). The information passed is the same as before, and updates the
information when the old method would have updated it.
2024-08-28 15:57:24 +02:00
Robert Schmidt
49688f8478 Remove unused PACKAGE_BUGREPORT, initialize FIRMWARE_VERSION with sensible default 2024-08-28 15:25:00 +02:00
Bartosz Podrygajlo
0883904891 Introduce benchmark test for rotate_cpx_vector
This commit introduces google benchmark library and one benchmark for
rotate_cpx_vector.  Also extracted common tools used in testcases for
generation and allocation of byte aligned vectors in phy_test_tools.hpp
2024-08-28 15:08:44 +02:00
rmagueta
a3b753d8cb ULSCH power computation in a different way 2024-08-28 11:50:25 +01:00
Robert Schmidt
46a1d2a621 Merge branch 'integration_2024_w34' into 'develop'
Integration: `2024.w34`

See merge request oai/openairinterface5g!2923

* !2906 mod: Improve signal processing speed of rotate_cpx_vector function
* !2909 NR UE SIB1 free fix
* !2917 Cleanup NR UE NAS instance handling
* !2924 Fix misalignment issues in TLVEncoder macros ENCODE_U16, ENCODE_U24
* !2907 CI: add new testcases to RFSim-5G pipeline, reduce ping and iperf test time
* !2893 LEO satellite delay and Doppler simulation and adjusted NR_UE time sync
2024-08-28 07:16:57 +00:00
Robert Schmidt
85f194b5c7 Add documentation and sample config for FHI 7.2 multi-RU operation
Co-authored-by: Raymond Knopp <raymond.knopp@eurecom.fr>
2024-08-27 15:40:15 +02:00
Raymond Knopp
7e18293c70 Changes for multi-RU support in fhi72
Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2024-08-27 15:40:15 +02:00
Robert Schmidt
574363c515 Correct order of PCI addresses in O-RAN 7.2 tutorial
The correct order for xran seems to be first Uplane, then C plane. In
the past, we used to switch (for reasons I don't know), but let's
reverse it to the proper order.
2024-08-27 15:40:15 +02:00
Robert Schmidt
68b29301b0 Merge remote-tracking branch 'origin/ntn_leo_time_comp' into integration_2024_w34 2024-08-27 14:30:15 +02:00
Robert Schmidt
922e810a82 Merge remote-tracking branch 'origin/ci-rfsim-optimize' into integration_2024_w34 2024-08-27 14:30:05 +02:00
Robert Schmidt
957073325e Merge remote-tracking branch 'origin/TLV_Encoder_Fixes' into integration_2024_w34 2024-08-27 14:29:57 +02:00
Robert Schmidt
adc88d3d87 Merge remote-tracking branch 'origin/nr-ue-nas-cleanup' into integration_2024_w34 2024-08-27 14:29:32 +02:00
Robert Schmidt
020662f95a Merge remote-tracking branch 'origin/NR_UE_RRC_SIB1_fix' into integration_2024_w34 2024-08-27 14:29:24 +02:00
Robert Schmidt
baf02b8d1e Merge remote-tracking branch 'origin/speedup_rotate_cpx_vector' into integration_2024_w34 2024-08-27 14:29:12 +02:00
Guido Casati
031622b1a3 Review of CL options section in RUNMODEM
* place all NR UE CL optional options in the same section, in a table
* add a section for common CL options
* add subsection for UE capabilities
* removed redundant text
2024-08-27 10:04:15 +02:00
Jaroslava Fiedlerova
370062c04c CI: Add sidelink test to RF-Sim 5G 2024-08-26 17:08:27 +02:00
Jaroslava Fiedlerova
fad450cbe3 Skip UE Log Analysis During Sidelink Testing
Bypass UE log analysis when testing sidelink, as it fails due to the absence
of expected information and patterns (not present in sidelink communication).
Instead, a custom command is used to verify the success of sidelink tests by
checking for the presence of "PSBCH RX:OK" in the log of the second UE.
2024-08-26 17:08:27 +02:00
Jaroslava Fiedlerova
1960516554 CI: Add NTN GEO testcase to RF-Sim 5G 2024-08-26 17:08:27 +02:00
Jaroslava Fiedlerova
c49ed17c57 CI: Modify rfsim5g 2x2 testcase to use 100 MHz bandwidth 2024-08-26 17:08:27 +02:00
Jaroslava Fiedlerova
7293741a99 CI: Reduce iperf time in RF-Sim 5G 2024-08-26 17:08:27 +02:00
Jaroslava Fiedlerova
d9648ae6b2 CI: Reduce ping time in rfsim 5G 2024-08-26 17:08:27 +02:00
Thomas Schlichter
4b859a2eb8 fix sidelink UE issues found by sanitizer 2024-08-26 17:08:27 +02:00
Robert Schmidt
867a06b302 Distribution check: Remove EOL Ubuntu releases
See also https://ubuntu.com/about/release-cycle
2024-08-26 11:02:43 +02:00
Robert Schmidt
382de78c66 Distribution check: update to current Fedora 40
Closes: #825
2024-08-26 11:02:30 +02:00
Guido Casati
9e6435758a Wrap multi-statement macros ENCODE_U8() and ENCODE_U32() in do { ... } while (0) statements 2024-08-26 10:13:18 +02:00
francescomani
db4d8d2322 fix handling of time start position in SRS FAPI at gNB 2024-08-23 16:36:12 +02:00
Thomas Schlichter
b17b44dffb add description how to run a LEO satellite rfsimulation to RUNMODEM.md 2024-08-23 14:57:48 +02:00
Thomas Schlichter
ede6775ac3 fix for compilers that don't support the CMPLX() macro 2024-08-23 14:57:48 +02:00
Thomas Schlichter
0eb409f114 NR_UE: Perform autonomous timing advance to compensate for fast time drift with relatively large RTT
As we don't have SIB19 with continuously updated ta-Common and ta-CommonDrift values yet, the UE can only adapt it's UL timing according to it's DL drift.
This is required for the UE to keep UL sync with fast time drift and relatively long RTT (e.g. LEO satellite).
We should replace this with the standard compliant way as soon as we have SIB19 with continuously updated contents.
2024-08-23 14:57:48 +02:00
Guido Casati
bac4f798f9 Fix misalignment issues in TLVEncoder macros ENCODE_U16, ENCODE_U24
This commit resolves undefined behaviour runtime errors related
to misaligned memory access. E.g.

> openair3/NAS/COMMON/IES/FGSMobileIdentity.c:193:3:
> runtime error: store to misaligned address 0x608000021e2b for type 'uint16_t',
> which requires 2 byte alignment 0x608000021e2b: note: pointer points here 00 f1 ...

* ENCODE_U24: safely encode 24-bit values into a buffer
  by using memcpy to copy 3 bytes in network byte order (big-endian).
* ENCODE_U16: safely encodes a 16-bit value into a buffer, handling
  misalignment by memcpy 2 bytes to buffer in network byte order (big-endian).
2024-08-23 11:34:44 +02:00
Bartosz Podrygajlo
50f8f3de58 Fix formatting in nr_nas_msg_sim.c 2024-08-23 10:45:45 +02:00
Bartosz Podrygajlo
4f12a25ebd Cleanup NR UE NAS instance handling
- Save nas instance id in nr_ue_nas_t and use that for instance determination.
 - Use correct field in itti message (destinationInstance instead of originInstance) to determine instance
 - Make sure both destinationInstance and originInstance fields are correct in NAS interface functions.
2024-08-23 10:45:36 +02:00
Thomas Schlichter
e662721310 NR_UE: make NTN parameter ta_CommonDrift_r17 configurable via command line parameter --ntn-ta-commondrift
While we don't have SIB19 support yet, UE gets this parameter from command line, just like --ntn-koffset and --ntn-ta-common.
We use this value to initialize the UE's time-tracking PI controller accumulator.
This allows to correctly track the time even if the delay is changing significantly (e.g. due to LEO satellite movement).
We also use it to compensate for the time drift that happenes while performing the initial sync.
2024-08-23 10:26:18 +02:00
Thomas Schlichter
fc4310cda7 fix multi-statement marco asn1cCallocOne() 2024-08-23 10:26:18 +02:00
Thomas Schlichter
4039473a70 NR_UE: add PI controller to time sync
this allows to compensate larger continuous time drift in DL (e.g. large Doppler from LEO satellite)
2024-08-23 10:26:18 +02:00
Thomas Schlichter
8ab7f1dd68 change returned value of UE_dl_preprocessing() in case no sampleShift change from 0 to INT_MAX
This now allows to indicate "there was a new sampleShift calculation, and the actual value is 0"
additionally to "there was no new sampleShift calculation".
2024-08-23 10:25:00 +02:00
Thomas Schlichter
cfb6ed4d82 add example configuration using transparent LEO satellite model for rfsimulator 2024-08-20 16:46:25 +02:00
Thomas Schlichter
6a8edaf317 rfsimulator: add delay and Doppler simulation for circular orbit and add according channel models SAT_LEO_TRANS and SAT_LEO_REGEN
Delay and Doppler computation is done as in Matlab function dopplerShiftCircularOrbit:
https://de.mathworks.com/help/satcom/ref/dopplershiftcircularorbit.html
2024-08-20 16:46:25 +02:00
Thomas Schlichter
68b07d542c rfsimulator: correctly set center frequency 2024-08-20 16:46:25 +02:00
Cédric Roux
2ec8fefbe8 Merge branch 'integration_2024_w33' into 'develop'
Integration: `2024.w33`

See merge request oai/openairinterface5g!2911

- !2784 Reworking beam structures at NR MAC gNB
- !2889 Fix delta for PUSCH DMRS type 2 
- !2908 NR MAC UE CSI improvements
- !2896 Fix for llr functions reading/writing outside buffers
- !2902 nr rlc: reduce "SDU rejected" logging
- !2884 NR UE: Cleanup global variables used for command line parameter storage
- !2910 NR gNB DMRS symbol race
- CI: Update phytest-timing test threshold
2024-08-20 13:11:25 +00:00
Guido Casati
21de8666d3 Updated Wireshark documentation 2024-08-19 17:06:03 +02:00
Jaroslava Fiedlerova
736c0fd37f CI: Update phytest-timing test threshold 2024-08-19 12:27:58 +02:00
Jaroslava Fiedlerova
2fa341ba59 Merge remote-tracking branch 'origin/NR_gNB_dmrs_symbol_race' into integration_2024_w33 2024-08-16 18:55:26 +02:00
Jaroslava Fiedlerova
6529863af2 Merge remote-tracking branch 'origin/ue-cleanup-2' into integration_2024_w33 2024-08-16 18:54:59 +02:00
Guido Casati
94d59d5153 Fix link in documentation 2024-08-16 17:02:52 +02:00
Jaroslava Fiedlerova
33fa06d0a5 Merge remote-tracking branch 'origin/nr-rlc-less-logging' into integration_2024_w33 2024-08-16 16:16:53 +02:00
Jaroslava Fiedlerova
ba70d91ba4 Merge remote-tracking branch 'origin/fix-llr-segfault' into integration_2024_w33 2024-08-16 16:16:07 +02:00
Jaroslava Fiedlerova
e5297febe4 Merge remote-tracking branch 'origin/NR_UE_CSI_measurements_size' into integration_2024_w33 2024-08-16 14:04:42 +02:00
Jaroslava Fiedlerova
1c8e4c364e Merge remote-tracking branch 'origin/fix_delta_ulsch_channel_estimation' into integration_2024_w33 2024-08-16 14:04:13 +02:00
francescomani
c87b390501 code formatting 2024-08-16 10:20:47 +02:00
francescomani
2039a4f25b making global dmrs_symbol in pusch_vars local to avoid race conditions 2024-08-16 10:18:18 +02:00
Bartosz Podrygajlo
94e6cdb2bf Duplicate the testcase for llr with avx 256-bit vector instructions disabled.
This creates another test executable for llr with the same testcases but compiled without avx 256-bit
vector instructions.
2024-08-15 13:04:05 +02:00
Bartosz Podrygajlo
bbd6f35a6f Fix for nr_ulsch_16/64/256qam_llr reading/writing past buffer size on x86 and ARM.
This fixes out-of-bounds access: nr_ulsch_16qam_llr, nr_ulsch_64qam_llr and nr_ulsch_256qam_llr.
For 256qam this also fixes incorrect llr calculation on arm: the existing AVX code for 2 REs
case produced results not in line with the rest of the code. A testcase check_2_res_256_qam was
added to visualise the differences which can later be used to revive AVX acceleration for 2REs case.
2024-08-15 12:58:23 +02:00
francescomani
5effa74067 set FAPI CSI type as TRS when necessary in UE MAC 2024-08-15 08:24:22 +02:00
francescomani
909fd5a9ec from uint8 to uint16 in i1 CSI-RS measurement fields 2024-08-15 08:24:16 +02:00
francescomani
24ff0e294e fix to avoid freeing SIB1 information still in use at RRC UE 2024-08-14 18:57:30 +02:00
francescomani
25fdc1d23d beam association for prach 2024-08-14 10:04:42 +02:00
francescomani
0a8e1b49d0 adapt VRB maps to multiple beams in a period 2024-08-14 08:33:48 +02:00
francescomani
c31d250d28 new structure to handle beams
fix: reset beam only if it is a newly allocated one
2024-08-14 08:28:53 +02:00
Matthias Mehlhose
aa9183c218 mod: Improve signal processing speed of rotate_cpx_vector function 2024-08-13 10:02:56 +00:00
Robert Schmidt
871078a64d Merge branch 'integration_2024_w32' into 'develop'
Integration: `2024.w32`

See merge request oai/openairinterface5g!2900

* !2810 add harqid in wireshark traces, refactor the trace_pdu parameters
* !2897 nr rlc: add a lock to protect access to time variables
* !2903 remove some openair1 headers included in opeinair2 files
* !2876 Enable 32 HARQ Processes in DL, UL
* !2849 Fix UE SRS crash
* !2898 Fix memory leaks in OAI gNB and OAI UE
2024-08-13 03:57:41 +00:00
Jaroslava Fiedlerova
d1a272be1b Merge remote-tracking branch 'origin/fix-gnb-ue-memory-leaks' into integration_2024_w32 2024-08-12 18:12:38 +02:00
Jaroslava Fiedlerova
6ef44ee3ae Merge remote-tracking branch 'origin/avoid_UE_SRS_segfault' into integration_2024_w32 2024-08-12 17:30:04 +02:00
Jaroslava Fiedlerova
00523c2b2f Merge remote-tracking branch 'origin/NR_HARQ32_PROCESSES' into integration_2024_w32 2024-08-12 16:34:24 +02:00
Jaroslava Fiedlerova
30feb7e493 Merge remote-tracking branch 'origin/nr_include_cleanup' into integration_2024_w32 2024-08-12 16:34:09 +02:00
Jaroslava Fiedlerova
51ae5e2c05 Merge remote-tracking branch 'origin/nr-rlc-time-lock' into integration_2024_w32 2024-08-12 16:33:52 +02:00
Jaroslava Fiedlerova
6af674be59 Merge remote-tracking branch 'origin/harqid-in-wireshark-traces' into integration_2024_w32 2024-08-12 16:33:38 +02:00
Guido Casati
7c788be9e0 Cleanup of unused parallel/worker thread configuration in NR
* In LTE there is logic that checks the thread configurtion with the
  getters `get_thread_parallel_conf()` and `get_thread_worker_conf()`
  in NR these getters are not used, only setters, which have no impact
2024-08-12 14:59:03 +02:00
Guido Casati
14b7311bd8 Fix memory leak in do_NR_ULInformationTransfer
* buffer is allocated but not freed after use by PDCP

> Direct leak of 192 byte(s) in 3 object(s) allocated from:
    > 0 0x7ffff74b4c38 in __interceptor_realloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:164
    > 1 0x55555775ee74 in encode_dyn_cb /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/per_encoder.c:23
    > 2 0x55555774776e in _uper_encode_flush_outp /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_encoder.c:126
    > 3 0x55555774776e in uper_encode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_encoder.c:36
    > 4 0x555557747c91 in uper_encode_to_new_buffer /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_encoder.c:85
    > 5 0x5555576c5172 in do_NR_ULInformationTransfer /openair2/RRC/NR/MESSAGES/asn1_msg.c:965
    > 6 0x555556fba691 in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1819
    > 7 0x555556fc4d2e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1717
    > 8 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:54 +02:00
Guido Casati
aa8cf7c41a Fix memory leak in nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message
* bcch_message is malloced by ASN.1 decoder and needs to be always freed after use along with its contents

> Direct leak of 64 byte(s) in 1 object(s) allocated from:
   >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
   >1 0x555557737ecd in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:37
   >2 0x555557746f81 in uper_decode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:83
   >3 0x5555577471fe in uper_decode_complete /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:16
   >4 0x555556f8b1c9 in nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message /openair2/RRC/NR_UE/rrc_UE.c:732
   >5 0x555556fbc365 in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1775
   >6 0x555556fc4c2e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1718
   >7 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:54 +02:00
Guido Casati
b1609e0534 Fix memory leak in nr-uesoftmodem
* strdup is returning a malloced string that needs to freed after use

> Direct leak of 90 byte(s) in 1 object(s) allocated from:
    >0 0x7ffff745b9a7 in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:454
    >1 0x555556c7b341 in main /executables/nr-uesoftmodem.c:461
    >2 0x7ffff5e29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-08-12 10:06:54 +02:00
Guido Casati
e806315963 Fix memory leak in nr_rrc_ue_decode_dcch
* local dl_dcch_msg shall be freed after use

> Direct leak of 384 byte(s) in 6 object(s) allocated from:
    >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    >1 0x555557737ced in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:37
    >2 0x555557746da1 in uper_decode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:83
    >3 0x555556fa4b31 in nr_rrc_ue_decode_dcch /openair2/RRC/NR_UE/rrc_UE.c:1612
    >4 0x555556fbb25c in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1792
    >5 0x555556fc4a4e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1718
    >6 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:54 +02:00
Guido Casati
3d2b32ac1e Fix direct leak of memory allocate by deliver_sdu_srb with itti_malloc
* The RRC task is freeing the ITTI message but the message members that are allocated separetely still need to be freed

> Direct leak of 470 byte(s) in 6 object(s) allocated from:
    >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    >1 0x55555721f117 in itti_malloc /common/utils/ocp_itti/intertask_interface.cpp:64
    >2 0x555556f2356c in deliver_sdu_srb /openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c:775
    >3 0x555556f4e10e in nr_pdcp_entity_recv_pdu /openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c:184
    >4 0x555556f278ad in do_pdcp_data_ind /openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c:285
    >5 0x555556f278ad in pdcp_data_ind_thread /openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c:307
    >6 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:51 +02:00
Guido Casati
a59a69d5e5 Fix strdup-related memory leak in nr-softmodem
* strdup is returning a malloced string which needs to be freed after use

> Direct leak of 90 byte(s) in 1 object(s) allocated from:
	> 0 0x7ffff745b9a7 in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:454
	> 1 0x5555591598a3 in main /executables/nr-softmodem.c:667
	> 2 0x7ffff5e29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-08-12 10:03:20 +02:00
Guido Casati
6435ed309c Fix memory leak in NR UE nr_rrc_ue_process_ueCapabilityEnquiry
* allocate memory in heap for the struct ue_CapabilityRAT_Container used locally for buffer encoding
* free the struct members only for the ul_dcch_msg allocated on the stack

> Direct leak of 40 byte(s) in 1 object(s) allocated from:
    > 0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    > 1 0x555556f7a89f in nr_rrc_ue_process_ueCapabilityEnquiry /openair2/RRC/NR_UE/rrc_UE.c:1861
    > 2 0x555556fa4d85 in nr_rrc_ue_decode_dcch /openair2/RRC/NR_UE/rrc_UE.c:1650
    > 3 0x555556fbb33c in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1790
    > 4 0x555556fc4b2e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1716
    > 5 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:03:16 +02:00
francescomani
2b76e88823 remove some openair1 headers included in opeinair2 files 2024-08-09 16:16:13 +02:00
Cedric Roux
5e547c617c nr rlc am: harmonize log message
let's make it same as um and tm (no more file/line/function)
2024-08-09 15:52:00 +02:00
Cedric Roux
35f5fdf960 nr rlc tm: bugfix: reset t_current when clearing entity
maybe not super important, but let's harmonize with um/am
2024-08-09 15:52:00 +02:00
Cedric Roux
dfe16d985a nr rlc tm: reduce "SDU rejected" logging
once per second is enough
2024-08-09 15:45:39 +02:00
Cedric Roux
ad7bd05f9a nr rlc um: reduce "SDU rejected" logging
once per second is enough
2024-08-09 15:41:15 +02:00
Guido Casati
fb554dc6c9 Simplified and clang-formatted RCconfig_nr_parallel 2024-08-08 11:17:21 +02:00
Guido Casati
6e7ea5ce8d Fix memory leak in RCconfig_nr_parallel
* strdup() function is returning a malloced string
  which must be freed after use
* replace the strdup with direct use of strings to avoid heap allocation

> Direct leak of 23 byte(s) in 1 object(s) allocated from:
    > 0 0x7ffff745b9a7 in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:454
    > 1 0x555559e36f87 in RCconfig_nr_parallel /openair2/GNB_APP/gnb_config.c:2054
    > 2 0x555559e38ea3 in NRRCConfig /openair2/GNB_APP/gnb_config.c:2097
    > 3 0x555559155542 in get_options /executables/nr-softmodem.c:423
    > 4 0x555559155542 in main /executables/nr-softmodem.c:623
    > 5 0x7ffff5e29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

> Direct leak of 14 byte(s) in 1 object(s) allocated from:
    > 0 0x7ffff745b9a7 in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:454
    > 1 0x555559e370c5 in RCconfig_nr_parallel /openair2/GNB_APP/gnb_config.c:2063
    > 2 0x555559e38ea3 in NRRCConfig /openair2/GNB_APP/gnb_config.c:2097
    > 3 0x555559155542 in get_options /executables/nr-softmodem.c:423
    > 4 0x555559155542 in main /executables/nr-softmodem.c:623
    > 5 0x7ffff5e29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-08-08 11:07:00 +02:00
Raghavendra Dinavahi
dafaea7dda enable HARQ32, Changes in UE
- num DL/UL harq processes, bits for harq id in DCIs, set according to IEs configured in RRC messages
	- removed going through all the harq processes before triggering nr_ue_ulsch_procedures in phy_procedures_nr_ue.c
	- did not remove usage of MAX_HARQ_PROCESSES in init phase
2024-08-08 09:30:43 +02:00
Raghavendra Dinavahi
9726a47fbb enable HARQ32, Changes in gNB
- Enabled configuration for number of dl, ul harq processes in conf file
		- set "num_dlharq = 32; num_ulharq = 32;" under "gNBs" section in the conf file
		- default values when not configured is 16 for DL, UL harq processes
		- IEs in the RRC messages set according to the number of DL, UL harq processes configured.
		- If value 32 is configured , then IEs related to num harq processes and dci bits also configured in Bandwidth parts.
2024-08-07 13:17:35 +02:00
Raghavendra Dinavahi
e586efb29d enable HARQ32, Changes common to gNB and UE
- MAX HARQ PROCESSES set to 32
	- for PDSCH - default setting in OAI is 16, according to 3GPP rel17 38.331 these are the possible configs
		- if no IES are defined then 8
		- if nrofHARQ-ProcessesForPDSCH is defined then these values-  {n2, n4, n6, n10, n12, n16}
		- if nrofHARQ-ProcessesForPDSCH-v1700 is defined then 32
		- for harq bits in DCI
			- DCI 1_0 - 4 bits spec 38.212, section 7.3.1.2.1
			- DCI 1_1 - 4/5 bits according to IE harq-ProcessNumberSizeDCI-1-1, spec 38.212, section 7.3.1.2.2
	- for PUSCH - default setting in OAI is 16, according to 3GPP rel17 38.331 these are possible configs
                - if no IES are defined then 16
                - if nrofHARQ-ProcessesForPUSCH-v1700 is defined then 32
                - for harq bits in DCI
                        - DCI 0_0 - 4 bits spec 38.212, section 7.3.1.1.1
                        - DCI 0_1 - 4/5 bits according to IE harq-ProcessNumberSizeDCI-0-1, spec 38.212, section 7.3.1.1.2
	- FOR HARQ32 , DCI 1_1, DCI 0_1 should be configured in UE dedicated search space. In OAI it is set.
2024-08-06 17:12:48 +02:00
Cedric Roux
b22891d403 nr rlc: add a lock to protect access to time variables
ThreadSanitizer reported a data race, let's remove it.

Here is the warning.

WARNING: ThreadSanitizer: data race (pid=7361)
  Write of size 8 at 0x000003b42770 by thread T22 (mutexes: write M0):
    #0 nr_rlc_tick /home/richie/openairinterface5g/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c:1101 (nr-softmodem+0x107d275) (BuildId: 291c846fc591e10c3838e9c53f4738997de8f984)
    #1 gNB_dlsch_ulsch_scheduler /home/richie/openairinterface5g/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c:220 (nr-softmodem+0xaec72a) (BuildId: 291c846fc591e10c3838e9c53f4738997de8f984)
    #2 run_scheduler /home/richie/openairinterface5g/openair2/NR_PHY_INTERFACE/NR_IF_Module.c:406 (nr-softmodem+0xad8515) (BuildId: 291c846fc591e10c3838e9c53f4738997de8f984)
    #3 tx_func /home/richie/openairinterface5g/executables/nr-gnb.c:134 (nr-softmodem+0x7002cc) (BuildId: 291c846fc591e10c3838e9c53f4738997de8f984)
    #4 L1_tx_thread /home/richie/openairinterface5g/executables/nr-gnb.c:197 (nr-softmodem+0x7002cc)

  Previous read of size 8 at 0x000003b42770 by thread T2 (mutexes: write M1):
    #0 rlc_data_req /home/richie/openairinterface5g/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c:348 (nr-softmodem+0x1076f4e) (BuildId: 291c846fc591e10c3838e9c53f4738997de8f984)
    #1 rlc_data_req_thread /home/richie/openairinterface5g/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c:139 (nr-softmodem+0xa671ce) (BuildId: 291c846fc591e10c3838e9c53f4738997de8f984)
2024-08-06 16:53:03 +02:00
Robert Schmidt
d47eb536b0 Merge branch 'integration_2024_w31' into 'develop'
Integration: `2024.w31`

See merge request oai/openairinterface5g!2894

* !2812 NR UE MAC PRACH scheduling fixes
* !2885 Fix signal_energy_nodc for lengths that are not multiples of 4
* !2888 nr rlc: fix decode_poll_byte()
* !2892 Dockerfiles: correct ENV format
* !2891 UE cmd line info: print threequarter-sampling param if used
* !2837 replacing assertions with LOG_E in UE UL locking mechanism
* !2879 style(docker): newer versions of docker require keyword as to be of same case as from
* !2832 Enable PHR reporting for NR UE
* !2880 CI: Improve error handling in Iperf3 JSON analysis functions
* !2813 Rewrite time_stats_t counters for DLSCH in NR UE.
* !2882 Automatic scaling to PUCCH2 receiver
* !2691 NR UE data inactivity timer
* !2848 Refactor network interface handling
* !2865 CI: Create FHI 7.2 pipeline
2024-08-05 16:46:43 +00:00
Robert Schmidt
3e44aba1ea Merge remote-tracking branch 'origin/ci-fhi72-pipeline' into integration_2024_w31 2024-08-05 16:51:31 +02:00
Jaroslava Fiedlerova
d8696f703c CI: Add FHI72 pipeline to the parent pipeline 2024-08-05 15:57:49 +02:00
Jaroslava Fiedlerova
a57098ec02 CI: Add FHI72 pipeline to CI doc 2024-08-05 15:57:49 +02:00
Jaroslava Fiedlerova
9a4d1e920d CI: Add XML files for FHI72 pipeline 2024-08-05 15:57:49 +02:00
Jaroslava Fiedlerova
ca2d9ec2a1 CI: Update ci_infra for FHI7.2 pipeline 2024-08-05 15:57:49 +02:00
Jaroslava Fiedlerova
3cdb0d795e CI: Add path and namespace configuration for OC CNs
- Modify CN deployment and termination functions to include namespace and path parameters.
- Update `Module_UE` class with new attributes for namespace and CN path.
- Integrate `cnID` for OC CN deployment and termination in `epc.py`.
- Extract `cn_id` from XML configurations for CN operations.
- Update XML files to include `cn_id` tag for 5G Core initialization and
  termination. (Used in OAIUE and AW2S pipeline, for OC CN deployment. This change
will not affect other CN deployments.)
2024-08-05 15:57:49 +02:00
Jaroslava Fiedlerova
9c602a7790 CI: Remove unused directory for FHI 7.2 deployments 2024-08-05 15:57:49 +02:00
Jaroslava Fiedlerova
7dffdcd797 CI: Add YAML files and deployment scripts for FHI7.2 pipeline
Create directories for gNB deployment with VVDN and Benetel550 RUs.
Each directory includes scripts for setting up and cleaning up the
host machine running the gNB.
2024-08-05 15:57:46 +02:00
Robert Schmidt
3779483b1b Merge remote-tracking branch 'origin/refactor-nas-config' into integration_2024_w31 2024-08-05 10:20:23 +02:00
Robert Schmidt
335fa3fc50 Merge remote-tracking branch 'origin/NR_UE_data_inactivity_timer' into integration_2024_w31 2024-08-05 10:11:23 +02:00
Jaroslava Fiedlerova
386ff01f57 Merge remote-tracking branch 'origin/pucch2_polar_llr_dynamic_range' into integration_2024_w31 2024-08-05 10:06:07 +02:00
francescomani
88f0e28c76 init received_config_request flag only for SA 2024-08-04 13:27:00 +02:00
francescomani
798158cfe1 improvements in nr_pusch_channel_estimation code 2024-08-02 16:38:17 +02:00
Jaroslava Fiedlerova
fc9c5084eb Merge remote-tracking branch 'origin/nr-ue-pdsch-time-stats-fix' into integration_2024_w31 2024-08-02 16:27:58 +02:00
Robert Schmidt
168582b5a1 Remove netlink_init.c, and move remaining functionality to tun_if.c
Remove openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c, and move TUN
interface creation functionality to tun_if.c.

Remove SIMU_ETH target.
2024-08-02 15:31:04 +02:00
Robert Schmidt
89d89a7564 Create tun_if module for TUN interface handling
Move openair3/RRC/NAS/nas_config.c to common/utils/tun_if.c, and remove
the former from all targets.
2024-08-02 15:31:04 +02:00
Robert Schmidt
39e7839f19 Cleanup netlink_init.c and pdcp_fifo.c
- Remove globals, declare where they are used
- Cleanup pdcp_fifo.c
- Remove unnecessary headers from netlink_init.c
- Reformat netlink_init.c
2024-08-02 15:31:04 +02:00
Robert Schmidt
3a99fb8293 Set up 4G UE addr via nas_config() 2024-08-02 15:31:04 +02:00
Robert Schmidt
2e804f53c0 Remove useless LINK_ENB_PDCP_TO_IP_DRIVER option 2024-08-02 15:31:04 +02:00
Robert Schmidt
659a81997b Handle IPv6/IPv4v6 PDU sessions
Handle IPv6 (and IPv4v6) PDU sessions by correctly instructing
nas_config() to set up the interface with provided IP addresses.
Note that as of now, IPv6 PDU sessions have not been fully tested.

Remove a useless assert at the gNB; to my understanding the gNB does not
care about the IP session type (at least for IP), as it just
transparently tunnels the IP packets from/to GTP.

I added a comment in the code where to change to request a PDU session
different from IPv4. Currently it is hardcoded to IPv4, and it seems
that a default OAI 5GC config would reject a PDU session type different
from IPv4.
2024-08-02 15:31:04 +02:00
Robert Schmidt
d0f32d8aad Refactor change_interface_state()
- Read interface flags before setting status to not inadvertently
  overwrite existing flags
- Set interface flag point-to-point, remove multicast (I think a UE is
  not supposed to send anywhere else than to the UPF, so it seems to not
  make sense to declare the interface as multicast)
2024-08-02 15:30:46 +02:00
Robert Schmidt
ae5702d014 nas_config(): change API to handle both IPv4 and IPv6
Implement handling of IPv4 and IPv6 (on the same interface) in
nas_config().
2024-08-02 15:30:15 +02:00
Robert Schmidt
ffcf53fc75 Reintroduce the IP rule&route for OAI UE through setup_ue_ipv4_route()
These rules & route are necessary to properly send packets on oaitun_ue1
interface:

1. This forces the packets coming from a subnet different than the UE's
   subnet to go back through oaitun_ue1 rather than via what the default
   route defined on the system (e.g., important if ping from the
   internet arrives).

2. On machines setting net.ipv4.conf.oaitun_ue1.rp_filter=1 (e.g.
   RHEL), this prevents that source filtering for packets coming back is
   applied and those packets be dropped. By default, many hosts have
   rp_filter=2, so no strict source filtering is applied, and it would
   work; on others, this rule prevents source filter dropping.
2024-08-02 15:29:36 +02:00
Robert Schmidt
2da09aba80 nas_config(): provide entire IP address to configure
Prior to this commit, there was a global variable baseNetAddress that
could be set independently through a setter and also through the
configuration module. This baseNetAddress (16 bits IPv4) would then be
complemented with two more bytes in nas_config().

However, this is counter-productive, as not only we have a global
variable that is avoidable (we can give the entire address to
nas_config() directly), but it also would not work with IPv6. Hence,
modify to give nas_config() the entire address. A follow-up commit will
add IPv6 support.
2024-08-02 15:29:36 +02:00
Robert Schmidt
2c878c10ec Refactor setInterfaceParameter() and bringInterfaceUp()
- refactor functions to make them shorter
- provide doxygen strings
- open socket for operation once instead of in each function
- use named constant (from enum) to differentiate interface UP/DOWN
- Linux kernel defines name length as IFNAM_SIZE, so use that for
  interface name length. Also, it seems no null-byte is needed.
2024-08-02 15:29:36 +02:00
Robert Schmidt
e2163ba312 Remove netmask configuration and hardcode instead
I initially planned to entirely remove the netmask configuration.
However, in specific configurations, e.g. in 4G Rfsim with feMBMS,
routing does not seem to work anymore using these commands:

  iperf -B 10.0.2.2 -s -u -i1
  iperf -c 10.0.2.2 -B 10.0.2.1 -u -t 30 -b 2.00M -i1

Therefore, we simplify by hardcoding the netmask to /24, which allows
the above to work.
2024-08-02 15:29:36 +02:00
Robert Schmidt
5bf498fca4 nas_config(): remove broadcast parameter
Remove the broadcast address from the UE, as logically, a UE has nothing
to broadcast: it can only directly talk to the core. Additionally, at
least as of now, the UE interface is shown as "POINTOPOINT", so
broadcasting is not possible.
2024-08-02 15:29:36 +02:00
Robert Schmidt
4810efdcfd Remove unused code from nas_config.c
Remove unused header includes, as well as the test program (which does
not do much, and certainly does not test in the way we use the
interfaces).
2024-08-02 15:29:36 +02:00
Robert Schmidt
9fedbf31dd Remove nas_config_mbms()
Remove nas_config_mbms() since nas_config_mbms() and nas_config() do the
same
2024-08-02 15:29:36 +02:00
Robert Schmidt
380cf5c603 Remove routing table init in nas_config()
The routing table is temporarily removed in this commit and introduced
in one of the next commits.
2024-08-02 15:29:36 +02:00
Robert Schmidt
a12460e882 nas_config_mbms/netlink_init_mbms_tun(): use entire interface prefix
Does the same change in the _mbms() functions as in the previous commit.

Also, simplify logic in netlink_init_mbms_tun(): directly use the id in
the interface. This requires a slight ID change in the users, which is
also done in this commit.
2024-08-02 15:29:36 +02:00
Robert Schmidt
5acfa47325 nas_config()/netlink_init_tun(): use entire interface name (prefix)
Instead of implicitly using a hardcoded prefix "oaitun_" interface
name, move that out to the callers of these functions to make it clear.
The ID still remains outside.

The "sister functions" nas_config_mbms()/netlink_init_tun_mbms() will do
the same change in the next commit.
2024-08-02 15:29:36 +02:00
Robert Schmidt
983ee2794d Replace nas_config_mbms_s1() call with nas_config_mbms()
Comparing both functions, it seems that nas_config_mbms_s1() sets the
same parameters, assuming that in nas_config_mbms(), we set
- (UE_NAS_USE_TUN || ENB_NAS_USE_TUN) yielding true -> should yield the
  same interface name
- netmask is hardcoded to 255.255.255.0
- baseNetAddress is hardcoded 10.0

So replace the call with nas_config_mbms() by setting parameters
accordingly.
2024-08-02 15:29:26 +02:00
Jaroslava Fiedlerova
89aad98093 Merge remote-tracking branch 'origin/ci-iperf3-json-fix' into integration_2024_w31 2024-08-02 12:56:07 +02:00
Jaroslava Fiedlerova
0a5e8b7666 Merge remote-tracking branch 'origin/nr-ue-phr' into integration_2024_w31 2024-08-02 12:53:04 +02:00
Bartosz Podrygajlo
f23c1dff00 Correct gNB received PHR to headroom calculation according to 38.133. 2024-08-02 12:37:47 +02:00
Bartosz Podrygajlo
c7c1cb2dbf Enable PHR reporting for NR UE 2024-08-02 12:37:47 +02:00
Jaroslava Fiedlerova
1c58bc2e1a Merge remote-tracking branch 'origin/style-dockerfile-as-uppercase' into integration_2024_w31 2024-08-02 12:04:45 +02:00
Jaroslava Fiedlerova
9a1381a92e Merge remote-tracking branch 'origin/NR_UE_assert_removal' into integration_2024_w31 2024-08-02 12:03:43 +02:00
francescomani
cec91a2a22 remove duplicate delta pusch function 2024-08-02 11:32:03 +02:00
francescomani
5eef9b3574 fix delta for PUSCH DMRS type 2 2024-08-02 10:09:59 +02:00
Jaroslava Fiedlerova
31b2428db8 CI: Add configuration file for gNB fhi7.2 with Benetel550 and VVDN 2024-08-02 10:08:11 +02:00
Jaroslava Fiedlerova
992e7fa117 Merge remote-tracking branch 'origin/ue-cmd-line-info-E' into integration_2024_w31 2024-08-02 09:17:22 +02:00
Jaroslava Fiedlerova
cb0a888565 Merge remote-tracking branch 'origin/docker-env-tini' into integration_2024_w31 2024-08-02 09:16:49 +02:00
Jaroslava Fiedlerova
8094952f6e Merge remote-tracking branch 'origin/bugfix-nr-rlc-poll-byte' into integration_2024_w31 2024-08-02 09:16:26 +02:00
Jaroslava Fiedlerova
8ae5bb5632 Merge remote-tracking branch 'origin/fix-signal-energy-nodc' into integration_2024_w31 2024-08-02 09:15:56 +02:00
Jaroslava Fiedlerova
167c06bb87 Merge remote-tracking branch 'origin/fix_bugs_prach_ue_for_multi_ssb' into integration_2024_w31 2024-08-02 09:15:20 +02:00
Robert Schmidt
7782f4aef0 Remove functions from nas_config that are not used, mark static
- Remove unused NAS_config(): It does most of what the highly similar
  nas_config() does.
- Remove unused set_gateway()
- Remove unused blocking_NAS_config()
- Remove unused functions getNetMask()
- Remove unused broadcast functionality: functions setBroadcastAddress()
  and getBroadcastAddress(), as well as global variable broadcastAddr
  are not used in consumers. Remove it.
- Make functions static
2024-08-01 18:22:46 +02:00
Robert Schmidt
44a0a45460 Remove unneeded header includes 2024-08-01 18:22:46 +02:00
Robert Schmidt
32d9e75dc5 Remove --nokrnmod option, as we never use the kernel anyway 2024-08-01 18:22:46 +02:00
Robert Schmidt
6b21dea1ee Remove legacy 4G kernel modules
I don't know about any user of the kernel modules. It is effectively
legacy code we carry around, for no good reason. Remove it for the
moment. If we ever need it, we can revert.
2024-08-01 18:22:46 +02:00
Robert Schmidt
8f549a5433 Remove rb_config: it's not used by any code currently in use 2024-08-01 18:22:46 +02:00
Robert Schmidt
f680babbdd Remove unused pdcp_netlink.c file 2024-08-01 18:22:45 +02:00
Robert Schmidt
cf950dfa86 Remove netlink/PDCP_USE_NETLINK: it's not used
Remove netlink code, and the PDCP_USE_NETLINK macro, as there is no
known use, it makes the code more complicated, and is simply "technical
debt".

In 4G PDCP, a subtle change has been introduced, in pdcp_module_init()
of pdcp.c. Looking at the diff of this commit, it can be seen that there
is now a new "else-if (ENB_NAS_USE_TUN_W_MBMS_BIT)" branch that is under
what was the "if (PDCP_USE_NETLINK)" branch, while the code fragment was
actually inside the "else" branch of PDCP_USE_NETLINK. This seems to be
necessary: previously, if we did not use noS1 mode and we don't use any
TUN (i.e., the eNB), the else block would set up this interface. It is
important that this interface is brought up, because if we omit it,
RFsim will not work. It seems to me that this interface will regularly
create some traffic; without it, RFsim will be blocked, and the UE
cannot connect.

In short, it seems to be important to have the MBMS interface, which
injects traffic in the RFsim side, which will unblock RFsim. The change
in pdcp_module_init() preserves the total changes of the if-else
(PDCP_USE_NETLINK).
2024-08-01 18:22:45 +02:00
Robert Schmidt
12229ef50e Smaller except blocks, add JSONDecodeError 2024-08-01 17:44:21 +02:00
francescomani
a9902d883c creation of a separate .h file for L2_interface_ue 2024-08-01 16:39:34 +02:00
francescomani
3fa73e4bdd implementation of MAC data inactivity timer 2024-08-01 16:39:24 +02:00
Jaroslava Fiedlerova
39070f6541 Minor fix in Iperf_analyzeV3TCPJson() 2024-08-01 15:59:35 +02:00
Raymond Knopp
70751e04d8 Added automatic scaling to PUCCH2 receiver
Scaling based on incoming signal level to help with polar case.
Can subsequently add PUCCH2 CQI measurement based on this.
2024-08-01 14:03:48 +02:00
Robert Schmidt
848b0f34ee UE cmd line info: print threequarter-sampling param if used, add doc 2024-08-01 13:56:21 +02:00
Jaroslava Fiedlerova
9acf60a339 Improve error handling in Iperf_analyzeV3BIDIRJson() 2024-08-01 13:53:49 +02:00
Jaroslava Fiedlerova
5f684d7f05 Improve error handling in Iperf_analyzeV3TCPJson() 2024-08-01 13:53:45 +02:00
Raphael Defosseux
f6dcc19fe5 style(docker): adding license header to dockerfiles
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-08-01 10:47:46 +02:00
Raphael Defosseux
0efaec657a style(docker): newer versions of docker require keyword as to be of same case as from
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-08-01 10:47:46 +02:00
Bartosz Podrygajlo
d465ed2fbc NR UE: Cleanup global variables used for command line parameter storage
Variables moved to nrUEParams:
vcdflag, rx_gain_off, usrp_args, tx_subdev, rx_subdev, reconfig_file, rbconfig_file, uecap_file,
tx_gain, rx_gain

Variables removed:
rx_gain_mode
2024-08-01 09:50:29 +02:00
Bartosz Podrygajlo
b0b8818549 Remove unused command like parameter rrc_config_path 2024-08-01 09:48:54 +02:00
Robert Schmidt
965b7f63b0 Dockerfiles: correct ENV format
Avoid docker warning:

   - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format
2024-08-01 08:20:33 +02:00
Laurent THOMAS
0e7e66ecd8 add harqid in wireshark traces, refactir the trace_pdu parameters 2024-07-31 09:40:07 +02:00
Robert Schmidt
5223013153 do_ra test: increase response window
Tests showed that we sometimes exceed the response window. In that case,
the UE cannot connect anymore, as do-ra uses contention-free RA, and
prefills a RA process. Avoid this by giving more time in the CI test.
2024-07-31 09:36:22 +02:00
Robert Schmidt
bfaa906a1e Remove rb_config functions from nas_config, remove unused functions, make static 2024-07-30 20:00:40 +02:00
Robert Schmidt
e50978e7de 4G RLC/PDCP interface: remove function pointers
Remove function pointers that were used in the past to implement the
F1(-U) interface in 4G, i.e., to have different functions to handle
split/monolithic operations. As we don't have F1 in 4G anymore (see
commit 9dc2282249), we don't need the
function pointers anymore.

On that occasion, rename the 5G functions by prepending nr_ to them;
this allows to refactor the interface in 5G further (which is not the
focus of this changeset).
2024-07-30 20:00:40 +02:00
Robert Schmidt
3d7ab0ebc6 Remove unused SIMULATION/ETH_TRANSPORT/defs.h 2024-07-30 20:00:40 +02:00
Robert Schmidt
7ddba36279 Remove unused code in ETH_TRANSPORT/{socket,multicast_link}.{ch} 2024-07-30 20:00:40 +02:00
Robert Schmidt
b2eb0f74b6 Remove unused code in openair3/UTILS: not used anywhere 2024-07-30 20:00:40 +02:00
Robert Schmidt
8365630946 Remove unused emu_transport.c 2024-07-30 20:00:40 +02:00
Robert Schmidt
6da87cf062 Remove unused Makefile 2024-07-30 20:00:40 +02:00
Robert Schmidt
9d77057775 Remove LFDS credit: we don't use it anymore 2024-07-30 20:00:40 +02:00
francescomani
77db7be68e avoid duplicated call to phy_config_request 2024-07-30 19:36:49 +02:00
francescomani
ab537c6675 remove mac flag phy_config_request_sent 2024-07-30 19:36:49 +02:00
Bartosz Podrygajlo
b242a483f1 Rewrite NR UE PHY cpu measurements 2024-07-30 19:23:54 +02:00
Robert Schmidt
bd721c3bdb Merge branch 'integration_2024_w30' into 'develop'
Integration: `2024.w30`

See merge request oai/openairinterface5g!2877

* !2830 NR feature set update
* !2868 Fix support for USRP UHD Versions => 4.5.0.0
* !2870 fix(docker): base image for target oai-gnb-aw2s shall be jammy
* !2874 Fix memory leaks in gNB PDU Session Setup Request processing
* !2866 RRC: reject PDU sessions if security is not active
* !2829 Automatic update of USRP RX gain during initial search using --agc option
* !2878 USRP: add a T trace to record the TX IQ data on antenna 0
* !2633 Handle F1 Reset at DU, and ensure state re-init on F1Setup
* !2864 Fix an assert in power control
* !2754 Introduce gold sequence cache
2024-07-30 16:24:27 +00:00
Cedric Roux
77af1ab97b nr rlc: fix decode_poll_byte()
The returned value was 1024 times too big.
2024-07-30 17:38:13 +02:00
Robert Schmidt
82c0b441e5 Merge remote-tracking branch 'origin/simplify-faster-gold-sequences' into integration_2024_w30 2024-07-30 15:05:40 +02:00
Robert Schmidt
b8089ba9a6 Remove empty file nr_gold.c 2024-07-30 14:58:12 +02:00
Laurent THOMAS
bb766be0c3 Reformatting and cleanup 2024-07-30 14:57:17 +02:00
Laurent THOMAS
8e92df78de Use gold cache in PUCCH decoding 2024-07-30 14:57:10 +02:00
Laurent THOMAS
803b0289a6 Use gold cache in code word (un)scrambling 2024-07-30 14:57:06 +02:00
Laurent THOMAS
f207ac12be Use gold cache in UCI 2024-07-30 14:57:01 +02:00
Laurent THOMAS
00cb43bac3 Use gold cache for PRS decoding 2024-07-30 14:55:35 +02:00
Robert Schmidt
7563937af8 Use gold cache for CSI-RS decoding 2024-07-30 14:53:30 +02:00
Laurent THOMAS
e445ba2d1a Use gold cache PUSCH decoding
Harmonize nr_gold_pusch() and nr_gold_pdsch(), as the gold sequence
calculation for PUSCH and PDSCH is the same.
2024-07-30 14:52:06 +02:00
Laurent THOMAS
745ea1c1dd Use gold cache for PDSCH decoding 2024-07-30 14:50:57 +02:00
Laurent THOMAS
99c8dd420a Use gold cache for PDCCH decoding, scrambling, unscrambling 2024-07-30 14:49:46 +02:00
Laurent THOMAS
0316431e27 Use gold cache for PBCH encoding&decoding 2024-07-30 14:48:36 +02:00
Robert Schmidt
9d81708b49 takeout 2024-07-30 14:44:31 +02:00
Jaroslava Fiedlerova
bb9af4c7dc Merge remote-tracking branch 'origin/fix-assert-in-pc' into integration_2024_w30 2024-07-30 10:18:20 +02:00
arora
0800dad0e4 (doc): Added a new doc on hardware requirements
- Added information about the CPU clock-speed in 7.2 docs
2024-07-30 10:04:07 +02:00
Bartosz Podrygajlo
ed05c94c3e Fix signal_energy_nodc for lengths that are not multiples of 4 2024-07-30 09:44:00 +02:00
Robert Schmidt
686f1816d0 Merge remote-tracking branch 'origin/impl_f1reset_and_fix_f1setup' into integration_2024_w30 2024-07-29 12:02:50 +02:00
Xin Zhe Khooi
52bd1ad7c6 Update FEATURE_SET.md with F1 Reset (DU-only) 2024-07-29 07:44:31 +02:00
Robert Schmidt
2b44e5252d Add log statement that DU sends F1 Setup Request, as done in other functions 2024-07-29 07:44:31 +02:00
Xin Zhe Khooi
52f077c478 Initialized DU UE states on F1SetupResponse
38.473 requires to reset UE-related contexts in F1 Setup Request, so do
it.

However, avoid resetting UE states in phy_test: it has preconfigured UE
which we should not reset. Note that if NSA/phy-test used F1, we could
likely reset the UE state here, as the F1 UE context setup would come
afterwards.
2024-07-29 07:43:14 +02:00
Jaroslava Fiedlerova
f30e354b77 Merge remote-tracking branch 'origin/T-usrp-tx-sample-trace' into integration_2024_w30 2024-07-26 18:07:42 +02:00
Jaroslava Fiedlerova
d0daf03089 Merge remote-tracking branch 'origin/NR_UPDATE_RXGAIN' into integration_2024_w30 2024-07-26 18:07:22 +02:00
Laurent THOMAS
59086151e0 Add generic usage-based gold cache
Add gold sequence cache with dynamic size, private to each thread. It
periodically reorders by call rate. To free the gold sequences after end
of life time of a thread, use the pthread API.
2024-07-26 16:39:28 +02:00
Jaroslava Fiedlerova
fbf257f6ba Merge remote-tracking branch 'origin/pdu-session-no-security' into integration_2024_w30 2024-07-26 14:13:17 +02:00
Jaroslava Fiedlerova
5692217c29 Merge remote-tracking branch 'origin/fix-gnb-memory-leaks' into integration_2024_w30 2024-07-26 14:12:55 +02:00
Cedric Roux
181ec25a23 USRP: add a T trace to record the TX IQ data on antenna 0 2024-07-26 12:54:55 +02:00
Robert Schmidt
9c1a8733c1 nr_pusch_dmrs_rx(): const input 2024-07-26 12:15:36 +02:00
Robert Schmidt
fc5258962f nr_gen_ref_conj_symbols()/nr_ptrs_cpe_estimation(): const input 2024-07-26 12:14:59 +02:00
Robert Schmidt
46ca521042 nr_pdc/sch_dmrs_rx(): make non-changing input parameter const ptr 2024-07-26 12:14:29 +02:00
Robert Schmidt
9e0bcb7fe4 nr_modulation(): make non-changing input parameter const ptr 2024-07-26 12:04:35 +02:00
Bartosz Podrygajlo
48d68f7d90 Fix a bug where if BWP size is not exactly maximum BWP size for a bandwidth power control code asserts.
This assert and assumption is incorrect, according to 38.101-1 UE channel is defined only by the BWP size
and BWP size can be any value supported by the RRC parameters defining the BWP.
To determine the UE channel the smallest bandwidth supporting the BWP is selected. This is an assumption based
on references in the same document to UE channel bandwidth being equal to one of the values in set
 {5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 100}.
Also:
 - calculated P_CMIN during BWP setup since the parameter doesn't depend on DCI.
 - initiialize uniqCfg structure in test_nr_ue_power_procedures main function which enables LOG prints during tests
2024-07-26 11:15:49 +02:00
Jaroslava Fiedlerova
eab8dfa4c4 Merge remote-tracking branch 'origin/fix-aw2s-image-base' into integration_2024_w30 2024-07-26 10:31:41 +02:00
Jaroslava Fiedlerova
bad93150ff Merge remote-tracking branch 'platini/develop' into integration_2024_w30 2024-07-26 10:29:39 +02:00
Jaroslava Fiedlerova
4acb9be7c0 Merge remote-tracking branch 'origin/NR_UE_feature_set_update' into integration_2024_w30 2024-07-26 10:21:13 +02:00
Xin Zhe Khooi
23a865db77 Implement DU F1 Reset handlers 2024-07-26 08:53:32 +02:00
Xin Zhe Khooi
a92ab368f2 Decouple UEContextReleaseComplete message generation from MAC UE release
The next commit implements the release of all UEs following the F1 Reset
message. It uses nr_mac_release_ue(), which as of now, triggered a
release complete message automatically, which we don't want in the case
of F1 Reset.

This commit refactors the code to split UE release at MAC/RLC and
release complete message sending to allow to release UEs without sending
the complete. Corresponding users are updated.
2024-07-26 08:48:10 +02:00
Xin Zhe Khooi
03c2f6277d Implement encoder/decoder for F1 Reset at DU 2024-07-26 08:42:37 +02:00
Xin Zhe Khooi
2cb6fd0890 Stubs for F1 Reset 2024-07-26 08:42:34 +02:00
Guido Casati
2d6aef5183 Fix memory leak in PDU Session Setup Request decoding
* aper_decode allocates memory for for local pointer `pdusessionTransfer`, in `decodePDUSessionResourceSetup`
* this memory seems not to be freed but its members are by:
  `ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupRequestTransfer,pdusessionTransfer);`
  which btw in its header says: "AVOID using it in the application code; Use a safer ASN_STRUCT_RESET() instead"
* the following mem leak was detected by ASAN:

```
Direct leak of 72 byte(s) in 1 object(s) allocated from:
   *0 0x7ffff74b4a57 in __interceptor_calloc /src/libsanitizer/asan/asan_malloc_linux.cpp:154
   *1 0x55555cb306df in SEQUENCE_decode_aper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_aper.c:36
   *2 0x55555ca9fa28 in aper_decode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/aper_decoder.c:78
   *3 0x55555b99bae6 in decodePDUSessionResourceSetup /openair2/RRC/NR/rrc_gNB_NGAP.c:273
   *4 0x55555b99fec2 in trigger_bearer_setup /openair2/RRC/NR/rrc_gNB_NGAP.c:357
   *5 0x55555b9b54bf in rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ /openair2/RRC/NR/rrc_gNB_NGAP.c:830
   *6 0x55555b936871 in rrc_gnb_task /openair2/RRC/NR/rrc_gNB.c:2428
   *7 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
```

* This commit replaces ASN_STRUCT_FREE_CONTENTS_ONLY with ASN_STRUCT_FREE, which will free the memory allocated for the entire struct and its members
2024-07-25 16:46:22 +02:00
Guido Casati
c78b8dda56 Fix memory leak in PDU Session Setup Request
* fill_DRB_configList_e1 is filling `DRB_configList->list` then passing to PDCP
* the contents of the struct are allocated but seem not to be freed
* the following mem leak was detected by ASAN

```
Direct leak of 32 byte(s) in 1 object(s) allocated from:
   *0 0x7ffff74b4c38 in __interceptor_realloc /src/libsanitizer/asan/asan_malloc_linux.cpp:164
   *1 0x55555caa6a3e in asn_set_add /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/asn_SET_OF.c:27
   *2 0x55555c8b8bb6 in fill_DRB_configList_e1 /openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c:42
   *3 0x55555c8be6eb in e1_bearer_context_setup /openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c:189
   *4 0x55555d329668 in cucp_cuup_bearer_context_setup_direct /openair2/RRC/NR/cucp_cuup_direct.c:31
   *5 0x55555b9a2c37 in trigger_bearer_setup /openair2/RRC/NR/rrc_gNB_NGAP.c:437
   *6 0x55555b9b54bf in rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ /openair2/RRC/NR/rrc_gNB_NGAP.c:830
   *7 0x55555b936871 in rrc_gnb_task /openair2/RRC/NR/rrc_gNB.c:2428
   *8 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
```

* using ASN_STRUCT_RESET to free the memory used by the members of the structure
  without freeing the structure pointer which is allocated on the stack
2024-07-25 16:46:17 +02:00
Raghavendra Dinavahi
95a8767383 Automatic update of USRP RX gain during initial search using --agc option
- if search fails, keeps increasing the rx gain (set by --ue-rxgain) by
  3 db until USRP max rx gain
- if initial sync is success, sets the rxgain to the value of
  (TARGET_RX_POWER (50) - pbch digital power in dB/RE)
2024-07-25 15:33:44 +02:00
Raghavendra Dinavahi
4c698bce2b rewrite ssb meas function to call from initial sync 2024-07-25 15:33:06 +02:00
Raghavendra Dinavahi
6fce492177 Correction of variable initialisation 2024-07-25 15:31:34 +02:00
Guido Casati
869b78efe2 Use NGAP protocol cause IE in the stack 2024-07-25 13:58:08 +02:00
Guido Casati
d581c671e9 Add enum for NGAP protocol cause IEs 2024-07-25 13:58:08 +02:00
Raphael Defosseux
0ed8fb7205 Merge remote-tracking branch 'origin/back_to_Aerial2' into develop 2024-07-25 13:56:48 +02:00
Reem Bahsoun
2e0186f884 updating Aerial setup in TESTBench to Aerial2 and Quectel RM520N on Sphex 2024-07-25 10:32:40 +02:00
Robert Schmidt
032d4fc9ff RRC: reject PDU sessions if security is not active
OAI 5GC seems to have a bug, and occasionally might send a PDU session
setup request without having sent a UE context setup request, resulting
in no security context activated for a UE. This lead to an assertion in
rrc_gNB_process_e1_bearer_context_setup_resp().

To prevent the gNB from stopping, check if security is active before
triggering PDU sessions. If not, the gNB will reject PDU sessions.
2024-07-24 18:09:57 +02:00
Reem Bahsoun
ad5eb8cd14 Increased the the DL throughput to 150Mbps 2024-07-24 13:09:06 +02:00
Reem Bahsoun
9eeaee450b change IP address to Aerial2 in gnb conf 2024-07-24 13:06:38 +02:00
francescomani
490620a0d8 gNB supported number of antenna feature set update 2024-07-22 17:53:53 +02:00
francescomani
76aaf60dd1 UE feature set update 2024-07-22 17:53:53 +02:00
Raphael Defosseux
3926e140e8 fix(docker): base image for target oai-gnb-aw2s shall be jammy
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-07-22 12:09:54 +02:00
Patricio Latini
a382a08bd3 Fix support for USRP UHD Versions => 4.5.0.0 2024-07-20 19:11:50 +00:00
francescomani
6475c79453 this avoids member access within null pointer error seen in RFsim CI tests sometimes 2024-07-10 10:40:19 +02:00
francescomani
e5900e0757 replacing assertions with LOG_E in UL locking mechanism 2024-07-04 13:51:34 +02:00
francescomani
b8a86fecfd fix for regressions in prach scheduling functions at MAC UE in presence of multiple SSBs 2024-06-28 18:17:40 +02:00
1045 changed files with 35002 additions and 43470 deletions

1
.gitignore vendored
View File

@@ -25,3 +25,4 @@ tags
nfapi_nr_interface_scf
*.log
*.out
CMakeUserPresets.json

View File

@@ -23,6 +23,7 @@
cmake_minimum_required (VERSION 3.16)
project (OpenAirInterface LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
#########################################################
# Base directories, compatible with legacy OAI building #
@@ -30,6 +31,10 @@ project (OpenAirInterface LANGUAGES C CXX)
set (OPENAIR_DIR ${CMAKE_SOURCE_DIR})
include("cmake_targets/macros.cmake")
if(NOT DEFINED ENV{CPM_SOURCE_CACHE})
set(CPM_SOURCE_CACHE ~/.cache/cpm/ CACHE FILEPATH "Directory to download CPM dependencies")
endif()
include("cmake_targets/CPM.cmake")
##############################
### CCache: reduce compilation time
@@ -84,7 +89,6 @@ set (OPENAIR2_DIR ${OPENAIR_DIR}/openair2)
set (OPENAIR3_DIR ${OPENAIR_DIR}/openair3)
set (OPENAIR3_DIR ${OPENAIR_DIR}/openair3)
set (OPENAIR_CMAKE ${OPENAIR_DIR}/cmake_targets)
set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
project (OpenAirInterface)
@@ -254,12 +258,6 @@ if(GIT_FOUND)
)
endif()
# Below is a hard-coded info
set (FIRMWARE_VERSION "No svn information")
add_definitions("-DFIRMWARE_VERSION=\"${FIRMWARE_VERSION}\"")
add_definitions("-DPACKAGE_VERSION=\"Branch: ${GIT_BRANCH} Abrev. Hash: ${GIT_COMMIT_HASH} Date: ${GIT_COMMIT_DATE}\"")
add_definitions("-DPACKAGE_BUGREPORT=\"openair4g-devel@lists.eurecom.fr\"")
# Debug related options
#########################################
add_boolean_option(DEBUG_ASN1 False "Enable ASN1 debug logs" OFF)
@@ -295,6 +293,8 @@ set_property(CACHE KPM_VERSION PROPERTY STRINGS "KPM_V2_03" "KPM_V3_00")
message(STATUS "Selected KPM Version: ${KPM_VERSION}")
add_boolean_option(ENABLE_IMSCOPE OFF "Enable phy scope based on imgui" OFF)
##################################################
# ASN.1 grammar C code generation & dependencies #
##################################################
@@ -435,20 +435,18 @@ add_library(f1ap
${F1AP_DIR}/f1ap_cu_rrc_message_transfer.c
${F1AP_DIR}/f1ap_cu_task.c
${F1AP_DIR}/f1ap_cu_ue_context_management.c
${F1AP_DIR}/f1ap_cu_warning_message_transmission.c
${F1AP_DIR}/f1ap_du_interface_management.c
${F1AP_DIR}/f1ap_du_paging.c
${F1AP_DIR}/f1ap_du_rrc_message_transfer.c
${F1AP_DIR}/f1ap_du_system_information.c
${F1AP_DIR}/f1ap_du_task.c
${F1AP_DIR}/f1ap_du_ue_context_management.c
${F1AP_DIR}/f1ap_du_warning_message_transmission.c
${F1AP_DIR}/f1ap_encoder.c
${F1AP_DIR}/f1ap_handlers.c
${F1AP_DIR}/f1ap_itti_messaging.c)
target_include_directories(f1ap PUBLIC F1AP_DIR)
target_link_libraries(f1ap PUBLIC asn1_f1ap L2_NR)
target_link_libraries(f1ap PRIVATE ngap nr_rrc HASHTABLE)
target_link_libraries(f1ap PRIVATE ngap nr_rrc HASHTABLE f1ap_lib)
target_include_directories(f1ap PRIVATE ${F1AP_DIR}/lib)
# LPP
##############
@@ -508,9 +506,6 @@ include_directories ("${OPENAIR_DIR}/radio/COMMON")
# ???!!! TO BE DOCUMENTED OPTIONS !!!???
##############################################################
add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????" ON)
add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????" ON)
add_boolean_option(UE_EXPANSION False "enable UE_EXPANSION with max 256 UE" ON)
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE" ON)
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE" ON)
@@ -547,16 +542,8 @@ add_boolean_option(NAS_UE True "NAS UE INSTANCE (<> NAS_MME)"
add_boolean_option(RRC_DEFAULT_RAB_IS_AM True "set the LTE RLC mode to AM for the default bearer, otherwise it is UM." ON)
# add the binary tree to the search path for include files
#######################################################
# We will find ConfigOAI.h after generation in target directory
include_directories("${OPENAIR_BIN_DIR}")
# add directories to find all include files
# the internal rule is to use generic names such as defs.h
# but to make it uniq name as adding the relative path in the include directtive
# example: #include "RRC/LTE/rrc_defs.h"
#find_path (include_dirs_all *.h ${OPENAIR_DIR})
#find_path (include_dirs_all *.h PATHS /usr/include NO_CMAKE_PATH)
#include_directories("${include_dirs_all}")
# We will find common/oai_version.h after generation in target directory
include_directories(${CMAKE_CURRENT_BINARY_DIR})
# Legacy exact order
@@ -1014,9 +1001,10 @@ set(PHY_SRC_UE
set(PHY_NR_SRC_COMMON
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach_common.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
${OPENAIR1_DIR}/PHY/nr_phy_common/src/nr_phy_common_csirs.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_scrambling.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/scrambling_luts.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/refsig.c
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
)
@@ -1042,16 +1030,15 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/ul_ref_seq_nr.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gen_mod_table.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
${OPENAIR1_DIR}/PHY/NR_REFSIG/ptrs_nr.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
${OPENAIR1_DIR}/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
${OPENAIR1_DIR}/PHY/NR_ESTIMATION/nr_freq_equalization.c
${OPENAIR1_DIR}/PHY/NR_ESTIMATION/nr_measurements_gNB.c
${OPENAIR1_DIR}/PHY/TOOLS/file_output.c
${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c
#${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c
${OPENAIR1_DIR}/PHY/TOOLS/cmult_sv.c
${OPENAIR1_DIR}/PHY/TOOLS/cmult_vv.c
@@ -1084,7 +1071,6 @@ set(PHY_SRC_UE
${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
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_tbs_tools.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach_common.c
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_sch_dmrs.c
@@ -1107,7 +1093,6 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/nr_adjust_gain.c
${OPENAIR1_DIR}/PHY/TOOLS/file_output.c
${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c
# ${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c
${OPENAIR1_DIR}/PHY/TOOLS/cmult_sv.c
${OPENAIR1_DIR}/PHY/TOOLS/cmult_vv.c
@@ -1118,7 +1103,6 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/TOOLS/lut.c
${OPENAIR1_DIR}/PHY/TOOLS/simde_operations.c
${OPENAIR1_DIR}/PHY/INIT/nr_init_ue.c
# ${OPENAIR1_DIR}/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c
${PHY_POLARSRC}
${PHY_SMALLBLOCKSRC}
${PHY_NR_CODINGIF}
@@ -1155,6 +1139,10 @@ add_library(PHY_NR_COMMON ${PHY_NR_SRC_COMMON})
add_library(PHY_NR ${PHY_NR_SRC})
target_link_libraries(PHY_NR nr_phy_common nr_common)
add_library(PHY_NR_NO_AVX_256 ${PHY_NR_SRC})
target_link_libraries(PHY_NR_NO_AVX_256 nr_phy_common nr_common)
target_compile_definitions(PHY_NR_NO_AVX_256 PUBLIC USE_128BIT)
add_library(PHY_NR_UE ${PHY_NR_UE_SRC})
target_link_libraries(PHY_NR_UE PRIVATE asn1_nr_rrc_hdrs nr_phy_common nr_common)
@@ -1214,6 +1202,7 @@ set(NR_PDCP_SRC
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_sdu.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_timer_thread.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_security_nea2.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_security_nea1.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_integrity_nia2.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/asn1_utils.c
@@ -1271,7 +1260,6 @@ set(L2_NR_SRC
${NR_PDCP_SRC}
${NR_SDAP_SRC}
${NR_RRC_DIR}/rrc_gNB.c
${NR_RRC_DIR}/nr_rrc_common.c
${NR_RRC_DIR}/mac_rrc_dl_direct.c
${NR_RRC_DIR}/mac_rrc_dl_f1ap.c
${NR_RRC_DIR}/nr_rrc_config.c
@@ -1283,6 +1271,7 @@ set(L2_NR_SRC
${NR_RRC_DIR}/rrc_gNB_radio_bearers.c
${NR_RRC_DIR}/rrc_gNB_cuup.c
${NR_RRC_DIR}/rrc_gNB_du.c
${NR_RRC_DIR}/rrc_gNB_mobility.c
)
set(L2_SRC_UE
@@ -1445,6 +1434,8 @@ add_library(L2_NR
${GNB_APP_SRC}
)
target_link_libraries(L2_NR PRIVATE ds alg)
target_link_libraries(L2_NR PRIVATE f1ap_lib)
target_include_directories(L2_NR PRIVATE ${F1AP_DIR}/lib)
add_library(e1_if
${NR_RRC_DIR}/cucp_cuup_direct.c
@@ -1483,10 +1474,6 @@ add_library(L2_UE_LTE_NR
)
target_link_libraries(L2_UE_LTE_NR PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
if (NOT ${NOS1})
target_compile_definitions(L2_UE PUBLIC -DPDCP_USE_NETLINK)
endif()
target_link_libraries(L2_UE PRIVATE asn1_lte_rrc_hdrs)
add_library( NR_L2_UE ${NR_L2_SRC_UE} ${MAC_NR_SRC_UE} )
@@ -1795,7 +1782,7 @@ add_library(LIB_NAS_SIMUE
${NAS_SRC}UE/nas_parser.c
${NAS_SRC}UE/nas_proc.c
${NAS_SRC}UE/nas_user.c
${NAS_SRC}NR_UE/nr_nas_msg_sim.c
${NAS_SRC}NR_UE/nr_nas_msg.c
${libnas_api_OBJS}
${libnas_ue_api_OBJS}
${libnas_emm_msg_OBJS}
@@ -1858,8 +1845,6 @@ add_library(NB_IoT MODULE ${NBIOT_SOURCES} )
add_library(LIB_5GNAS_GNB
${NAS_SRC}/COMMON/nr_common.c
${NAS_SRC}/gNB/network_process_nas.c
${NAS_SRC}/NR_UE/ue_process_nas.c
${OPENAIR3_DIR}//UICC/usim_interface.c
)
@@ -1885,13 +1870,6 @@ set (SIMUSRC
add_library(SIMU STATIC ${SIMUSRC} )
target_include_directories(SIMU PUBLIC ${OPENAIR1_DIR}/SIMULATION/TOOLS ${OPENAIR1_DIR}/SIMULATION/RF)
add_library(SIMU_ETH STATIC
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c
)
target_link_libraries(SIMU_ETH PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
include_directories("${NFAPI_DIR}/nfapi/public_inc")
include_directories("${NFAPI_DIR}/common/public_inc")
include_directories("${NFAPI_DIR}/pnf/public_inc")
@@ -1940,8 +1918,6 @@ add_executable(lte-softmodem
${OPENAIR_DIR}/executables/create_tasks_mbms.c
${OPENAIR_DIR}/radio/COMMON/common_lib.c
${OPENAIR_DIR}/radio/COMMON/record_player.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
${PHY_INTERFACE_DIR}/queue_t.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
@@ -1954,7 +1930,7 @@ target_link_libraries(lte-softmodem PRIVATE
-Wl,--start-group
lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U SECURITY UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
PHY_COMMON PHY PHY_RU L2 L2_LTE NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
${NAS_UE_LIB} ITTI SIMU SIMU_ETH shlib_loader
${NAS_UE_LIB} ITTI SIMU shlib_loader
-Wl,--end-group z dl)
target_link_libraries(lte-softmodem PRIVATE pthread m CONFIG_LIB rt sctp)
@@ -1998,22 +1974,17 @@ add_executable(lte-uesoftmodem
${OPENAIR_DIR}/executables/create_tasks_ue.c
${OPENAIR_DIR}/radio/COMMON/common_lib.c
${OPENAIR_DIR}/radio/COMMON/record_player.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c
)
if (NOT ${NOS1})
target_compile_definitions(lte-uesoftmodem PRIVATE -DPDCP_USE_NETLINK)
endif()
target_link_libraries(lte-uesoftmodem PRIVATE
-Wl,--start-group
lte_rrc nr_rrc s1ap x2ap m2ap m3ap
SECURITY UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON
PHY_UE PHY_RU L2_UE L2_LTE SIMU SIMU_ETH NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
PHY_UE PHY_RU L2_UE L2_LTE SIMU NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
${NAS_UE_LIB} ITTI shlib_loader
-Wl,--end-group z dl)
@@ -2038,8 +2009,6 @@ add_executable(nr-softmodem
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR_DIR}/radio/COMMON/common_lib.c
${OPENAIR_DIR}/radio/COMMON/record_player.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${PHY_INTERFACE_DIR}/queue_t.c
@@ -2050,7 +2019,7 @@ 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
ITTI ${NAS_UE_LIB} lte_rrc nr_rrc
ngap s1ap L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB SIMU SIMU_ETH
ngap s1ap L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB SIMU
x2ap f1ap m2ap m3ap e1ap shlib_loader
-Wl,--end-group z dl)
@@ -2081,7 +2050,6 @@ target_link_libraries(nr-softmodem PRIVATE
add_executable(nr-cuup
executables/nr-cuup.c
executables/softmodem-common.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${NR_RRC_DIR}/rrc_gNB_UE_context.c
${OPENAIR2_DIR}/E1AP/e1ap_setup.c
${NR_PDCP_SRC}
@@ -2090,7 +2058,7 @@ add_executable(nr-cuup
target_link_libraries(nr-cuup PRIVATE
CONFIG_LIB ITTI SCTP_CLIENT
GTPV1U e1ap f1ap SIMU_ETH
GTPV1U e1ap f1ap
z sctp dl pthread shlib_loader ${T_LIB})
target_link_libraries(nr-cuup PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT)
@@ -2109,9 +2077,7 @@ add_executable(nr-uesoftmodem
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR_DIR}/radio/COMMON/common_lib.c
${OPENAIR_DIR}/radio/COMMON/record_player.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR2_DIR}/LAYER2/NR_MAC_COMMON/nr_mac_common.c
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c
)
@@ -2121,10 +2087,10 @@ target_link_libraries(nr-uesoftmodem PRIVATE
nr_rrc SECURITY UTIL HASHTABLE SCHED_RU_LIB SCHED_NR_UE_LIB
PHY_COMMON PHY_NR_COMMON PHY_NR_UE NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON NFAPI_LIB NFAPI_PNF_LIB
NFAPI_USER_LIB MISC_NFAPI_NR_LIB
ITTI LIB_5GNAS_GNB LIB_NAS_SIMUE ${NAS_SIM_LIB} SIMU SIMU_ETH shlib_loader
ITTI LIB_5GNAS_GNB LIB_NAS_SIMUE ${NAS_SIM_LIB} SIMU shlib_loader
-Wl,--end-group z dl)
target_link_libraries(nr-uesoftmodem PRIVATE pthread m CONFIG_LIB rt)
target_link_libraries(nr-uesoftmodem PRIVATE pthread m CONFIG_LIB rt nr_ue_phy_meas)
target_link_libraries(nr-uesoftmodem PRIVATE ${T_LIB})
target_link_libraries(nr-uesoftmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
@@ -2221,14 +2187,13 @@ add_executable(nr_psbchsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/psbchsim.c
${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.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
-Wl,--start-group UTIL SIMU 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)
@@ -2248,15 +2213,14 @@ add_executable(nr_dlsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.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_dlsim 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
m pthread ${T_LIB} ITTI dl shlib_loader
-Wl,--start-group UTIL SIMU 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
m pthread ${T_LIB} ITTI dl shlib_loader nr_ue_phy_meas
)
target_link_libraries(nr_dlsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
@@ -2284,7 +2248,6 @@ add_executable(nr_ulsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.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
@@ -2296,8 +2259,8 @@ if (ENABLE_LDPC_T2)
endif()
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
m pthread ${T_LIB} ITTI dl shlib_loader
-Wl,--start-group UTIL SIMU 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
m pthread ${T_LIB} ITTI dl shlib_loader nr_ue_phy_meas
)
target_link_libraries(nr_ulsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
@@ -2344,7 +2307,7 @@ endforeach(myExe)
#ensure that the T header files are generated before targets depending on them
if (${T_TRACER})
foreach(i
#all "add_executable" definitions (except tests, rb_tool, updatefw)
#all "add_executable" definitions (except tests, updatefw)
lte-softmodem lte-uesoftmodem nr-softmodem
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7
ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim
@@ -2359,7 +2322,7 @@ if (${T_TRACER})
MISC_NFAPI_LTE_LIB MISC_NFAPI_NR_LIB
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
CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT SIMU OPENAIR0_LIB
ldpc_orig ldpc_optim ldpc_optim8seg ldpc_t2 ldpc_cl ldpc_cuda ldpc dfts config_internals nr_common)
if (TARGET ${i})
add_dependencies(${i} generate_T)
@@ -2367,86 +2330,6 @@ if (${T_TRACER})
endforeach(i)
endif (${T_TRACER})
##################################################
# Generated specific cases is not regular code
###############################################
################
# Kernel modules
###############
# Set compiler options for kernel modules
# we need to get out cmake to use the regular Linux Kernel process
# this is documented as https://www.kernel.org/doc/Documentation/kbuild/modules.txt
######################################
# retrieve the compiler options to send it to gccxml
get_directory_property(DirDefs COMPILE_DEFINITIONS )
foreach( d ${DirDefs} )
set(module_cc_opt "${module_cc_opt} -D${d}")
endforeach()
get_directory_property( DirDefs INCLUDE_DIRECTORIES )
foreach( d ${DirDefs} )
set(module_cc_opt "${module_cc_opt} -I${d}")
endforeach()
EXECUTE_PROCESS(COMMAND uname -r
OUTPUT_VARIABLE os_release
OUTPUT_STRIP_TRAILING_WHITESPACE)
SET(module_build_path /lib/modules/${os_release}/build)
function(make_driver name dir)
file(MAKE_DIRECTORY ${OPENAIR_BIN_DIR}/${name})
foreach(f IN ITEMS ${ARGN})
list(APPEND src_path_list ${dir}/${f})
string(REGEX REPLACE "c *$" "o" obj ${f})
set(objs "${objs} ${obj}")
endforeach()
CONFIGURE_FILE(${OPENAIR_CMAKE}/tools/Kbuild.cmake ${OPENAIR_BIN_DIR}/${name}/Kbuild)
add_custom_command(OUTPUT ${name}.ko
COMMAND make -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name}
WORKING_DIRECTORY ${OPENAIR_BIN_DIR}/${name}
COMMENT "building ${module}.ko"
VERBATIM
SOURCES ${src_path_list}
)
add_custom_target(${name} DEPENDS ${name}.ko)
endfunction(make_driver name dir src)
# nashmesh module
################
list(APPEND nasmesh_src device.c common.c ioctl.c classifier.c tool.c mesh.c)
set(module_cc_opt "${module_cc_opt} -DNAS_NETLINK -DPDCP_USE_NETLINK")
# legacy Makefile was using NAS_NETLINK flag, but other drivers the hereafter flag
# so, this cmake use OAI_NW_DRIVER_USE_NETLINK everywhere
if (OAI_NW_DRIVER_USE_NETLINK)
list(APPEND nasmesh_src netlink.c)
endif()
make_driver(nasmesh ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH ${nasmesh_src})
# user space tool for configuring MESH IP driver
################
add_executable(rb_tool
${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c
)
target_include_directories(rb_tool PRIVATE ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/)
# ???
####################
list(APPEND oai_nw_drv_src device.c common.c ioctl.c classifier.c tool.c)
if(OAI_NW_DRIVER_USE_NETLINK)
list(APPEND oai_nw_drv_src netlink.c)
endif()
make_driver(oai_nw_drv ${OPENAIR2_DIR}/NETWORK_DRIVER/LTE ${oai_nw_drv_src})
# ue_ip: purpose ???
###############
list(APPEND ue_ip_src device.c common.c)
if(OAI_NW_DRIVER_USE_NETLINK)
list(APPEND ue_ip_src netlink.c)
endif()
make_driver(ue_ip ${OPENAIR2_DIR}/NETWORK_DRIVER/UE_IP ${ue_ip_src})
include(${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt)
set(ENABLE_TESTS OFF CACHE STRING "Activate build of tests")
@@ -2460,17 +2343,24 @@ if(ENABLE_TESTS)
find_package(GTest)
if (NOT GTest_FOUND)
message(STATUS "GTest package not found, will download googletest automatically. To prevent that install google test on your system (libgtest-dev)")
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG 58d77fa8070e8cec2dc1ed015d66b454c8d78850 # 1.12.1
CPMAddPackage(
NAME googletest
GITHUB_REPOSITORY google/googletest
GIT_TAG release-1.12.1
VERSION 1.12.1
OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt" "BUILD_GMOCK OFF"
)
endif()
find_package(benchmark)
if (NOT benchmark_FOUND)
message(STATUS "benchmark package not found, will download benchmark automatically. To prevent that install google benchmark on your system (libbenchmark-dev)")
CPMAddPackage(
NAME benchmark
GITHUB_REPOSITORY google/benchmark
VERSION 1.9.0
OPTIONS "BENCHMARK_ENABLE_TESTING OFF"
)
set(BUILD_GMOCK OFF)
set(INSTALL_GTEST OFF)
FetchContent_MakeAvailable(googletest)
add_library(GTest::gtest ALIAS gtest)
add_library(GTest::gtest_main ALIAS gtest_main)
endif()
endif()

64
CMakePresets.json Normal file
View File

@@ -0,0 +1,64 @@
{
"version": 3,
"configurePresets": [
{
"name": "default",
"displayName": "Default Config",
"description": "Default build using Ninja generator",
"generator": "Ninja",
"binaryDir": "${sourceDir}/cmake_targets/ran_build/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
},
{
"name": "tests",
"displayName": "Default unit test config",
"inherits": "default",
"binaryDir": "${sourceDir}/cmake_targets/ran_build/build_test",
"cacheVariables": {
"ENABLE_TESTS": "ON",
"SANITIZE_ADDRESS": "ON",
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
}
],
"buildPresets": [
{
"name": "5gdefault",
"configurePreset": "default",
"targets": [
"nr-uesoftmodem",
"nr-softmodem",
"rfsimulator",
"dfts",
"ldpc",
"params_libconfig",
"params_yaml"
]
},
{
"name": "default",
"inherits": "5gdefault"
},
{
"name": "4gdefault",
"configurePreset": "default",
"targets": [
"lte-softmodem",
"lte-uesoftmodem",
"dfts",
"coding",
"rfsimulator",
"params_libconfig"
]
},
{
"name": "tests",
"configurePreset": "tests",
"targets": [
"tests"
]
}
]
}

View File

@@ -4,15 +4,6 @@ For more details of the license, refer to [LICENSE](LICENSE) file in the same di
However, the source code also contains third party software that is acknowledged here for reference.
## Credits for LFDS user space source code located in folder openair2/UTILS/LFDS/ ##
See on [liblfds website](https://liblfds.org/) the license section.
<pre>
"There is no license. You are free to use this software in any way, for any purpose. Go forth and create wealth!
If however for legal reasons a licence is required, the license of your choice will be granted."
</pre>
## Credits for source code common/utils/collection/queue.h: ##
The Regents of the University of California: BSD 3-Clause Licence.

View File

@@ -7,9 +7,8 @@
<a href="https://releases.ubuntu.com/20.04/"><img src="https://img.shields.io/badge/OS-Ubuntu20-Green" alt="Supported OS Ubuntu 20"></a>
<a href="https://releases.ubuntu.com/22.04/"><img src="https://img.shields.io/badge/OS-Ubuntu22-Green" alt="Supported OS Ubuntu 22"></a>
<a href="https://releases.ubuntu.com/24.04/"><img src="https://img.shields.io/badge/OS-Ubuntu24-Green" alt="Supported OS Ubuntu 24"></a>
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL8-Green" alt="Supported OS RHEL8"></a>
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL9-Green" alt="Supported OS RELH9"></a>
<a href="https://getfedora.org/en/workstation/"><img src="https://img.shields.io/badge/OS-Fedore40-Green" alt="Supported OS Fedora 40"></a>
<a href="https://getfedora.org/en/workstation/"><img src="https://img.shields.io/badge/OS-Fedore41-Green" alt="Supported OS Fedora 41"></a>
</p>
<p align="center">
@@ -43,6 +42,7 @@ Please see [NOTICE](NOTICE.md) file for third party software that is included in
* [General overview of documentation](./doc/README.md)
* [The implemented features](./doc/FEATURE_SET.md)
* [System Requirements for Using OAI Stack](./doc/system_requirements.md)
* [How to build](./doc/BUILD.md)
* [How to run the modems](./doc/RUNMODEM.md)
@@ -75,7 +75,8 @@ openairinterface5g
├── openair3 : Layer 3 (3GPP LTE Rel-10 S1AP/GTP, NR Rel-15 NGAP/GTP)
├── openshift : OpenShift helm charts for some deployment options of OAI
├── radio : Drivers for various radios such as USRP, AW2S, RFsim, 7.2 FHI, ...
── targets : Some configuration files; only historical relevance, and might be deleted in the future
── targets : Some configuration files; only historical relevance, and might be deleted in the future
└── tools : Tools for use by the developers/ci machines: code analysis and formatting
```
# How to get support from the OAI Community #

View File

@@ -0,0 +1,36 @@
apiVersion: v1
name: oai-nr-pbchsim-scs
description: A Helm subchart for nr-pbchsim network function ("Other SCS" tests)
# 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-pbchsim
- 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-pbchsim-scs.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-pbchsim-scs.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-pbchsim-scs.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Common labels
*/}}
{{- define "oai-nr-pbchsim-scs.labels" -}}
helm.sh/chart: {{ include "oai-nr-pbchsim-scs.chart" . }}
{{ include "oai-nr-pbchsim-scs.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-pbchsim-scs.selectorLabels" -}}
app.kubernetes.io/name: {{ include "oai-nr-pbchsim-scs.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{/*
Create the name of the service account to use
*/}}
{{- define "oai-nr-pbchsim-scs.serviceAccountName" -}}
{{- if .Values.serviceAccount.create -}}
{{ default (include "oai-nr-pbchsim-scs.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_pbchsim.otherSCS" -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.nrpbchsim273rb}}
nodeName: {{ .Values.global.nodeName.nrpbchsim273rb }}
{{- end }}

View File

@@ -0,0 +1,48 @@
# Default values for oai-nr-pbchsim-scs
# 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-pbchsim-scs"
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
nrpbchsimscs: dedale
nrpsbchsim: dedale
nrprachsim: dedale
nrpucchsim: dedale

View File

@@ -585,6 +585,29 @@ pipeline {
}
}
}
stage ("SA-FHI72-CN5G") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-SA-FHI72-CN5G', 'SA-FHI72-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
saFHI72Status = finalizeSlaveJob('RAN-SA-FHI72-CN5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += saFHI72Status
}
}
}
}
stage ("SA-OAIUE-CN5G") {
when { expression {do5Gtest} }
steps {

View File

@@ -200,6 +200,8 @@ pipeline {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
withCredentials([

View File

@@ -0,0 +1,124 @@
#!/bin/groovy
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
def node = "porcepix"
def resource = "CI-NEU-CI"
pipeline {
agent {
label node
}
options {
timestamps()
ansiColor('xterm')
timeout(time: 3, unit: 'HOURS')
}
stages {
stage ("Trigger NEU CI") {
steps {
lock (resource) {
script {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ColosseumCredentials}", usernameVariable: 'col_username', passwordVariable: 'col_password'],
]) {
// use eNB target branch variable if eNB repository is empty
def git_Branch = ""
if (params.eNB_Branch.isEmpty()) {
echo 'eNB_Branch parameter is empty, using eNB_TargetBranch instead'
git_Branch = params.eNB_TargetBranch
} else {
git_Branch = params.eNB_Branch
}
// use default 10011 rf scenario if not specified
if (params.Colosseum_Rf_Scenario.isEmpty()) {
echo 'Colosseum_Rf_Scenario parameter is empty, defaulting to 10011'
rf_scenario = "10011"
} else {
rf_scenario = params.Colosseum_Rf_Scenario
}
sh "echo Testing reachability of Colosseum endpoint"
sh "ping -c 3 10.100.1.253"
sh "./ci-scripts/colosseum_scripts/launch-job.sh ${col_username} ${col_password} ${currentBuild.number} ${params.eNB_Repository} ${git_Branch} ${rf_scenario} ${env.JOB_URL}"
}
}
}
}
}
stage ("Wait for job to finish") {
steps {
lock (resource) {
script {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ColosseumCredentials}", usernameVariable: 'col_username', passwordVariable: 'col_password'],
]) {
timeout (time: 2, unit: 'HOURS') {
sh "./ci-scripts/colosseum_scripts/wait-job-end.sh ${col_username} ${col_password}"
}
}
}
}
}
}
stage ("Get test results") {
steps {
lock (resource) {
script {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ColosseumCredentials}", usernameVariable: 'col_username', passwordVariable: 'col_password'],
]) {
sh "./ci-scripts/colosseum_scripts/get-test-results.sh ${col_username} ${col_password}"
}
if(fileExists("results.tar.xz")) {
archiveArtifacts "results.tar.xz"
sh "mkdir -p results"
sh "tar -xf results.tar.xz -C results --strip-components=1"
if(fileExists("results/test_summary.html")) {
archiveArtifacts "results/test_summary.html"
}
// check if test passed
sh "./ci-scripts/colosseum_scripts/check-results.sh results/test_summary.html"
sh "rm -Rf ./results"
}
}
}
}
}
stage ("Set job status") {
steps {
lock (resource) {
script {
echo 'Set job status'
sh "./ci-scripts/colosseum_scripts/set-job-status.sh"
}
}
}
}
}
}

View File

@@ -193,6 +193,8 @@ pipeline {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
}

View File

@@ -186,6 +186,8 @@ pipeline {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
}

View File

@@ -39,10 +39,8 @@ if (params.LockResources != null && params.LockResources.trim().length() > 0)
// Terminate Status
def termENB = 0
def termOAIUE = 1
def termStatusArray = new Boolean[termOAIUE + 1]
def termStatusArray = new Boolean[termENB + 1]
termStatusArray[termENB] = false
termStatusArray[termOAIUE] = false
// Global Parameters. Normally they should be populated when the master job
// triggers the slave job with parameters
@@ -194,6 +192,8 @@ pipeline {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
}
@@ -241,23 +241,6 @@ pipeline {
}
}
}
stage('Terminate OAI-UE') {
steps {
echo '\u2705 \u001B[32mTerminate OAI-UE\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
]) {
sh "python3 ci-scripts/main.py --mode=TerminateOAIUE --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password}"
}
}
post {
success {
script {
termStatusArray[termOAIUE] = true
}
}
}
}
}
}
stage('Log Collection') {
@@ -473,13 +456,6 @@ pipeline {
sh "python3 ci-scripts/main.py --mode=TerminateeNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
}
}
if (!termStatusArray[termOAIUE]) {
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
]) {
sh "python3 ci-scripts/main.py --mode=TerminateOAIUE --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password}"
}
}
}
}
}

View File

@@ -189,6 +189,8 @@ pipeline {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
}

View File

@@ -200,6 +200,8 @@ pipeline {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
}

View File

@@ -181,6 +181,8 @@ pipeline {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
} else {
echo "Test XML file ${xmlFile}: no such file"
}
}
}

View File

@@ -1,266 +0,0 @@
#!/bin/groovy
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
// Location of the python executor node shall be in the same subnet as the others servers
def pythonExecutor = params.pythonExecutor
// Location of the test XML file to be run
def testXMLFile = params.pythonTestXmlFile
def mainPythonAllXmlFiles = ""
def buildStageStatus = true
// Name of the test stage
def testStageName = params.pipelineTestStageName
def lockResources = []
if (params.LockResources != null && params.LockResources.trim().length() > 0)
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
// Terminate Status
def termUE = 0
def termENB = 1
def termSPGW = 2
def termMME = 3
def termHSS = 4
def termStatusArray = new Boolean[termHSS + 1]
termStatusArray[termUE] = false
termStatusArray[termENB] = false
termStatusArray[termSPGW] = false
termStatusArray[termMME] = false
termStatusArray[termHSS] = false
// Global Parameters. Normally they should be populated when the master job
// triggers the slave job with parameters
def eNB_Repository
def eNB_Branch
def eNB_CommitID
def eNB_AllowMergeRequestProcess = false
def eNB_TargetBranch
pipeline {
agent {
label pythonExecutor
}
options {
ansiColor('xterm')
lock(extra: lockResources)
}
stages {
stage ("Verify Parameters") {
steps {
script {
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
def allParametersPresent = true
// It is already to late to check it
if (params.pythonExecutor != null) {
echo "eNB CI executor node : ${pythonExecutor}"
}
// If not present picking a default Stage Name
if (params.pipelineTestStageName == null) {
// picking default
testStageName = 'Template Test Stage'
}
if (params.LockResources == null) {
echo "no LockResources given"
allParametersPresent = false
}
if (params.UE_IPAddress == null) {
allParametersPresent = false
}
if (params.UE_SourceCodePath == null) {
allParametersPresent = false
}
if (params.UE_Credentials == null) {
allParametersPresent = false
}
// the following 4 parameters should be pushed by the master trigger
// if not present, take the job GIT variables (used for developing)
if (params.eNB_Repository == null) {
eNB_Repository = env.GIT_URL
} else {
eNB_Repository = params.eNB_Repository
}
echo "eNB_Repository : ${eNB_Repository}"
if (params.eNB_Branch == null) {
eNB_Branch = env.GIT_BRANCH
} else {
eNB_Branch = params.eNB_Branch
}
echo "eNB_Branch : ${eNB_Branch}"
if (params.eNB_CommitID == null) {
eNB_CommitID = env.GIT_COMMIT
} else {
eNB_CommitID = params.eNB_CommitID
}
echo "eNB_CommitID : ${eNB_CommitID}"
if (params.eNB_mergeRequest != null) {
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
if (eNB_AllowMergeRequestProcess) {
if (params.eNB_TargetBranch != null) {
eNB_TargetBranch = params.eNB_TargetBranch
} else {
eNB_TargetBranch = 'develop'
}
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
}
}
/*
if (params.EPC_IPAddress == null) {
allParametersPresent = false
}
if (params.EPC_Type == null) {
allParametersPresent = false
}
if (params.EPC_SourceCodePath == null) {
allParametersPresent = false
}
if (params.EPC_Credentials == null) {
allParametersPresent = false
}
*/
if (allParametersPresent) {
echo "All parameters are present"
if (eNB_AllowMergeRequestProcess) {
sh "git fetch"
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
} else {
sh "git fetch"
sh "git checkout -f ${eNB_CommitID}"
}
} else {
echo "Some parameters are missing"
sh "./ci-scripts/fail.sh"
}
}
}
}
stage ("Build and Test") {
steps {
script {
dir ('ci-scripts') {
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
// If not present picking a default XML file
if (params.pythonTestXmlFile == null) {
// picking default
testXMLFile = 'xml_files/ue_band20_build.xml'
echo "Test XML file(default): ${testXMLFile}"
mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
} else {
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
echo "Test XML file : ${xmlFile}"
}
}
}
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password'],
]) {
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
for (xmlFile in myXmlTestSuite) {
if (fileExists(xmlFile)) {
try {
timeout (time: 60, unit: 'MINUTES') {
sh "python3 main.py --mode=TestUE --UEIPAddress=${params.UE_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --XMLTestFile=${xmlFile}"
}
} catch (Exception e) {
currentBuild.result = 'FAILURE'
buildStageStatus = false
}
}
}
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password}"
}
}
}
}
}
stage('Log Collection') {
parallel {
stage('Log Collection (OAI UE - Build)') {
steps {
echo '\u2705 \u001B[32mLog Collection (OAI UE - Build)\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
]) {
sh "python3 ci-scripts/main.py --mode=LogCollectBuild --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath}"
echo '\u2705 \u001B[32mLog Transfer (UE - Build)\u001B[0m'
sh "sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/build.log.zip ./build.log.${env.BUILD_ID}.zip || true"
}
script {
if(fileExists("build.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "build.log.${env.BUILD_ID}.zip"
}
}
}
}
stage('Log Collection (OAI UE - Run)') {
steps {
echo '\u2705 \u001B[32mLog Collection (OAI UE - Run)\u001B[0m'
withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
]) {
sh "python3 ci-scripts/main.py --mode=LogCollectOAIUE --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath}"
echo '\u2705 \u001B[32mLog Transfer (UE - Run)\u001B[0m'
sh "sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/ue.log.zip ./ue.log.${env.BUILD_ID}.zip || true"
}
script {
if(fileExists("ue.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "ue.log.${env.BUILD_ID}.zip"
}
if(fileExists("ci-scripts/test_results.html")) {
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
archiveArtifacts "test_results-${JOB_NAME}.html"
}
}
}
}
}
}
}
post {
always {
script {
if (params.pipelineZipsConsoleLog != null) {
if (params.pipelineZipsConsoleLog) {
echo "Archiving Jenkins console log"
sh "wget --no-check-certificate --no-proxy ${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_ID}/consoleText -O consoleText.log || true"
sh "zip -m consoleText.log.${env.BUILD_ID}.zip consoleText.log || true"
if(fileExists("consoleText.log.${env.BUILD_ID}.zip")) {
archiveArtifacts "consoleText.log.${env.BUILD_ID}.zip"
}
}
}
}
}
}
}

View File

@@ -1,160 +0,0 @@
#!/bin/groovy
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
// necessary for reading JSON
import groovy.json.JsonSlurper
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
// Location of the python executor node shall be in the same subnet as the others servers
def pythonExecutor = params.pythonExecutor
def TARGET_BRANCH = "develop"
def ALLOW_MERGE = true
def GitPostArgs = ''
def jobStatus
pipeline {
agent {
label pythonExecutor
}
stages {
stage ("Launcher") {
steps {
script {
// retrieve MR that are opened nd with tag NSA
MR_LIST = sh returnStdout: true, script: 'curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100&labels=NSA" | jq -cj "[.[].iid]"'
echo "List of selected MRs: ${MR_LIST.trim()}"
def MR_ARRAY = new JsonSlurper().parseText(MR_LIST.trim())
// for every selected MR, retrieve the branch name and the latest commit
for (MR in MR_ARRAY) {
SRC_BRANCH=sh returnStdout: true, script: """curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests/${MR}" | jq ".source_branch" || true """
SRC_BRANCH=SRC_BRANCH.trim()
COMMIT_ID=sh returnStdout: true, script: """curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests/${MR}" | jq ".sha" || true """
COMMIT_ID=COMMIT_ID.trim()
echo "Testing NSA on : ${MR} ${SRC_BRANCH} ${COMMIT_ID}"
commit = COMMIT_ID.replace("\"","")
GitPostArgs = MR + ' ' + commit + ' '
echo GitPostArgs
//calling LTE 2x2
jobName = "RAN-LTE-2x2-Module-OAIEPC"
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
string(name: 'eNB_MR', value: String.valueOf(MR)),
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
]
jobResult = jobStatus.getResult()
build_url = jobStatus.getAbsoluteUrl()
build_id = jobStatus.getNumber().toString()
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
echo GitPostArgs
//calling NSA B200
jobName = "RAN-NSA-B200-Module-LTEBOX"
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
string(name: 'eNB_MR', value: String.valueOf(MR)),
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
]
jobResult = jobStatus.getResult()
build_url = jobStatus.getAbsoluteUrl()
build_id = jobStatus.getNumber().toString()
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
echo GitPostArgs
//calling NSA 2x2
jobName = "RAN-NSA-2x2-Module-OAIEPC"
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
string(name: 'eNB_MR', value: String.valueOf(MR)),
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
]
jobResult = jobStatus.getResult()
build_url = jobStatus.getAbsoluteUrl()
build_id = jobStatus.getNumber().toString()
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
echo GitPostArgs
//calling SA
jobName = "RAN-SA-Module-CN5G"
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
string(name: 'eNB_MR', value: String.valueOf(MR)),
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
]
jobResult = jobStatus.getResult()
build_url = jobStatus.getAbsoluteUrl()
build_id = jobStatus.getNumber().toString()
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
echo GitPostArgs
//calling SA-AmariS
jobName = "RAN-SA-AmariS-CN5G"
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
string(name: 'eNB_MR', value: String.valueOf(MR)),
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
]
jobResult = jobStatus.getResult()
build_url = jobStatus.getAbsoluteUrl()
build_id = jobStatus.getNumber().toString()
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
echo GitPostArgs
//calling OAIUE N310-X300
jobName = "RAN-SA-OAIUE-N310-X300-CN5G"
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
string(name: 'eNB_MR', value: String.valueOf(MR)),
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
]
jobResult = jobStatus.getResult()
build_url = jobStatus.getAbsoluteUrl()
build_id = jobStatus.getNumber().toString()
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
echo GitPostArgs
//git report the test results in 1 block, at the end of the test sequence of one MR
dir ('ci-scripts/ran_dashboard') {
sh "python3 Hdashboard.py gitpost ${GitPostArgs}"
}
}
}
}
}
}
}

View File

@@ -0,0 +1,284 @@
/* UE simulator configuration file version 2021-06-17
* LTE / 5G Non StandAlone
* Copyright (C) 2019-2021 Amarisoft
*/
{
#define N_ANTENNA_DL 1
#define N_ANTENNA_UL 1
#define DL_ARFCN 631296
#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_20/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,
ldpc_max_its:8,
cells: [{
rf_port: 0,
bandwidth: 20,
band: 78,
dl_nr_arfcn: DL_ARFCN,
ssb_nr_arfcn: DL_ARFCN,
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: N_ANTENNA_UL,
rx_to_tx_latency:2,
global_timing_advance:-1,
}],
}],
/* UE capabilities */
/* USIM data */
ue_list: [
{
"ue_id" : 1,
"imsi": "001020000000001",
"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": "001020000000002",
"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": "001020000000003",
"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": "001020000000004",
"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": "001020000000005",
"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": "001020000000006",
"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": "001020000000007",
"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": "001020000000008",
"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": "001020000000009",
"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": "001020000000010",
"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": "001020000000011",
"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": "001020000000012",
"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": "001020000000013",
"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": "001020000000014",
"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": "001020000000015",
"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": "001020000000016",
"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

@@ -5,6 +5,7 @@
{
#define N_ANTENNA_DL 2
#define N_ANTENNA_UL 2
#define DL_ARFCN 631296
#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",
@@ -25,8 +26,8 @@ allow dynamic UE creation from remote API */
rf_port: 0,
bandwidth: 20,
band: 78,
dl_nr_arfcn:630048,
ssb_nr_arfcn:630048,
dl_nr_arfcn: DL_ARFCN,
ssb_nr_arfcn: DL_ARFCN,
subcarrier_spacing: 30,
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: N_ANTENNA_UL,

View File

@@ -1,79 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 7 23:04:51 2020
@author: hardy
"""
import yaml
import sys
import subprocess
def main():
f_yaml=sys.argv[1]
f_sh=sys.argv[2]
#filename='py_params_template.yaml'
with open(f_yaml,'r') as file:
# The FullLoader parameter handles the conversion from YAML
# scalar values to Python the dictionary format
print('Loading '+f_yaml)
params = yaml.load(file,Loader=yaml.FullLoader)
with open(f_sh,'w') as f:
f.write('#!/bin/sh\n')
for i in range (0, len(params['steps'])):
step=params['steps'][i].split(',')
mode=step[0]
f_xml=step[1]
line='python3 main.py ' + \
'--mode='+ mode + ' ' + \
'--ranRepository=' + params['ranRepository'] + ' ' + \
'--ranBranch=' + params['ranBranch'] + ' ' + \
'--ranCommitID=' + params['ranCommitID'] + ' ' + \
'--ranAllowMerge=' + params['ranAllowMerge'] + ' ' + \
'--ranTargetBranch=' + params['ranTargetBranch'] + ' ' + \
\
'--UEIPAddress=' + params['UE']['UEIPAddress'] + ' ' + \
'--UEUserName=' + params['UE']['UEUserName'] + ' ' + \
'--UEPassword=' + params['UE']['UEPassword'] + ' ' + \
'--UESourceCodePath=' + params['UE']['UESourceCodePath'] + ' ' + \
\
'--EPCIPAddress=' + params['EPC']['EPCIPAddress'] + ' ' + \
'--EPCUserName=' + params['EPC']['EPCUserName'] + ' ' + \
'--EPCPassword=' + params['EPC']['EPCPassword'] + ' ' + \
'--EPCSourceCodePath=' + params['EPC']['EPCSourceCodePath'] + ' ' + \
'--EPCType=' + params['EPC']['EPCType'] + ' ' + \
\
'--eNBIPAddress=' + params['RAN'][0]['eNBIPAddress'] + ' ' + \
'--eNBUserName=' + params['RAN'][0]['eNBUserName'] + ' ' + \
'--eNBPassword=' + params['RAN'][0]['eNBPassword'] + ' ' + \
'--eNBSourceCodePath=' + params['RAN'][0]['eNBSourceCodePath'] + ' ' + \
\
'--eNB1IPAddress=' + params['RAN'][1]['eNB1IPAddress'] + ' ' + \
'--eNB1UserName=' + params['RAN'][1]['eNB1UserName'] + ' ' + \
'--eNB1Password=' + params['RAN'][1]['eNB1Password'] + ' ' + \
'--eNB1SourceCodePath=' + params['RAN'][1]['eNB1SourceCodePath'] + ' '
if mode!="InitiateHtml":
line+='--XMLTestFile=' + f_xml
#if mode is InitiateHTML we have a special processing to mention all xml files from the list
#loop starting at 1 to avoid the xml file mentioned with InitiateHtml in yaml file (file is none)
else:
for i in range (1, len(params['steps'])):
step=params['steps'][i].split(',')
f_xml=step[1]
line+='--XMLTestFile=' + f_xml+' '
line+='\n'
print(line)
f.write(line)
subprocess.call(['chmod','777',f_sh])
if __name__ == "__main__":
main()

View File

@@ -1,40 +0,0 @@
ranRepository : https://gitlab.eurecom.fr/oai/openairinterface5g.git
ranBranch : integration_2021_wk13_a
ranCommitID : 104aa7eed5d6702c1b9da663414079ef698da206
ranAllowMerge : 'yes'
ranTargetBranch : develop
steps:
- InitiateHtml,none
- TesteNB,xml_files/fr1_multi_node_build.xml
- TesteNB,xml_files/fr1_epc_start.xml
- TesteNB,xml_files/fr1_nsa_base_next.xml #ue toggle, nodes initialize, ue toggle, ping, nodes terminate
- TesteNB,xml_files/fr1_epc_closure.xml
RAN:
- eNBIPAddress : 192.168.18.199 #eNB on Minimassive
eNBUserName : oaicicd
eNBPassword : HzB*nkryaITdVd08TKlT#2Z5a!7M#~qn
eNBSourceCodePath : /tmp/CI-FR1-eNB
- eNB1IPAddress : 192.168.18.198 #gNB on Mozart
eNB1UserName : oaicicd
eNB1Password : 7zkDOFgh@w3HvRBMPTMh@BAx
eNB1SourceCodePath : /tmp/CI-FR1-gNB
EPC: #on Nikaia
EPCIPAddress : 192.168.18.99
EPCUserName : nikaia
EPCPassword : linux
EPCSourceCodePath : /tmp/CI-FR1-EPC
EPCType : ltebox
UE:
UEIPAddress : none
UEUserName : none
UEPassword : none
UESourceCodePath : none

View File

@@ -106,11 +106,11 @@ echo "Merged Commit is : $MERGE_COMMMIT"
echo "Target Init is : $TARGET_INIT_COMMIT"
# Retrieve the list of modified files since the latest develop commit
MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq`
MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | grep -E "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq`
NB_WARNINGS_FILES=0
# Retrieve list of warnings
LIST_WARNING_FILES=`egrep "error:|warning:" archives/*/*.txt | egrep -v "jobserver unavailable|Clock skew detected." | sed -e "s#^.*/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" -e "s#common/utils/.*/itti#common/utils/itti#" | awk -F ":" '{print $1}' | sort | uniq`
LIST_WARNING_FILES=`grep -E "error:|warning:" archives/*/*.txt | grep -E -v "jobserver unavailable|Clock skew detected." | sed -e "s#^.*/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" -e "s#common/utils/.*/itti#common/utils/itti#" | awk -F ":" '{print $1}' | sort | uniq`
echo ""
echo "List of files that have been modified by the Merge Request AND"

View File

@@ -64,18 +64,18 @@ then
awk '/#[ \t]*ifndef/ { gsub("^.*ifndef *",""); if (names[$1]!="") print "files with same {define ", FILENAME, names[$1]; names[$1]=FILENAME } /#[ \t]*define/ { gsub("^.*define *",""); if(names[$1]!=FILENAME) print "error in declaration", FILENAME, $1, names[$1]; nextfile }' `find openair* common targets executables -name *.h |grep -v LFDS` > header-files-w-incorrect-define.txt
# Testing if explicit GNU GPL license banner
egrep -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "General Public License" . | egrep -v "openair3/NAS/COMMON/milenage.h" > files-w-gnu-gpl-license-banner.txt
grep -E -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "General Public License" . | grep -E -v "openair3/NAS/COMMON/milenage.h" > files-w-gnu-gpl-license-banner.txt
# Looking at exotic/suspect banner
LIST_OF_FILES_W_BANNER=`egrep -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "Copyright|copyleft" .`
LIST_OF_FILES_W_BANNER=`grep -E -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "Copyright|copyleft" .`
if [ -f ./files-w-suspect-banner.txt ]; then rm -f ./files-w-suspect-banner.txt; fi
for FILE in $LIST_OF_FILES_W_BANNER
do
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`
IS_NFAPI=`echo $FILE | grep -E -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
IS_OAI_LICENCE_PRESENT=`grep -E -c "OAI Public License" $FILE || true`
IS_BSD_LICENCE_PRESENT=`grep -E -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FILE || true`
IS_MIT_LICENCE_PRESENT=`grep -E -c "MIT License" $FILE || true`
IS_EXCEPTION=`echo $FILE | grep -E -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc.h|openair1/PHY/CODING/crcext.h|openair1/PHY/CODING/types.h|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 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ]
then
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
@@ -147,7 +147,7 @@ echo " ----------------------------------------------------------"
echo ""
# Retrieve the list of modified files since the latest develop commit
MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq`
MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | grep -E "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq`
NB_TO_FORMAT=0
if [ -f header-files-w-incorrect-define.txt ]
then
@@ -173,20 +173,20 @@ do
if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ]
then
# Testing if explicit GNU GPL license banner
GNU_EXCEPTION=`echo $FULLFILE | egrep -c "openair3/NAS/COMMON/milenage.h" || true`
GNU_EXCEPTION=`echo $FULLFILE | grep -E -c "openair3/NAS/COMMON/milenage.h" || true`
if [ $GNU_EXCEPTION -eq 0 ]
then
egrep -il "General Public License" $FULLFILE >> files-w-gnu-gpl-license-banner.txt
grep -E -il "General Public License" $FULLFILE >> files-w-gnu-gpl-license-banner.txt
fi
# Looking at exotic/suspect banner
IS_BANNER=`egrep -i -c "Copyright|copyleft" $FULLFILE || true`
IS_BANNER=`grep -E -i -c "Copyright|copyleft" $FULLFILE || true`
if [ $IS_BANNER -ne 0 ]
then
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`
IS_NFAPI=`echo $FULLFILE | grep -E -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
IS_OAI_LICENCE_PRESENT=`grep -E -c "OAI Public License" $FULLFILE || true`
IS_BSD_LICENCE_PRESENT=`grep -E -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FULLFILE || true`
IS_MIT_LICENCE_PRESENT=`grep -E -c "MIT License" $FULLFILE || true`
IS_EXCEPTION=`echo $FULLFILE | grep -E -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc.h|openair1/PHY/CODING/crcext.h|openair1/PHY/CODING/types.h|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 ] && [ $IS_MIT_LICENCE_PRESENT -eq 0 ]
then
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]

View File

@@ -18,16 +18,21 @@ up2:
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/ttyUSB3 wup
DetachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB3 detach
up2-fhi72:
Host: up2
AttachScript: sudo /opt/mbim-fhi72/start_quectel_mbim.sh
DetachScript: sudo /opt/mbim-fhi72/stop_quectel_mbim.sh
NetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
up2-aerial:
Host: up2
AttachScript: sudo /opt/mbim-aerial/start_quectel_mbim.sh
DetachScript: sudo /opt/mbim-aerial/stop_quectel_mbim.sh
NetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
LogStore: /media/ci_qlogs
adb_ue_1:
Host: nano
@@ -58,9 +63,18 @@ adb_ue_2:
oc-cn5g:
Host: avra
Namespace: "oaicicd-core-for-ci-ran"
CNPath: "/opt/oai-cn5g-fed-develop-2024-april-00102"
NetworkScript: echo "inet 172.21.6.102"
RunIperf3Server: False
oc-cn5g-20897:
Host: cacofonix
Namespace: "oaicicd-core-for-fhi72"
CNPath: "/opt/oai-cn5g-fed-develop-2024-april-20897"
NetworkScript: echo "inet 172.21.6.105"
RunIperf3Server: False
matix-cn5g:
Host: matix
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
@@ -97,7 +111,15 @@ ltebox-nepes:
amarisoft_ue:
Host: amariue
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-00102-2x2.cfg &
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue/aw2s-multi-00102-20.cfg &
TermScript: /root/2023-10-27/libs/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
amarisoft_ue_2x2:
Host: amariue
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-00102-2x2-v2.cfg &
TermScript: /root/2023-10-27/libs/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
amarisoft_ue_fhi72:
Host: amariue
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_fhi72_asue_2x2_benetel550/fhi72-multi-20897-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
@@ -228,13 +250,13 @@ lte_oai_ue_carabe:
MTU: 1500
rfsim5g_gnb_nos1:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-gnb ip a show dev oaitun_enb1
CmdPrefix: docker exec rfsim5g-oai-gnb
IF: oaitun_enb1
rfsim5g_ue:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue
IF: oaitun_ue1
@@ -243,7 +265,7 @@ rfsim5g_ue:
MTU: 1500
rfsim5g_ue2:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue2 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue2
IF: oaitun_ue1
@@ -252,7 +274,7 @@ rfsim5g_ue2:
MTU: 1500
rfsim5g_ue3:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue3 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue3
IF: oaitun_ue1
@@ -261,7 +283,7 @@ rfsim5g_ue3:
MTU: 1500
rfsim5g_ue4:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue4 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue4
IF: oaitun_ue1
@@ -270,7 +292,7 @@ rfsim5g_ue4:
MTU: 1500
rfsim5g_ue5:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue5 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue5
IF: oaitun_ue1
@@ -279,7 +301,7 @@ rfsim5g_ue5:
MTU: 1500
rfsim5g_ue6:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue6 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue6
IF: oaitun_ue1
@@ -288,7 +310,7 @@ rfsim5g_ue6:
MTU: 1500
rfsim5g_ue7:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue7 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue7
IF: oaitun_ue1
@@ -297,7 +319,7 @@ rfsim5g_ue7:
MTU: 1500
rfsim5g_ue8:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue8 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue8
IF: oaitun_ue1
@@ -306,7 +328,7 @@ rfsim5g_ue8:
MTU: 1500
rfsim5g_ue9:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue9 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue9
IF: oaitun_ue1
@@ -315,7 +337,7 @@ rfsim5g_ue9:
MTU: 1500
rfsim5g_ue10:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-nr-ue10 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim5g-oai-nr-ue10
IF: oaitun_ue1
@@ -324,12 +346,12 @@ rfsim5g_ue10:
MTU: 1500
rfsim5g_ext_dn:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim5g-oai-ext-dn ip a show dev eth0
CmdPrefix: docker exec rfsim5g-oai-ext-dn
rfsim4g_ue:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_ue1
CmdPrefix: docker exec rfsim4g-oai-lte-ue0
IF: oaitun_ue1
@@ -338,30 +360,30 @@ rfsim4g_ue:
MTU: 1500
rfsim4g_ext_dn:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim4g-trf-gen ip a show dev eth0
CmdPrefix: docker exec rfsim4g-trf-gen
rfsim4g_enb_nos1:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec rfsim4g-oai-enb ip a show dev oaitun_enb1
CmdPrefix: docker exec rfsim4g-oai-enb
IF: oaitun_enb1
rfsim4g_enb_fembms:
Host: localhost
Host: "%%current_host%%"
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
Host: "%%current_host%%"
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
Host: "%%current_host%%"
AttachScript: docker start l2sim-oai-nr-ue0
DetachScript: docker stop l2sim-oai-nr-ue0
NetworkScript: docker exec l2sim-oai-nr-ue0 ip a show dev oaitun_ue1
@@ -370,12 +392,12 @@ l2sim5g_ue:
MTU: 1500
l2sim5g_ext_dn:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec l2sim-oai-ext-dn ip a show dev eth0
CmdPrefix: docker exec l2sim-oai-ext-dn
l2sim4g_ue:
Host: localhost
Host: "%%current_host%%"
AttachScript: docker start l2sim4g-oai-lte-ue1
DetachScript: docker stop l2sim4g-oai-lte-ue1
NetworkScript: docker exec l2sim4g-oai-lte-ue1 ip a show dev oaitun_ue1
@@ -384,6 +406,10 @@ l2sim4g_ue:
MTU: 1500
l2sim4g_ext_dn:
Host: localhost
Host: "%%current_host%%"
NetworkScript: docker exec l2sim4g-trf-gen ip a show dev eth0
CmdPrefix: docker exec l2sim4g-trf-gen
test:
Host: localhost
NetworkScript: echo "inet 127.0.0.1 mtu 1500"

View File

@@ -41,9 +41,8 @@ import cls_cmd
IMAGE_REGISTRY_SERVICE_NAME = "image-registry.openshift-image-registry.svc"
NAMESPACE = "oaicicd-ran"
OCUrl = "https://api.oai.cs.eurecom.fr:6443"
OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
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", ""]
@@ -51,9 +50,9 @@ CN_CONTAINERS = ["", "-c nrf", "-c amf", "-c smf", "-c upf", "-c ausf", "-c udm"
def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
if ocUserName == '' or ocPassword == '' or ocProjectName == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter: no OC Credentials')
if OCRegistry.startswith("http") and not self.OCRegistry.endswith("/"):
sys.exit(f'ocRegistry {OCRegistry} should not start with http:// or https:// and end on a slash /')
raise ValueError('Insufficient Parameter: no OC Credentials')
if OCRegistry.startswith("http") or OCRegistry.endswith("/"):
raise ValueError(f'ocRegistry {OCRegistry} should not start with http:// or https:// and not end on a slash /')
ret = cmd.run(f'oc login -u {ocUserName} -p {ocPassword} --server {OCUrl}')
if ret.returncode != 0:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
@@ -68,10 +67,9 @@ 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)
def OC_deploy_CN(cmd, ocUserName, ocPassword, ocNamespace, path):
logging.debug(f'OC OAI CN5G: Deploying OAI CN5G on Openshift Cluster: {ocNamespace}')
succeeded = OC_login(cmd, ocUserName, ocPassword, ocNamespace)
if not succeeded:
return False, CONST.OC_LOGIN_FAIL
cmd.run('helm uninstall oai5gcn --wait --timeout 60s')
@@ -84,10 +82,9 @@ def OC_deploy_CN(cmd, ocUserName, ocPassword):
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)
def OC_undeploy_CN(cmd, ocUserName, ocPassword, ocNamespace, path):
logging.debug(f'OC OAI CN5G: Terminating CN on Openshift Cluster: {ocNamespace}')
succeeded = OC_login(cmd, ocUserName, ocPassword, ocNamespace)
if not succeeded:
return False, CONST.OC_LOGIN_FAIL
cmd.run(f'rm -Rf {path}/logs')
@@ -121,8 +118,8 @@ class Cluster:
self.OCUserName = ""
self.OCPassword = ""
self.OCProjectName = ""
self.OCUrl = "https://api.oai.cs.eurecom.fr:6443"
self.OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
self.OCUrl = OCUrl
self.OCRegistry = OCRegistry
self.ranRepository = ""
self.ranBranch = ""
self.ranCommitID = ""
@@ -247,10 +244,11 @@ class Cluster:
if self.testSvrId == None: self.testSvrId = self.eNBIPAddress
if self.imageToPull == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
raise ValueError('Insufficient Parameter')
logging.debug(f'Pull OC image {self.imageToPull} to server {self.testSvrId}')
self.testCase_id = HTML.testCase_id
cmd = cls_cmd.getConnection(self.testSvrId)
logging.info(cmd.run('docker --version'))
succeeded = OC_login(cmd, self.OCUserName, self.OCPassword, CI_OC_RAN_NAMESPACE)
if not succeeded:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
@@ -264,8 +262,9 @@ class Cluster:
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
return False
for image in self.imageToPull:
imagePrefix = f'{self.OCRegistry}{CI_OC_RAN_NAMESPACE}'
imageTag = cls_containerize.ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
imagePrefix = f'{self.OCRegistry}/{CI_OC_RAN_NAMESPACE}'
tag = cls_containerize.CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge)
imageTag = f"{image}:{tag}"
ret = cmd.run(f'docker pull {imagePrefix}/{imageTag}')
if ret.returncode != 0:
logging.error(f'Could not pull {image} from local registry : {self.OCRegistry}')
@@ -283,19 +282,19 @@ class Cluster:
def BuildClusterImage(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
sys.exit(f'Insufficient Parameter: ranRepository {self.ranRepository} ranBranch {ranBranch} ranCommitID {self.ranCommitID}')
raise ValueError(f'Insufficient Parameter: ranRepository {self.ranRepository} ranBranch {ranBranch} ranCommitID {self.ranCommitID}')
lIpAddr = self.eNBIPAddress
lSourcePath = self.eNBSourceCodePath
if lIpAddr == '' or lSourcePath == '':
sys.exit('Insufficient Parameter: eNBSourceCodePath missing')
raise ValueError('Insufficient Parameter: eNBSourceCodePath missing')
ocUserName = self.OCUserName
ocPassword = self.OCPassword
ocProjectName = self.OCProjectName
if ocUserName == '' or ocPassword == '' or ocProjectName == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter: no OC Credentials')
if self.OCRegistry.startswith("http") and not self.OCRegistry.endswith("/"):
sys.exit(f'ocRegistry {self.OCRegistry} should not start with http:// or https:// and end on a slash /')
raise ValueError('Insufficient Parameter: no OC Credentials')
if self.OCRegistry.startswith("http") or self.OCRegistry.endswith("/"):
raise ValueError(f'ocRegistry {self.OCRegistry} should not start with http:// or https:// and not end on a slash /')
logging.debug(f'Building on cluster triggered from server: {lIpAddr}')
self.cmd = cls_cmd.RemoteCmd(lIpAddr)
@@ -303,10 +302,7 @@ class Cluster:
self.testCase_id = HTML.testCase_id
# Workaround for some servers, we need to erase completely the workspace
if self.forcedWorkspaceCleanup:
self.cmd.run(f'rm -Rf {lSourcePath}')
cls_containerize.CreateWorkspace(self.cmd, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
self.cmd.cd(lSourcePath)
# to reduce the amount of data send to OpenShift, we
# manually delete all generated files in the workspace
self.cmd.run(f'rm -rf {lSourcePath}/cmake_targets/ran_build');

View File

@@ -31,18 +31,26 @@ import subprocess as sp
import os
import paramiko
import uuid
import sys
import time
SSHTIMEOUT=7
def is_local(host):
return host is None or host.lower() in ["", "none", "localhost"]
# helper that returns either LocalCmd or RemoteCmd based on passed host name
def getConnection(host, d=None):
if host is None or host.lower() in ["", "none", "localhost"]:
if is_local(host):
return LocalCmd(d=d)
else:
return RemoteCmd(host, d=d)
def runScript(host, path, timeout, parameters=None, redirect=None, silent=False):
if is_local(host):
return LocalCmd.exec_script(path, timeout, parameters, redirect, silent)
else:
return RemoteCmd.exec_script(host, path, timeout, parameters, redirect, silent)
# provides a partial interface for the legacy SSHconnection class (getBefore(), command())
class Cmd(metaclass=abc.ABCMeta):
def cd(self, d, silent=False):
@@ -58,6 +66,10 @@ class Cmd(metaclass=abc.ABCMeta):
if not silent:
logging.debug(f'cd {self.cwd}')
@abc.abstractmethod
def exec_script(path, timeout, parameters=None, redirect=None, silent=False):
return
@abc.abstractmethod
def run(self, line, timeout=300, silent=False):
return
@@ -99,17 +111,33 @@ class LocalCmd(Cmd):
logging.debug(f'Working dir is {self.cwd}')
self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
def exec_script(path, timeout, parameters=None, redirect=None, silent=False):
if redirect and not redirect.startswith("/"):
raise ValueError(f"redirect must be absolute, but is {redirect}")
c = f"{path} {parameters}" if parameters else path
if not redirect:
ret = sp.run(c, shell=True, timeout=timeout, stdout=sp.PIPE, stderr=sp.STDOUT)
ret.stdout = ret.stdout.decode('utf-8').strip()
else:
with open(redirect, "w") as f:
ret = sp.run(c, shell=True, timeout=timeout, stdout=f, stderr=f)
ret.args += f" &> {redirect}"
ret.stdout = ""
if not silent:
logging.info(f"local> {ret.args}")
return ret
def run(self, line, timeout=300, silent=False, reportNonZero=True):
if not silent:
logging.info(line)
logging.info(f"local> {line}")
try:
if line.strip().endswith('&'):
# if we wait for stdout, subprocess does not return before the end of the command
# however, we don't want to wait for commands with &, so just return fake command
ret = sp.run(line, shell=True, cwd=self.cwd, timeout=5)
ret = sp.run(line, shell=True, cwd=self.cwd, timeout=5, executable='/bin/bash')
time.sleep(0.1)
else:
ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout, executable='/bin/bash')
except Exception as e:
ret = sp.CompletedProcess(args=line, returncode=255, stdout=f'Exception: {str(e)}'.encode('utf-8'))
if ret.stdout is None:
@@ -128,7 +156,9 @@ class LocalCmd(Cmd):
def copyin(self, src, tgt, recursive=False):
if src[0] != '/' or tgt[0] != '/':
raise Exception('support only absolute file paths!')
raise Exception(f'support only absolute file paths (src {src} tgt {tgt})!')
if src == tgt:
return # nothing to copy, file is already where it should go
opt = '-r' if recursive else ''
return self.run(f'cp {opt} {src} {tgt}').returncode == 0
@@ -166,9 +196,8 @@ class RemoteCmd(Cmd):
def __init__(self, hostname, d=None):
cIdx = 0
logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko
self.client = paramiko.SSHClient()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.hostname = hostname
self.client = RemoteCmd._ssh_init()
cfg = RemoteCmd._lookup_ssh_config(hostname)
self.cwd = d
self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
@@ -181,6 +210,12 @@ class RemoteCmd(Cmd):
cIdx +=1
raise Exception ("Error: max retries, did not connect to host")
def _ssh_init():
logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
return client
def _lookup_ssh_config(hostname):
ssh_config = paramiko.SSHConfig()
user_config_file = os.path.expanduser("~/.ssh/config")
@@ -201,9 +236,33 @@ class RemoteCmd(Cmd):
cfg['sock'] = paramiko.ProxyCommand(ucfg['proxycommand'])
return cfg
def exec_script(host, path, timeout, parameters=None, redirect=None, silent=False):
if redirect and not redirect.startswith("/"):
raise ValueError(f"redirect must be absolute, but is {redirect}")
p = parameters if parameters else ""
r = f"> {redirect}" if redirect else ""
if not silent:
logging.info(f"local> ssh {host} bash -s {p} < {path} {r} # {path} from localhost")
client = RemoteCmd._ssh_init()
cfg = RemoteCmd._lookup_ssh_config(host)
client.connect(**cfg)
bash_opt = 'BASH_XTRACEFD=1' # write bash set -x output to stdout, see bash(1)
stdin, stdout, stderr = client.exec_command(f"{bash_opt} bash -s {p} {r}", timeout=timeout)
# open() the file f at path, read() it and write() it into the stdin of the bash -s cmd
with open(path) as f:
stdin.write(f.read())
stdin.close()
cmd = path
if parameters: cmd += f" {parameters}"
if redirect: cmd += f" &> {redirect}"
ret = sp.CompletedProcess(args=cmd, returncode=stdout.channel.recv_exit_status(), stdout=stdout.read(size=None) + stderr.read(size=None))
ret.stdout = ret.stdout.decode('utf-8').strip()
client.close()
return ret
def run(self, line, timeout=300, silent=False, reportNonZero=True):
if not silent:
logging.info(line)
logging.info(f"ssh[{self.hostname}]> {line}")
if self.cwd:
line = f"cd {self.cwd} && {line}"
try:
@@ -233,7 +292,7 @@ class RemoteCmd(Cmd):
# 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}")
logging.debug(f"copyout: local:{src} -> {self.hostname}:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}"
@@ -251,7 +310,7 @@ class RemoteCmd(Cmd):
# 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}")
logging.debug(f"copyin: {self.hostname}:{src} -> local:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}"

View File

@@ -36,18 +36,12 @@ import re # reg
import logging
import os
import shutil
import subprocess
import time
import pyshark
import threading
import cls_cmd
from multiprocessing import Process, Lock, SimpleQueue
from zipfile import ZipFile
#-----------------------------------------------------------
# OAI Testing modules
#-----------------------------------------------------------
import cls_cluster as OC
import cls_cmd
import sshconnection as SSH
import helpreadme as HELP
@@ -58,43 +52,25 @@ import cls_oaicitest
# Helper functions used here and in other classes
# (e.g., cls_cluster.py)
#-----------------------------------------------------------
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial', 'oai-gnb-fhi72']
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-enb-asan', 'oai-gnb-asan', 'oai-lte-ue-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial', 'oai-gnb-fhi72']
def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
def CreateWorkspace(host, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
if ranCommitID == '':
logging.error('need ranCommitID in CreateWorkspace()')
sys.exit('Insufficient Parameter in CreateWorkspace()')
raise ValueError('Insufficient Parameter in CreateWorkspace(): need ranCommitID')
sshSession.command(f'rm -rf {sourcePath}', '\$', 10)
sshSession.command('mkdir -p ' + sourcePath, '\$', 5)
sshSession.command('cd ' + sourcePath, '\$', 5)
# Recent version of git (>2.20?) should handle missing .git extension # without problems
if ranTargetBranch == 'null':
ranTargetBranch = 'develop'
baseBranch = re.sub('origin/', '', ranTargetBranch)
sshSession.command(f'git clone --filter=blob:none -n -b {baseBranch} {ranRepository} .', '\$', 60)
if sshSession.getBefore().count('error') > 0 or sshSession.getBefore().count('error') > 0:
sys.exit('error during clone')
sshSession.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
sshSession.command('git config user.name "OAI Jenkins"', '\$', 5)
sshSession.command('mkdir -p cmake_targets/log', '\$', 5)
# if the commit ID is provided use it to point to it
sshSession.command(f'git checkout -f {ranCommitID}', '\$', 30)
if sshSession.getBefore().count(f'HEAD is now at {ranCommitID[:6]}') != 1:
sshSession.command('git log --oneline | head -n5', '\$', 5)
logging.warning(f'problems during checkout, is at: {sshSession.getBefore()}')
else:
logging.debug('successful checkout')
# if the branch is not develop, then it is a merge request and we need to do
# the potential merge. Note that merge conflicts should already been checked earlier
script = "scripts/create_workspace.sh"
options = f"{sourcePath} {ranRepository} {ranCommitID}"
if ranAllowMerge:
if ranTargetBranch == '':
ranTargetBranch = 'develop'
logging.debug(f'Merging with the target branch: {ranTargetBranch}')
sshSession.command(f'git merge --ff origin/{ranTargetBranch} -m "Temporary merge for CI"', '\$', 30)
options += f" {ranTargetBranch}"
logging.info(f'execute "{script}" with options "{options}" on node {host}')
ret = cls_cmd.runScript(host, script, 90, options)
logging.debug(f'"{script}" finished with code {ret.returncode}, output:\n{ret.stdout}')
return ret.returncode == 0
def ImageTagToUse(imageName, ranCommitID, ranBranch, ranAllowMerge):
def CreateTag(ranCommitID, ranBranch, ranAllowMerge):
shortCommit = ranCommitID[0:8]
if ranAllowMerge:
# Allowing contributor to have a name/branchName format
@@ -102,8 +78,7 @@ def ImageTagToUse(imageName, ranCommitID, ranBranch, ranAllowMerge):
tagToUse = f'{branchName}-{shortCommit}'
else:
tagToUse = f'develop-{shortCommit}'
fullTag = f'{imageName}:{tagToUse}'
return fullTag
return tagToUse
def CopyLogsToExecutor(cmd, sourcePath, log_name):
cmd.cd(f'{sourcePath}/cmake_targets')
@@ -169,27 +144,156 @@ def AnalyzeBuildLogs(buildRoot, images, globalStatus):
collectInfo[image] = files
return collectInfo
# 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 GetCredentials(instance):
server_id = instance.eNB_serverId[instance.eNB_instance]
if server_id == '0':
return (instance.eNBIPAddress, instance.eNBUserName, instance.eNBPassword, instance.eNBSourceCodePath)
elif server_id == '1':
return (instance.eNB1IPAddress, instance.eNB1UserName, instance.eNB1Password, instance.eNB1SourceCodePath)
elif server_id == '2':
return (instance.eNB2IPAddress, instance.eNB2UserName, instance.eNB2Password, instance.eNB2SourceCodePath)
else:
raise Exception ("Only supports maximum of 3 servers")
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)
def GetContainerName(ssh, svcName, file):
ret = ssh.run(f"docker compose -f {file} config --format json {svcName} | jq -r '.services.\"{svcName}\".container_name'", silent=True)
return ret.stdout
def GetImageName(ssh, svcName, file):
ret = ssh.run(f"docker compose -f {file} config --format json {svcName} | jq -r '.services.\"{svcName}\".image'", silent=True)
if ret.returncode != 0:
return f"cannot retrieve image info for {containerName}: {ret.stdout}"
else:
return ret.stdout.strip()
def GetContainerHealth(ssh, containerName):
if containerName is None:
return False
if 'db_init' in containerName or 'db-init' in containerName: # exits with 0, there cannot be healthy
return True
time.sleep(5)
for _ in range(3):
result = ssh.run(f'docker inspect --format="{{{{.State.Health.Status}}}}" {containerName}', silent=True)
if result.stdout == 'healthy':
return True
time.sleep(10)
return False
def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'):
ret = ssh.run(f'cat {wd}/.env', silent=True)
if ret.returncode != 0:
return False
env_vars = ret.stdout.strip().splitlines()
logging.info(f'{prompt} {wd}/.env: {env_vars}')
return True
def WriteEnvFile(ssh, services, wd, tag):
ret = ssh.run(f'cat {wd}/.env', silent=True)
registry = "oai-ci" # pull_images() gives us this registry path
envs = {"REGISTRY":registry, "TAG": tag}
if ret.returncode == 0: # it exists, we have to update
# transforms env file to dictionary
old_envs = {}
for l in ret.stdout.strip().splitlines():
var, val = l.split('=', 1)
old_envs[var] = val.strip('"')
# will retain the old environment variables
envs = {**envs, **old_envs}
for svc in services.split():
# In some scenarios we have the choice of either pulling normal images
# or -asan images. We need to detect which kind we did pull.
fullImageName = GetImageName(ssh, svc, f"{wd}/docker-compose.y*ml")
image = fullImageName.split("/")[-1].split(":")[0]
checkimg = f"{registry}/{image}-asan:{tag}"
ret = ssh.run(f'docker image inspect {checkimg}', reportNonZero=False)
if ret.returncode == 0:
logging.info(f"detected pulled image {checkimg}")
if "oai-enb" in image: envs["ENB_IMG"] = "oai-enb-asan"
elif "oai-gnb" in image: envs["GNB_IMG"] = "oai-gnb-asan"
elif "oai-lte-ue" in image: envs["LTEUE_IMG"] = "oai-lte-ue-asan"
elif "oai-nr-ue" in image: envs["NRUE_IMG"] = "oai-nr-ue-asan"
elif "oai-nr-cuup" in image: envs["NRCUUP_IMG"] = "oai-nr-cuup-asan"
else: logging.warning("undetected image format {image}, cannot use asan")
env_string = "\n".join([f"{var}=\"{val}\"" for var,val in envs.items()])
ssh.run(f'echo -e \'{env_string}\' > {wd}/.env', silent=True)
ExistEnvFilePrint(ssh, wd, prompt='New env vars in file')
def GetServices(ssh, requested, file):
if requested == [] or requested is None or requested == "":
logging.warning('No service name given: starting all services in docker-compose.yml!')
ret = ssh.run(f'docker compose -f {file} config --services')
if ret.returncode != 0:
return ""
else:
return ' '.join(ret.stdout.splitlines())
else:
return requested
def CopyinContainerLog(ssh, lSourcePath, yaml, containerName, filename):
remote_filename = f"{lSourcePath}/cmake_targets/log/{filename}"
ssh.run(f'docker logs {containerName} &> {remote_filename}')
local_dir = f"{os.getcwd()}/../cmake_targets/log/{yaml}"
os.system(f'mkdir -p {local_dir}')
local_filename = f"{local_dir}/{filename}"
return ssh.copyin(remote_filename, local_filename)
def GetRunningServices(ssh, file):
ret = ssh.run(f'docker compose -f {file} config --services')
if ret.returncode != 0:
return None
allServices = ret.stdout.splitlines()
running_services = []
for s in allServices:
# outputs the hash if the container is running
ret = ssh.run(f'docker compose -f {file} ps --all --quiet -- {s}')
if ret.returncode != 0:
logging.info(f"service {s}: {ret.stdout}")
elif ret.stdout == "":
logging.warning(f"could not retrieve information for service {s}")
else:
c = ret.stdout
logging.debug(f'running service {s} with container id {c}')
running_services.append((s, c))
logging.info(f'stopping services: {running_services}')
return running_services
def CheckLogs(self, yaml, service_name, HTML, RAN):
logPath = f'{os.getcwd()}/../cmake_targets/log/{yaml}'
filename = f'{logPath}/{service_name}-{HTML.testCase_id}.log'
success = True
if (any(sub in service_name for sub in ['oai_ue','oai-nr-ue','lte_ue'])):
logging.debug(f'\u001B[1m Analyzing UE logfile {filename} \u001B[0m')
logStatus = cls_oaicitest.OaiCiTest().AnalyzeLogFile_UE(filename, HTML, RAN)
opt = f"UE log analysis for service {service_name}"
# usage of htmlUEFailureMsg/htmleNBFailureMsg is because Analyze log files
# abuse HTML to store their reports, and we here want to put custom options,
# which is not possible with CreateHtmlTestRow
# solution: use HTML templates, where we don't need different HTML write funcs
if (logStatus < 0):
HTML.CreateHtmlTestRowQueue(opt, 'KO', [HTML.htmlUEFailureMsg])
success = False
else:
HTML.CreateHtmlTestRowQueue(opt, 'OK', [HTML.htmlUEFailureMsg])
HTML.htmlUEFailureMsg = ""
elif service_name == 'nv-cubb':
msg = 'Undeploy PNF/Nvidia CUBB'
HTML.CreateHtmlTestRow(msg, 'OK', CONST.ALL_PROCESSES_OK)
elif (any(sub in service_name for sub in ['enb','rru','rcc','cu','du','gnb'])):
logging.debug(f'\u001B[1m Analyzing XnB logfile {filename}\u001B[0m')
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
opt = f"xNB log analysis for service {service_name}"
if (logStatus < 0):
HTML.CreateHtmlTestRowQueue(opt, 'KO', [HTML.htmleNBFailureMsg])
success = False
else:
HTML.CreateHtmlTestRowQueue(opt, 'OK', [HTML.htmleNBFailureMsg])
HTML.htmleNBFailureMsg = ""
else:
logging.info(f'Skipping to analyze log for service name {service_name}')
HTML.CreateHtmlTestRowQueue(f"service {service_name}", 'OK', ["no analysis function"])
logging.debug(f"log check: service {service_name} passed analysis {success}")
return success
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
@@ -219,11 +323,9 @@ class Containerize():
self.proxyCommit = None
self.eNB_instance = 0
self.eNB_serverId = ['', '', '']
self.deployKind = [True, True, True]
self.yamlPath = ['', '', '']
self.services = ['', '', '']
self.nb_healthy = [0, 0, 0]
self.exitStatus = 0
self.deploymentTag = ''
self.eNB_logFile = ['', '', '']
self.testCase_id = ''
@@ -235,7 +337,6 @@ class Containerize():
self.deployedContainers = []
self.tsharkStarted = False
self.displayedNewTags = False
self.pingContName = ''
self.pingOptions = ''
self.pingLossThreshold = ''
@@ -316,7 +417,9 @@ class Containerize():
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-enb', 'eNB', 'oai-enb-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('oai-lte-ue', 'lteUE', 'oai-lte-ue-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('oai-nr-ue', 'nrUE', 'oai-nr-ue-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
imageNames.append(('ran-build-fhi72', 'build.fhi72', 'ran-build-fhi72', ''))
@@ -325,19 +428,11 @@ class Containerize():
if result is not None:
self.dockerfileprefix = '.ubuntu22.cross-arm64'
# Workaround for some servers, we need to erase completely the workspace
if self.forcedWorkspaceCleanup:
cmd.run(f'sudo -S rm -Rf {lSourcePath}')
self.testCase_id = HTML.testCase_id
CreateWorkspace(cmd, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
cmd.cd(lSourcePath)
# if asterix, copy the entitlement and subscription manager configurations
if self.host == 'Red Hat':
cmd.run('mkdir -p ./etc-pki-entitlement ./rhsm-conf ./rhsm-ca')
cmd.run('cp /etc/rhsm/rhsm.conf ./rhsm-conf/')
cmd.run('cp /etc/rhsm/ca/redhat-uep.pem ./rhsm-ca/')
cmd.run('mkdir -p ./etc-pki-entitlement')
cmd.run('cp /etc/pki/entitlement/*.pem ./etc-pki-entitlement/')
baseImage = 'ran-base'
@@ -532,7 +627,7 @@ class Containerize():
self.ranRepository = 'https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git'
self.ranAllowMerge = False
self.ranTargetBranch = 'master'
CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
mySSH.command('cd ' +lSourcePath, '\$', 3)
# to prevent accidentally overwriting data that might be used later
self.ranCommitID = oldRanCommidID
self.ranRepository = oldRanRepository
@@ -551,8 +646,6 @@ class Containerize():
buildProxy = mySSH.getBefore().count('o such image') != 0
if buildProxy:
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target oai-lte-multi-ue-proxy --tag proxy:' + tag + ' --file docker/Dockerfile.ubuntu18.04 . > cmake_targets/log/proxy-build.log 2>&1', '\$', 180)
# Note: at this point, OAI images are flattened, but we cannot do this
# here, as the flatten script is not in the proxy repo
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
mySSH.command(self.cli + ' image prune --force || true','\$', 15)
if mySSH.getBefore().count('o such image') != 0:
@@ -694,7 +787,7 @@ class Containerize():
HTML.CreateHtmlTestRowQueue("Build unit tests", 'OK', [dockerfile])
# it worked, build and execute tests, and close connection
ret = cmd.run(f'docker run -a STDOUT --rm ran-unittests:{baseTag} ctest --output-on-failure --no-label-summary -j$(nproc)')
ret = cmd.run(f'docker run -a STDOUT --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --rm ran-unittests:{baseTag} ctest --output-on-failure --no-label-summary -j$(nproc)')
cmd.run(f'docker rmi ran-unittests:{baseTag}')
build_log_name = f'build_log_{self.testCase_id}'
CopyLogsToExecutor(cmd, lSourcePath, build_log_name)
@@ -744,19 +837,25 @@ class Containerize():
if self.ranAllowMerge:
orgTag = 'ci-temp'
for image in IMAGES:
tagToUse = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
mySSH.command(f'docker image tag {image}:{orgTag} {imagePrefix}/{tagToUse}', '\$', 5)
tagToUse = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge)
imageTag = f"{image}:{tagToUse}"
mySSH.command(f'docker image tag {image}:{orgTag} {imagePrefix}/{imageTag}', '\$', 5)
if re.search('Error response from daemon: No such image:', mySSH.getBefore()) is not None:
continue
mySSH.command(f'docker push {imagePrefix}/{tagToUse}', '\$', 120)
mySSH.command(f'docker push {imagePrefix}/{imageTag}', '\$', 120)
if re.search(': digest:', mySSH.getBefore()) is None:
logging.debug(mySSH.getBefore())
msg = f'Could not push {image} to local registry : {tagToUse}'
msg = f'Could not push {image} to local registry : {imageTag}'
logging.error(msg)
mySSH.close()
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False
mySSH.command(f'docker rmi {imagePrefix}/{tagToUse} {image}:{orgTag}', '\$', 30)
# Creating a develop tag on the local private registry
if not self.ranAllowMerge:
mySSH.command(f'docker image tag {image}:{orgTag} {imagePrefix}/{image}:develop', '\$', 5)
mySSH.command(f'docker push {imagePrefix}/{image}:develop', '\$', 120)
mySSH.command(f'docker rmi {imagePrefix}/{image}:develop', '\$', 120)
mySSH.command(f'docker rmi {imagePrefix}/{imageTag} {image}:{orgTag}', '\$', 30)
mySSH.command(f'docker logout {imagePrefix}', '\$', 5)
if re.search('Removing login credentials', mySSH.getBefore()) is None:
@@ -801,19 +900,22 @@ class Containerize():
myCmd.close()
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False
pulled_images = []
for image in self.imageToPull:
tagToUse = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
cmd = f'docker pull {imagePrefix}/{tagToUse}'
tagToUse = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge)
imageTag = f"{image}:{tagToUse}"
cmd = f'docker pull {imagePrefix}/{imageTag}'
response = myCmd.run(cmd, timeout=120)
if response.returncode != 0:
logging.debug(response)
msg = f'Could not pull {image} from local registry : {tagToUse}'
msg = f'Could not pull {image} from local registry : {imageTag}'
logging.error(msg)
myCmd.close()
HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK)
return False
myCmd.run(f'docker tag {imagePrefix}/{tagToUse} oai-ci/{tagToUse}')
myCmd.run(f'docker rmi {imagePrefix}/{tagToUse}')
myCmd.run(f'docker tag {imagePrefix}/{imageTag} oai-ci/{imageTag}')
myCmd.run(f'docker rmi {imagePrefix}/{imageTag}')
pulled_images += [f"oai-ci/{imageTag}"]
response = myCmd.run(f'docker logout {imagePrefix}')
if response.returncode != 0:
msg = 'Could not log off from local registry'
@@ -822,7 +924,8 @@ class Containerize():
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False
myCmd.close()
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
msg = "Pulled Images:\n" + '\n'.join(pulled_images)
HTML.CreateHtmlTestRowQueue('N/A', 'OK', [msg])
return True
def Clean_Test_Server_Images(self, HTML):
@@ -854,7 +957,8 @@ class Containerize():
myCmd = cls_cmd.LocalCmd()
for image in IMAGES:
imageTag = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
tag = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge)
imageTag = f"{image}:{tag}"
cmd = f'docker rmi oai-ci/{imageTag}'
myCmd.run(cmd, reportNonZero=False)
@@ -862,7 +966,7 @@ class Containerize():
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
return True
def DeployObject(self, HTML, EPC):
def Create_Workspace(self,HTML):
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
@@ -881,501 +985,96 @@ class Containerize():
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
success = CreateWorkspace(lIpAddr, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
if success:
HTML.CreateHtmlTestRowQueue('N/A', 'OK', [f"created workspace {lSourcePath}"])
else:
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["cannot create workspace"])
return success
def DeployObject(self, HTML):
lIpAddr, lUserName, lPassWord, lSourcePath = GetCredentials(self)
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
logging.debug('\u001B[1m Deploying OAI Object on server: ' + lIpAddr + '\u001B[0m')
self.deployKind[self.eNB_instance] = True
yaml = self.yamlPath[self.eNB_instance].strip('/')
wd = f'{lSourcePath}/{yaml}'
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
with cls_cmd.getConnection(lIpAddr) as ssh:
services = GetServices(ssh, self.services[self.eNB_instance], f"{wd}/docker-compose.y*ml")
if services == [] or services == ' ' or services == None:
msg = "Cannot determine services to start"
logging.error(msg)
HTML.CreateHtmlTestRowQueue('N/A', 'KO', [msg])
return False
CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
ExistEnvFilePrint(ssh, wd)
WriteEnvFile(ssh, services, wd, self.deploymentTag)
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
mySSH.command('cp docker-compose.y*ml ci-docker-compose.yml', '\$', 5)
for image in IMAGES:
imageTag = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
mySSH.command(f'sed -i -e "s#image: {image}:latest#image: oai-ci/{imageTag}#" ci-docker-compose.yml', '\$', 2)
logging.info(f"will start services {services}")
status = ssh.run(f'docker compose -f {wd}/docker-compose.y*ml up -d -- {services}')
if status.returncode != 0:
msg = f"cannot deploy services {services}: {status.stdout}"
logging.error(msg)
HTML.CreateHtmlTestRowQueue('N/A', 'KO', [msg])
return False
# Currently support only one
svcName = self.services[self.eNB_instance]
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)
# Checking Status
mySSH.command(f'docker compose --file ci-docker-compose.yml config {svcName}', '\$', 5)
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
unhealthyNb = 0
healthyNb = 0
startingNb = 0
containerName = ''
usedImage = ''
imageInfo = ''
if result is not None:
containerName = result.group('container_name')
time.sleep(5)
cnt = 0
while (cnt < 3):
mySSH.command('docker inspect --format="{{.State.Health.Status}}" ' + containerName, '\$', 5)
unhealthyNb = mySSH.getBefore().count('unhealthy')
healthyNb = mySSH.getBefore().count('healthy') - unhealthyNb
startingNb = mySSH.getBefore().count('starting')
if healthyNb == 1:
cnt = 10
imagesInfo = []
fstatus = True
for svc in services.split():
containerName = GetContainerName(ssh, svc, f"{wd}/docker-compose.y*ml")
healthy = GetContainerHealth(ssh, containerName)
if not healthy:
tgtlogfile = f'{svc}-{HTML.testCase_id}.log'
logging.warning(f"Deployment Failed: Trying to copy container logs to {tgtlogfile}")
yaml_dir = yaml.split('/')[-1]
CopyinContainerLog(ssh, lSourcePath, yaml_dir, containerName, tgtlogfile)
imagesInfo += [f"Failed to deploy: service {svc}"]
fstatus = False
else:
time.sleep(10)
cnt += 1
mySSH.command('docker inspect --format="ImageUsed: {{.Config.Image}}" ' + containerName, '\$', 5)
for stdoutLine in mySSH.getBefore().split('\n'):
if stdoutLine.count('ImageUsed: oai-ci'):
usedImage = stdoutLine.replace('ImageUsed: oai-ci', 'oai-ci').strip()
logging.debug('Used image is ' + usedImage)
if usedImage != '':
mySSH.command('docker image inspect --format "* Size = {{.Size}} bytes\n* Creation = {{.Created}}\n* Id = {{.Id}}" ' + usedImage, '\$', 5, silent=True)
for stdoutLine in mySSH.getBefore().split('\n'):
if re.search('Size = [0-9]', stdoutLine) is not None:
imageInfo += stdoutLine.strip() + '\n'
if re.search('Creation = [0-9]', stdoutLine) is not None:
imageInfo += stdoutLine.strip() + '\n'
if re.search('Id = sha256', stdoutLine) is not None:
imageInfo += stdoutLine.strip() + '\n'
logging.debug(' -- ' + str(healthyNb) + ' healthy container(s)')
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
self.testCase_id = HTML.testCase_id
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
status = False
if healthyNb == 1:
cnt = 0
while (cnt < 20):
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
else:
cnt = 100
status = True
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
image = GetImageName(ssh, svc, f"{wd}/docker-compose.y*ml")
logging.info(f"service {svc} healthy, container {containerName}, image {image}")
imagesInfo += [f"service {svc} healthy, image {image}"]
if fstatus:
HTML.CreateHtmlTestRowQueue('N/A', 'OK', ['\n'.join(imagesInfo)])
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
logfilename = f'{lSourcePath}/cmake_targets/log/{self.eNB_logFile[self.eNB_instance]}'
mySSH.command(f'docker logs {containerName} > {logfilename}', '\$', 30)
mySSH.copyin(lIpAddr, lUserName, lPassWord, logfilename, '.')
mySSH.close()
message = ''
if usedImage != '':
message += f'Used Image = {usedImage} :\n'
message += imageInfo
else:
message += 'Could not retrieve used image info!\n'
if status:
message += '\nHealthy deployment!\n'
else:
message += '\nUnhealthy deployment! -- Check logs for reason!\n'
if status:
HTML.CreateHtmlTestRowQueue('N/A', 'OK', [message])
else:
self.exitStatus = 1
HTML.CreateHtmlTestRowQueue('N/A', 'KO', [message])
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ['\n'.join(imagesInfo)])
return fstatus
def UndeployObject(self, HTML, RAN):
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
lPassWord = self.eNBPassword
lSourcePath = self.eNBSourceCodePath
elif self.eNB_serverId[self.eNB_instance] == '1':
lIpAddr = self.eNB1IPAddress
lUserName = self.eNB1UserName
lPassWord = self.eNB1Password
lSourcePath = self.eNB1SourceCodePath
elif self.eNB_serverId[self.eNB_instance] == '2':
lIpAddr = self.eNB2IPAddress
lUserName = self.eNB2UserName
lPassWord = self.eNB2Password
lSourcePath = self.eNB2SourceCodePath
lIpAddr, lUserName, lPassWord, lSourcePath = GetCredentials(self)
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
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 = ''
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 = ret.stdout.splitlines()
services = []
for s in allServices:
# 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.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'{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.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml down -v')
# Analyzing log file!
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 any(service_name == 'oai-nr-ue' or service_name == 'lte_ue0' for service_name, _ in services):
self.exitStatus == 0
logging.debug(f'Analyzing UE logfile {filename}')
logStatus = cls_oaicitest.OaiCiTest().AnalyzeLogFile_UE(f'{filename}', HTML, RAN)
if (logStatus < 0):
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
self.exitStatus = 1
yaml = self.yamlPath[self.eNB_instance].strip('/')
wd = f'{lSourcePath}/{yaml}'
yaml_dir = yaml.split('/')[-1]
with cls_cmd.getConnection(lIpAddr) as ssh:
ExistEnvFilePrint(ssh, wd)
services = GetRunningServices(ssh, f"{wd}/docker-compose.y*ml")
copyin_res = None
if services is not None:
all_serv = " ".join([s for s, _ in services])
ssh.run(f'docker compose -f {wd}/docker-compose.y*ml stop -- {all_serv}')
copyin_res = all(CopyinContainerLog(ssh, lSourcePath, yaml_dir, c, f'{s}-{HTML.testCase_id}.log') for s, c in services)
else:
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
logging.warning('could not identify services to stop => no log file')
ssh.run(f'docker compose -f {wd}/docker-compose.y*ml down -v')
ssh.run(f'rm {wd}/.env')
if not copyin_res:
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ['Could not copy logfile(s)'])
return False
else:
for service_name, _ in services:
if service_name == 'nv-cubb':
msg = 'Undeploy PNF/Nvidia CUBB'
HTML.CreateHtmlTestRow(msg, 'OK', CONST.ALL_PROCESSES_OK)
else:
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(f'./*.log', f'{lSourcePath}/cmake_targets/', recursive=True)
if self.exitStatus == 0:
log_results = [CheckLogs(self, yaml_dir, s, HTML, RAN) for s, _ in services]
success = all(log_results)
if success:
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
logging.debug('\u001B[1m Checking Services to deploy\u001B[0m')
# Implicitly we are running locally
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
self.deployKind[0] = False
cmd = 'docker-compose config --services'
listServices = myCmd.run(cmd)
if listServices.returncode != 0:
myCmd.close()
self.exitStatus = 1
HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
return
for reqSvc in self.services[0].split(' '):
res = re.search(reqSvc, listServices.stdout)
if res is None:
logging.error(reqSvc + ' not found in specified docker-compose')
self.exitStatus = 1
if (self.exitStatus == 1):
myCmd.close()
HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
return
cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
myCmd.run(cmd, silent=self.displayedNewTags)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames:
tagToUse = ImageTagToUse(image, self.ranCommitID, self.ranBranch, self.ranAllowMerge)
# In the scenario, for 5G images, we have the choice of either pulling normal images
# or -asan images. We need to detect which kind we did pull.
if image == 'oai-gnb' or image == 'oai-nr-ue' or image == 'oai-nr-cuup':
ret = myCmd.run(f'docker image inspect oai-ci/{tagToUse}', reportNonZero=False, silent=self.displayedNewTags)
if ret.returncode != 0:
tagToUse = tagToUse.replace('oai-gnb', 'oai-gnb-asan')
tagToUse = tagToUse.replace('oai-nr-ue', 'oai-nr-ue-asan')
tagToUse = tagToUse.replace('oai-nr-cuup', 'oai-nr-cuup-asan')
if not self.displayedNewTags:
logging.debug(f'\u001B[1m Using sanitized version of {image} with {tagToUse}\u001B[0m')
cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@oai-ci/{tagToUse}@" docker-compose-ci.yml'
myCmd.run(cmd, silent=self.displayedNewTags)
self.displayedNewTags = True
cmd = f'docker-compose -f docker-compose-ci.yml up -d {self.services[0]}'
deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0:
myCmd.close()
self.exitStatus = 1
logging.error('Could not deploy')
HTML.CreateHtmlTestRow('Could not deploy', 'KO', CONST.ALL_PROCESSES_OK)
return
logging.debug('\u001B[1m Checking if all deployed healthy\u001B[0m')
cmd = 'docker-compose -f docker-compose-ci.yml ps -a'
count = 0
healthy = 0
restarting = 0
newContainers = []
while (count < 10):
count += 1
containerStatus = []
deployStatus = myCmd.run(cmd, 30, silent=True)
healthy = 0
restarting = 0
for state in deployStatus.stdout.split('\n'):
state = state.strip()
res = re.search('Name|NAME|----------', state)
if res is not None:
continue
if len(state) == 0:
continue
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
if res is not None:
cName = res.group('container_name')
found = False
for alreadyDeployed in self.deployedContainers:
if cName == alreadyDeployed:
found = True
if not found:
newContainers.append(cName)
self.deployedContainers.append(cName)
if re.search('\(healthy\)', state) is not None:
healthy += 1
if re.search('rfsim4g-db-init.*Exit 0', state) is not None or re.search('rfsim4g-db-init.*Exited \(0\)', state) is not None:
myCmd.run('docker rm -f rfsim4g-db-init', timeout=30, silent=True, reportNonZero=False)
if re.search('l2sim4g-db-init.*Exit 0', state) is not None or re.search('l2sim4g-db-init.*Exited \(0\)', state) is not None:
myCmd.run('docker rm -f l2sim4g-db-init', timeout=30, silent=True, reportNonZero=False)
if re.search('Restarting', state) is None:
containerStatus.append(state)
else:
restarting += 1
if healthy == self.nb_healthy[0] and restarting == 0:
count = 100
else:
time.sleep(10)
html_cell = ''
for newCont in newContainers:
if newCont == 'rfsim4g-db-init':
continue
cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont
imageInspect = myCmd.run(cmd, timeout=30, silent=True)
imageName = str(imageInspect.stdout).strip()
cmd = 'docker image inspect --format \'{{.RepoTags}}\t{{.Size}} bytes\t{{index (split .Created ".") 0}}\n{{.Id}}\' ' + imageName
imageInspect = myCmd.run(cmd, 30, silent=True)
html_cell += imageInspect.stdout + '\n'
myCmd.close()
for cState in containerStatus:
html_cell += cState + '\n'
if count == 100 and healthy == self.nb_healthy[0]:
if self.tsharkStarted == False:
logging.debug('Starting tshark on public network')
self.CaptureOnDockerNetworks()
HTML.CreateHtmlTestRowQueue('n/a', 'OK', [html_cell])
for cState in containerStatus:
logging.debug(cState)
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
else:
HTML.CreateHtmlTestRowQueue('Could not deploy in time', 'KO', [html_cell])
for cState in containerStatus:
logging.debug(cState)
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
HTML.testCase_id = 'AUTO-UNDEPLOY'
UE.testCase_id = 'AUTO-UNDEPLOY'
HTML.desc = 'Automatic Undeployment'
UE.desc = 'Automatic Undeployment'
UE.ShowTestID()
self.UndeployGenObject(HTML, RAN, UE)
self.exitStatus = 1
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: @@"'
networkNames = myCmd.run(cmd, silent=True)
myCmd.close()
# Allow only: control plane RAN (SCTP), HTTP of control in CN (port 80), PFCP traffic (port 8805), MySQL (port 3306)
capture_filter = 'sctp or port 80 or port 8805 or icmp or port 3306'
interfaces = []
iInterfaces = ''
for name in networkNames.stdout.split('\n'):
if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
interfaces.append(name)
iInterfaces += f'-i {name} '
ymlPath = self.yamlPath[0].split('/')
output_file = f'/tmp/capture_{ymlPath[1]}.pcap'
self.tsharkStarted = True
# On old systems (ubuntu 18), pyshark live-capture is buggy.
# Going back to old method
if sys.version_info < (3, 7):
cmd = f'nohup tshark -f "{capture_filter}" {iInterfaces} -w {output_file} > /tmp/tshark.log 2>&1 &'
myCmd = cls_cmd.LocalCmd()
myCmd.run(cmd, timeout=5, reportNonZero=False)
myCmd.close()
return
x = threading.Thread(target = LaunchPySharkCapture, args = (interfaces,capture_filter,output_file,))
x.daemon = True
x.start()
def UndeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0
# Implicitly we are running locally
ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1]
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
myCmd.run(cmd)
# check which containers are running for log recovery later
cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
deployStatusLogs = myCmd.run(cmd, timeout=30)
# Stop the containers to shut down objects
logging.debug('\u001B[1m Stopping containers \u001B[0m')
cmd = 'docker-compose -f docker-compose-ci.yml stop -t3'
deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0:
myCmd.close()
self.exitStatus = 1
logging.error('Could not stop containers')
HTML.CreateHtmlTestRow('Could not stop', 'KO', CONST.ALL_PROCESSES_OK)
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
return
anyLogs = False
logging.debug('Working dir is now . (ie ci-scripts)')
myCmd2 = cls_cmd.LocalCmd()
myCmd2.run(f'mkdir -p {logPath}')
myCmd2.cd(logPath)
for state in deployStatusLogs.stdout.split('\n'):
res = re.search('Name|NAME|----------', state)
if res is not None:
continue
if len(state) == 0:
continue
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
if res is not None:
anyLogs = True
cName = res.group('container_name')
cmd = f'docker logs {cName} > {cName}.log 2>&1'
myCmd2.run(cmd, timeout=30, reportNonZero=False)
if re.search('magma-mme', cName) is not None:
cmd = f'docker cp -L {cName}:/var/log/mme.log {cName}-full.log'
myCmd2.run(cmd, timeout=30, reportNonZero=False)
fullStatus = True
if anyLogs:
# Analyzing log file(s)!
listOfPossibleRanContainers = ['enb*', 'gnb*', 'cu*', 'du*']
for container in listOfPossibleRanContainers:
filenames = './*-oai-' + container + '.log'
cmd = f'ls {filenames}'
lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
if lsStatus.returncode != 0:
continue
filenames = str(lsStatus.stdout).strip()
for filename in filenames.split('\n'):
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
logStatus = RAN.AnalyzeLogFile_eNB(f'{logPath}/{filename}', HTML, self.ran_checkers)
if (logStatus < 0):
fullStatus = False
self.exitStatus = 1
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
else:
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
for container in listOfPossibleUeContainers:
filenames = './*-oai-' + container + '.log'
cmd = f'ls {filenames}'
lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
if lsStatus.returncode != 0:
continue
filenames = str(lsStatus.stdout).strip()
for filename in filenames.split('\n'):
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
logStatus = UE.AnalyzeLogFile_UE(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)
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'
deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0:
myCmd.close()
self.exitStatus = 1
logging.error('Could not undeploy')
HTML.CreateHtmlTestRow('Could not undeploy', 'KO', CONST.ALL_PROCESSES_OK)
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
return
self.deployedContainers = []
myCmd.close()
if fullStatus:
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
logging.info('\u001B[1m Undeploying OAI Object(s) PASS\u001B[0m')
else:
HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
logging.error('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m')
def StatsFromGenObject(self, HTML):
self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1]
# if the containers are running, recover the logs!
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
deployStatus = myCmd.run(cmd, timeout=30)
cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
anyLogs = False
for state in deployStatus.stdout.split('\n'):
res = re.search('Name|NAME|----------', state)
if res is not None:
continue
if len(state) == 0:
continue
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
if res is not None:
anyLogs = True
cmd += res.group('container_name') + ' '
message = ''
if anyLogs:
stats = myCmd.run(cmd, timeout=30)
for statLine in stats.stdout.split('\n'):
logging.debug(statLine)
message += statLine + '\n'
myCmd.close()
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
return success
def CheckAndAddRoute(self, svrName, ipAddr, userName, password):
logging.debug('Checking IP routing on ' + svrName)

View File

@@ -1,94 +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
# */
#---------------------------------------------------------------------
#
# Required Python Version
# Python 3.x
#
#---------------------------------------------------------------------
#USAGE:
# log=Log_Mgt(Username,IPAddress,Password,Path)
# log.LogRotation()
import logging
import re
import subprocess
import sshconnection
class Log_Mgt:
def __init__(self,Username, IPAddress,Password,Path):
self.Username=Username
self.IPAddress=IPAddress
self.Password=Password
self.path=Path
#-----------------$
#PRIVATE# Methods$
#-----------------$
def __CheckUsedSpace(self):
HOST=self.Username+'@'+self.IPAddress
COMMAND="df "+ self.path
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
s=result[1].decode('utf-8').rstrip()#result[1] is the second line with the results we are looking for
used=s.split()[4] #get 4th field ex: 70%
m = re.match('^(\d+)\%',used)
if m is not None:
return int(m.group(1))
def __RemoveOldest(self, days):
mySSH = sshconnection.SSHConnection()
mySSH.open(self.IPAddress, self.Username, self.Password)
COMMAND='echo ' + self.Password + ' | sudo -S find ' + self.path + ' -type f -mtime +' + str(days) + ' -delete'
mySSH.command(COMMAND,'\$',20)
mySSH.close()
#-----------------$
#PUBLIC Methods$
#-----------------$
def LogRotation(self):
doLoop = True
nbDays = 14
while doLoop and nbDays > 1:
used_space = self.__CheckUsedSpace() #avail space in target folder
if used_space > 80 :
logging.debug('\u001B[1;37;41m Used Disk (' + str(used_space) + '%) > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m')
logging.debug('\u001B[1;37;41m Removing Artifacts older than ' + str(nbDays) + ' days \u001B[0m')
self.__RemoveOldest(nbDays)
nbDays -= 1
else:
logging.debug('Used Disk (' + str(used_space) + '%) < 80%, on ' + self.Username+'@'+self.IPAddress +', no cleaning required')
doLoop = False

View File

@@ -25,30 +25,28 @@
#---------------------------------------------------------------------
#to use isfile
import os
import sys
import logging
#time.sleep
import time
import re
import subprocess
from datetime import datetime
import yaml
#for log rotation mgt
import cls_log_mgt
import cls_cmd
class Module_UE:
def __init__(self, module_name, filename="ci_infra.yaml"):
def __init__(self, module_name, node=None, filename="ci_infra.yaml"):
with open(filename, 'r') as f:
all_ues = yaml.load(f, Loader=yaml.FullLoader)
m = all_ues.get(module_name)
if m is None:
raise Exception(f'no such module name "{module_name}" in "{filename}"')
self.module_name = module_name
self.host = m['Host']
self.host = m['Host'] if m['Host'] != "%%current_host%%" else None
if node is None and self.host is None:
raise Exception(f'node not provided when needed')
elif node is not None and self.host is None:
self.host = node
self.cmd_dict = {
"attach": m.get('AttachScript'),
"detach": m.get('DetachScript'),
@@ -65,6 +63,8 @@ class Module_UE:
self.logStore = m.get('LogStore')
self.cmd_prefix = m.get('CmdPrefix')
self.runIperf3Server = m.get('RunIperf3Server', True)
self.namespace = m.get('Namespace')
self.cnPath = m.get('CNPath')
logging.info(f'initialized {self.module_name}@{self.host} from {filename}')
def __str__(self):
@@ -190,6 +190,12 @@ class Module_UE:
def getHost(self):
return self.host
def getNamespace(self):
return self.namespace
def getCNPath(self):
return self.cnPath
def getRunIperf3Server(self):
return self.runIperf3Server
@@ -198,35 +204,9 @@ class Module_UE:
def _enableTrace(self):
raise Exception("not implemented")
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
#delete old artifacts
mySSH.command('echo ' + ' ' + ' | sudo -S rm -rf ci_qlog','\$',5)
#start Trace, artifact is created in home dir
mySSH.command('echo $USER; nohup sudo -E QLog/QLog -s ci_qlog -f NR5G.cfg > /dev/null 2>&1 &','\$', 5)
mySSH.close()
def _disableTrace(self):
raise Exception("not implemented")
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
mySSH.command('echo ' + ' ' + ' | sudo -S killall --signal=SIGINT *QLog*', '\$',5)
mySSH.close()
def _logCollect(self):
raise Exception("not implemented")
mySSH = sshconnection.SSHConnection()
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
#archive qlog to USB stick in /media/usb-drive/ci_qlogs with datetime suffix
now=datetime.now()
now_string = now.strftime("%Y%m%d-%H%M")
source='ci_qlog'
destination= self.LogStore + '/ci_qlog_'+now_string+'.zip'
#qlog artifact is zipped into the target folder
mySSH.command('echo $USER; echo ' + ' ' + ' | nohup sudo -S zip -r '+destination+' '+source+' > /dev/null 2>&1 &','\$', 10)
mySSH.close()
#post action : log cleaning to make sure enough space is reserved for the next run
Log_Mgt=cls_log_mgt.Log_Mgt(self.HostUsername,self.HostIPAddress, self.HostPassword, self.LogStore)
return destination

64
ci-scripts/cls_native.py Normal file
View File

@@ -0,0 +1,64 @@
#/*
# * 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
# */
#---------------------------------------------------------------------
import logging
import re
import cls_cmd
import cls_oai_html
import constants as CONST
class Native():
def Build(test_case, HTML, host, directory, options):
logging.debug(f'Building on server: {host}')
HTML.testCase_id = test_case
with cls_cmd.getConnection(host) as ssh:
base = f"{directory}/cmake_targets"
ret = ssh.run(f"{base}/build_oai {options} > {base}/log/build_oai.log", timeout=900)
success = ret.returncode == 0
logs = ssh.run(f"cat {base}/log/build_oai.log", silent=True)
logging.debug(f"build finished with code {ret.returncode}, output:\n{logs.stdout}")
# create log directory, and copy build logs
target = f"{base}/build_log_{test_case}/"
ssh.run(f"mkdir -p {target}")
ssh.run(f"mv {base}/log/* {target}")
# check if build artifacts are there
# NOTE: build_oai should fail with exit code if it could not build, but it does not
build_dir = f"{base}/ran_build/build"
build_gnb = re.search('--gNB', options) is not None
if build_gnb:
success = success and ssh.run(f"ls {build_dir}/nr-softmodem").returncode == 0
build_enb = re.search('--eNB', options) is not None
if build_enb:
success = success and ssh.run(f"ls {build_dir}/lte-softmodem").returncode == 0
if success:
logging.info('\u001B[1m Building OAI Pass\u001B[0m')
HTML.CreateHtmlTestRow(options, 'OK', CONST.ALL_PROCESSES_OK)
else:
logging.error('\u001B[1m Building OAI Failed\u001B[0m')
HTML.CreateHtmlTestRow(options, 'KO', CONST.ALL_PROCESSES_OK)
return success

View File

@@ -31,14 +31,12 @@
#-----------------------------------------------------------
# Import
#-----------------------------------------------------------
import sys # arg
import re # reg
import fileinput
import logging
import os
import time
import subprocess
from multiprocessing import Process, Lock, SimpleQueue
import constants as CONST
@@ -65,10 +63,6 @@ class HTMLManagement():
self.htmlTabIcons = []
self.testXMLfiles = []
self.testUnstable = False
self.testMinStableId = '999999'
self.testStabilityPointReached = False
self.htmleNBFailureMsg = ''
self.htmlUEFailureMsg = ''
@@ -219,20 +213,13 @@ class HTMLManagement():
def CreateHtmlTabFooter(self, passStatus):
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
testOkEvenIfUnstable = False
if self.testUnstable and not passStatus:
if self.testStabilityPointReached or self.testMinStableId == '999999':
testOkEvenIfUnstable = True
self.htmlFile = open('test_results.html', 'a')
self.htmlFile.write(' <tr>\n')
self.htmlFile.write(' <th bgcolor = "#33CCFF" colspan="3">Final Tab Status</th>\n')
if passStatus:
self.htmlFile.write(' <th bgcolor = "green" colspan="3"><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>\n')
else:
if testOkEvenIfUnstable:
self.htmlFile.write(' <th bgcolor = "orange" colspan="3"><font color="white">KNOWN UNSTABLE SCENARIO <span class="glyphicon glyphicon-exclamation-sign"></span> </font></th>\n')
else:
self.htmlFile.write(' <th bgcolor = "red" colspan="3"><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
self.htmlFile.write(' <th bgcolor = "red" colspan="3"><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.write(' </table>\n')
self.htmlFile.write(' </div>\n')
@@ -242,10 +229,7 @@ class HTMLManagement():
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__//' test_results.html"
subprocess.run(cmd, shell=True)
else:
if testOkEvenIfUnstable:
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__/<span class=\"glyphicon glyphicon-exclamation-sign\"><\/span>/' test_results.html"
else:
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__/<span class=\"glyphicon glyphicon-remove\"><\/span>/' test_results.html"
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__/<span class=\"glyphicon glyphicon-remove\"><\/span>/' test_results.html"
subprocess.run(cmd, shell=True)
self.htmlFooterCreated = False
@@ -279,14 +263,6 @@ class HTMLManagement():
self.htmlFile.write('</html>\n')
self.htmlFile.close()
def CreateHtmlRetrySeparator(self, cntnumfails):
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
self.htmlFile = open('test_results.html', 'a')
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
self.htmlFile.write(' <td colspan="6"><b> ---- Try Run #' + str(cntnumfails) + ' ---- </b></td>\n')
self.htmlFile.write(' </tr>\n')
self.htmlFile.close()
def CreateHtmlTestRow(self, options, status, processesStatus, machine='eNB'):
if (self.htmlFooterCreated or (not self.htmlHeaderCreated)):
return
@@ -468,6 +444,8 @@ class HTMLManagement():
self.htmlFile.write(f' <td bgcolor = "lightgreen" >{status}</td>\n')
elif (str(status) == 'KO'):
self.htmlFile.write(f' <td bgcolor = "lightcoral" >{status}</td>\n')
elif str(status) == 'SKIP':
self.htmlFile.write(f' <td bgcolor = "lightgray" >{status}</td>\n')
else:
addOrangeBK = True
self.htmlFile.write(f' <td bgcolor = "orange" >{status}</td>\n')

File diff suppressed because it is too large Load Diff

View File

@@ -34,7 +34,6 @@ 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
@@ -52,7 +51,6 @@ class PhySim:
self.ranCommitID= ""
self.ranAllowMerge= ""
self.ranTargetBranch= ""
self.exitStatus=0
self.forced_workspace_cleanup=False
#private attributes
self.__workSpacePath=''
@@ -84,7 +82,7 @@ class PhySim:
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', [info])
return HTML
return True
def __CheckResults_LDPCt2Test(self,HTML,CONST,testcase_id):
thrs_KO = int(self.timethrs)
@@ -111,20 +109,19 @@ class PhySim:
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(f'mv {self.__runLogFile} {self.__runLogPath}/.')
return HTML
return False
#once parsed move the local logfile to its folder
os.system(f'mv {self.__runLogFile} {self.__runLogPath}/.')
if float(time) < thrs_KO:
success = float(time) < thrs_KO
if success:
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', [info])
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
return HTML
return success
def __CheckResults_NRulsimTest(self, HTML, CONST, testcase_id):
#retrieve run log file and store it locally
@@ -135,8 +132,7 @@ class PhySim:
error_msg = f'could not recover test result file {filename}'
logging.error(error_msg)
HTML.CreateHtmlTestRowQueue("could not recover results", 'KO', [error_msg])
self.exitStatus = 1
return HTML
return False
PUSCH_OK = False
with open(self.__runLogFile) as f:
@@ -152,8 +148,7 @@ class PhySim:
error_msg = 'error: no "PUSCH test OK"'
logging.error(error_msg)
HTML.CreateHtmlTestRowQueue(self.runargs, 'KO', 1, [error_msg])
self.exitStatus = 1
return HTML
return PUSCH_OK
def __CheckBuild_PhySim(self, HTML, CONST):
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
@@ -168,14 +163,11 @@ class PhySim:
with open(self.__buildLogFile) as f:
if 'BUILD SHOULD BE SUCCESSFUL' in f.read():
HTML.CreateHtmlTestRow(self.buildargs, 'OK', CONST.ALL_PROCESSES_OK, 'PhySim')
self.exitStatus=0
return HTML
return True
logging.error('\u001B[1m Building Physical Simulators Failed\u001B[0m')
HTML.CreateHtmlTestRow(self.buildargs, 'KO', CONST.ALL_PROCESSES_OK, 'LDPC')
HTML.CreateHtmlTabFooter(False)
#exitStatus=1 will do a sys.exit in main
self.exitStatus = 1
return HTML
return False
#-----------------$
@@ -226,10 +218,7 @@ class PhySim:
mySSH.command(f'./build_oai {self.buildargs} 2>&1 | tee {self.__buildLogFile}', '\$', 1500)
mySSH.close()
#check build status and update HTML object
lHTML = cls_oai_html.HTMLManagement()
lHTML=self.__CheckBuild_PhySim(htmlObj,constObj)
return lHTML
return __CheckBuild_PhySim(htmlObj,constObj)
def Run_CUDATest(self,htmlObj,constObj,testcase_id):
@@ -245,10 +234,7 @@ class PhySim:
#run and redirect the results to a log file
mySSH.command(self.__workSpacePath+'ran_build/build/ldpctest ' + self.runargs + ' >> '+self.__runLogFile, '\$', 30)
mySSH.close()
#return updated HTML to main
lHTML = cls_oai_html.HTMLManagement()
lHTML=self.__CheckResults_LDPCcudaTest(htmlObj,constObj,testcase_id)
return lHTML
return self.__CheckResults_LDPCcudaTest(htmlObj,constObj,testcase_id)
def Run_T2Test(self,htmlObj,constObj,testcase_id):
self.__workSpacePath = f'{self.eNBSourceCodePath}/cmake_targets/'
@@ -262,10 +248,7 @@ class PhySim:
#run and redirect the results to a log file
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_LDPCt2Test(htmlObj,constObj,testcase_id)
return lHTML
return self.__CheckResults_LDPCt2Test(htmlObj,constObj,testcase_id)
def Run_NRulsimTest(self, htmlObj, constObj, testcase_id):
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
@@ -276,6 +259,4 @@ class PhySim:
mySSH.command(f'cd {self.__workSpacePath}', '\$', 5)
mySSH.command(f'sudo {self.__workSpacePath}ran_build/build/nr_ulsim {self.runargs} > {self.__runLogFile} 2>&1', '\$', 30)
mySSH.close()
#return updated HTML to main
lHTML = self.__CheckResults_NRulsimTest(htmlObj, constObj, testcase_id)
return lHTML
return self.__CheckResults_NRulsimTest(htmlObj, constObj, testcase_id)

View File

@@ -65,7 +65,7 @@ class PhySim:
#PUBLIC Methods$
#-----------------$
def Deploy_PhySim(self, HTML, RAN):
def Deploy_PhySim(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
@@ -123,8 +123,7 @@ class PhySim:
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
RAN.prematureExit = True
return
return False
else:
logging.debug('\u001B[1m Login to OC Cluster Successfully\u001B[0m')
mySSH.command(f'oc project {ocProjectName}', '\$', 30)
@@ -133,8 +132,7 @@ class PhySim:
mySSH.command('oc logout', '\$', 30)
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL)
RAN.prematureExit = True
return
return False
else:
logging.debug(f'\u001B[1m Now using project {ocProjectName}\u001B[0m')
@@ -154,8 +152,7 @@ class PhySim:
mySSH.command('oc logout', '\$', 30)
mySSH.close()
self.AnalyzeLogFile_phySim()
RAN.prematureExit = True
return
return False
else:
logging.debug('\u001B[1m Deployed PhySim Successfully using helm chart\u001B[0m')
isRunning = False
@@ -166,7 +163,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) == 22:
if (running_count + completed_count) == 23:
logging.debug('\u001B[1m Running the physim test Scenarios\u001B[0m')
isRunning = True
podNames = re.findall('oai-[\S\d\w]+', mySSH.getBefore())
@@ -186,8 +183,7 @@ class PhySim:
mySSH.command('oc logout', '\$', 30)
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PHYSIM_DEPLOY_FAIL)
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
RAN.prematureExit = True
return
return False
# Waiting to complete the running test
count = 0
isFinished = False
@@ -214,7 +210,7 @@ class PhySim:
mySSH.command('for pod in $(oc get pods | tail -n +2 | awk \'{print $1}\'); do oc describe pod $pod >> cmake_targets/log/physim_pods_summary.txt; done', '\$', 10)
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/log/physim_test.txt', '.')
try:
listLogFiles = subprocess.check_output('egrep --colour=never "Execution Log file|Linux oai-" physim_test.txt', shell=True, universal_newlines=True)
listLogFiles = subprocess.check_output('grep -E --colour=never "Execution Log file|Linux oai-" physim_test.txt', shell=True, universal_newlines=True)
for line in listLogFiles.split('\n'):
res1 = re.search('Linux (?P<pod>oai-[a-zA-Z0-9\-]+) ', str(line))
res2 = re.search('Execution Log file = (?P<name>[a-zA-Z0-9\-\/\.\_\+]+)', str(line))
@@ -248,13 +244,13 @@ class PhySim:
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
logging.info('\u001B[1m Physical Simulator Pass\u001B[0m')
else:
RAN.prematureExit = True
if isFinished:
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
else:
HTML.CreateHtmlTestRow('Some test(s) timed-out!', 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
logging.error('\u001B[1m Physical Simulator Fail\u001B[0m')
return self.testStatus
def AnalyzeLogFile_phySim(self):
mySSH = SSH.SSHConnection()

View File

@@ -36,8 +36,6 @@ import re # reg
import logging
import os
from pathlib import Path
import time
from multiprocessing import Process, Lock, SimpleQueue
#-----------------------------------------------------------
# OAI Testing modules
@@ -45,7 +43,6 @@ from multiprocessing import Process, Lock, SimpleQueue
import helpreadme as HELP
import constants as CONST
import cls_cmd
from cls_containerize import CreateWorkspace
#-----------------------------------------------------------
# Class Declaration
@@ -105,8 +102,7 @@ class StaticCodeAnalysis():
else:
full_ran_repo_name = self.ranRepository + '.git'
CreateWorkspace(cmd, lSourcePath, full_ran_repo_name, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
cmd.cd(lSourcePath)
logDir = f'{lSourcePath}/cmake_targets/build_log_{self.testCase_id}'
cmd.run(f'mkdir -p {logDir}')
cmd.run('docker image rm oai-cppcheck:bionic oai-cppcheck:focal')
@@ -215,12 +211,12 @@ class StaticCodeAnalysis():
HTML.CreateHtmlTestRowCppCheckResults(CCR)
logging.info('\u001B[1m Static Code Analysis Pass\u001B[0m')
return 0
return True
def LicenceAndFormattingCheck(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
# Workspace is no longer recreated from scratch.
# It implies that this method shall be called last within a build pipeline
# where workspace is already created
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
lPassWord = self.eNBPassword
@@ -232,14 +228,7 @@ class StaticCodeAnalysis():
logging.debug('Building on server: ' + lIpAddr)
cmd = cls_cmd.getConnection(lIpAddr)
self.testCase_id = HTML.testCase_id
# on RedHat/CentOS .git extension is mandatory
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
if result is not None:
full_ran_repo_name = self.ranRepository.replace('git/', 'git')
else:
full_ran_repo_name = self.ranRepository + '.git'
CreateWorkspace(cmd, lSourcePath, full_ran_repo_name, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
check_options = ''
if self.ranAllowMerge:
check_options = f'--build-arg MERGE_REQUEST=true --build-arg SRC_BRANCH={self.ranBranch}'
@@ -252,7 +241,7 @@ class StaticCodeAnalysis():
logDir = f'{lSourcePath}/cmake_targets/build_log_{self.testCase_id}'
cmd.run(f'mkdir -p {logDir}')
cmd.run('docker image rm oai-formatting-check:latest')
cmd.run(f'docker build --target oai-formatting-check --tag oai-formatting-check:latest {check_options} --file {lSourcePath}/ci-scripts/docker/Dockerfile.formatting.bionic . > {logDir}/oai-formatting-check.txt 2>&1')
cmd.run(f'docker build --target oai-formatting-check --tag oai-formatting-check:latest {check_options} --file {lSourcePath}/ci-scripts/docker/Dockerfile.formatting.bionic {lSourcePath} > {logDir}/oai-formatting-check.txt 2>&1')
cmd.run('docker image rm oai-formatting-check:latest')
cmd.run('docker image prune --force')
@@ -364,4 +353,4 @@ class StaticCodeAnalysis():
HTML.htmleNBFailureMsg = 'Could not access oai-formatting-check.txt file'
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
return finalStatus
return finalStatus == 0

View File

@@ -0,0 +1,11 @@
# Colosseum Automated Testing
These scripts are used by a Jenkins [job](../Jenkinsfile-colosseum) to trigger automated testing of OpenAirInterface (OAI) gNB and softUE on the [Colosseum](https://www.northeastern.edu/colosseum/) Open RAN digital twin.
Once a test is triggered, a new OAI LXC container at the specified OAI version will be built on Colosseum (if not already present), and gNB and softUE will perform TCP uplink and downlink connectivity test via the iPerf [tool](https://iperf.fr/).
The OAI branch to build and test can be specified through the `eNB_Branch` parameter passed through Jenkins (`eNB_TargetBranch`, which defaults to the `develop` branch, is used if `eNB_Branch` is not specified).
The Colosseum network scenario to test is specified through the `Colosseum_Rf_Scenario` Jenkins parameter, which defaults to a base Colosseum scenario without artificially added channel effects (e.g., only hardware impariments of software-defined radios, cables, and channel emulator).
Once the test ends, results are analyzed through the OAI automated test report generation tool available [here](https://github.com/ztouchnetworks/openairinterface-automated-test-reports), which builds a test report from the iPerf and OAI logs, and marks the test as successful or unsuccessful.
Results from successful tests are saved in history files and used to compare more recent tests.
A test is considered successful if the downlink throughput achieved during the test is greather than or equal to the average of the test history, which spans successful test executed since May 2024.
This is used to identify possible regressions of OAI runs executed on the Colosseum testbed.

View File

@@ -1,5 +1,4 @@
#!/bin/bash
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
@@ -21,34 +20,14 @@
# * contact@openairinterface.org
# */
# file init_nas_nos1
# brief loads the nasmesh module and sets up the radio bearers (used to provide ip interface without S1 interface)
# author Florian Kaltenberger
#
#######################################
set -x
load_module() {
mod_name=${1##*/}
mod_name=${mod_name%.*}
if awk "/$mod_name/ {found=1 ;exit} END {if (found!=1) exit 1}" /proc/modules
then
echo "module $mod_name already loaded: I remove it first"
sudo rmmod $mod_name
fi
echo loading $mod_name
sudo insmod $1
}
RESULT_FILE=$1
load_module $OPENAIR_DIR/cmake_targets/ran_build/build/nasmesh.ko
grep -A 1 "Final Status" ${RESULT_FILE} | grep "PASS"
if [ "$1" = "eNB" ]; then
echo "bring up oai0 interface for enb"
sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
$OPENAIR_DIR/cmake_targets/ran_build/build/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 1
if [ "$?" = 0 ]; then
echo '{"status": "successful"}' > results.json
else
if [ "$1" = "UE" ]; then
echo "bring up oai0 interface for UE"
sudo ifconfig oai0 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255
$OPENAIR_DIR/cmake_targets/ran_build/build/rb_tool -a -c0 -i0 -z0 -s 10.0.1.2 -t 10.0.1.1 -r 1
fi
fi
echo '{"status": "failed"}' > results.json
fi

View File

@@ -0,0 +1,38 @@
#!/bin/bash
#/*
# * 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
# */
set -eu
AWX_API_URL=https://10.100.1.253
AWX_JOB_EVENT_QUERY=job_events/?search=results_url
COL_USER=$1
COL_PASS=$2
AWX_API_JOB_PATH=$(jq -r '.url' launch.json)
# get result url and download test results
curl -s -f -k -u ${COL_USER}:${COL_PASS} -X GET ${AWX_API_URL}${AWX_API_JOB_PATH}${AWX_JOB_EVENT_QUERY} > result.json
set -x
RESULT=$(jq -r '.results[0].event_data.res.ansible_facts.results_url' result.json)
wget -q -O - ${RESULT} > results.tar.xz

View File

@@ -0,0 +1,53 @@
#!/bin/bash
#/*
# * 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
# */
set -eu
AWX_API_URL=https://10.100.1.253
AWX_JOB_ID=16
AWX_API_LAUNCH_PATH=/api/v2/job_templates/${AWX_JOB_ID}/launch/
COL_USER=$1
COL_PASS=$2
JENKINS_JOB_ID=$3
GIT_REPOSITORY=$4
GIT_BRANCH=$5
COLOSSEUM_RF_SCENARIO=$6
JENKINS_JOB_URL=$7
# assemble data to send
CURL_DATA=$(cat <<-END | jq -c .
{
"extra_vars":
{
"oai_repo": "${GIT_REPOSITORY}",
"oai_branch": "${GIT_BRANCH}",
"colosseum_rf_scenario": "${COLOSSEUM_RF_SCENARIO}",
"jenkins_job_id": "${JENKINS_JOB_ID}",
"jenkins_job_url": "${JENKINS_JOB_URL}"
}
}
END
)
# launch job
curl -s -f -k -u ${COL_USER}:${COL_PASS} -X POST -H "Content-Type: application/json" -d ${CURL_DATA} ${AWX_API_URL}${AWX_API_LAUNCH_PATH} > launch.json

View File

@@ -0,0 +1,28 @@
#!/bin/bash
#/*
# * 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
# */
set -eu
# sets final exit code and thus jenkins pass or fail
STATUS=$(jq -r '.status' results.json)
echo "job status: ${STATUS}"
[ "${STATUS}" = "successful" ]

View File

@@ -0,0 +1,47 @@
#!/bin/bash
#/*
# * 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
# */
set -xeu
AWX_API_URL=https://10.100.1.253
AWX_MAX_API_CHECKS=120
COL_USER=$1
COL_PASS=$2
AWX_API_JOB_PATH=$(jq -r '.url' launch.json)
# wait for job to complete
for ((try = 1; try <= ${AWX_MAX_API_CHECKS}; try++)); do
set +x
curl -s -f -k -u ${COL_USER}:${COL_PASS} -X GET ${AWX_API_URL}${AWX_API_JOB_PATH} > status.json
set -x
FINISHED=$(jq -r '.finished' status.json)
[ "${FINISHED}" = "null" ] || break
sleep 60
done
[ $try != $AWX_MAX_API_CHECKS ] || echo "WARNING: stopped retrying after $AWX_MAX_API_CHECKS times; timed out?"
echo "AWX job completed $FINISHED"

View File

@@ -228,7 +228,7 @@ RUs = (
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
att_rx = 6;
eNB_instances = [0];
}
);

View File

@@ -191,7 +191,7 @@ RUs = (
nb_tx = 1
nb_rx = 1
att_tx = 6
att_rx = 6;
att_rx = 12;
bands = [38];
max_pdschReferenceSignalPower = -27;
max_rxgain = 125;

View File

@@ -191,7 +191,7 @@ RUs = (
nb_tx = 1
nb_rx = 1
att_tx = 6
att_rx = 6;
att_rx = 12;
bands = [38];
max_pdschReferenceSignalPower = -27;
max_rxgain = 125;

View File

@@ -224,7 +224,7 @@ RUs =
nb_tx = 1
nb_rx = 1
att_tx = 3
att_rx = 0;
att_rx = 6;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 115;

View File

@@ -224,7 +224,7 @@ RUs =
nb_tx = 1
nb_rx = 1
att_tx = 3
att_rx = 0;
att_rx = 6;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 115;

View File

@@ -224,7 +224,7 @@ RUs =
nb_tx = 1
nb_rx = 1
att_tx = 3
att_rx = 0;
att_rx = 6;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 115;

View File

@@ -224,7 +224,7 @@ RUs =
nb_tx = 1
nb_rx = 1
att_tx = 3
att_rx = 0;
att_rx = 6;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 115;

View File

@@ -224,7 +224,7 @@ RUs =
nb_tx = 1
nb_rx = 1
att_tx = 3
att_rx = 0;
att_rx = 6;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 115;

View File

@@ -224,7 +224,7 @@ RUs =
nb_tx = 1
nb_rx = 1
att_tx = 3
att_rx = 0;
att_rx = 6;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 115;

View File

@@ -116,9 +116,7 @@ gNBs =
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
@@ -200,20 +198,10 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator: {
serveraddr = "server";

View File

@@ -118,10 +118,9 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -70;
n_TimingAdvanceOffset = 0;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
# TimingAdvanceOffset_n25600
n_TimingAdvanceOffset = 1;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
@@ -196,20 +195,10 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 108;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
log_config : {
global_log_level = "info";

View File

@@ -116,9 +116,7 @@ gNBs =
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
@@ -200,20 +198,10 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator: {
serveraddr = "server";
serverport = 4043;

View File

@@ -22,8 +22,9 @@ gNBs =
////////// Physical parameters:
min_rxtxtime = 6;
min_rxtxtime = 2;
do_CSIRS = 1;
do_SRS = 1;
servingCellConfigCommon = (
{
@@ -117,9 +118,7 @@ gNBs =
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
@@ -185,7 +184,7 @@ L1s = (
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 100;
pucch0_dtx_threshold = 30;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
@@ -195,26 +194,16 @@ RUs = (
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
att_tx = 10;
att_rx = 10;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
log_config : {
global_log_level = "info";

View File

@@ -30,6 +30,7 @@ gNBs =
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pdsch_AntennaPorts_N1 = 2;
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 0;
@@ -143,9 +144,7 @@ gNBs =
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
@@ -168,10 +167,10 @@ gNBs =
# 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;
dl_UL_TransmissionPeriodicity = 6; #5;
nrofDownlinkSlots = 6; #3;
nrofDownlinkSymbols = 10; #6;
nrofUplinkSlots = 3; #1;
nrofUplinkSymbols = 0;
ssPBCH_BlockPower = -25;
@@ -195,8 +194,8 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.130";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.130";
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
};

View File

@@ -117,9 +117,7 @@ gNBs =
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
@@ -189,15 +187,6 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
clock_src = "external";
# if_freq = 3700000000L;
@@ -209,14 +198,6 @@ 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

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 = 4;
@@ -115,9 +115,7 @@ gNBs =
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
@@ -200,15 +198,6 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 50;
eNB_instances = [0];
## beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
## beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
#bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
}
);
@@ -217,14 +206,6 @@ 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

View File

@@ -115,9 +115,7 @@ gNBs =
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
@@ -200,27 +198,10 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 50;
eNB_instances = [0];
## beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
## beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
#bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
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

View File

@@ -115,9 +115,7 @@ gNBs =
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
@@ -193,16 +191,9 @@ RUs = ({
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

View File

@@ -117,9 +117,7 @@ gNBs =
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
@@ -195,16 +193,9 @@ RUs = ({
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

View File

@@ -111,9 +111,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1; #0x80;
# ssb_periodicityServingCell
@@ -215,14 +213,6 @@ RUs = (
}
);
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

View File

@@ -116,9 +116,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1; #0x80;
# ssb_periodicityServingCell
@@ -213,21 +211,12 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
bf_weights = [0x00007fff, 0x00007fff];
#clock_src = "external";
sf_extension = 0
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -23,7 +23,8 @@ gNBs =
sib1_tda = 15;
min_rxtxtime = 6;
beam_weights = [0]; // single SSB -> one analog beam
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -116,9 +117,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 3;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
@@ -179,6 +178,9 @@ MACRLCs = ({
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
set_analog_beamforming = 1;
beam_duration = 1;
beams_per_period = 1;
});
L1s = (

View File

@@ -113,9 +113,7 @@ gNBs =
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
@@ -205,20 +203,10 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{

View File

@@ -0,0 +1,273 @@
Active_gNBs = ( "5G-GOA-gNB");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "5G-GOA-gNB";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
nr_cellid = 12345678L;
////////// Physical parameters:
sib1_tda = 5;
min_rxtxtime = 6;
disable_harq = 1;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 2150.43 MHz + 14 PRBs@15kHz SCS (same as initial BWP), points to Subcarrier 0 of RB#10 of SSB block
absoluteFrequencySSB = 430590;
dl_frequencyBand = 66;
# this is 2150.43 MHz
dl_absoluteFrequencyPointA = 430086;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 0;
dl_carrierBandwidth = 25;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=25 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 6600;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 0;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 2;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 66;
# this is 1750.43 MHz
ul_absoluteFrequencyPointA = 350086;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 0;
ul_carrierBandwidth = 25;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 6600;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 0;
#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 = 0;
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0;
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 0;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 0;
# 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;
#ext2
#ntn_Config_r17
cellSpecificKoffset_r17 = 478;
}
);
TIMERS :
{
sr_ProhibitTimer = 0;
sr_TransMax = 64;
sr_ProhibitTimer_v1700 = 512;
t300 = 2000;
t301 = 2000;
t319 = 2000;
};
# ------- 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 = "192.168.71.140/26";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/26";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 150;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes";
nb_tx = 1;
nb_rx = 1;
att_tx = 0;
att_rx = 0;
bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
sf_extension = 0;
eNB_instances = [0];
sdr_addrs = "type=x300";
clock_src = "internal";
# if_freq = 3700000000L;
# if_offset = 1000000;
}
);
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_DISABLE";
}
);
rfsimulator :
{
serveraddr = "server";
serverport = 4043;
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# 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

@@ -114,9 +114,7 @@ gNBs =
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
@@ -205,14 +203,6 @@ RUs = (
max_rxgain = 114;
sf_extension = 0;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs = "type=x300";
clock_src = "internal";
# if_freq = 3700000000L;
@@ -220,14 +210,6 @@ RUs = (
}
);
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_DISABLE";
}
);
rfsimulator :
{

View File

@@ -120,9 +120,7 @@ gNBs =
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
@@ -212,10 +210,8 @@ RUs = (
att_rx = 0;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 72;
max_rxgain = 75;
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"
@@ -226,17 +222,17 @@ 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" );
ciphering_algorithms = ( "nea1", "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" );
integrity_algorithms = ( "nia1", "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";
drb_integrity = "yes";
};
log_config :

View File

@@ -0,0 +1,293 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
//nr_cellid = 12345678L;
nr_cellid = 1;
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pdsch_AntennaPorts_N1 = 1;
maxMIMO_layers = 2;
pusch_AntennaPorts = 4;
do_CSIRS = 1;
do_SRS = 0 ;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3450.72 MHz (center frequency)
absoluteFrequencySSB = 666624;
dl_frequencyBand = 77;
# this is 3401.58 MHz
dl_absoluteFrequencyPointA = 663348;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
#initialDownlinkBWP
#genericParameters
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
#
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 77;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 23;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 1099;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 159;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 0;
preambleReceivedTargetPower = -100;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 7;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 2;
#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,
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
msg3_DeltaPreamble = 2;
p0_NominalWithGrant = -100;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 0;
p0_nominal = -96;
ssb_PositionsInBurst_Bitmap = 0x1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 5;
nrofDownlinkSlots = 3;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 1;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -10;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ({ ipv4 = "172.21.6.103"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.18.20";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.18.20";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 180;
pucch_TargetSNRx10 = 230;
ul_bler_target_upper=.35;
ul_bler_target_lower=.15;
pusch_FailureThres = 100;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 130
pucch0_dtx_threshold = 80;
pusch_dtx_threshold = -100;
tx_amp_backoff_dB = 3;
L1_rx_thread_core = 3;
L1_tx_thread_core = 4;
phase_compensation = 0; # needs to match O-RU configuration
}
);
RUs = (
{
local_rf = "no";
nb_tx = 4;
nb_rx = 4;
att_tx = 0
att_rx = 0;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
sf_extension = 0;
eNB_instances = [0];
ru_thread_core = 5;
sl_ahead = 5;
clock_src = "internal";
tr_preference = "raw_if4p5"; # important: activate FHI7.2
do_precoding = 0; # needs to match O-RU configuration
}
);
rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config : {
global_log_level = "info";
hw_log_level = "info";
phy_log_level = "info";
mac_log_level = "info";
rlc_log_level = "info";
pdcp_log_level = "info";
rrc_log_level = "info";
ngap_log_level = "info";
f1ap_log_level = "info";
};
fhi_72 = {
dpdk_devices = ("0000:c3:11.0", "0000:c3:11.1");
system_core = 0;
io_core = 1;
worker_cores = (2);
du_addr = ("76:76:64:6e:00:01", "76:76:64:6e:00:01");
ru_addr = ("98:ae:71:01:c5:eb", "98:ae:71:01:c5:eb");
mtu = 9216; # check if xran uses this properly
fh_config = ({
Tadv_cp_dl = 125;
T2a_cp_dl = (285, 429); # (min, max)
T2a_cp_ul = (285, 429); # (min, max)
T2a_up = (125, 428); # (min, max)
Ta3 = (130, 170); # (min, max)
T1a_cp_dl = (285, 470); # (min, max)
T1a_cp_ul = (285, 429); # (min, max)
T1a_up = (125, 350); # (min, max)
Ta4 = (110, 180); # (min, max)
ru_config = {
iq_width = 9;
iq_width_prach = 9;
};
prach_config = {
eAxC_offset = 4;
};
});
};

View File

@@ -23,7 +23,6 @@ gNBs = (
pusch_AntennaPorts = 2;
do_CSIRS = 1;
do_SRS = 1;
ul_prbblacklist = "135,136,137,138"
servingCellConfigCommon = (
{
@@ -127,10 +126,6 @@ gNBs = (
# 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
@@ -181,8 +176,8 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
pusch_TargetSNRx10 = 270;
pucch_TargetSNRx10 = 270;
pusch_FailureThres = 1000;
ulsch_max_frame_inactivity = 0;
ul_max_mcs = 25;
@@ -204,14 +199,12 @@ RUs = (
local_rf = "yes"
nb_tx = 2;
nb_rx = 2;
att_tx = 12;
att_tx = 15;
att_rx = 0;
bands = [77];
max_pdschReferenceSignalPower = -27;
max_rxgain = 72;
max_rxgain = 71;
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"
}

View File

@@ -111,9 +111,7 @@ gNBs =
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

View File

@@ -124,9 +124,7 @@ gNBs =
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
@@ -213,8 +211,6 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 65;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
sf_extension = 0
sdr_addrs = "addr=192.168.80.52,clock_source=internal,time_source=internal"
}

View File

@@ -118,9 +118,7 @@ gNBs =
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
@@ -207,27 +205,11 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sf_extension = 0
sdr_addrs = "serial=XXXXXXX"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator: {
serveraddr = "server";

View File

@@ -120,9 +120,7 @@ gNBs =
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
@@ -268,19 +266,9 @@ RUs = ({
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
});
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator: {
serveraddr = "server";

View File

@@ -0,0 +1,200 @@
Active_gNBs:
- gnb-rfsim
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity: none
gNBs:
##### Identification parameters:
- gNB_ID: 0xe00
gNB_name: gnb-rfsim
tracking_area_code: 1
plmn_list:
- mcc: 208
mnc: 99
mnc_length: 2
snssaiList:
- sst: 1
sd: 0xffffff
nr_cellid: 12345678
##### Physical parameters:
min_rxtxtime: 6
servingCellConfigCommon:
#spCellConfigCommon
- physCellId: 0
# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
absoluteFrequencySSB: 621312
# this is 3300.60 MHz
dl_absoluteFrequencyPointA: 620040
#scs-SpecificCarrierList
dl_offstToCarrier: 0
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing: 1
dl_carrierBandwidth: 106
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=106 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth: 28875
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing: 1
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero: 11
initialDLBWPsearchSpaceZero: 0
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand: 78
#scs-SpecificCarrierList
ul_offstToCarrier: 0
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing: 1
ul_carrierBandwidth: 106
pMax: 20
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth: 28875
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing: 1
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex: 98
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM: 0
prach_msg1_FrequencyStart: 0
zeroCorrelationZoneConfig: 12
preambleReceivedTargetPower: -104
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax: 6
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep: 1
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow: 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_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:
SCTP_INSTREAMS: 2
SCTP_OUTSTREAMS: 2
##### AMF parameters:
amf_ip_address:
- ipv4: 192.168.71.132
NETWORK_INTERFACES:
GNB_IPV4_ADDRESS_FOR_NG_AMF: 192.168.71.140
GNB_IPV4_ADDRESS_FOR_NGU: 192.168.71.140
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
L1s:
- num_cc: 1
tr_n_preference: local_mac
prach_dtx_threshold: 200
# pucch0_dtx_threshold = 150;
RUs:
- local_rf: yes
nb_tx: 1
nb_rx: 1
att_tx: 0
att_rx: 0
bands: [78]
max_pdschReferenceSignalPower: -27
max_rxgain: 75
eNB_instances: [0]
sf_extension: 0
sdr_addrs: serial=XXXXXXX
rfsimulator:
serveraddr: server
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

@@ -117,9 +117,7 @@ gNBs =
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
@@ -206,27 +204,11 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 68;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sf_extension = 0
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -110,9 +110,7 @@ gNBs =
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
@@ -177,7 +175,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ul_max_mcs = 9;
}
);
@@ -186,7 +183,7 @@ L1s = (
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 100;
pucch0_dtx_threshold = 30;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
@@ -196,14 +193,12 @@ RUs = (
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 14;
att_rx = 14;
att_tx = 10;
att_rx = 10;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);

View File

@@ -130,9 +130,7 @@ gNBs =
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
@@ -219,28 +217,12 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 68;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sf_extension = 0
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
sl_ahead = 5;
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -131,9 +131,7 @@ gNBs =
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
@@ -220,27 +218,11 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sf_extension = 0
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -112,9 +112,7 @@ gNBs =
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
@@ -205,8 +203,6 @@ RUs = (
max_rxgain = 114;
sf_extension = 0;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
@@ -215,14 +211,6 @@ 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_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -0,0 +1,292 @@
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
nr_cellid = 1;
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pdsch_AntennaPorts_N1 = 1;
maxMIMO_layers = 2;
pusch_AntennaPorts = 4;
do_CSIRS = 1;
do_SRS = 0 ;
sib1_tda = 15;
# force_UL256qam_off = 1;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# n_TimingAdvanceOffset = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3450.72 MHz (center frequency)
absoluteFrequencySSB = 623328;
dl_frequencyBand = 78;
# this is 3401.58 MHz
dl_absoluteFrequencyPointA = 620052;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
#initialDownlinkBWP
#genericParameters
initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1
#
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 23;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 1099;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 151;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 0;
preambleReceivedTargetPower = -100;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 8;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 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,
# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB
msg3_DeltaPreamble = 2;
p0_NominalWithGrant = -96;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 0;
p0_nominal = -96;
ssb_PositionsInBurst_Bitmap = 0x1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -15;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ({ ipv4 = "172.21.6.103"; });
NETWORK_INTERFACES :
{
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.18.20";
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.18.20";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 100;
pucch_TargetSNRx10 = 200;
dl_bler_target_upper=.35;
dl_bler_target_lower=.15;
ul_bler_target_upper=.35;
ul_bler_target_lower=.15;
pusch_FailureThres = 1000;
ul_max_mcs = 28;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 90;
pucch0_dtx_threshold = 80;
pusch_dtx_threshold = 10;
max_ldpc_iterations = 15;
tx_amp_backoff_dB = 12; # needs to match O-RU configuration
L1_rx_thread_core = 3;
L1_tx_thread_core = 4;
phase_compensation = 0; # needs to match O-RU configuration
}
);
RUs = (
{
local_rf = "no";
nb_tx = 4;
nb_rx = 4;
att_tx = 0
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
sf_extension = 0;
eNB_instances = [0];
ru_thread_core = 5;
sl_ahead = 10;
tr_preference = "raw_if4p5"; # important: activate FHI7.2
do_precoding = 0; # needs to match O-RU configuration
}
);
security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="info";
f1ap_log_level ="info";
};
fhi_72 = {
dpdk_devices = ("0000:c3:11.0", "0000:c3:11.1");
system_core = 0;
io_core = 1;
worker_cores = (2);
du_addr = ("00:11:22:33:44:66", "00:11:22:33:44:67");
ru_addr = ("70:b3:d5:e1:5b:81", "70:b3:d5:e1:5b:81");
mtu = 9216;
file_prefix = "fhi_72";
fh_config = ({
Tadv_cp_dl = 125;
T2a_cp_dl = (259, 500);
T2a_cp_ul = (25, 500);
T2a_up = (134, 375);
Ta3 = (152, 160);
T1a_cp_dl = (419, 470);
T1a_cp_ul = (285, 336);
T1a_up = (294, 345);
Ta4 = (0, 200);
ru_config = {
iq_width = 9;
iq_width_prach = 9;
};
prach_config = {
eAxC_offset = 4;
};
});
};

View File

@@ -32,20 +32,20 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
absoluteFrequencySSB = 621312;
absoluteFrequencySSB = 630048;
dl_frequencyBand = 78;
# this is 3300.60 MHz
dl_absoluteFrequencyPointA = 620040;
dl_absoluteFrequencyPointA = 626772;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
dl_carrierBandwidth = 273;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
initialDLBWPlocationAndBandwidth = 1099; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
@@ -61,11 +61,11 @@ gNBs =
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
ul_carrierBandwidth = 273;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
initialULBWPlocationAndBandwidth = 1099;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
@@ -115,9 +115,7 @@ gNBs =
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
@@ -140,10 +138,10 @@ gNBs =
# 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;
dl_UL_TransmissionPeriodicity = 5;
nrofDownlinkSlots = 3;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSlots = 1;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
@@ -179,9 +177,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
#pusch_TargetSNRx10 = 150;
#pucch_TargetSNRx10 = 200;
dl_max_mcs = 16; # there are retransmissions if more
}
);
@@ -190,7 +185,6 @@ L1s = (
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
#pucch0_dtx_threshold = 120;
}
);
@@ -205,21 +199,11 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
#clock_src = "internal";
sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{

View File

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

View File

@@ -21,10 +21,10 @@ gNBs =
nr_cellid = 12345678L
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2;
pdsch_AntennaPorts_XP = 1;
pusch_AntennaPorts = 1;
do_CSIRS = 1;
do_SRS = 1;
do_SRS = 0;
servingCellConfigCommon = (
{
@@ -34,11 +34,11 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# this is 3410.4 MHz => 301 REs from PointA 25 PRBs + 1 RE
absoluteFrequencySSB = 630048;
# this is 3469.44 MHz => 301 REs from PointA 25 PRBs + 1 RE
absoluteFrequencySSB = 631296;
dl_frequencyBand = 78;
# this is 3410.4 - (51*12*30e-3/2) = 3401.22 MHz
dl_absoluteFrequencyPointA = 629436;
# this is 3469.44 - (51*12*30e-3/2) = 3460.26 MHz
dl_absoluteFrequencyPointA = 630684;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
@@ -119,9 +119,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -96;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
@@ -209,8 +207,8 @@ RUs = (
remote_portd = 52183;
local_rf = "no"
tr_preference = "udp_ecpri_if5"
nb_tx = 2
nb_rx = 2
nb_tx = 1
nb_rx = 1
att_tx = 18
att_rx = 0;
num_tp_cores = 4;
@@ -221,25 +219,9 @@ RUs = (
eNB_instances = [0];
bands = [78];
sl_ahead = 5;
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -110,9 +110,7 @@ gNBs =
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
@@ -201,20 +199,10 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -62,12 +62,12 @@ nr_measurement_configuration = {
};
A3 = ({
cell_id = -1; #Default
physCellId = -1; #Default
offset = 10;
hysteresis = 0;
timeToTrigger = 1
}, {
cell_id = 2;
physCellId = 2;
offset = 5;
hysteresis = 1;
timeToTrigger = 2

View File

@@ -0,0 +1,28 @@
uicc0:
imsi: 208990100001100
key: fec86ba6eb707ed08905757b1bb44b8f
opc: C42449363BBAD02B66D16BC975D77CC1
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:
- model_name: rfsimu_channel_enB0
type: AWGN
ploss_dB: 20
noise_power_dB: -4
forgetfact: 0
offset: 0
ds_tdl: 0
- model_name: rfsimu_channel_ue0
type: AWGN
ploss_dB: 20
nose_power_dB: -2
forgetfact: 0
offset: 0
ds_tdl: 0

View File

@@ -118,9 +118,7 @@ gNBs =
hoppingId = 40;
#p0_nominal = -90;
p0_nominal = -118;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1; #0x80;
# ssb_periodicityServingCell

View File

@@ -116,9 +116,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1; #0x80;
# ssb_periodicityServingCell

View File

@@ -114,9 +114,7 @@ gNBs =
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

View File

@@ -115,9 +115,7 @@ gNBs =
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

View File

@@ -130,10 +130,8 @@ gNBs =
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_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
@@ -219,15 +217,6 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);

View File

@@ -127,9 +127,7 @@ gNBs =
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
@@ -215,15 +213,6 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);

View File

@@ -135,9 +135,7 @@ gNBs =
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
@@ -223,27 +221,11 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sf_extension = 0
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -110,9 +110,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1; #0x80;
# ssb_periodicityServingCell
@@ -214,14 +212,6 @@ RUs = (
}
);
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

View File

@@ -115,9 +115,7 @@ gNBs =
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1; #0x80;
# ssb_periodicityServingCell
@@ -218,15 +216,6 @@ RUs = (
}
);
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";
//parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = {
# preferred ciphering algorithms

View File

@@ -113,9 +113,7 @@ gNBs =
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
@@ -205,20 +203,10 @@ RUs = (
max_pdschReferenceSignalPower = -27;
max_rxgain = 75;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{

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