Compare commits

..

262 Commits

Author SHA1 Message Date
Victor Souza
d2f69a57a2 Update iab_info_management.h 2024-10-28 17:24:52 +00:00
Victor Souza
6477338da3 Update iab_info_management.h 2024-10-28 17:13:30 +00:00
Victor Souza
9512843137 Update iab_info_management.h 2024-10-28 17:09:32 +00:00
Victor Souza
fbe7e6b731 backup-checkpoint 2024-07-20 13:14:33 +01:00
Victor Souza
e40b128f3f safety checkpoint 2024-07-15 14:09:40 +01:00
Victor Souza
c4d96c8bfd added more IAB information support for the CU 2024-06-24 23:48:33 +01:00
Victor Souza
8fe9df7bf3 Added IAB information to RAN CONTEXT and implemented simple BAP Address attribution for donor-du 2024-06-12 23:47:04 +01:00
Victor Souza
06dd13d348 BAP layer init and BAP entity init (needs cleaning) 2024-05-20 13:26:55 +02:00
Victor Souza
070ae03629 BAP layer initialization on DU 2024-05-18 20:40:48 +02:00
Victor Souza
f6b422989a BAPAddress being traded during F1_SETUP_REQUEST and F1_SETUP_RESPONSE 2024-05-17 20:10:27 +02:00
Victor Souza
b1bb36a340 added bap_address support for du_gnb.conf type files and added new gNB node type (ngran_gNB_DU_IAB) 2024-05-14 16:25:27 +02:00
Victor Souza
2dc0a8d75c Most important BH rlc channel setup messages implemented 2024-05-13 16:36:45 +02:00
Victor Souza
0d56b3ce43 UEContextModificationResponse code compiles but doesn't work 2024-05-07 15:40:55 +02:00
Victor Souza
1d3c539ce2 bh rlc channel development checkpoint 2024-05-06 11:09:59 +02:00
Victor Souza
bf02d4c897 Added mac_rrc_dl functions and created bap_oai_api 2024-04-30 15:33:36 +02:00
Victor Souza
6483ae6383 CU sending UE CONTEXT MODIFICATION REQUEST to DU and DU receiving it successfully and sending (old) response back 2024-04-29 15:56:45 +02:00
Victor Souza
0a22f997cb added bhinfo to uluptnlInformation_ToBeSetup_List 2024-04-26 12:11:27 +02:00
Victor Souza
8a924cd011 compiling code for cu_send_ue_context_modification_request with no errors 2024-04-25 10:37:32 +02:00
Victor Souza
3d3d403614 some corrections 2024-04-24 14:18:09 +02:00
Victor Souza
9ee12ae551 added id-BHChannels-ToBeSetupMod-List to CU_send_UE_CONTEXT_MODIFICATION_REQUEST (not tested) 2024-04-23 15:01:36 +02:00
Victor Souza
8a5f54961f new branch 2024-04-19 10:09:07 +02:00
Victor Souza
f1b0cde103 new branch 2024-04-19 10:08:09 +02:00
Robert Schmidt
b99e856733 Merge branch 'integration_2024_w09' into 'develop'
Integration: 2024.w09

See merge request oai/openairinterface5g!2593

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

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

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

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

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

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

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

cuup_notify_reestablishment:

- to fetch PDU session to setup in E1 following logic as in e1_send_bearer_updates
- fill bearer context modification request with stored F1-U tunnel information
  during E1 reestablishment, otherwise it would initialized to 0 by default
- update GTP tunnel with the stored configuration after E1 reestablishment
2024-03-01 09:48:35 +01:00
Jaroslava Fiedlerova
cd5209a782 Merge remote-tracking branch 'origin/fix_fr2_ssb_start_subcarrier' into integration_2024_w09 2024-03-01 09:48:27 +01:00
Guido Casati
c83ff4c388 Store F1-U downlink TL and TEID
- info coming from UE context setup/modification response messages in RRC
2024-03-01 09:45:50 +01:00
Jaroslava Fiedlerova
4ae0fd09f1 Merge remote-tracking branch 'origin/prb_alloc_issue' into integration_2024_w09 2024-03-01 09:44:53 +01:00
vijay chadachan
3efb5b3657 Fixed for the PRB allocation issue assert in DLSCH scheduler
The following ASSERT is tirggered while testing 16 UE setup.

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

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

rbStart needs to be strictly smaller than rbStop

rbStart+rbSize needs to be smaller or equal to rbStop

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

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

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

See merge request oai/openairinterface5g!2585

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

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

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

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

Closes #733 and #732

See merge request oai/openairinterface5g!2564

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Change UE IP network address blocks for a 'Private-Use' range. Address block 12.1.0.0/16 is for public use, so we should not use it for the UEs (https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml)
2024-02-07 17:02:15 +00:00
luis_pereira87
05babdfc5c Tutorials: add link for Ettus UHD installation page and remove 'source oaienv' from instructions 2024-02-07 17:00:55 +00:00
luis_pereira87
7ee0cfc28c Tutorials: remove OAI UE SIM section
The main goal of this tutorial is to get 5G end-to-end connectivity as simple and fast as possible. For advanced topic the user should search for specific documentation.
2024-02-07 17:00:55 +00:00
luis_pereira87
e29c938130 Tutorials: simplify the pull section for the CN5G images
No need to pull every single image independently, we can pull all the images with the corresponding tag that is in the 'docker-compose.yaml' with the 'docker compose pull' command
2024-02-07 17:00:55 +00:00
luis_pereira87
99f3ef1a61 Tutorials: add FR2 SA configuration file and instructions for RFsimulator 2024-02-07 17:00:55 +00:00
luis_pereira87
6ec4918187 Tutorials: update the OAI nrUE SIM card description
This tutorial aims to achieve end-to-end connectivity as simple as possible. Let's remove this complex topic from here.
Also, if a user copy-paste the section as it was, nrUE gets a segfault because there is no imeisv here, tutorial is out-dated.
2024-02-07 17:00:55 +00:00
luis_pereira87
be08184fbe Tutorials: update UHD to v4.6.0.0 and update dependencies as described in the official Ettus website 2024-02-07 17:00:55 +00:00
Teodora
1675e6e155 Update FlexRIC commit and E2AP README 2024-02-07 17:19:18 +01:00
Teodora
d7ff30db55 Enable multiple RC subscriptions
- create hash table to save ric_req_id (key) and array of ran_param_id(s) (values), per each subscription
  - create RB tree to store list of ric_req_id(s) for each ran_param_id
    => when the async event occurs, it is easier and faster to search per ran_param_id and send the indication message to all xApps (ric_req_id(s)) subscribed to the same ran_param_id
  - it is important to mention that both data structures need to be maintained, especially when unsubscription occurs (free_aperiodic_subscription)
2024-02-07 15:14:27 +01:00
Teodora
3cc3bbbabc Support RC aperiodic subscription
- subscribe to "UE RRC State Change" RAN Parameter ID
  - expected asynchronous events from E2 node
2024-02-07 14:32:23 +01:00
Raymond Knopp
94a0704e43 Update sample config gnb.sa.band41.fr1.106PRB.usrpb210.conf 2024-02-06 16:03:56 +01:00
Raymond Knopp
bb044cf940 Update logs to NR_ version and add some new 2024-02-06 16:03:56 +01:00
Raymond Knopp
1ec528dbdb Remove commented code 2024-02-06 16:03:56 +01:00
Raphael Defosseux
2b796874ca fix(ci): hot-fix for E2-agent build w/ latest version of ASN1C
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-02-06 13:52:02 +01:00
Robert Schmidt
ff1cc7b378 Merge branch 'integration_2024_w05' into 'develop'
Integration: 2024.w05

See merge request oai/openairinterface5g!2549

* !2537 Fix for UE PUSCH scheduler DURATION_RX_TO_TX assertion
* !2538 Fix for UE MAC PDU LCID handling
* !2542 Fix L1_SSB_CSI_RSRP table mapping and check validity
* !2544 NR UE RRC timers improvement
* !2546 Correcting the location of packages
* !2493 Fix for computing SSB subcarrier offset
* !2496 MCS for retransmission fix in case of dci failed detection at NR UE
* !2503 Handle PDU Sessions in NG Initial UE context Setup and forward 5G-S-TMSI to core
* enable caching in the docker build of the CI build steps
* !2541 Fix RA bug, improve overall logging
2024-02-06 10:14:17 +00:00
Raphael Defosseux
ef0f33b4a1 fix(ci): the .git folder is excluded by default in the build-config pod. Adding it back
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2024-02-05 14:53:01 +01:00
Jaroslava Fiedlerova
3b2355ce4c Merge remote-tracking branch 'origin/fix-ra-reduce-logs' into integration_2024_w05 2024-02-05 13:27:12 +01:00
Robert Schmidt
be3d37159f Enable some caching in CI build steps 2024-02-05 10:38:34 +01:00
Jaroslava Fiedlerova
3de71d11bf Merge remote-tracking branch 'origin/pdu-session-initial-setup' into integration_2024_w05 2024-02-05 09:27:10 +01:00
Jaroslava Fiedlerova
9af66c9ec6 Merge remote-tracking branch 'origin/NR_UE_fix_no_mcs_dci_failed_detection' into integration_2024_w05 2024-02-05 09:23:52 +01:00
Jaroslava Fiedlerova
905fb9b6fd Merge remote-tracking branch 'origin/fix_computing_ssb_subcarrier_offset' into integration_2024_w05 2024-02-05 09:21:16 +01:00
francescomani
58ea7357f8 add option to configure max MIMO layers for PUSCH TBSLBRM computation from UE capabilities 2024-02-04 11:09:58 +01:00
francescomani
df867e533f formatting 2024-02-04 11:02:58 +01:00
francescomani
07c5cf3cad remove instance hardcoding in nsa_rrc_ue_process_ueCapabilityEnquiry 2024-02-04 10:51:46 +01:00
francescomani
3a6e93b809 radio bearers in generic RRC configuration, no need to store them per gNB 2024-02-04 10:46:05 +01:00
Robert Schmidt
4a7d7975ce Send RRC UECapabilityEnquiry after reconfig, trigger UE update if necessary
We used to trigger the UECapabilityEnquiry right after
SecurityModeComplete, and before the RRCReconfiguration (which we call
"default" reconfiguration). However, 38.401 tells us that we should send
the RRCReconfiguration right after the SecurityModeComplete. In fact,
even though we get the UE capabilities, we cannot use them during this
reconfiguration, as we would first need to update the DU with a UE
Context Modification Request, which we cannot, as we just sent the UE
Context Setup Request, and the DU relies on first getting the
RRCReconfiguration.

Since we rely on a subsequent reconfiguration anyway, we can safely
trigger the UECapabilityEnquiry after RRCReconfigurationComplete.
(38.331 also says we can send UECapabilityEnquiry at any point.)

To cater for the possibility that there might not be any reconfiguration
coming afterwards, we check if a DRB has been set up. If not, we assume
a reconfiguration will come, and do not trigger one only for the UE
capabilities (this is what we do before this commit). If we already have
DRBs set up, they might have been set up during the "default" RRC
Reconfiguration, and another reconfiguration might not follow soon; in
this case, we trigger the reconfiguration by sending the UE capabilities
to the DU right away.
2024-02-03 11:28:43 +01:00
Robert Schmidt
0f100a6e94 Delay PDU session resource setup request if necessary
The next commit moves the UE Capability Enquiry after the first
reconfiguration. This has the effect that for some UEs (e.g., iPhone),
the Setup Requests come too close to each other, triggering RRC
Reconfigurations while previous transactions are ongoing.

I think the "true" solution would be to implement some tracking of
transactions across RRC, F1AP, E1AP, but this might require many
changes. For the moment, limit to delaying PDU session resource setups
to prevent above problem. Delaying is done using ITTI timers (to be able
to serve other UEs), waiting 10ms each time, up to 20 times (to not
deadlock the transaction -- after all, if the UE is unhappy, it will
drop the connection).
2024-02-03 11:28:43 +01:00
Robert Schmidt
d6dd87ae8c RRC transaction IDs: clean up
- Put consistently transaction IDs
- Remove transaction IDs when transaction finished, or in places that do
  not trigger an RRC transaction
2024-02-03 11:28:43 +01:00
Robert Schmidt
d2cd7c862a Add transactions IDs to logs for RRC reconfig/uecap enq 2024-02-03 11:28:43 +01:00
Robert Schmidt
8302a060fa RRC transactions: mark UE Capability transaction 2024-02-03 11:28:43 +01:00
Robert Schmidt
62200cdee5 RRC transactions: mark "no action" 2024-02-03 11:28:43 +01:00
Robert Schmidt
c643abd83e DRB handling: handle E1AP default DRB logic properly 2024-02-03 11:28:43 +01:00
Robert Schmidt
6642b467e1 Implement PDU session estab through NGAP Initial UE Context Setup
This commit allows the gNB to handle PDU sessions that the core requests
to setup during the NGAP Initial UE Context Setup. Previously, we only
managed them as part of PDU Session Resource Setup Request.

The RRC will, depending on whether a PDU session is in the NGAP Initial
UE Context Setup, either directly trigger the Security Command, or first
do a bearer setup at the CU-UP. Some asserts have been lifted, as now
the PDU sessions might be present before the RRC Connection is fully
established.

Implement the correct forwarding of the bearers in an F1 UE Context
Setup Request message.

This solves bug #672.
2024-02-03 11:28:43 +01:00
Robert Schmidt
c818e9b5fe F1 UE Ctxt modif response: look up PDU sessions 2024-02-03 11:28:43 +01:00
Robert Schmidt
59b69e240a correctly free NAS pdus: avoid possible double-frees 2024-02-03 11:28:43 +01:00
Robert Schmidt
f81ec9c2cc Simplify RRC DRB handling code
Prior to this commit, the handling of DRBs is complex: first the RRC
"guessed" a DRB ID when setting up DRBs via E1AP (in
rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ()), and later chose one for
real in fill_DRB_Configlist() (called in
rrc_gNB_generate_dedicatedRRCReconfiguration()).

To simplify, remove fill_DRB_Configlist(), and instead allocate the DRB
using generateDRB() before sending the message via E1AP, in
rrc_gNB_generate_dedicatedRRCReconfiguration(). The rest of the logic is
the same.

For PDU sessions, always mark PDU sessions as "done" to match pdu
session state logic.
2024-02-03 11:28:43 +01:00
Robert Schmidt
a47eab5262 F1 UE Ctxt modification: forward multiple PDU sessions, including NSSAI 2024-02-03 11:28:43 +01:00
Robert Schmidt
2800203eff Provide means to look-up if UE has a CU-UP
It might happen that a UE has no CU-UP (e.g., never requested a PDU
session). When triggering a release, we previously and implicitly
associated a CU-UP in that case. That is not good, and confusing.

This commit adds a function to look up if the UE has an associated
CU-UP. We only send a release if it is the case.

The function get_existing_cuup_for_ue() now instead verifies that a
CU-UP exist, and does not implicitly create an association (which might
be unwanted, see above).
2024-02-03 11:28:43 +01:00
Robert Schmidt
4c7080ec3f E1 bearer ctx handler: correctly index (single) DRB 2024-02-03 11:28:43 +01:00
Robert Schmidt
ce4ec2965b E1 bearer ctxt setup handler: correct AssertFatal()
The number of tunnels corresponds to number of DRBs, so correctly
compare tunnels and DRBs.
2024-02-03 11:28:43 +01:00
Robert Schmidt
2494a7bc7c Remove unused variables 2024-02-03 11:28:43 +01:00
Robert Schmidt
5258acbf45 Remove unused variables in RRC 2024-02-03 11:28:43 +01:00
Robert Schmidt
d5257ca820 Remove superfluous function, rename variable
The function rrc_gNB_process_RRCReconfigurationComplete() does almost
nothing, we can delete it.

The variable name ue_reconfiguration_after_reestablishment_counter is
misleading, as it counts all reconfigurations; rename to make it clear.
2024-02-03 11:28:43 +01:00
Robert Schmidt
1c2e4c7118 Remove drb_active array
The drb_active array keeps track of active DRBs. However, it only
replicates some of the information in established_drbs, and could lead
to a reuse of DRB IDs when two bearers are to be set up. Consider the
following:
1. trigger first DRB creation at RRC
2. DRB ID chosen from free drb_active entry
3. trigger second DRB creation at RRC
   -> The first reconfiguration has not been acknowledged
   -> drb_active is not marked as DRB_ACTIVE
4. The second DRB ID is chosen from a free drb_active entry, which is
   the same as in 2.

By reusing established_drbs everywhere, this cannot happen, as we
1. select the DRB to be used using next_available_drb() and then
2. use generateDRB(), which marks the DRB used
all from within fill_DRB_configList, which gives a new DRB.

The logic is still overly complex, though.
2024-02-03 11:28:43 +01:00
Robert Schmidt
37929dca6c Remove SRBs variable: it is simply not used 2024-02-03 11:28:43 +01:00
Robert Schmidt
3d0a7ecf28 DRB: do not activate in RRC, this is done through E1 2024-02-03 11:28:43 +01:00
Robert Schmidt
4b3b6b1e5e createDRBlist(): return NULL if no active DRB
If there are no active bearers, the function previously returned an
empty list. Return NULL if there are no bearers, so it is safe to call
this function even when no bearers are present. We can also pass it
every time to do_RRCReconfiguration(), which will not add an empty list
for DRBs.
2024-02-03 11:28:43 +01:00
Robert Schmidt
34b5e592f0 Add function to activate SRBs in gNB RRC
Create a single function to activate an SRB. This function derives the
corresponding keys, triggers the setup in PDCP, and marks the SRB as set
up, instead of doing all of this common functionality in individual
steps.  Use it at the corresponding places.
2024-02-03 11:28:40 +01:00
Luis Pereira
04c6c34d24 NR MAC stats: make more compact, update CI checker
- show MAC bytes in one line
- add MCS table idx
- show ulsch errors before ulsch DTX (as in DL)
- show if UE in-sync/out-of-sync
- show CU UE ID next to RNTI to stats

Since we modify the format of the statistics, fix the format in the retx
checkers of the CI.
2024-02-03 11:24:41 +01:00
Robert Schmidt
f9a8498566 RRC: forward 5G-S-TMSI for NGAP Initial UE Message
Only fill the 5G-S-TMSI if if is present, and set the bit in the
presenceMask.
2024-02-03 11:24:41 +01:00
Robert Schmidt
1ee89735a2 Store 5G-S-TMSI from UE if received
This commit implements retrieval of 5G-S-TMSI from Parts 1&2, or the
entire 5G-S-TMSI, depending on what the UE sends. Further, if it has
been retrieved, print a log of all constituent parts of it.

The UE-specific variable ng_5G_S_TMSI_Part2 is not needed, as we compute
the full 5G-S-TMSI as soon as we have Part2 (and 1).

The correct forwarding to the core is implemented in the following
commit.
2024-02-03 11:24:41 +01:00
Robert Schmidt
642b6429a3 Fix NGAP encoding of PDUsession failed
We did not give a cause value, and therefore NGAP's "PDU sessions
failed" encoding failed. Give a cause value in all cases, so that this
cannot happen anymore.

To prevent against this, put an AssertFatal() into the encoder that
stops if an internally sent message does not have a correct cause value
(we can at least select a default).

Print an info message for all failed PDU sessions.

In rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(): if a PDU session is
already established, don't count it as failed.
2024-02-03 11:24:41 +01:00
Robert Schmidt
8a5a1f2d22 NGAP: Correct encoding of AMF Pointer 5G-S-TMSI 2024-02-03 11:24:41 +01:00
Robert Schmidt
3371b53fda NGAP initial context setup: store NSSAI 2024-02-03 11:24:41 +01:00
Robert Schmidt
d536c115d2 Replace custom bitStr_to_uint64() with common implementation 2024-02-03 11:24:41 +01:00
Robert Schmidt
ba5c34c1f6 oai_asn1.h: const-correctness/signal input parameter 2024-02-03 11:24:41 +01:00
Robert Schmidt
52bfd463de Demote multiple non-error logs to warning in RFsim
In all these cases, we simply continue with processing; it therefore
seems that these are more warnings than errors.
2024-02-03 11:24:41 +01:00
Robert Schmidt
a205ba7eb0 Complete NGAP PDU session logs with addr/TEIDs 2024-02-03 11:24:41 +01:00
Robert Schmidt
18d16db311 Demote NGAP error to warning, as it is not an error 2024-02-03 11:24:41 +01:00
Robert Schmidt
da7c02b872 PDCP: add log to info for adding/releasing bearer 2024-02-03 11:24:41 +01:00
Robert Schmidt
9a417ca61c Demote RRC log to debug 2024-02-03 11:24:41 +01:00
Robert Schmidt
13a4a20495 Improve gNB MAC logs
- Demote logs judged unimportant to debug
- Indicate UE for UL failure
- set_QoSConfig(): correct log
2024-02-03 11:24:41 +01:00
Robert Schmidt
4ed6c581ec gNB RRC: remove SA checks
If we are in one of these procedures, we basically must be in SA mode,
everything else is illogical. It also does not seem plausible to check
for this, as it is not apparent why only these couple of calls should
not be executed if not in SA. Hence, remove.
2024-02-03 11:24:41 +01:00
Robert Schmidt
8ec4279613 Release SDAP when releasing UE over E1 2024-02-03 11:24:41 +01:00
Robert Schmidt
674d9bcd8a rrc_handle_RRCReestablishmentRequest(): refactor to have single block for RRC Setup 2024-02-03 11:24:41 +01:00
Robert Schmidt
f6a783344f Handle reestablishment from different PCI, simplified implementation
This implementation might work, but it simply triggers RRC setup on the new
DU when we might send a RRC reestablishment speeding up the whole
connection setup. For this:

- we should send the F1 UE context setup to the new DU
- we should still do the reestablishment, containing the reestablishment message

The latter should be sent once we received the F1 UE context setup
response. We don't need a new context. send a release to the old DU (and
don't release our own context!!).

We might also send the reestablishment to the UE encapsulated with the
F1 UE context setup response. Need to investigate if this is feasible
(because if the DU rejects [can that happen here?], the UE will still
send reestablishment complete -- what then?).

Also, we would need to send the E1 bearer context modification to the
CU-UP.
2024-02-03 11:24:41 +01:00
Robert Schmidt
4b81e9a481 Introduce UE flag for AS security
Keeping track if AS security is activated. This is important for a later
commit, where we use this to decide if we send a F1 UE Context Setup Req
with security command after receiving the E1 bearer context setup
response. The corresponding AssertFatal() removed in the same commit
implementing PDU session handling in NGAP Initial UE Context Setup.
2024-02-03 11:22:29 +01:00
francescomani
9cf44c11f1 use pointer to structure instead of module_id inside MAC 2024-02-02 16:00:59 +01:00
Robert Schmidt
e59648e17f NGAP: demote some logs to debug, improve others 2024-02-02 15:37:06 +01:00
Robert Schmidt
2e7d95746f RRC: demote various log levels 2024-02-02 15:37:06 +01:00
Robert Schmidt
e2d5758c5d MAC: improve log messages, reduce overall verbosity 2024-02-02 15:37:06 +01:00
Jaroslava Fiedlerova
8d572cec83 Merge remote-tracking branch 'origin/correction' into integration_2024_w05 2024-02-02 15:12:24 +01:00
Jaroslava Fiedlerova
12c25af2bc Merge remote-tracking branch 'origin/NR_UE_RRC_timers_improvements' into integration_2024_w05 2024-02-02 15:11:33 +01:00
francescomani
6b123ff217 store MSG3 buffer at UE MAC 2024-02-02 11:11:45 +01:00
Jaroslava Fiedlerova
e85baab6cf Merge remote-tracking branch 'origin/fix-l1-rsrp-table' into integration_2024_w05 2024-02-02 10:46:33 +01:00
Jaroslava Fiedlerova
62fc3b3753 Merge remote-tracking branch 'origin/NR_UE_fix_handling_DL_LCID' into integration_2024_w05 2024-02-02 10:41:31 +01:00
Jaroslava Fiedlerova
956b877461 Merge remote-tracking branch 'origin/NR_UE_PUSCH_DURATION_RX_TO_TX_assertion' into integration_2024_w05 2024-02-02 10:38:30 +01:00
francescomani
03439f9d6a code cleanup 2024-02-02 10:02:29 +01:00
francescomani
00f7ba61a0 adding assertion for cset0 start prb 2024-02-02 09:21:44 +01:00
francescomani
b70eba44a7 fix for computing ssb subcarrier offset 2024-02-02 09:21:40 +01:00
Francesco Mani
7086c5837f Fix in setting default timers 2024-02-01 11:45:24 +00:00
Robert Schmidt
940d582568 Remove write-only gNB's UE reestablishment cause 2024-01-31 17:41:44 +01:00
Robert Schmidt
a2c7f0c0b3 Remove possible NG Initial Context Setup Resp in handler for request
38.401 Sec 8.1 asks for sending the Initial Context Setup Response after
a reconfiguration happened. Therefore, we can never send this message
directly from the handler in the Initial Context Setup Request
2024-01-31 17:41:44 +01:00
Robert Schmidt
b09526c83e Bugfix: fix use-after-free of UE caps 2024-01-31 17:41:44 +01:00
Robert Schmidt
0a7e48f138 Remove a non-error in RU 2024-01-31 17:41:44 +01:00
Robert Schmidt
9cfdf9bb01 Remove custom trigger bearer add/release code, does not work 2024-01-31 17:41:44 +01:00
Sagar Arora
b4bc9a8a52 Correcting the location of packages
- net-tools and iproute2 package were getting installed only for sanitized build.
2024-01-31 15:50:46 +01:00
francescomani
2b44c0c8b2 set default timers at init and add logging when timer expires 2024-01-30 16:10:54 +01:00
francescomani
e6b02c6d12 add option to configure max MIMO layers for PDSCH TBSLBRM computation from UE capabilities 2024-01-30 14:49:33 +01:00
Robert Schmidt
29156240a6 RSRP measurement: check if index is valid 2024-01-30 10:02:20 +01:00
Robert Schmidt
044d8bc6d2 Fix table L1_SSB_CSI_RSRP_measReport_mapping_38133_10_1_6_1_1
38.133 table 10.1.6.1.1 specifies dB for RSRP measurements. On the
"edges", the choice of INT_MIN/INT_MAX is poor, as it can quickly lead
to integer overflow/underflow for the wrong values. Instead, set proper
min/max RSRP values.
2024-01-30 09:55:27 +01:00
Robert Schmidt
10c914cd4e bugfix: if cannot send Msg.2 in RA, cancel RA
If we cannot send Msg.2, then basically the RA process is dead (because
the UE expects it at a fixed time). Hence, cancel the RA process, so
that we do not pick it up again after 1000 frames.
2024-01-30 09:50:46 +01:00
francescomani
aabe8f7cc1 fix for UE MAC PDU LCID handling 2024-01-26 16:48:11 +01:00
francescomani
59cbf268d8 UE PUSCH scheduler separate DURATION_RX_TO_TX assertion for msg3 or general PUSCH 2024-01-26 14:11:27 +01:00
francescomani
35afae2e39 fapi new data indicator as bool and storage of previous NDI value to HARQ structures 2024-01-25 11:51:56 +01:00
francescomani
aaea72626a adapt NDI FAPI configuration to PUSCH and resetting TBS when new data 2024-01-25 10:47:28 +01:00
francescomani
77c585cd28 discard pdu if TBS is null 2024-01-25 10:47:28 +01:00
345 changed files with 21656 additions and 16784 deletions

View File

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

View File

@@ -1384,9 +1384,11 @@ set (MAC_NR_SRC_UE
${NR_UE_PHY_INTERFACE_DIR}/NR_IF_Module.c
${NR_UE_PHY_INTERFACE_DIR}/NR_Packet_Drop.c
${NR_UE_MAC_DIR}/config_ue.c
${NR_UE_MAC_DIR}/config_ue_sl.c
${NR_UE_MAC_DIR}/mac_vars.c
${NR_UE_MAC_DIR}/main_ue_nr.c
${NR_UE_MAC_DIR}/nr_ue_procedures.c
${NR_UE_MAC_DIR}/nr_ue_procedures_sl.c
${NR_UE_MAC_DIR}/nr_ue_scheduler.c
${NR_UE_MAC_DIR}/nr_ue_dci_configuration.c
${NR_UE_MAC_DIR}/nr_ra_procedures.c
@@ -1434,8 +1436,7 @@ target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT)
target_link_libraries(L2 PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2 PRIVATE E2_AGENT)
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
@@ -1461,8 +1462,7 @@ target_link_libraries(e1_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap
target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc)
if(E2_AGENT)
target_link_libraries(L2_NR PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(L2_NR PRIVATE E2_AGENT)
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
add_library(L2_LTE_NR
@@ -1981,8 +1981,7 @@ target_link_libraries(lte-softmodem PRIVATE ${T_LIB})
target_link_libraries(lte-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
if(E2_AGENT)
target_compile_definitions(lte-softmodem PRIVATE E2_AGENT)
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
add_executable(oairu
@@ -2080,7 +2079,7 @@ target_link_libraries(nr-softmodem PRIVATE ${T_LIB})
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
if(E2_AGENT)
target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
@@ -2093,10 +2092,6 @@ endif()
# force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries(nr-softmodem PRIVATE
asn1_lte_rrc asn1_nr_rrc asn1_s1ap asn1_ngap asn1_m2ap asn1_m3ap asn1_x2ap asn1_f1ap asn1_lpp)
if(E2_AGENT)
target_compile_definitions(nr-softmodem PRIVATE E2_AGENT)
endif()
add_executable(nr-cuup
executables/nr-cuup.c

View File

@@ -9,16 +9,14 @@ idefix:
MTU: 1500
Trace: True
LogStore: /media/usb-drive/ci_qlogs
nrmodule2_quectel:
Host: nrmodule2
InitScript: sudo stdbuf -oL /home/nrmodule2/quectel-CM/quectel-CM -4 -s oai.ipv4 &> /tmp/quecel-cm.log &
TermScript: sudo -S killall --signal SIGKILL quectel-CM
AttachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB2 detach
up2:
Host: up2
AttachScript: sudo /opt/mbim/start_quectel_mbim.sh
DetachScript: sudo /opt/mbim/stop_quectel_mbim.sh
NetworkScript: ip a show dev wwan0
IF: wwan0
MTU: 1500
LogStore: /media/ci_qlogs
adb_ue_1:
Host: nano

View File

@@ -132,7 +132,7 @@ class Cluster:
def _start_build(self, name):
# will return "immediately" but build runs in background
# if multiple builds are started at the same time, this can take some time, however
ret = self.cmd.run(f'oc start-build {name} --from-file={self.eNBSourceCodePath}')
ret = self.cmd.run(f'oc start-build {name} --from-dir={self.eNBSourceCodePath} --exclude=""')
regres = re.search(r'build.build.openshift.io/(?P<jobname>[a-zA-Z0-9\-]+) started', ret.stdout)
if ret.returncode != 0 or ret.stdout.count('Uploading finished') != 1 or regres is None:
logging.error(f"error during oc start-build: {ret.stdout}")
@@ -274,6 +274,11 @@ class Cluster:
if result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
# if the branch name contains integration_20xx_wyy, let rebuild ran-base
result = re.search('integration_20([0-9]{2})_w([0-9]{2})', self.ranBranch)
if not forceBaseImageBuild and result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
else:
imageTag = f'develop-{self.ranCommitID[0:8]}'
forceBaseImageBuild = True

View File

@@ -86,6 +86,12 @@ class Cmd(metaclass=abc.ABCMeta):
return
class LocalCmd(Cmd):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.close()
def __init__(self, d = None):
self.cwd = d
if self.cwd is not None:
@@ -122,12 +128,40 @@ class LocalCmd(Cmd):
if src[0] != '/' or tgt[0] != '/':
raise Exception('support only absolute file paths!')
opt = '-r' if recursive else ''
self.run(f'cp {opt} {src} {tgt}')
return self.run(f'cp {opt} {src} {tgt}').returncode == 0
def copyout(self, src, tgt, recursive=False):
self.copyin(src, tgt, recursive)
return self.copyin(src, tgt, recursive)
def PutFile(client, src, tgt):
success = True
sftp = client.open_sftp()
try:
sftp.put(src, tgt)
except FileNotFoundError as error:
logging.error(f"error while putting {src}: {error}")
success = False
sftp.close()
return success
def GetFile(client, src, tgt):
success = True
sftp = client.open_sftp()
try:
sftp.get(src, tgt)
except FileNotFoundError as error:
logging.error(f"error while getting {src}: {error}")
success = False
sftp.close()
return success
class RemoteCmd(Cmd):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.close()
def __init__(self, hostname, d=None):
cIdx = 0
logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko
@@ -193,36 +227,38 @@ class RemoteCmd(Cmd):
def getBefore(self):
return self.cp.stdout
# if recursive is True, tgt must be a directory (and src is file or directory)
# if recursive is False, tgt and src must be a file name
def copyout(self, src, tgt, recursive=False):
logging.debug(f"copyout: local:{src} -> remote:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}"
cmd = LocalCmd()
cmd.run(f"tar -cf {abstmpfile} {src}")
sftp = self.client.open_sftp()
sftp.put(abstmpfile, abstmpfile)
sftp.close()
cmd.run(f"rm {abstmpfile}")
self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
with LocalCmd() as cmd:
if cmd.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
return False
if not PutFile(self.client, abstmpfile, abstmpfile):
return False
cmd.run(f"rm {abstmpfile}")
ret = self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
return ret.returncode == 0
else:
sftp = self.client.open_sftp()
sftp.put(src, tgt)
sftp.close()
return PutFile(self.client, src, tgt)
# if recursive is True, tgt must be a directory (and src is file or directory)
# if recursive is False, tgt and src must be a file name
def copyin(self, src, tgt, recursive=False):
logging.debug(f"copyin: remote:{src} -> local:{tgt}")
if recursive:
tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}"
self.run(f"tar -cf {abstmpfile} {src}")
sftp = self.client.open_sftp()
sftp.get(abstmpfile, abstmpfile)
sftp.close()
if self.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
return False
if not GetFile(self.client, abstmpfile, abstmpfile):
return False
self.run(f"rm {abstmpfile}")
cmd = LocalCmd()
cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
with LocalCmd() as cmd:
ret = cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
return ret.returncode == 0
else:
sftp = self.client.open_sftp()
sftp.get(src, tgt)
sftp.close()
return GetFile(self.client, src, tgt)

View File

@@ -357,11 +357,11 @@ class Containerize():
if self.host == 'Ubuntu':
self.cli = 'docker'
self.dockerfileprefix = '.ubuntu20'
self.cliBuildOptions = '--no-cache'
self.cliBuildOptions = ''
elif self.host == 'Red Hat':
self.cli = 'sudo podman'
self.dockerfileprefix = '.rhel9'
self.cliBuildOptions = '--no-cache --disable-compression'
self.cliBuildOptions = '--disable-compression'
# we always build the ran-build image with all targets
# Creating a tupple with the imageName, the DockerFile prefix pattern, targetName and sanitized option
@@ -419,6 +419,11 @@ class Containerize():
if result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
# if the branch name contains integration_20xx_wyy, let rebuild ran-base
result = re.search('integration_20([0-9]{2})_w([0-9]{2})', self.ranBranch)
if not forceBaseImageBuild and result is not None:
forceBaseImageBuild = True
baseTag = 'ci-temp'
else:
forceBaseImageBuild = True
@@ -509,7 +514,7 @@ class Containerize():
cmd.run(f"{self.cli} volume prune --force")
# Remove any cached artifacts: we don't use the cache for now, prevent
# out of diskspace problem
cmd.run(f"{self.cli} buildx prune --force")
cmd.run(f"{self.cli} buildx prune --filter=until=6h --force")
# create a zip with all logs
build_log_name = f'build_log_{self.testCase_id}'
@@ -570,7 +575,7 @@ class Containerize():
sys.exit(1)
self.cli = 'docker'
self.cliBuildOptions = '--no-cache'
self.cliBuildOptions = ''
# Workaround for some servers, we need to erase completely the workspace
if self.forcedWorkspaceCleanup:
@@ -657,22 +662,26 @@ class Containerize():
collectInfo['proxy'] = files
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
mySSH.close()
allImagesSize = {}
if result is not None:
imageSize = float(result.group('size')) / 1000000
logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes'
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
return True
else:
logging.debug('proxy size is unknown')
logging.error('proxy size is unknown')
allImagesSize['proxy'] = 'unknown'
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
mySSH.close()
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTabFooter(False)
return False
def BuildRunTests(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
@@ -946,12 +955,12 @@ class Containerize():
if svcName == '':
logging.warning('no service name given: starting all services in ci-docker-compose.yml!')
mySSH.command(f'docker-compose --file ci-docker-compose.yml up -d -- {svcName}', '\$', 30)
mySSH.command(f'docker compose --file ci-docker-compose.yml up -d -- {svcName}', '\$', 30)
# Checking Status
grep = ''
if svcName != '': grep = f' | grep -A3 {svcName}'
mySSH.command(f'docker-compose --file ci-docker-compose.yml config {grep}', '\$', 5)
mySSH.command(f'docker compose --file ci-docker-compose.yml config {grep}', '\$', 5)
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
unhealthyNb = 0
healthyNb = 0
@@ -1053,55 +1062,55 @@ class Containerize():
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
logging.debug('\u001B[1m Undeploying OAI Object from server: ' + lIpAddr + '\u001B[0m')
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
logging.debug(f'\u001B[1m Undeploying OAI Object from server: {lIpAddr}\u001B[0m')
mySSH = cls_cmd.getConnection(lIpAddr)
yamlDir = f'{lSourcePath}/{self.yamlPath[self.eNB_instance]}'
mySSH.run(f'cd {yamlDir}')
svcName = self.services[self.eNB_instance]
forceDown = False
if svcName != '':
logging.warning(f'service name given, but will stop all services in ci-docker-compose.yml!')
svcName = ''
mySSH.command(f'docker-compose -f ci-docker-compose.yml config --services', '\$', 5)
ret = mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml config --services')
if ret.returncode != 0:
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', "cannot enumerate running services")
self.exitStatus = 1
return
# first line has command, last line has next command prompt
allServices = mySSH.getBefore().split('\r\n')[1:-1]
allServices = ret.stdout.splitlines()
services = []
for s in allServices:
mySSH.command(f'docker-compose -f ci-docker-compose.yml ps --all -- {s}', '\$', 5, silent=False)
running = mySSH.getBefore().split('\r\n')[2:-1]
# outputs the hash if the container is running
ret = mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml ps --all --quiet -- {s}')
running = ret.stdout.splitlines()
logging.debug(f'running services: {running}')
if len(running) > 0: # something is running for that service
if ret.stdout != "" and ret.returncode == 0: # something is running for that service
services.append(s)
logging.info(f'stopping services {services}')
mySSH.command(f'docker-compose -f ci-docker-compose.yml stop -t3', '\$', 30)
time.sleep(5) # give some time to running containers to stop
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml stop -t3')
copyin_res = True
for svcName in services:
# head -n -1 suppresses the final "X exited with status code Y"
filename = f'{svcName}-{HTML.testCase_id}.log'
mySSH.command(f'docker-compose -f ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}', '\$', 120)
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}')
copyin_res = mySSH.copyin(f'{lSourcePath}/cmake_targets/log/{filename}', f'{filename}') and copyin_res
# when nv-cubb container is available, copy L1 pcap, OAI Aerial pipeline
if 'nv-cubb' in allServices:
mySSH.run(f'cp {lSourcePath}/cmake_targets/share/gnb_nvipc.pcap {lSourcePath}/cmake_targets/gnb_nvipc.pcap')
mySSH.command('docker-compose -f ci-docker-compose.yml down -v', '\$', 5)
mySSH.close()
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml down -v')
# Analyzing log file!
files = ','.join([f'{s}-{HTML.testCase_id}' for s in services])
if len(services) > 1:
files = '{' + files + '}'
copyin_res = 0
if len(services) > 0:
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, f'{lSourcePath}/cmake_targets/log/{files}.log', '.')
if copyin_res == -1:
HTML.htmleNBFailureMsg='Could not copy logfile to analyze it!'
if not copyin_res:
HTML.htmleNBFailureMsg='Could not copy logfile(s) to analyze it!'
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
self.exitStatus = 1
# use function for UE log analysis, when oai-nr-ue container is used
elif 'oai-nr-ue' in services or 'lte_ue0' in services:
self.exitStatus == 0
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
logging.debug(f'Analyzing UE logfile {filename}')
logStatus = cls_oaicitest.OaiCiTest().AnalyzeLogFile_UE(f'{filename}', HTML, RAN)
if (logStatus < 0):
fullStatus = False
@@ -1120,11 +1129,12 @@ class Containerize():
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
# all the xNB run logs shall be on the server 0 for logCollecting
if self.eNB_serverId[self.eNB_instance] != '0':
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, f'./{files}.log', f'{self.eNBSourceCodePath}/cmake_targets/')
mySSH.copyout(f'./*.log', f'{lSourcePath}/cmake_targets/', recursive=True)
if self.exitStatus == 0:
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
else:
logging.error('\u001B[1m Undeploying OAI Object Failed\u001B[0m')
mySSH.close()
def DeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0

View File

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

View File

@@ -171,7 +171,6 @@ MACRLCs = (
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);

View File

@@ -178,7 +178,6 @@ MACRLCs = (
remote_n_portd = 2153;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);

View File

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

View File

@@ -200,7 +200,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -202,7 +202,6 @@ MACRLCs = (
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
ulsch_max_frame_inactivity = 0;
}
);

View File

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

View File

@@ -187,7 +187,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -197,8 +197,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 180;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
ul_max_mcs = 16;
}
);

View File

@@ -188,7 +188,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
#pusch_TargetSNRx10 = 150;
#pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
dl_max_mcs = 16; # there are retransmissions if more
}
);

View File

@@ -190,7 +190,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 220;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -184,7 +184,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 10;
ul_max_mcs = 9;
}
);

View File

@@ -203,7 +203,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 220;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -204,7 +204,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
# pusch_TargetSNRx10 = 200;
# pucch_TargetSNRx10 = 150;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -186,7 +186,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);

View File

@@ -192,8 +192,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 10;
ul_max_mcs = 28;
}
);

View File

@@ -184,7 +184,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -208,7 +208,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
}
);

View File

@@ -199,7 +199,6 @@ MACRLCs = (
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -186,7 +186,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 0;
}
);

View File

@@ -0,0 +1,34 @@
#this is a configuration file
#used to build real time processing statistics
#for 5G NR phy test (gNB terminate)
Title : Processing Time (us) from datalog_rt_stats.100.2x2.yaml
ColNames :
- Metric
- Average; Max; Count
- Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)
Ref :
feprx : 150.0
feptx_prec : 0.0
feptx_ofdm : 65.0
feptx_total : 177.0
L1 Tx processing : 700.0
DLSCH encoding : 226.0
L1 Rx processing : 640.0
PUSCH inner-receiver : 400.0
Schedule Response : 3.0
DL & UL scheduling timing : 15.0
UL Indication : 3.0
Slot Indication : 17.0
DeviationThreshold :
feprx : 0.25
feptx_prec : 0.25
feptx_ofdm : 0.25
feptx_total : 0.25
L1 Tx processing : 0.25
DLSCH encoding : 0.25
L1 Rx processing : 0.25
PUSCH inner-receiver : 0.25
Schedule Response : 1.00
DL & UL scheduling timing : 0.25
UL Indication : 1.00
Slot Indication : 0.50

View File

@@ -1,34 +1,34 @@
#this is a configuration file
#used to build real time processing statistics
#for 5G NR phy test (gNB terminate)
Title : Processing Time (us)
Title : Processing Time (us) from datalog_rt_stats.1x1.60.yaml
ColNames :
- Metric
- Average; Max; Count
- Average vs Reference Deviation (Reference Value; Acceptability Threshold)
- Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)
Ref :
feprx : 46.0
feptx_prec : 15.0
feptx_ofdm : 35.0
feptx_total : 57.0
L1 Tx processing : 210.0
DLSCH encoding : 137.0
L1 Rx processing : 345.0
PUSCH inner-receiver : 210.0
PUSCH decoding : 2200.0
Schedule Response : 48.0
DL & UL scheduling timing : 13.0
UL Indication : 60.0
Threshold :
feprx : 1.25
feptx_prec : 1.25
feptx_ofdm : 1.25
feptx_total : 1.25
L1 Tx processing : 1.25
DLSCH encoding : 1.25
L1 Rx processing : 1.25
PUSCH inner-receiver : 1.25
PUSCH decoding : 1.25
Schedule Response : 1.25
DL & UL scheduling timing : 1.25
UL Indication : 1.25
L1 Tx processing : 260.0
DLSCH encoding : 160.0
L1 Rx processing : 420.0
PUSCH inner-receiver : 170.0
Schedule Response : 3.0
DL & UL scheduling timing : 8.0
UL Indication : 3.0
Slot Indication : 8.0
DeviationThreshold :
feprx : 0.25
feptx_prec : 0.25
feptx_ofdm : 0.25
feptx_total : 0.25
L1 Tx processing : 0.25
DLSCH encoding : 0.25
L1 Rx processing : 0.25
PUSCH inner-receiver : 0.25
Schedule Response : 1.00
DL & UL scheduling timing : 0.50
UL Indication : 1.00
Slot Indication : 0.50

View File

@@ -1,11 +1,11 @@
#this is a configuration file
#used to build real time processing statistics
#for 5G NR phy test (gNB terminate)
Title : Processing Time (us)
Title : Processing Time (us) from datalog_rt_stats.2x2.yaml
ColNames :
- Metric
- Average; Max; Count
- Average vs Reference Deviation (Reference Value; Acceptability Threshold)
- Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)
Ref :
feprx : 120.0
feptx_prec : 30.0
@@ -15,18 +15,20 @@ Ref :
DLSCH encoding : 230.0
L1 Rx processing : 175.0
PUSCH inner-receiver : 100.0
PUSCH decoding : 180.0
DL & UL scheduling timing : 37.0
UL Indication : 38.0
Threshold :
feprx : 1.25
feptx_prec : 1.25
feptx_ofdm : 1.25
feptx_total : 1.25
L1 Tx processing : 1.25
DLSCH encoding : 1.25
L1 Rx processing : 1.25
PUSCH inner-receiver : 1.25
PUSCH decoding : 1.25
DL & UL scheduling timing : 1.25
UL Indication : 1.25
Schedule Response : 3.0
DL & UL scheduling timing : 11.0
UL Indication : 3.0
Slot Indication : 14.0
DeviationThreshold :
feprx : 0.25
feptx_prec : 0.25
feptx_ofdm : 0.25
feptx_total : 0.25
L1 Tx processing : 0.25
DLSCH encoding : 0.25
L1 Rx processing : 0.25
PUSCH inner-receiver : 0.25
Schedule Response : 1.00
DL & UL scheduling timing : 0.50
UL Indication : 1.00
Slot Indication : 0.25

View File

@@ -1,11 +1,11 @@
#this is a configuration file
#used to build real time processing statistics
#for 5G NR phy test (gNB terminate)
Title : Processing Time (us)
Title : Processing Time (us) from datalog_rt_stats.60.2x2.yaml
ColNames :
- Metric
- Average; Max; Count
- Average vs Reference Deviation (Reference Value; Acceptability Threshold)
- Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)
Ref :
feprx : 84.0
feptx_prec : 14.0
@@ -15,20 +15,20 @@ Ref :
DLSCH encoding : 177.0
L1 Rx processing : 345.0
PUSCH inner-receiver : 210.0
PUSCH decoding : 2200.0
Schedule Response : 111.0
DL & UL scheduling timing : 20.0
UL Indication : 127.0
Threshold :
feprx : 1.25
feptx_prec : 1.25
feptx_ofdm : 1.25
feptx_total : 1.25
L1 Tx processing : 1.25
DLSCH encoding : 1.25
L1 Rx processing : 1.25
PUSCH inner-receiver : 1.25
PUSCH decoding : 1.25
Schedule Response : 48.0
DL & UL scheduling timing : 1.25
UL Indication : 1.25
Schedule Response : 3.0
DL & UL scheduling timing : 13.0
UL Indication : 3.0
Slot Indication : 15.0
DeviationThreshold :
feprx : 0.25
feptx_prec : 0.25
feptx_ofdm : 0.25
feptx_total : 0.25
L1 Tx processing : 0.25
DLSCH encoding : 0.25
L1 Rx processing : 0.25
PUSCH inner-receiver : 0.25
Schedule Response : 1.00
DL & UL scheduling timing : 0.35
UL Indication : 1.00
Slot Indication : 0.35

View File

@@ -1,34 +1,34 @@
#this is a configuration file
#used to build real time processing statistics
#for 5G NR phy test (gNB terminate)
Title : Processing Time (us)
Title : Processing Time (us) from datalog_rt_stats.default.yaml
ColNames :
- Metric
- Average; Max; Count
- Average vs Reference Deviation (Reference Value; Acceptability Threshold)
- Average vs Reference Deviation (Reference Value; Acceptability Deviation Threshold)
Ref :
feprx : 43.0
feptx_prec : 13.0
feptx_ofdm : 33.0
feptx_total : 55.0
L1 Tx processing : 170.0
DLSCH encoding : 118.0
L1 Rx processing : 305.0
L1 Tx processing : 220.0
DLSCH encoding : 130.0
L1 Rx processing : 387.0
PUSCH inner-receiver : 150.0
PUSCH decoding : 2200.0
Schedule Response : 30.0
DL & UL scheduling timing : 10.0
UL Indication : 40.0
Threshold :
feprx : 1.25
feptx_prec : 1.25
feptx_ofdm : 1.25
feptx_total : 1.25
L1 Tx processing : 1.25
DLSCH encoding : 1.25
L1 Rx processing : 1.25
PUSCH inner-receiver : 1.25
PUSCH decoding : 1.25
Schedule Response : 1.25
DL & UL scheduling timing : 1.25
UL Indication : 1.25
Schedule Response : 3.0
DL & UL scheduling timing : 6.0
UL Indication : 3.0
Slot Indication : 7.0
DeviationThreshold :
feprx : 0.25
feptx_prec : 0.25
feptx_ofdm : 0.25
feptx_total : 0.25
L1 Tx processing : 0.25
DLSCH encoding : 0.25
L1 Rx processing : 0.25
PUSCH inner-receiver : 0.25
Schedule Response : 1.00
DL & UL scheduling timing : 0.50
UL Indication : 1.00
Slot Indication : 0.50

View File

@@ -0,0 +1,221 @@
#!/bin/bash
# Modified by Karim Boutiba (karim.boutiba@eurecom.fr)
# mbim-set-ip script version 1.1
# Modified mbimcli IPv4 IPv6 parsing script based on parts of project https://github.com/grandcentrix/thinkpad-x260-modem-scripts
# Licensed under the Apache License, Version 2.0
# Modified by Jörgen Storvist, Techship http://www.techship.com
# Further details in the Techship FAQ sections on using MBIM and setting correct modes in cellular modules:
# https://techship.com/faq/how-to-set-up-a-simple-data-connection-over-the-mbim-interface-using-libmbim-and-driver-cdc-mbim-in-linux/
#
# Installation & Usage:
#
# Verify that the cellular module is exposing the MBIM interface over the USB interface.
# Use mbimcli to check status for the cellular connection and enter the PIN code if necessary.
# Configure mbim-network.conf and place in /etc/ (example file included in the archive, check link bellow for details).
# https://www.freedesktop.org/software/libmbim/man/latest/mbim-network.1.html
# Start the mbim data connection with command:
# mbim-network <MBIM-INTERFACE> start
# Ensure execution of mbim-set-ip script with sufficient system priviledges
# ./mbim-set-ip <MBIM-INTERFACE> <NETWORK-INTERFACE>
#
# Examples:
# mbimcli -d /dev/cdc-wdm0 -p --query-device-caps
# mbimcli -d /dev/cdc-wdm0 -p --enter-pin=1234
# mbim-network /dev/cdc-wdm0 start
# ./mbim-set-ip /dev/cdc-wdm0 wwan0
#
# You should now be able to ping over the data connection.
# IP v4 ping: (only if IPv4 address was acquired from cellular module)
# ping -4 -I wwan0 8.8.8.8
# ping -4 -I wwan0 google.com
# IP v6 ping: (only if IPv6 address was acquired from cellular module)
# ping -6 -I wwan0 2001:4860:4860::8888
# ping -6 -I wwan0 google.com
#
# The script relies on the linux tools mbimcli, ip, systemd-resolve
# (Tested on libmbim 1.16.0 running on Ubuntu 18.10 cosmic (development) with kernel version 4.15.0)
# Details on mbim-network and mbimcli
# https://www.freedesktop.org/software/libmbim/man/latest/mbim-network.1.html
# https://www.freedesktop.org/software/libmbim/man/latest/mbimcli.1.html
ipv4_addresses=()
ipv4_gateway=""
ipv4_dns=()
ipv4_mtu=""
ipv6_addresses=()
ipv6_gateway=""
ipv6_dns=()
ipv6_mtu=""
#CONTROL-IFACE
CONTROLDEV="$1"
#WWAN-IFACE
DEV="$2"
SESSION="$3"
echo $SESSION
echo "Requesting IPv4 and IPv6 information through mbimcli proxy:"
mbimcli -d $CONTROLDEV -p --query-ip-configuration
IPDATA=$(mbimcli -d $CONTROLDEV -p --query-ip-configuration=$SESSION)
function parse_ip {
# IP [0]: '10.134.203.177/30'
local line_re="IP \[([0-9]+)\]: '(.+)'"
local input=$1
if [[ $input =~ $line_re ]]; then
local ip_cnt=${BASH_REMATCH[1]}
local ip=${BASH_REMATCH[2]}
fi
echo "$ip"
}
function parse_gateway {
# Gateway: '10.134.203.178'
local line_re="Gateway: '(.+)'"
local input=$1
if [[ $input =~ $line_re ]]; then
local gw=${BASH_REMATCH[1]}
fi
echo "$gw"
}
function parse_dns {
# DNS [0]: '10.134.203.177/30'
local line_re="DNS \[([0-9]+)\]: '(.+)'"
local input=$1
if [[ $input =~ $line_re ]]; then
local dns_cnt=${BASH_REMATCH[1]}
local dns=${BASH_REMATCH[2]}
fi
echo "$dns"
}
function parse_mtu {
# MTU: '1500'
local line_re="MTU: '([0-9]+)'"
local input=$1
if [[ $input =~ $line_re ]]; then
local mtu=${BASH_REMATCH[1]}
fi
echo "$mtu"
}
while read -r line || [[ -n "$line" ]] ; do
[ -z "$line" ] && continue
case "$line" in
*"IPv4 configuration available: 'none'"*)
state="start"
continue
;;
*"IPv4 configuration available"*)
state="ipv4"
continue
;;
*"IPv6 configuration available: 'none'"*)
state="start"
continue
;;
*"IPv6 configuration available"*)
state="ipv6"
continue
;;
*)
;;
esac
case "$state" in
"ipv4")
case "$line" in
*"IP"*)
row=$(parse_ip "$line")
ipv4_addresses+=("$row")
continue
;;
*"Gateway"*)
row=$(parse_gateway "$line")
ipv4_gateway="$row"
continue
;;
*"DNS"*)
row=$(parse_dns "$line")
ipv4_dns+=("$row")
continue
;;
*"MTU"*)
row=$(parse_mtu "$line")
ipv4_mtu="$row"
continue
;;
*)
;;
esac
;;
"ipv6")
case "$line" in
*"IP"*)
row=$(parse_ip "$line")
ipv6_addresses+=("$row")
continue
;;
*"Gateway"*)
row=$(parse_gateway "$line")
ipv6_gateway="$row"
continue
;;
*"DNS"*)
row=$(parse_dns "$line")
ipv6_dns+=("$row")
continue
;;
*"MTU"*)
row=$(parse_mtu "$line")
ipv6_mtu="$row"
continue
;;
*)
continue
;;
esac
;;
*)
continue
;;
esac
done <<< "$IPDATA"
execfile=$(mktemp)
printf "ip link set $DEV down\n" >> $execfile
printf "ip addr flush dev $DEV \n" >> $execfile
printf "ip -6 addr flush dev $DEV \n" >> $execfile
printf "ip link set $DEV up\n" >> $execfile
if [[ "${#ipv4_addresses[@]}" > 0 ]]; then
printf "ip addr add %s dev $DEV broadcast +\n" "${ipv4_addresses[@]}" >> $execfile
printf "ip route add 192.168.61.0/24 via $ipv4_gateway dev $DEV\n" >> $execfile
if [ -n "$ipv4_mtu" ]; then
printf "ip link set mtu $ipv4_mtu dev $DEV \n" >> $execfile
fi
if [[ "${#ipv4_dns[@]}" > 0 ]]; then
printf "resolvectl -4 --interface=$DEV --set-dns=%s\n" "${ipv4_dns[@]}" >>$execfile
fi
fi
if [[ "${#ipv6_addresses[@]}" > 0 ]]; then
printf "ip -6 addr add %s dev $DEV\n" "${ipv6_addresses[@]}" >> $execfile
printf "ip -6 route add default via $ipv6_gateway dev $DEV\n" >> $execfile
if [ -n "$ipv6_mtu" ]; then
printf "ip -6 link set mtu $ipv6_mtu dev $DEV\n" >> $execfile
fi
if [[ "${#ipv6_dns[@]}" > 0 ]]; then
printf "systemd-resolve -6 --interface=$DEV --set-dns=%s\n" "${ipv6_dns[@]}" >>$execfile
fi
fi
echo "Applying the following network interface configurations:"
cat $execfile
bash $execfile
rm $execfile
echo "Network interface configurations completed."

View File

@@ -0,0 +1,10 @@
set -x
sudo mbimcli -p -d /dev/cdc-wdm0 --set-radio-state=off
sleep 1
sudo mbimcli -p -d /dev/cdc-wdm0 --set-radio-state=on
sleep 2
sudo mbimcli -p -d /dev/cdc-wdm0 --attach-packet-service
sudo mbimcli -p -d /dev/cdc-wdm0 --connect=session-id=0,access-string=oai.ipv4,ip-type=ipv4
sudo /opt/mbim/mbim-set-ip.sh /dev/cdc-wdm0 wwan0 0

View File

@@ -0,0 +1,3 @@
set -x
sudo mbimcli -p -d /dev/cdc-wdm0 --set-radio-state=off

View File

@@ -992,7 +992,7 @@ class RANManagement():
NSA_RAPROC_PUSCH_check = 1
# Collect information on UE DLSCH and ULSCH statistics
keys = {'dlsch_rounds','dlsch_total_bytes','ulsch_rounds','ulsch_total_bytes_scheduled'}
keys = {'dlsch_rounds','ulsch_rounds'}
for k in keys:
result = re.search(k, line)
if result is None:
@@ -1161,7 +1161,7 @@ class RANManagement():
dlcheckers = [] if 'd_retx_th' not in checkers else checkers['d_retx_th']
retx_status[ue]['dl'] = self._analyzeUeRetx(dlulstat['dlsch_rounds'], dlcheckers, r'^.*dlsch_rounds\s+(\d+)\/(\d+)\/(\d+)\/(\d+),\s+dlsch_errors\s+(\d+)')
ulcheckers = [] if 'u_retx_th' not in checkers else checkers['u_retx_th']
retx_status[ue]['ul'] = self._analyzeUeRetx(dlulstat['ulsch_rounds'], ulcheckers, r'^.*ulsch_rounds\s+(\d+)\/(\d+)\/(\d+)\/(\d+),\s+.*,\s+ulsch_errors\s+(\d+)')
retx_status[ue]['ul'] = self._analyzeUeRetx(dlulstat['ulsch_rounds'], ulcheckers, r'^.*ulsch_rounds\s+(\d+)\/(\d+)\/(\d+)\/(\d+),\s+ulsch_errors\s+(\d+)')
#real time statistics
@@ -1179,8 +1179,10 @@ class RANManagement():
self.datalog_rt_stats=datalog_rt_stats
#check if there is a fail => will render the test as failed
for k in datalog_rt_stats['Data']:
if float(datalog_rt_stats['Data'][k][3])> datalog_rt_stats['Threshold'][k]: #condition for fail : avg/ref is greater than the fixed threshold
logging.debug('\u001B[1;30;43m datalog_rt_stats metric ' + k + '=' + datalog_rt_stats['Data'][k][3] + ' > threshold ' + str(datalog_rt_stats['Threshold'][k]) + ' \u001B[0m')
valnorm = float(datalog_rt_stats['Data'][k][3])
dev = datalog_rt_stats['DeviationThreshold'][k]
if valnorm > 1.0 + dev or valnorm < 1.0 - dev: # condition for fail : avg/ref deviates by more than "deviation threshold"
logging.debug(f'\u001B[1;30;43m normalized datalog_rt_stats metric {k}={valnorm} deviates by more than {dev}\u001B[0m')
RealTimeProcessingIssue = True
else:
statMsg = 'No real time stats found in the log file\n'

View File

@@ -24,9 +24,9 @@ gnb :
DLSCH encoding:
L1 Rx processing:
PUSCH inner-receiver:
PUSCH decoding:
DL & UL scheduling timing:
UL Indication:
Slot Indication:
graph :
page1:
dlsch_err:
@@ -44,6 +44,6 @@ gnb :
rt.L1 Rx processing:
page4:
rt.PUSCH inner-receiver:
rt.PUSCH decoding:
rt.DL & UL scheduling timing:
rt.UL Indication:
rt.Slot Indication:

View File

@@ -30,6 +30,7 @@
000021
000022
000023
000024
020021
100021
</TestCaseRequestedList>
@@ -66,6 +67,12 @@
<nb_healthy>14</nb_healthy>
</testCase>
<testCase id="000024">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3</id>
</testCase>
<testCase id="020021">
<class>Ping</class>
<desc>Ping ext-dn from all NR-UEs</desc>

View File

@@ -29,6 +29,7 @@
100021
000021
000022
000023
020021
030021
030022
@@ -59,6 +60,12 @@
<nb_healthy>8</nb_healthy>
</testCase>
<testCase id="000023">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
</testCase>
<testCase id="020021">
<class>Ping</class>
<desc>Ping ext-dn from all NR-UEs</desc>

View File

@@ -28,7 +28,6 @@
<TestCaseRequestedList>
111111
100011
000010
000011
000012
000013
@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase>
<testCase id="000010">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000011">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy>
</testCase>
<testCase id="000012">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc>
<desc>Deploy OAI 5G gNB+UE RF sim SA</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-gnb</services>
<nb_healthy>6</nb_healthy>
<services>oai-gnb oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="000013">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
</testCase>
<testCase id="020011">

View File

@@ -28,7 +28,6 @@
<TestCaseRequestedList>
111111
100001
000000
000001
000002
000003
@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy>
</testCase>
<testCase id="000002">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc>
<desc>Deploy OAI 5G gNB+UE RFsim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-gnb</services>
<nb_healthy>6</nb_healthy>
<services>oai-gnb oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="000003">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
</testCase>
<testCase id="020001">

View File

@@ -28,7 +28,6 @@
<TestCaseRequestedList>
111111
100001
000000
000001
000002
000003
@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy>
</testCase>
<testCase id="000002">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc>
<desc>Deploy OAI 5G gNB+UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-gnb</services>
<nb_healthy>6</nb_healthy>
<services>oai-gnb oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="000003">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
</testCase>
<testCase id="020001">

View File

@@ -43,18 +43,16 @@
<testCase id="000020">
<class>DeployGenObject</class>
<desc>Deploy OAI-DU</desc>
<desc>Deploy OAI-DU+nrUE</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
<services>oai-du</services>
<nb_healthy>1</nb_healthy>
<services>oai-du oai-nr-ue</services>
<nb_healthy>2</nb_healthy>
</testCase>
<testCase id="000021">
<class>DeployGenObject</class>
<desc>Deploy nrUE</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>2</nb_healthy>
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
</testCase>
<testCase id="020021">

View File

@@ -50,7 +50,7 @@
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_fdd_phytest_rrc.config</command>
<command>docker volume rm 5g_rfsimulator_fdd_phytest_rrc.config -f</command>
</testCase>
<testCase id="000010">

View File

@@ -22,13 +22,12 @@
-->
<testCaseList>
<htmlTabRef>rfsim-fr2-32prb-5gnr-tdd</htmlTabRef>
<htmlTabName>Monolithic FR2 do-ra gNB</htmlTabName>
<htmlTabName>Monolithic FR2 gNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
111111
100001
004000
000000
000001
020001
@@ -44,42 +43,35 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase>
<testCase id="004000">
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_fr2_32prb_rrc.config</command>
</testCase>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy OAI gNB</desc>
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
<services>oai-gnb</services>
<nb_healthy>1</nb_healthy>
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy>
</testCase>
<testCase id="000001">
<class>DeployGenObject</class>
<desc>Deploy OAI NR-UE</desc>
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>2</nb_healthy>
<services>oai-gnb oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping gNB from NR-UE</desc>
<desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id>
<ping_args>-c20 -i0.2 10.0.1.1</ping_args>
<ping_args>-c 20 -i0.2 192.168.72.135</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
<testCase id="020002">
<class>Ping</class>
<desc>Ping NR-UE from gNB</desc>
<id>rfsim5g_gnb_nos1</id>
<ping_args>-c20 -i0.2 10.0.1.2</ping_args>
<desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_ext_dn</id>
<ping_args>-c 20 12.1.1.2 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
@@ -87,8 +79,8 @@
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
<d_retx_th>0,0,0,0</d_retx_th>
<u_retx_th>0,0,0,0</u_retx_th>
<d_retx_th>10,0,0,0</d_retx_th>
<u_retx_th>10,0,0,0</u_retx_th>
</testCase>
</testCaseList>

View File

@@ -26,7 +26,6 @@
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100002
004000
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
@@ -37,13 +36,6 @@
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
</testCase>
<testCase id="004000">
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_fr2_32prb_rrc.config</command>
</testCase>
<testCase id="222222">
<class>Clean_Test_Server_Images</class>
<desc>Clean Test Images on Test Server</desc>

View File

@@ -48,7 +48,7 @@
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_tdd_dora_rrc.config</command>
<command>docker volume rm 5g_rfsimulator_tdd_dora_rrc.config -f</command>
</testCase>
<testCase id="000000">

View File

@@ -28,7 +28,6 @@
<TestCaseRequestedList>
111111
100001
000000
000001
000002
000003
@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy>
</testCase>
<testCase id="000002">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc>
<desc>Deploy OAI 5G gNB+nrUE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-gnb</services>
<nb_healthy>6</nb_healthy>
<services>oai-gnb oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="000003">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
</testCase>
<testCase id="020001">

View File

@@ -30,7 +30,7 @@
111111
100000
010000
010010
030101
010001
000001
@@ -39,7 +39,6 @@
070000
070001
010010
010002
030201
</TestCaseRequestedList>
@@ -80,28 +79,16 @@
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="010000">
<class>Initialize_UE</class>
<desc>Initialize Quectel</desc>
<id>nrmodule2_quectel</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>nrmodule2_quectel</id>
</testCase>
<testCase id="010001">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>nrmodule2_quectel</id>
<id>up2</id>
</testCase>
<testCase id="050000">
<class>Ping</class>
<desc>Ping: 20 pings</desc>
<id>nrmodule2_quectel</id>
<id>up2</id>
<ping_args>-c 20 %cn_ip%</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>60</ping_rttavg_threshold>
@@ -110,8 +97,8 @@
<testCase id="050001">
<class>Ping</class>
<desc>Ping: 100 pings, size 1024</desc>
<id>nrmodule2_quectel</id>
<ping_args>-c 100 -s 1024 -i 0,2 %cn_ip%</ping_args>
<id>up2</id>
<ping_args>-c 100 -s 1024 -i 0.2 %cn_ip%</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>60</ping_rttavg_threshold>
</testCase>
@@ -121,7 +108,7 @@
<desc>iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 26M -t 60</iperf_args>
<direction>DL</direction>
<id>nrmodule2_quectel</id>
<id>up2</id>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
<iperf_profile>single-ue</iperf_profile>
@@ -132,7 +119,7 @@
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 7M -t 60</iperf_args>
<direction>UL</direction>
<id>nrmodule2_quectel</id>
<id>up2</id>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
<iperf_profile>single-ue</iperf_profile>
@@ -141,7 +128,7 @@
<testCase id="010010">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>nrmodule2_quectel</id>
<id>up2</id>
</testCase>
<testCase id="030201">

View File

@@ -30,7 +30,7 @@
111111
100000
010000
010010
030101
010001
000001
@@ -39,7 +39,6 @@
070000
070001
010010
010002
030201
</TestCaseRequestedList>
@@ -80,28 +79,16 @@
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="010000">
<class>Initialize_UE</class>
<desc>Initialize Quectel</desc>
<id>nrmodule2_quectel</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>nrmodule2_quectel</id>
</testCase>
<testCase id="010001">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>nrmodule2_quectel</id>
<id>up2</id>
</testCase>
<testCase id="050000">
<class>Ping</class>
<desc>Ping: 20 pings</desc>
<id>nrmodule2_quectel</id>
<id>up2</id>
<ping_args>-c 20 %cn_ip%</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>60</ping_rttavg_threshold>
@@ -110,8 +97,8 @@
<testCase id="050001">
<class>Ping</class>
<desc>Ping: 100 pings, size 1024</desc>
<id>nrmodule2_quectel</id>
<ping_args>-c 100 -s 1024 -i 0,2 %cn_ip%</ping_args>
<id>up2</id>
<ping_args>-c 100 -s 1024 -i 0.2 %cn_ip%</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>60</ping_rttavg_threshold>
</testCase>
@@ -121,7 +108,7 @@
<desc>iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 1M -t 60</iperf_args>
<direction>DL</direction>
<id>nrmodule2_quectel</id>
<id>up2</id>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
<iperf_profile>single-ue</iperf_profile>
@@ -132,7 +119,7 @@
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 7M -t 60</iperf_args>
<direction>UL</direction>
<id>nrmodule2_quectel</id>
<id>up2</id>
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
<iperf_profile>single-ue</iperf_profile>
@@ -141,7 +128,7 @@
<testCase id="010010">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>nrmodule2_quectel</id>
<id>up2</id>
</testCase>
<testCase id="030201">

View File

@@ -26,6 +26,8 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010001
010002
030202
030201
222220
@@ -33,6 +35,17 @@
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="030201">
<class>Undeploy_Object</class>
<desc>Undeploy eNB</desc>

View File

@@ -26,10 +26,23 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010001
010002
030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="030201">
<class>Undeploy_Object</class>
<desc>Undeploy gNB</desc>

View File

@@ -37,6 +37,10 @@
370001
370000
370002
360001
100002
360002
350000
310011
310002
330201
@@ -114,9 +118,9 @@
<testCase id="350000">
<class>Ping</class>
<desc>Ping: 20pings in 20sec</desc>
<desc>Ping: 50pings in 10sec</desc>
<id>idefix</id>
<ping_args>-c 20 %cn_ip%</ping_args>
<ping_args>-c 20 -i 0.2 %cn_ip%</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>25</ping_rttavg_threshold>
</testCase>
@@ -152,6 +156,27 @@
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="360001">
<class>Custom_Command</class>
<desc>Trigger Reestablishment (on DU)</desc>
<node>ofqot</node>
<command>echo ci force_reestab | nc -N 192.168.68.195 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment'</command>
<command_fail>yes</command_fail>
</testCase>
<testCase id="360002">
<class>Custom_Command</class>
<desc>Verify Reestablishment (on CU)</desc>
<node>ofqot</node>
<command>echo ci get_reestab_count | nc -N 192.168.68.194 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1'</command>
<command_fail>yes</command_fail>
</testCase>
<testCase id="100002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
</testCase>
<testCase id="330201">
<class>Undeploy_Object</class>
<desc>Undeploy CU-DU</desc>

View File

@@ -26,11 +26,24 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010001
010002
330201
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="330201">
<class>Undeploy_Object</class>
<desc>Undeploy CU-CP/CU-UP/DU</desc>

View File

@@ -26,10 +26,23 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010001
010002
230201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="230201">
<class>Undeploy_Object</class>
<desc>Undeploy CU-DU</desc>

View File

@@ -26,10 +26,23 @@
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
010001
010002
030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="030201">
<class>Undeploy_Object</class>
<desc>Undeploy gNB</desc>

View File

@@ -0,0 +1,68 @@
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>gNB-PHY-Test-100-2x2</htmlTabRef>
<htmlTabName>Timing phytest 100 MHz 2x2</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
100000 390101 000001 390109 200000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>Enable Sleep States</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="390101">
<class>Initialize_eNB</class>
<desc>Initialize gNB USRP</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.273prb.usrpn300.phytest-dora.conf --phy-test -q -U 787200 -T 273 -t 23 -D 130175 -m 23 -M 273 -l 2 --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
<rt_stats_cfg>datalog_rt_stats.100.2x2.yaml</rt_stats_cfg>
<air_interface>NR</air_interface>
<USRP_IPAddress>192.168.20.2</USRP_IPAddress>
<cmd_prefix>numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0</cmd_prefix>
</testCase>
<testCase id="000001">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
</testCase>
<testCase id="390109">
<class>Terminate_eNB</class>
<desc>Terminate gNB</desc>
<air_interface>NR</air_interface>
</testCase>
</testCaseList>

View File

@@ -65,7 +65,7 @@ $ docker logout
All the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_rfsimulator` folder for a deployment with monolithic gNB.
For a deployment with the gNB split in CU and DU components, please refer to the `../5g_f1_rfsimulator` folder.
For a deployment with the gNB split in CU-CP, CU-UP, and DU components, please refer to the ../5g_rfsimulator_e1` folder.
For a deployment with the gNB split in CU-CP, CU-UP, and DU components, please refer to the `../5g_rfsimulator_e1` folder.
## 2.1. Deploy OAI 5G Core Network ##

View File

@@ -1,18 +1,99 @@
version: '3.8'
services:
mysql:
container_name: "rfsim5g-mysql"
image: mysql:8.0
volumes:
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
environment:
- TZ=Europe/Paris
- MYSQL_DATABASE=oai_db
- MYSQL_USER=test
- MYSQL_PASSWORD=test
- MYSQL_ROOT_PASSWORD=linux
healthcheck:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 30
networks:
public_net:
ipv4_address: 192.168.71.131
oai-amf:
container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v2.0.0
environment:
- TZ=Europe/paris
volumes:
- ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
depends_on:
- mysql
networks:
public_net:
ipv4_address: 192.168.71.132
oai-smf:
container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v2.0.0
environment:
- TZ=Europe/Paris
volumes:
- ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
depends_on:
- oai-amf
networks:
public_net:
ipv4_address: 192.168.71.133
oai-upf:
container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-upf:v2.0.0
environment:
- TZ=Europe/Paris
volumes:
- ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
depends_on:
- oai-smf
cap_add:
- NET_ADMIN
- SYS_ADMIN
cap_drop:
- ALL
privileged: true
networks:
public_net:
ipv4_address: 192.168.71.134
traffic_net:
ipv4_address: 192.168.72.134
oai-ext-dn:
privileged: true
container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:focal
entrypoint: /bin/bash -c \
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on:
- oai-upf
networks:
traffic_net:
ipv4_address: 192.168.72.135
healthcheck:
test: /bin/bash -c "ping -c 2 192.168.72.134"
interval: 10s
timeout: 5s
retries: 5
oai-gnb:
image: oaisoftwarealliance/oai-gnb:develop
privileged: true
container_name: rfsim5g-oai-gnb
environment:
USE_ADDITIONAL_OPTIONS: --do-ra --rfsim --rfsimulator.wait_timeout 20 --noS1 --log_config.global_log_options level,nocolor,time
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
networks:
public_net:
ipv4_address: 192.168.71.140
volumes:
- ../../conf_files/gnb.band261.32prb.rfsim.phytest-dora.conf:/opt/oai-gnb/etc/gnb.conf
- rrc.config:/opt/oai-gnb/
- ../../conf_files/gnb.sa.band261.u3.32prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
@@ -24,11 +105,12 @@ services:
privileged: true
container_name: rfsim5g-oai-nr-ue
environment:
USE_ADDITIONAL_OPTIONS: --do-ra --rfsim --noS1 --reconfig-file etc/rrc/reconfig.raw --rbconfig-file etc/rrc/rbconfig.raw --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
USE_ADDITIONAL_OPTIONS: --sa --rfsim
--rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
-r 32 --numerology 3 --band 261 -C 27533160000 --ssb 73
ASAN_OPTIONS: detect_leaks=0
volumes:
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
- rrc.config:/opt/oai-nr-ue/etc/rrc/
depends_on:
- oai-gnb
networks:
@@ -40,9 +122,6 @@ services:
timeout: 5s
retries: 5
volumes:
rrc.config:
networks:
public_net:
driver: bridge
@@ -52,3 +131,11 @@ networks:
- subnet: 192.168.71.128/26
driver_opts:
com.docker.network.bridge.name: "rfsim5g-public"
traffic_net:
driver: bridge
name: rfsim5g-oai-traffic-net
ipam:
config:
- subnet: 192.168.72.128/26
driver_opts:
com.docker.network.bridge.name: "rfsim5g-traffic"

View File

@@ -5,6 +5,8 @@ services:
privileged: true
network_mode: "host"
container_name: oai-gnb
ulimits:
core: -1 # for core dumps
environment:
TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa --tune-offset 20000000 -A 45 --log_config.global_log_options level,nocolor,time

View File

@@ -5,10 +5,12 @@ services:
privileged: true
network_mode: host
container_name: oai-nr-ue
ulimits:
core: -1 # for core dumps
#entrypoint: /bin/bash -c "sleep infinity"
environment:
TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --usrp-args type=n3xx,name=ni-n3xx-31641B9,addr=192.168.20.2 -r 106 --numerology 1 --band 78 -C 3511200000 --sa --ue-fo-compensation --ue-rxgain 65 --tune-offset 20000000 -A 45 --log_config.global_log_options level,nocolor,time --uicc0.imsi 208970000000111 --uicc0.nssai_sd 16777215
USE_ADDITIONAL_OPTIONS: --usrp-args type=n3xx,name=ni-n3xx-31641B9,addr=192.168.10.2 -r 106 --numerology 1 --band 78 -C 3511200000 --sa --ue-fo-compensation --ue-rxgain 65 --tune-offset 20000000 -A 45 --log_config.global_log_options level,nocolor,time --uicc0.imsi 208970000000111 --uicc0.nssai_sd 16777215
volumes:
- ../../conf_files/ue.sa.conf:/opt/oai-nr-ue/etc/nr-ue.conf
healthcheck:

View File

@@ -5,6 +5,8 @@ services:
image: oai-enb:latest
privileged: true
container_name: nsa-b200-enb
ulimits:
core: -1 # for core dumps
environment:
USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time,line_num,function

View File

@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest
privileged: true
container_name: nsa-b200-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function

View File

@@ -5,6 +5,8 @@ services:
privileged: true
network_mode: "host"
container_name: oai-gnb-aw2s
ulimits:
core: -1 # for core dumps
environment:
TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa

View File

@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest
privileged: true
container_name: sa-b200-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function

View File

@@ -5,8 +5,10 @@ services:
image: oai-gnb:latest
privileged: true
container_name: sa-cucp-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
USE_ADDITIONAL_OPTIONS: --sa --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function
volumes:
- ../../conf_files/gnb-cucp.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf
networks:
@@ -23,6 +25,8 @@ services:
image: oai-nr-cuup:latest
privileged: true
container_name: sa-cuup-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
volumes:
@@ -41,9 +45,17 @@ services:
image: oai-gnb:latest
privileged: true
container_name: sa-du-b200-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx -E --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1 --RUs.[0].att_rx 18 --RUs.[0].att_tx 18
USE_ADDITIONAL_OPTIONS: --sa
--RUs.[0].sdr_addrs serial=30C51D4
--continuous-tx -E
--telnetsrv --telnetsrv.shrmod ci
--gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1
--RUs.[0].att_rx 18 --RUs.[0].att_tx 18
--log_config.global_log_options level,nocolor,time,line_num,function
volumes:
- ../../conf_files/gnb-du.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
- /dev:/dev

View File

@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest
privileged: true
container_name: sa-cu-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_ADDITIONAL_OPTIONS: --sa --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function
volumes:
@@ -24,9 +26,11 @@ services:
image: oai-gnb:latest
privileged: true
container_name: sa-du-b200-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 0 --MACRLCs.[0].ul_max_mcs 28 --L1s.[0].max_ldpc_iterations 20
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 0 --L1s.[0].max_ldpc_iterations 20
volumes:
- ../../conf_files/gnb-du.sa.band1.52prb.usrpb210.conf:/opt/oai-gnb/etc/gnb.conf
- /dev:/dev

View File

@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest
privileged: true
container_name: sa-b200-gnb
ulimits:
core: -1 # for core dumps
environment:
USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function -E

View File

@@ -504,7 +504,7 @@ function main() {
# Doxygen Support #
###################
if [ "$BUILD_DOXYGEN" = "1" ] ; then
echo_info "Built Doxygen based documentation. The documentation file is located here: $OPENAIR_DIR/$BUILD_DIR/build/html/index.html"
echo_info "Built Doxygen based documentation. The documentation file is located here: $DIR/$BUILD_DIR/build/doc/html/index.html"
fi
# TODO: once we got the CMakeLists.txt file done for the ORAN files, remove the following lines

View File

@@ -107,6 +107,8 @@ if (xran_VERSION_STRING STREQUAL "oran_e_maintenance_release_v1.0")
set(xran_VERSION 5.1.0)
elseif (xran_VERSION_STRING STREQUAL "oran_e_maintenance_release_v1.1")
set(xran_VERSION 5.1.1)
elseif (xran_VERSION_STRING STREQUAL "oran_e_maintenance_release_v1.2")
set(xran_VERSION 5.1.2)
endif()
unset(xran_VERSION_LINE)
unset(xran_VERSION_STRING)

View File

@@ -1,5 +1,5 @@
diff --git a/fhi_lib/app/src/common.h b/fhi_lib/app/src/common.h
index 7508117..a93c085 100644
index 7508117..0dbe0bd 100644
--- a/fhi_lib/app/src/common.h
+++ b/fhi_lib/app/src/common.h
@@ -28,7 +28,7 @@
@@ -7,12 +7,12 @@ index 7508117..a93c085 100644
#include <rte_mbuf.h>
-#define VERSIONX "oran_e_maintenance_release_v1.0"
+#define VERSIONX "oran_e_maintenance_release_v1.1"
+#define VERSIONX "oran_e_maintenance_release_v1.2"
#define APP_O_DU 0
#define APP_O_RU 1
diff --git a/fhi_lib/lib/Makefile b/fhi_lib/lib/Makefile
index de141bf..5bcde3d 100644
index de141bf..c12b912 100644
--- a/fhi_lib/lib/Makefile
+++ b/fhi_lib/lib/Makefile
@@ -23,11 +23,11 @@ MYCUSTOMSPACE1='------------------------------------------------------------'
@@ -30,6 +30,15 @@ index de141bf..5bcde3d 100644
OBJDUMP := objdump
ifeq ($(SHELL),cmd.exe)
@@ -57,7 +57,7 @@ endif
RTE_TARGET ?= x86_64-native-linux-icc
-RTE_INC := $(shell PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --cflags-only-I libdpdk)
+RTE_INC := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):/usr/lib64/pkgconfig:$(RTE_SDK)/build/meson-uninstalled pkgconf --cflags-only-I libdpdk)
API_DIR := $(PROJECT_DIR)/api
SRC_DIR := $(PROJECT_DIR)/src
ETH_DIR := $(PROJECT_DIR)/ethernet
@@ -95,8 +95,7 @@ CPP_SRC = $(SRC_DIR)/xran_compression.cpp \
$(SRC_DIR)/xran_bfp_cplane32.cpp \
$(SRC_DIR)/xran_bfp_cplane64.cpp \
@@ -117,10 +126,18 @@ index 7d3afc5..3e00c5a 100644
uint16_t *num_prbu,
uint16_t *start_prbu,
diff --git a/fhi_lib/lib/ethernet/ethdi.c b/fhi_lib/lib/ethernet/ethdi.c
index b6ba257..74b3c26 100644
index b6ba257..b53325f 100644
--- a/fhi_lib/lib/ethernet/ethdi.c
+++ b/fhi_lib/lib/ethernet/ethdi.c
@@ -479,11 +479,13 @@ xran_ethdi_init_dpdk_io(char *name, const struct xran_io_cfg *io_cfg,
@@ -335,6 +335,7 @@ xran_ethdi_init_dpdk_io(char *name, const struct xran_io_cfg *io_cfg,
uint16_t count;
char *argv[] = { name, core_mask, "-n2", iova_mode, socket_mem, socket_limit, "--proc-type=auto",
+ "--no-telemetry",
"--file-prefix", name, "-a0000:00:00.0", bbdev_wdev, bbdev_vdev};
@@ -479,11 +480,13 @@ xran_ethdi_init_dpdk_io(char *name, const struct xran_io_cfg *io_cfg,
ctx->tx_ring[i] = rte_ring_create(ring_name, NUM_MBUFS_RING_TRX,
rte_lcore_to_socket_id(*lcore_id), RING_F_SC_DEQ);
PANIC_ON(ctx->tx_ring[i] == NULL, "failed to allocate rx ring");
@@ -134,7 +151,7 @@ index b6ba257..74b3c26 100644
}
}
} else {
@@ -553,7 +555,7 @@ xran_ethdi_init_dpdk_io(char *name, const struct xran_io_cfg *io_cfg,
@@ -553,7 +556,7 @@ xran_ethdi_init_dpdk_io(char *name, const struct xran_io_cfg *io_cfg,
ctx->up_dl_pkt_gen_ring[i] = rte_ring_create(ring_name, NUM_MBUFS_RING,
rte_lcore_to_socket_id(*lcore_id), /*RING_F_SC_DEQ*/0);
PANIC_ON(ctx->up_dl_pkt_gen_ring[i] == NULL, "failed to allocate dl gen ring");

View File

@@ -354,6 +354,7 @@ configmodule_interface_t *load_configmodule(int argc,
if (i == 0) {
printf("[CONFIG] config module %s loaded\n",cfgmode);
// Continue/Read from this
int idx = config_paramidx_fromname(Config_Params, sizeofArray(Config_Params), CONFIGP_DEBUGFLAGS);
Config_Params[idx].uptr = &(cfgptr->rtflags);
idx = config_paramidx_fromname(Config_Params, sizeofArray(Config_Params), CONFIGP_TMPDIR);

View File

@@ -126,6 +126,12 @@ int config_get(configmodule_interface_t *cfgif, paramdef_t *params, int numparam
if (cfgif != NULL) {
ret = cfgif->get(cfgif, params, numparams, prefix);
/* testing
printf("Num params: %d\n", numparams);
for (int i = 0; i < numparams; i++){
printf("%d, %s\n", i, params[i].optname);
}
end testing */
if (ret >= 0) {
config_process_cmdline(cfgif, params, numparams, prefix);

View File

@@ -44,17 +44,20 @@ typedef enum {
ngran_gNB_DU = 7,
ngran_eNB_MBMS_STA = 8,
ngran_gNB_CUCP = 9,
ngran_gNB_CUUP = 10
ngran_gNB_CUUP = 10,
ngran_gNB_IAB_donor_DU = 11,
ngran_gNB_IAB_node_DU = 12,
} ngran_node_t;
typedef enum { CPtype = 0, UPtype } E1_t;
#define NODE_IS_MONOLITHIC(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB || (nOdE_TyPe) == ngran_ng_eNB || (nOdE_TyPe) == ngran_gNB)
#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU || (nOdE_TyPe) == ngran_gNB_CUCP || (nOdE_TyPe) == ngran_gNB_CUUP)
#define NODE_IS_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_DU || (nOdE_TyPe) == ngran_gNB_DU)
#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU || (nOdE_TyPe) == ngran_gNB_CUCP || (nOdE_TyPe) == ngran_gNB_CUUP)
#define NODE_IS_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_DU || (nOdE_TyPe) == ngran_gNB_DU || (nOdE_TyPe) == ngran_gNB_IAB_donor_DU || (nOdE_TyPe) == ngran_gNB_IAB_node_DU)
#define NODE_IS_IAB_DONOR_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_gNB_IAB_donor_DU)
#define NODE_IS_IAB_NODE_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_gNB_IAB_node_DU)
#define NODE_IS_MBMS(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_MBMS_STA)
#define GTPV1_U_PORT_NUMBER (2152)
typedef enum { non_dynamic, dynamic } fiveQI_type_t;
#define maxSRBs 4
#endif

View File

@@ -41,6 +41,7 @@ struct PHY_VARS_gNB_s;
struct PHY_VARS_eNB_NB_IoT_s;
struct eNB_RRC_INST_s;
struct gNB_RRC_INST_s;
struct gNB_IAB_INFO_s;
struct eNB_MAC_INST_s;
struct eNB_MAC_INST_NB_IoT_s;
struct gNB_MAC_INST_s;
@@ -92,6 +93,8 @@ typedef struct {
//struct eNB_RRC_INST_NB_IoT_s **nb_iot_rrc;
/// NR RRC context variables
struct gNB_RRC_INST_s **nrrrc;
/// IAB context variables
struct gNB_IAB_INFO_s **iab;
/// MAC context variables
struct eNB_MAC_INST_s **mac;
/// NB_IoT MAC context variables

View File

@@ -497,6 +497,8 @@ int logInit (void)
register_log_component("GNB_APP","log",GNB_APP);
register_log_component("NR_RRC","log",NR_RRC);
register_log_component("NR_MAC","log",NR_MAC);
register_log_component("NR_MAC_DCI", "log", NR_MAC_DCI);
register_log_component("NR_PHY_DCI", "log", NR_PHY_DCI);
register_log_component("NR_PHY","log",NR_PHY);
register_log_component("NGAP","",NGAP);
register_log_component("ITTI","log",ITTI);

View File

@@ -161,16 +161,12 @@ extern "C" {
{NULL,-1}\
}
#define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B)
#define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B))
#define SET_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask | B)
#define CLEAR_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask & (~B))
typedef enum {
MIN_LOG_COMPONENTS = 0,
PHY = MIN_LOG_COMPONENTS,
@@ -219,6 +215,8 @@ typedef enum {
GNB_APP,
NR_RRC,
NR_MAC,
NR_MAC_DCI,
NR_PHY_DCI,
NR_PHY,
LOADER,
ASN1,
@@ -227,13 +225,11 @@ typedef enum {
ITTI,
UTIL,
MAX_LOG_PREDEF_COMPONENTS,
}
comp_name_t;
} comp_name_t;
#define MAX_LOG_DYNALLOC_COMPONENTS 20
#define MAX_LOG_COMPONENTS (MAX_LOG_PREDEF_COMPONENTS + MAX_LOG_DYNALLOC_COMPONENTS)
typedef struct {
char *name; /*!< \brief string name of item */
int value; /*!< \brief integer value of mapping */
@@ -252,7 +248,7 @@ typedef struct {
log_vprint_func_t vprint;
log_print_func_t print;
/* SR: make the log buffer component relative */
char log_buffer[MAX_LOG_TOTAL];
// char log_buffer[MAX_LOG_TOTAL];
} log_component_t;
@@ -265,8 +261,6 @@ typedef struct {
uint64_t dump_mask;
} log_t;
#ifdef LOG_MAIN
log_t *g_log;
#else
@@ -365,9 +359,6 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
" level: add log level indication in log messages\n"\
" thread: add threads names in log messages\n"
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* LOG global configuration parameters */
/* optname help paramflags XXXptr defXXXval type numelt */
@@ -396,41 +387,166 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
# if T_TRACER
#include "T.h"
/* per component, level dependent macros */
# define LOG_E(c, x...) do { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} } while (0)
# define LOG_W(c, x...) do { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)); if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} } while (0)
# define LOG_A(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);} } while (0)
# define LOG_I(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} } while (0)
# define LOG_D(c, x...) do { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} } while (0)
# define LOG_T(c, x...) do { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} } while (0)
# define VLOG(c,l, f, args) do { if (T_stdout) { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ;} } while (0)
#define LOG_E(c, x...) \
do { \
T(T_LEGACY_##c##_ERROR, T_PRINTF(x)); \
if (T_stdout) { \
if (g_log->log_component[c].level >= OAILOG_ERR) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ERR, x); \
} \
} while (0)
#define LOG_W(c, x...) \
do { \
T(T_LEGACY_##c##_WARNING, T_PRINTF(x)); \
if (T_stdout) { \
if (g_log->log_component[c].level >= OAILOG_WARNING) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_WARNING, x); \
} \
} while (0)
#define LOG_A(c, x...) \
do { \
T(T_LEGACY_##c##_INFO, T_PRINTF(x)); \
if (T_stdout) { \
if (g_log->log_component[c].level >= OAILOG_ANALYSIS) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ANALYSIS, x); \
} \
} while (0)
#define LOG_I(c, x...) \
do { \
T(T_LEGACY_##c##_INFO, T_PRINTF(x)); \
if (T_stdout) { \
if (g_log->log_component[c].level >= OAILOG_INFO) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_INFO, x); \
} \
} while (0)
#define LOG_D(c, x...) \
do { \
T(T_LEGACY_##c##_DEBUG, T_PRINTF(x)); \
if (T_stdout) { \
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_DEBUG, x); \
} \
} while (0)
#define LOG_DDUMP(c, b, s, f, x...) \
do { \
T(T_LEGACY_##c##_DEBUG, T_PRINTF(x)); \
if (T_stdout) { \
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
log_dump(c, b, s, f, x); \
} \
} while (0)
#define LOG_T(c, x...) \
do { \
T(T_LEGACY_##c##_TRACE, T_PRINTF(x)); \
if (T_stdout) { \
if (g_log->log_component[c].level >= OAILOG_TRACE) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \
} \
} while (0)
#define VLOG(c, l, f, args) \
do { \
if (T_stdout) { \
if (g_log->log_component[c].level >= l) \
vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, l, f, args); \
} \
} while (0)
/* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
#define LOG_DUMPMSG(c, f, b, s, x...) \
do { \
if (g_log->dump_mask & f) \
log_dump(c, b, s, LOG_DUMP_CHAR, x); \
} while (0)
/* bitmask dependent macros, to isolate debugging code */
# define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
#define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
/* bitmask dependent macros, to generate debug file such as matlab file or message dump */
# define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 0);} while(0)/* */
#define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
#define LOG_M(file, vector, data, len, dec, format) \
do { \
write_file_matlab(file, vector, data, len, dec, format, 0); \
} while (0)
/* define variable only used in LOG macro's */
# define LOG_VAR(A,B) A B
# else /* T_TRACER */
# define LOG_E(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} while (0)
# define LOG_W(c, x...) do { if( g_log->log_component[c].level >= OAILOG_WARNING ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} while (0)
# define LOG_A(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);} while (0)
# define LOG_I(c, x...) do { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} while (0)
# define LOG_D(c, x...) do { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} while (0)
# define LOG_T(c, x...) do { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} while (0)
# define VLOG(c,l, f, args) do { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ; } while (0)
#define LOG_VAR(A, B) A B
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
# define LOG_DEBUGFLAG(D) (g_log->dump_mask & D)
# define LOG_DUMPFLAG(D) (g_log->debug_mask & D)
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
#else /* no T_TRACER */
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 0);} while(0)
# define LOG_VAR(A,B) A B
# define T_ACTIVE(a) (0)
# endif /* T_TRACER */
#define LOG_E(c, x...) \
do { \
if (g_log->log_component[c].level >= OAILOG_ERR) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ERR, x); \
} while (0)
#define LOG_W(c, x...) \
do { \
if (g_log->log_component[c].level >= OAILOG_WARNING) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_WARNING, x); \
} while (0)
#define LOG_A(c, x...) \
do { \
if (g_log->log_component[c].level >= OAILOG_ANALYSIS) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ANALYSIS, x); \
} while (0)
#define LOG_I(c, x...) \
do { \
if (g_log->log_component[c].level >= OAILOG_INFO) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_INFO, x); \
} while (0)
#define LOG_D(c, x...) \
do { \
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_DEBUG, x); \
} while (0)
#define LOG_DDUMP(c, b, s, f, x...) \
do { \
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
log_dump(c, b, s, f, x); \
} while (0)
#define LOG_T(c, x...) \
do { \
if (g_log->log_component[c].level >= OAILOG_TRACE) \
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \
} while (0)
#define VLOG(c, l, f, args) \
do { \
if (g_log->log_component[c].level >= l) \
vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, l, f, args); \
} while (0)
#define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
#define LOG_DEBUGFLAG(D) (g_log->dump_mask & D)
#define LOG_DUMPFLAG(D) (g_log->debug_mask & D)
#define LOG_DUMPMSG(c, f, b, s, x...) \
do { \
if (g_log->dump_mask & f) \
log_dump(c, b, s, LOG_DUMP_CHAR, x); \
} while (0) /* */
#define LOG_M(file, vector, data, len, dec, format) \
do { \
write_file_matlab(file, vector, data, len, dec, format, 0); \
} while (0)
#define LOG_VAR(A, B) A B
#define T_ACTIVE(a) (0)
#endif /* T_TRACER */
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
#define GCC_NOTUSED __attribute__((unused))

View File

@@ -361,6 +361,48 @@ ID = LEGACY_NR_MAC_TRACE
GROUP = ALL:LEGACY_NR_MAC:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_INFO
DESC = NR_PHY_DCI legacy logs - info level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_INFO:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_ERROR
DESC = NR_PHY_DCI legacy logs - error level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_ERROR:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_WARNING
DESC = NR_PHY_DCI legacy logs - warning level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_WARNING:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_DEBUG
DESC = NR_PHY_DCI legacy logs - debug level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_DEBUG:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_TRACE
DESC = NR_PHY_DCI legacy logs - trace level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_INFO
DESC = NR_MAC_DCI legacy logs - info level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_INFO:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_ERROR
DESC = NR_MAC_DCI legacy logs - error level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_ERROR:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_WARNING
DESC = NR_MAC_DCI legacy logs - warning level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_WARNING:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_DEBUG
DESC = NR_MAC_DCI legacy logs - debug level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_DEBUG:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_TRACE
DESC = NR_MAC_DCI legacy logs - trace level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_PHY_INFO
DESC = PHY legacy logs - info level
GROUP = ALL:LEGACY_PHY:LEGACY_GROUP_INFO:LEGACY

View File

@@ -1,8 +1,6 @@
add_library(tracer_utils OBJECT configuration.c database.c event.c handler.c utils.c)
target_link_libraries(tracer_utils PUBLIC m pthread)
add_library(tracer_events OBJECT event_selector.c)
add_executable(record record.c)
target_link_libraries(record PRIVATE tracer_utils)
@@ -28,10 +26,19 @@ add_executable(multi multi.c)
target_link_libraries(multi PRIVATE tracer_utils T)
target_include_directories(multi PRIVATE ..)
add_executable(textlog textlog.c)
target_link_libraries(textlog PRIVATE tracer_utils tracer_filter
tracer_logger tracer_view)
add_subdirectory(filter)
add_subdirectory(logger)
add_subdirectory(view)
add_custom_target(T_tools)
add_dependencies(T_tools
record replay extract_config extract_input_subframe
extract_output_subframe extract macpdu2wireshark multi)
extract_output_subframe extract macpdu2wireshark multi
textlog)
add_dependencies(nr-softmodem T_tools)
add_dependencies(nr-uesoftmodem T_tools)
add_dependencies(lte-softmodem T_tools)
@@ -42,9 +49,7 @@ add_dependencies(lte-uesoftmodem T_tools)
# GUI-related tools so they can be added on demand, if necessary.
add_boolean_option(T_TRACER_GUI OFF "Compile T tracer GUI tools" OFF)
if(T_TRACER_GUI)
add_executable(textlog textlog.c)
target_link_libraries(textlog PRIVATE tracer_utils tracer_filter tracer_gui
tracer_logger tracer_view tracer_events)
add_library(tracer_events OBJECT event_selector.c)
find_library(png png REQUIRED)
add_executable(enb enb.c)
@@ -71,9 +76,6 @@ if(T_TRACER_GUI)
tracer_logger tracer_view tracer_events)
add_subdirectory(gui)
add_subdirectory(filter)
add_subdirectory(logger)
add_subdirectory(view)
add_dependencies(T_tools textlog enb gnb ue vcd to_vcd)
add_dependencies(T_tools enb gnb ue vcd to_vcd)
endif()

View File

@@ -31,9 +31,8 @@ extract: extract.o database.o event.o utils.o configuration.o
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
textlog: utils.o textlog.o database.o event.o handler.o configuration.o \
event_selector.o view/view.a gui/gui.a logger/logger.a \
filter/filter.a
$(CC) $(CFLAGS) -o textlog $^ $(LIBS) $(XLIBS)
view/view.a logger/logger.a filter/filter.a
$(CC) $(CFLAGS) -o textlog $^ $(LIBS)
enb: utils.o enb.o database.o event.o handler.o configuration.o \
event_selector.o view/view.a gui/gui.a logger/logger.a \

View File

@@ -1,42 +1,24 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <signal.h>
#include "database.h"
#include "event.h"
#include "handler.h"
#include "logger/logger.h"
#include "view/view.h"
#include "gui/gui.h"
#include "utils.h"
#include "event_selector.h"
#include "configuration.h"
typedef struct {
int socket;
int *is_on;
int nevents;
pthread_mutex_t lock;
} textlog_data;
void is_on_changed(void *_d)
void activate_traces(int socket, int *is_on, int nevents)
{
textlog_data *d = _d;
char t;
if (pthread_mutex_lock(&d->lock)) abort();
if (d->socket == -1) goto no_connection;
t = 1;
if (socket_send(d->socket, &t, 1) == -1 ||
socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
if (socket_send(socket, &t, 1) == -1 ||
socket_send(socket, &nevents, sizeof(int)) == -1 ||
socket_send(socket, is_on, nevents * sizeof(int)) == -1)
abort();
no_connection:
if (pthread_mutex_unlock(&d->lock)) abort();
}
void usage(void)
@@ -54,28 +36,18 @@ void usage(void)
" -full also dump buffers' content\n"
" -raw-time also prints 'raw time'\n"
" -ip <host> connect to given IP address (default %s)\n"
" -p <port> connect to given port (default %d)\n"
" -x GUI output\n"
" -debug-gui activate GUI debug logs\n"
" -no-gui disable GUI entirely\n",
" -p <port> connect to given port (default %d)\n",
DEFAULT_REMOTE_IP,
DEFAULT_REMOTE_PORT
);
exit(1);
}
static void *gui_thread(void *_g)
{
gui *g = _g;
gui_loop(g);
return NULL;
}
int main(int n, char **v)
{
extern int volatile gui_logd;
char *database_filename = NULL;
void *database;
int socket;
char *ip = DEFAULT_REMOTE_IP;
int port = DEFAULT_REMOTE_PORT;
char **on_off_name;
@@ -86,11 +58,7 @@ int main(int n, char **v)
int i;
event_handler *h;
logger *textlog;
gui *g = NULL; /* initialization not necessary but gcc is not happy */
int gui_mode = 0;
view *out;
int gui_active = 1;
textlog_data textlog_data;
int full = 0;
int raw_time = 0;
@@ -115,16 +83,11 @@ int main(int n, char **v)
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; }
if (!strcmp(v[i], "-OFF"))
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; }
if (!strcmp(v[i], "-x")) { gui_mode = 1; continue; }
if (!strcmp(v[i], "-debug-gui")) { gui_logd = 1; continue; }
if (!strcmp(v[i], "-no-gui")) { gui_active = 0; continue; }
if (!strcmp(v[i], "-full")) { full = 1; continue; }
if (!strcmp(v[i], "-raw-time")) { raw_time = 1; continue; }
usage();
}
if (gui_active == 0) gui_mode = 0;
if (database_filename == NULL) {
printf("ERROR: provide a database file (-d)\n");
exit(1);
@@ -140,29 +103,12 @@ int main(int n, char **v)
h = new_handler(database);
if (gui_active) {
g = gui_init();
new_thread(gui_thread, g);
}
if (gui_mode) {
widget *w, *win;
// w = new_textlist(g, 600, 20, 0);
w = new_textlist(g, 800, 50, BACKGROUND_COLOR);
win = new_toplevel_window(g, 800, 50*12, "textlog");
widget_add_child(g, win, w, -1);
out = new_view_textlist(1000, 10, g, w);
//tout = new_view_textlist(7, 4, g, w);
} else {
out = new_view_stdout();
}
out = new_view_stdout();
for (i = 0; i < number_of_events; i++) {
char *name, *desc;
database_get_generic_description(database, i, &name, &desc);
textlog = new_textlog(h, database, name, desc);
// "ENB_PHY_UL_CHANNEL_ESTIMATE",
// "ev: {} eNB_id [eNB_ID] frame [frame] subframe [subframe]");
logger_add_view(textlog, out);
if (full) textlog_dump_buffer(textlog, 1);
if (raw_time) textlog_raw_time(textlog, 1);
@@ -173,24 +119,21 @@ int main(int n, char **v)
for (i = 0; i < on_off_n; i++)
on_off(database, on_off_name[i], is_on, on_off_action[i]);
textlog_data.socket = -1;
textlog_data.is_on = is_on;
textlog_data.nevents = number_of_events;
if (pthread_mutex_init(&textlog_data.lock, NULL)) abort();
if (gui_active)
setup_event_selector(g, database, is_on, is_on_changed, &textlog_data);
textlog_data.socket = connect_to(ip, port);
socket = connect_to(ip, port);
if (socket == -1) {
printf("fatal: connection failed\n");
return 1;
}
/* send the first message - activate selected traces */
is_on_changed(&textlog_data);
activate_traces(socket, is_on, number_of_events);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* read messages */
while (1) {
event e;
e = get_event(textlog_data.socket, &ebuf, database);
e = get_event(socket, &ebuf, database);
if (e.type == -1) break;
handle_event(h, e);
}

View File

@@ -755,11 +755,25 @@ void SLIV2SL(int SLIV,int *S,int *L) {
}
}
int get_ssb_subcarrier_offset(uint32_t absoluteFrequencySSB, uint32_t absoluteFrequencyPointA)
int get_ssb_subcarrier_offset(uint32_t absoluteFrequencySSB, uint32_t absoluteFrequencyPointA, int scs)
{
uint32_t absolute_diff = (absoluteFrequencySSB - absoluteFrequencyPointA);
const int scaling_5khz = absoluteFrequencyPointA < 600000 ? 3 : 1;
return ((absolute_diff / scaling_5khz) % 24);
// for FR1 k_SSB expressed in terms of 15kHz SCS
// for FR2 k_SSB expressed in terms of the subcarrier spacing provided by the higher-layer parameter subCarrierSpacingCommon
// absoluteFrequencySSB and absoluteFrequencyPointA are ARFCN
// NR-ARFCN delta frequency is 5kHz if f < 3 GHz, 15kHz for other FR1 freq and 60kHz for FR2
const uint32_t absolute_diff = absoluteFrequencySSB - absoluteFrequencyPointA;
int scaling = 1;
if (absoluteFrequencyPointA < 600000) // correspond to 3GHz
scaling = 3;
if (scs > 2) // FR2
scaling <<= (scs - 2);
int sco_limit = scs == 1 ? 24 : 12;
int subcarrier_offset = (absolute_diff / scaling) % sco_limit;
// 30kHz is the only case where k_SSB is expressed in terms of a different SCS (15kHz)
// the assertion is to avoid having an offset of half a subcarrier
if (scs == 1)
AssertFatal(subcarrier_offset % 2 == 0, "ssb offset %d invalid for scs %d\n", subcarrier_offset, scs);
return subcarrier_offset;
}
uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB,
@@ -767,16 +781,16 @@ uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB,
int ssbSubcarrierSpacing,
int frequency_range)
{
// offset to pointA is expressed in terms of 15kHz SCS for FR1 and 60kHz for FR2
// only difference wrt NR-ARFCN is delta frequency 5kHz if f < 3 GHz for ARFCN
uint32_t absolute_diff = (absoluteFrequencySSB - absoluteFrequencyPointA);
const int scaling_5khz = absoluteFrequencyPointA < 600000 ? 3 : 1;
int sco = get_ssb_subcarrier_offset(absoluteFrequencySSB, absoluteFrequencyPointA);
const int scs_scaling = frequency_range == FR2 ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing;
const int scaled_abs_diff = absolute_diff / scaling_5khz;
const int ssb_offset_point_a =
(scaled_abs_diff - sco) / 12
- 10 * scs_scaling; // absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
AssertFatal(ssb_offset_point_a % scs_scaling == 0, "PRB offset %d can create frequency offset\n", ssb_offset_point_a);
AssertFatal(sco % scs_scaling == 0, "ssb offset %d can create frequency offset\n", sco);
const int scaling = frequency_range == FR2 ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing;
const int scaled_abs_diff = absolute_diff / (scaling_5khz * scaling);
// absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
const int ssb_offset_point_a = ((scaled_abs_diff / 12) - 10) * scaling;
// Offset to point A needs to be divisible by scaling
AssertFatal(ssb_offset_point_a % scaling == 0, "PRB offset %d not valid for scs %d\n", ssb_offset_point_a, ssbSubcarrierSpacing);
return ssb_offset_point_a;
}

View File

@@ -202,7 +202,7 @@ uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB,
uint32_t absoluteFrequencyPointA,
int ssbSubcarrierSpacing,
int frequency_range);
int get_ssb_subcarrier_offset(uint32_t absoluteFrequencySSB, uint32_t absoluteFrequencyPointA);
int get_ssb_subcarrier_offset(uint32_t absoluteFrequencySSB, uint32_t absoluteFrequencyPointA, int scs);
int get_delay_idx(int delay, int max_delay_comp);
void freq2time(uint16_t ofdm_symbol_size,

View File

@@ -32,7 +32,7 @@
*\param[in] pointer to the BIT_STRING_t object.
*\return the extracted value.
*/
static inline uint8_t BIT_STRING_to_uint8(BIT_STRING_t *asn) {
static inline uint8_t BIT_STRING_to_uint8(const BIT_STRING_t *asn) {
DevCheck ((asn->size == 1), asn->size, 0, 0);
return asn->buf[0] >> asn->bits_unused;
@@ -43,7 +43,7 @@ static inline uint8_t BIT_STRING_to_uint8(BIT_STRING_t *asn) {
*\param[in] pointer to the BIT_STRING_t object.
*\return the extracted value.
*/
static inline uint16_t BIT_STRING_to_uint16(BIT_STRING_t *asn) {
static inline uint16_t BIT_STRING_to_uint16(const BIT_STRING_t *asn) {
uint16_t result = 0;
int index = 0;
@@ -69,7 +69,7 @@ static inline uint16_t BIT_STRING_to_uint16(BIT_STRING_t *asn) {
*\param[in] pointer to the BIT_STRING_t object.
*\return the extracted value.
*/
static inline uint32_t BIT_STRING_to_uint32(BIT_STRING_t *asn) {
static inline uint32_t BIT_STRING_to_uint32(const BIT_STRING_t *asn) {
uint32_t result = 0;
size_t index;
@@ -91,7 +91,7 @@ static inline uint32_t BIT_STRING_to_uint32(BIT_STRING_t *asn) {
*\param[in] pointer to the BIT_STRING_t object.
*\return the extracted value.
*/
static inline uint64_t BIT_STRING_to_uint64(BIT_STRING_t *asn) {
static inline uint64_t BIT_STRING_to_uint64(const BIT_STRING_t *asn) {
uint64_t result = 0;
size_t index;
int shift;

View File

@@ -21,11 +21,11 @@ The telnet server provides an API which can be used by any oai component to add
telnet server source files are located in [common/utils/telnetsrv](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/telnetsrv)
1. [telnetsrv.c](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/telnetsrv/telnetsrv.c) contains the telnet server implementation, including the implementation of the `telnet` CLI command. This implementation is compatible with all softmodem executables and is in charge of loading any additional `libtelnetsrv_<app> .so` containing code specific to the running executables.
1. [telnetsrv.h](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/telnetsrv/telnetsrv.h) is the telnet server include file containing both private and public data type definitions. It also contains API prototypes for functions that are used to register a new command in the server.
1. [telnetsrv.c](../telnetsrv.c) contains the telnet server implementation, including the implementation of the `telnet` CLI command. This implementation is compatible with all softmodem executables and is in charge of loading any additional `libtelnetsrv_<app> .so` containing code specific to the running executables.
1. [telnetsrv.h](../telnetsrv.h) is the telnet server include file containing both private and public data type definitions. It also contains API prototypes for functions that are used to register a new command in the server.
1. `telnetsrv_<XXX\>.c`: implementation of \<XXX\> CLI command which are delivered with the telnet server and are common to all softmodem executables.
1. `telnetsrv_<XXX\>.h`: include file for the implementation of XXX CLI command. Usually included only in the corresponding `.c`file
1. `telnetsrv_<app>_<XXX>.c`: implementation of \<XXX\> CLI command specific to the executable identified by \<app\>.These sources are used to create `libtelnetsrv_<app>.so` at build time.
1. [telnetsrv_CMakeLists.txt](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/telnetsrv/telnetsrv_CMakeLists.txt): CMakelists file containing the cmake instructions to build the telnet server. this file is included in the [global oai CMakelists](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/cmake_targets/CMakeLists.txt).
1. [telnetsrv_CMakeLists.txt](../CMakeLists.txt): CMakelists file containing the cmake instructions to build the telnet server. this file is included in the [global oai CMakelists](../../../../cmake_targets/CMakeLists.txt).
[oai telnet server home](telnetsrv.md)

View File

@@ -26,7 +26,7 @@ Below are examples of telnet sessions:
* [measur command](telnetmeasur.md)
# telnet server parameters
The telnet server is using the [oai configuration module](Config/Rtusage). Telnet parameters must be specified in the `telnetsrv` section. Some parameters can be modified via the telnet telnet server command, as specified in the last column of the following table.
The telnet server is using the [oai configuration module](../../../../common/config/DOC/config/rtusage.md). Telnet parameters must be specified in the `telnetsrv` section. Some parameters can be modified via the telnet telnet server command, as specified in the last column of the following table.
| name | type | default | description | dynamic |
|:---:|:---:|:---:|:----|:----:|

View File

@@ -56,7 +56,7 @@ int get_single_rnti(char *buf, int debug, telnet_printfunc_t prnt)
return 0;
}
void rrc_gNB_trigger_new_bearer(int rnti);
//void rrc_gNB_trigger_new_bearer(int rnti);
int add_bearer(char *buf, int debug, telnet_printfunc_t prnt)
{
int rnti = -1;
@@ -75,12 +75,13 @@ int add_bearer(char *buf, int debug, telnet_printfunc_t prnt)
if (!rrcue)
ERROR_MSG_RET("could not find UE with RNTI %04x\n", rnti);
rrc_gNB_trigger_new_bearer(rnti);
AssertFatal(false, "not implemented\n");
//rrc_gNB_trigger_new_bearer(rnti);
prnt("called rrc_gNB_trigger_new_bearer(%04x)\n", rnti);
return 0;
}
void rrc_gNB_trigger_release_bearer(int rnti);
//void rrc_gNB_trigger_release_bearer(int rnti);
int release_bearer(char *buf, int debug, telnet_printfunc_t prnt)
{
int rnti = -1;
@@ -99,7 +100,8 @@ int release_bearer(char *buf, int debug, telnet_printfunc_t prnt)
if (!rrcue)
ERROR_MSG_RET("could not find UE with RNTI %04x\n", rnti);
rrc_gNB_trigger_release_bearer(rnti);
AssertFatal(false, "not implemented\n");
//rrc_gNB_trigger_release_bearer(rnti);
prnt("called rrc_gNB_trigger_release_bearer(%04x)\n", rnti);
return 0;
}

View File

@@ -92,10 +92,10 @@ int get_reestab_count(char *buf, int debug, telnet_printfunc_t prnt)
ERROR_MSG_RET("could not find UE with RNTI %04x in RRC\n");
}
prnt("UE RNTI %04x reestab %d reconf_after_reestab %d\n",
prnt("UE RNTI %04x reestab %d reconfig %d\n",
ue->ue_context.rnti,
ue->ue_context.ue_reestablishment_counter,
ue->ue_context.ue_reconfiguration_after_reestablishment_counter);
ue->ue_context.ue_reconfiguration_counter);
return 0;
}

View File

@@ -75,11 +75,11 @@ sequenceDiagram
Note over u: E1AP_CUUP_task (SCTP Handler)
Note over u: ASN1 decoder
```
More details about the E1AP procedures in OAI are available in this document: [E1 Procedures](./e1ap_procedures.md).
# 2. Running the E1 Split
The setup is assuming that all modules are running on the same machine. The user can refer to the [F1 design document](./F1-design.md) for local deployment of the DU.
The setup is assuming that all modules are running on the same machine. The user can refer to the [F1 design document](./../F1-design.md) for local deployment of the DU.
## 2.1 Configuration File

View File

@@ -0,0 +1,74 @@
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">E1AP Procedures</font></b>
</td>
</tr>
</table>
[[_TOC_]]
# Introduction
The E1 interface is between the gNB-CU-CP (Central Unit - Control Plane) and gNB-CU-UP (Central Unit - User Plane) nodes. This interface is governed by the E1 Application Protocol (E1AP) outlined in the 3GPP release 16 specifications, specifically in the documents:
* 3GPP TS 38.463 - E1 Application Protocol (E1AP)
* 3GPP TS 38.460 - E1 general aspects and principles
* 3GPP TS 38.461 - E1 interface: layer 1
* 3GPP TS 38.462 - E1 interface: signaling transport
The E1AP protocol consists of the following sets of functions:
* E1 Interface Management functions
* E1 Bearer Context Management functions
* TEID allocation function
## E1 Bearer Context Management function
This function handles the establishment, modification, and release of E1 bearer contexts.
* E1 Bearer Context Establishment: initiation of E1 bearer context is by gNB-CU-CP and acceptance or rejection is determined by gNB-CU-UP based on admission control criteria (e.g., resource availability).
* E1 Bearer Context Modification: can be initiated by either gNB-CU-CP or gNB-CU-UP, with the receiving node having the authority to accept or reject the modification.
* Release of Bearer Context: can be triggered either directly by gNB-CU-CP or following a request from gNB-CU-UP.
* QoS-Flow to DRB Mapping Configuration: responsible for setting up and modifying the QoS-flow to DRB mapping configuration. gNB-CU-CP decides the flow-to-DRB mapping, generates SDAP and PDCP configurations, and provides them to gNB-CU-UP.
# OAI implementation
For the E1AP design in OAI, please refer to the [E1 Design](./E1-design.md) document.
## E1 re-establishment
The purpose of this procedure is to follow-up the re-establishment of RRC connection over the E1 interface. For all activated DRBs a Bearer Context Modification from CU-CP to CU-UP is necessary, according to clause 9.2.2.4 of 3GPP TS 38.463. If any modification to the bearer context is required, the CU-CP informs the CU-UP with the relevant IEs (e.g. in case of PDCP re-establishment, PDCP Configuration IE clause 9.3.1.38), Current implementation in OAI:
```mermaid
sequenceDiagram
participant e as UE
participant d as DU
participant c as CUCP
participant u as CUUP
Note over e,c: RRCReestablishment Procedure
e->>d: RRCReestablishmentRequest
Note over d: initial_ul_rrc_message_transfer_f1ap
d->>+c: Initial UL RRC Message Transfer (CCCH, new C-RNTI)
Note over c: rrc_gNB_process_initial_ul_rrc_message
Note over c: rrc_handle_RRCReestablishmentRequests
c-->>+d: DL RRC Message Transfer
note right of d: fallback to RRC establishment
d-->>-e: RRCSetup
e-->>d: RRCSetupComplete
Note over c: rrc_gNB_generate_RRCReestablishment
Note over c: cuup_notify_reestablishment
Note over c: e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST
c->>u: BEARER CONTEXT MODIFICATION REQUEST
Note over u: e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST
Note over u: e1_bearer_context_modif
Note over u: nr_pdcp_reestablishment
c->>-d: DL RRC Message Transfer (old gNB DU F1AP UE ID)
d->>e: RRCReestablishment
Note over d: Fetch UE Context with old gNB DU F1AP UE ID and update C-RNTI
e->>d: RRCReestablishmentComplete
u->>c: BEARER CONTEXT MODIFICATION RESPONSE
Note over c: e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE
```

356
doc/IAB_docs/BAP_Info.md Normal file
View File

@@ -0,0 +1,356 @@
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="../images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">BAP Documentation</font></b>
</td>
</tr>
</table>
**Table of Contents**
[[_TOC_]]
# Glossary
| Acronym | Description |
| ------- | ------------------------------ |
| BAP | Backhaul Adaptation Protocol |
| BH | Backhaul |
| CU | Centralized Unit |
| DU | Distributed Unit |
| IAB | Integrated Access and Backhaul |
| IE | Information Element |
| MT | Mobile Termination |
| RLC | Radio Link Control |
| RRC | Radio Resource Control |
# 1. Scenario
This document aims to gather all the needed requirements to implement the Backhaul Adaptation Protocol (BAP) (Based on TS 38.340-i00 (release 18)).
# 2. General
## 2.1. Entities
BAP is a layer 2 routing protocol that sits on top of the RLC layer and is responsible for routing packages through multiple node hops.
<p>
<img src="./images/BAP_layer_structure.png" width=600></br>
<em>Figure 2.1-1 - BAP layer structure view (TS 38.340)</em>
</p>
BAP works with entities:
- BAP entity at node MT;
- BAP entity at node DU;
- BAP entity at donor DU.
The transmitting part of BAP entity has a corresponding receiving part of another BAP entity.
<p>
<img src="./images/BAP_layer_functional_example.png" width=600></br>
<em>Figure 2.1-2 - Example of BAP Layer Functionality (TS 38.340)</em>
</p>
## 2.2. Services
### 2.2.1 BAP -> upper layers
(Service that needs to be performed by BAP)
- Data transfer.
### 2.2.2 Lower layer (Per RLC entity) -> BAP
(Services expected from lower levels to BAP)
- Acknowledged data transfer service;
- Unacknowledged data transfer service.
## 2.3. Functions
A BAP sublayer must support the following functions:
- Data transfer;
- Determination of BAP destination and path for packets from upper layers;
- Determination of egress BH RLC channels for packets routed to next hop;
- Routing of packets to next hop;
- BAP header rewriting;
- Differentiating traffic to be delivered to upper layers from traffic to be delivered to egress link;
- Flow control feedback and polling signalling;
- Handling of BH RLF related indications.
## 2.4. Configurations
The configuration of the BAP entity includes:
- The IAB-node's BAP address(es) via RRC;
- The IAB-donor-DU's BAP address via F1AP;
- Mapping from next hop BAP address to downstream egress link via F1AP;
- Mapping from next hop BAP address to upstream egress link via RRC;
- Mapping from upper layer traffic to BAP routing ID in BAP header via F1AP and RRC;
- The BAP routing entries via F1AP;
- Mapping to egress BH RLC channels via F1AP and RRC;
- Flow control feedback type(s) to be provided, if any, via RRC;
- Inter-donor-DU re-routing enabling/disabling via F1AP.
Configure **RLC** channels:
- Via RRC on the IAB-MT;
- via F1AP on the IAB-DU/IAB-donor-DU.
The **F1AP** configurations (Which derive from the original F1AP signaling) are:
- Uplink Traffic to Routing ID Mapping Configuration;
- Downlink Traffic to Routing ID Mapping Configuration;
- BH Routing Configuration;
- BH RLC Channel Mapping Configuration;
- Uplink Traffic to BH RLC Channel Mapping Configuration;
- Downlink Traffic to BH RLC Channel Mapping Configuration;
- Header Rewriting Configuration.
# 3. Procedures
## 3.1. BAP entity handling
### 3.1.1 Entity establishment
When upper layers request establishment of a BAP entity, the node shall:
- Establish a BAP entity;
- Follow the other procedures in this section.
### 3.1.2 Entity release
When upper layers request release of a BAP entity, the node shall:
- Release the BAP entity and the related BAP configurations.
## 3.2 Data transfer
### 3.2.1 Transmitting Operations
#### **3.2.1.1 General**
Upon **receiving a BAP SDU** from upper layers, the **transmitting part** of the BAP entity shall:
- **(Clause ####)** Select a BAP address and a BAP path identity for this BAP SDU;
- **(Clause ####)** Construct a BAP Data PDU by adding a BAP header to the BAP SDU, where:
- **DESTINATION** field is set to the selected BAP address;
- **PATH** field is set to the selected BAP path identity.
When the BAP entity has a **BAP Data PDU to transmit**, the **transmitting part** of the BAP entity shall:
- **(Clause ####)** For the boundary IAB-node, if the BAP Data PDU is received from the collocated BAP entity (in the same node), perform the BAP header rewriting operation (if configured);
- **(Clause ####)** Perform routing to determine the egress link;
- **(Clause ####)** Determine the egress BH RLC channel;
- Submit this BAP Data PDU to the selected egress BH RLC channel of the selected egress link.
#### **3.2.1.2 BAP routing ID selection**
**At IAB-node**
At an IAB-node, for a BAP SDU received from upper layers and to be transmitted in upstream direction, the BAP entity performs mapping to a BAP address and BAP path identity based on:
- Uplink Traffic to Routing ID Mapping Configuration, which is derived from F1AP on the IAB-node in TS 38.473;
- <span style="color:#33C8FF">_defaultUL-BAP-RoutingID_</span>, which is configured by RRC on the IAB-node in TS 38.331.
Each entry of the Uplink Traffic to Routing ID Mapping Configuration contains:
- A traffic type specifier, which is indicated by <span style="color:#33C8FF">_UL UP TNL Information_</span> IE for F1-U packets and <span style="color:#33C8FF">_Non-UP TrafficType_</span> IE for non-F1-U packets in TS 38.473;
- A BAP routing ID, which includes a BAP address and a BAP path identity, indicated by <span style="color:#33C8FF">_BAP Routing ID_</span> IE in <span style="color:#33C8FF">_BH Information_</span> IE in TS 38.473;
For a BAP SDU received from upper layers and to be transmitted in upstream direction, the BAP entity shall:
<pre>
<b>if</b> the Uplink Traffic to Routing ID Mapping Configuration has not
been (re)configured by the F1AP associated with the (logical) DU, where
this BAP SDU is received, after the last (re)configuration of
<span style="color:#33C8FF"><i>defaultUL-BAPRoutingID</i></span> by RRC:
<b>select</b> the BAP address and the BAP path identity as configured by
<span style="color:#33C8FF"><i>defaultUL-BAP-RoutingID</i></span> in TS 38.331 for non-F1-U packets;
<b>else</b>:
<b>for the</b> BAP SDU encapsulating an F1-U packet:
<b>select</b> an entry from the Uplink Traffic to Routing ID Mapping
Configuration with its traffic type specifier corresponds to the
destination IP address and TEID of this BAP SDU;
<b>for the</b> BAP SDU encapsulating a non-F1-U packet:
<b>select</b> an entry from the Uplink Traffic to Routing ID Mapping
Configuration with its traffic type specifier corresponds to the
traffic type of this BAP SDU;
<b>select</b> the BAP address and the BAP path identity from the BAP routing ID in the entry
selected above;
<b>if</b> the selected entry is configured with <span style="color:#33C8FF"><i>Non-F1-terminating IAB-donor Topology
Indicator</i></span> IE:
<b>consider</b> this BAP Data PDU as data to be routed to non-F1-terminating
donor topology
</pre>
**At IAB-donor-DU**
For a BAP SDU received from upper layer at the IAB-donor-DU, the BAP entity performs mapping to a BAP address and a BAP Path identity based on:
- Downlink Traffic to Routing ID Mapping Configuration, which is derived from <span style="color:#33C8FF"><i>IP-to-layer-2 traffic mapping Information List</i></span> IE configured on the IAB-donor-DU in TS 38.473.
Each entry of the Downlink Traffic to Routing ID Mapping Configuration contains:
- A destination IP address, which is indicated by <span style="color:#33C8FF"><i>Destination IAB TNL Address</i></span> IE in IP header information IE, including an IPv4 address or IPv6 address or an IPv6 address prefix;
- An IPv6 flow label, if configured, which is indicated by <span style="color:#33C8FF"><i>IPv6 Flow Label</i></span> IE in <span style="color:#33C8FF"><i>IP header information</i></span> IE;
- A DSCP, if configured, which is indicated by <span style="color:#33C8FF"><i>DSCP</i></span> IE in <span style="color:#33C8FF"><i>DS Information List</i></span> IE in <span style="color:#33C8FF"><i>IP header information</i></span> IE;
- A BAP routing ID, which is indicated by <span style="color:#33C8FF"><i>BAP Routing ID</i></span> IE in <span style="color:#33C8FF"><i>BH Information</i></span> IE in TS 38.473.
For a BAP SDU received from upper layers and to be transmitted in downstream direction, the BAP entity shall:
<pre>
<b>for the</b> BAP SDU encapsulating an IPv6 packet:
<span style="color:lightgreen"># (not very relevant) Check TS 38.340</span>
<b>for the</b> BAP SDU encapsulating an IPv4 packet:
<b>Select</b> an entry from the Downlink Traffic to Routing ID Mapping
Configuration which fulfils the following conditions:
This BAP SDU Destination IP address <span style="color:orange">==</span> Destination IP address in
this entry
<span style="color:#BB8FCE">AND</span>
This BAP SDU DSCP <span style="color:orange">==</span> DSCP in this entry (if configured)
<b>select</b> the BAP address and the BAP path identity from the BAP routing ID in
the entry selected above
</pre>
#### **3.2.1.3 Routing**
BAP entity performs routing based on the BH Routing Configuration derived from an F1AP message, as specified in TS 38.473.
Each entry of the BH Routing Configuration contains:
- <b>BAP Routing ID</b> consisting of a BAP address and a BAP path identity, which is indicated by <span style="color:#33C8FF">_BAP Routing ID_</span> IE;
- <b>Next Hop BAP Address</b> which is indicated by <span style="color:#33C8FF">_Next-Hop BAP Address_</span> IE;
- <b>Topology indicator</b>, indicating whether the entry belongs to the non-F1-terminating donor topology, which is optionally indicated by <span style="color:#33C8FF">_Non-F1-terminating IAB-donor Topology Indicator_</span> IE.
For a BAP Data PDU to be transmitted, BAP entity shall:
<pre>
<b>if</b> the BAP Data PDU corresponds to a BAP SDU received from the upper layer
<span style="color:#BB8FCE">AND</span>
<b>if</b> the BH Routing Configuration has not been (re)configured by the F1AP
associated with the (logical) DU, where this BAP SDU is received, after the
last (re)configuration of <span style="color:#33C8FF"><i>defaultUL-BH-RLC-Channel</i></span> by RRC:
<b>select</b> the egress link on which the egress BH RLC channel corresponding
to <span style="color:#33C8FF"><i>defaultUL-BH-RLC-Channel</i></span> is configured as specified in TS 38.331 for
non-F1-U packets;
<b>else if</b> there is an entry in the BH Routing Configuration whose BAP
address matches the DESTINATION field, whose BAP path identity is the
same as the PATH field, and whose egress link corresponding to the Next Hop
BAP Address is available:
<b>select</b> the egress link corresponding to the Next Hop BAP Address
of the entry;
<b>else if</b> there is at least one entry in the BH Routing Configuration whose
BAP address matches the DESTINATION field, and whose egress link corresponding
to the Next Hop BAP Address is available:
<b>select</b> an entry from the BH Routing Configuration whose BAP address
is the same as the DESTINATION field, and whose egress link corresponding
to the Next Hop BAP Address is available;
<b>select</b> the egress link corresponding to the Next Hop BAP Address of
the entry selected above;
<b>else if</b>, for the transmitting part of IAB-MT, at least one egress link is
available, and if <span style="color:#33C8FF"><i>Re-routing Enable Indicator</i></span> IE is set to true by F1AP:
<b>if</b> this egress link belongs to F1-terminating donor topology of the
boundary IAB-node or the transmitting part of IAB-MT is not at the
boundary IAB-node, and there is an entry in the BH Routing Configuration
not configured with <span style="color:#33C8FF"><i>Non-F1-terminating IAB-donor Topology Indicator</i></span> IE
whose Next Hop BAP Address corresponds to this egress link
<span style="color:#BB8FCE">OR</span>
<b>if</b> this egress link belongs to non-F1-terminating donor topology, and
there is an entry in the BH Routing Configuration configured with
<span style="color:#33C8FF"><i>Non-F1-terminating IAB-donor Topology Indicator</i></span> IE whose Next Hop BAP
Address corresponds to this egress link:
<b>select</b> the egress link;
<b>rewrite</b> the BAP header of this BAP Data PDU, where the DESTINATION
field is set to the leftmost 10 bits of BAP Routing ID of the entry in
the BH Routing Configuration (i.e. BAP address), and the PATH field is
set to the rightmost 10 bits of BAP Routing ID of the entry (i.e. BAP
path identity)
</pre>
#### **3.2.1.4 Mapping to BH RLC Channel**
**Mapping to BH RLC Channel for BAP Data Packets from collocated BAP entity at IAB-node**
Check page 14 and 15
**Mapping to BH RLC Channel for BAP SDUs from upper layers at IAB-node**
Check page 15 and 16
**Mapping to BH RLC Channel at IAB-donor-DU**
Check page 16 and 17
#### **3.2.1.4 BAP header rewriting operation**
Check page 17
### 3.2.2 Receiving Operations
Upon receiving a BAP Data PDU from lower layer (i.e. ingress BH RLC channel), the receiving part of the BAP entity shall:
<pre>
<b>if</b> DESTINATION field of this BAP Data PDU matches the BAP address, which
is configured for this IAB-node by the IAB-donor providing this ingress BH RLC
channel configuration:
<b>remove</b> the BAP header of this BAP Data PDU and deliver the BAP SDU to
upper layers;
<b>else</b>:
<b>deliver</b> the BAP Data Packet to the transmitting part of the collocated
BAP entity.
</pre>
## 3.3 Flow control
Check page 18
## 3.4 BH RLF related indications
Check page 19
## 3.5 Handling of unknown, unforeseen, and erroneous protocol data
When a BAP Data PDU contains a BAP address which is not included in the applied entries of BH Routing
Configuration during Routing operation in accordance with clause 5.2.1.3 and the BAP Data PDU contains a BAP
address which is not the BAP address of this node in accordance with clause 5.2.2 upon receiving; or
when a BAP Control PDU that contains reserved or invalid values is received the BAP entity shall:
- discard the received BAP PDU.
# 4 Protocol data units, formats, and parameters
## 4.1 Protocol data units
### 4.1.1 Data PDU
Used to convey:
- Upper layer data.
### 4.1.2 Control PDU
Used to convey:
- Flow control feedbacck per BH RLC channel;
- Flow control feedback per BAP routing ID;
- flow control polling;
- BH RLF related indication.
## 4.2 Formats and Parameters
Check pages 20 to 23

123
doc/IAB_docs/IAB_Info.md Normal file
View File

@@ -0,0 +1,123 @@
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="../images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">OAI IAB Documentation</font></b>
</td>
</tr>
</table>
**Table of Contents**
[[_TOC_]]
# Glossary
| Acronym | Description |
| ------- | ------------------------------ |
| BAP | Backhaul Adaptation Protocol |
| BH | Backhaul |
| CP | Control Plane |
| IAB | Integrated Access and Backhaul |
| RLC | Radio Link Control |
| RLF | Radio Link Failure |
| RRC | Radio Resource Control |
| TNL | Transport Network Layer |
| UP | User Plane |
# 1. Scenario
This document aims to gather all the needed requirements to implement a 5G SA 3GPP compliant Integrated Access and Backhaul (IAB).
# 2. Protocol Stacks
## 2.1 Protocol stack for the support of F1-U protocol
<img src="./images/Protocol_stack_F1-U.png" width=600>
## 2.2 Protocol stack for the support of F1-C protocol
<img src="./images/Protocol_stack_F1-C.png" width=600>
## 2.3 Protocol stack for the support of IAB-MT's RRC and NAS connections
<img src="./images/Protocol_stack_RRC_NAS.png" width=600>
# 3. Backhaul Adaptation Protocol (BAP) (TS 38.340)
Some info in [BAP_info](./BAP_Info.md)
# 4. F1 Mods (TS 38.470 and 38.473)
Needed functions:
- BAP mapping configuration function;
- gNB-DU resource configuration function;
- IAB TNL address configuration function;
- IAB UP configuration update function;
- Mobile IAB F1 Setup Triggering function; (Can we skip mobile IAB for now?)
- Mobile IAB F1 Setup Outcome Notification function. (Can we skip mobile IAB for now?)
# 5. RRC Mods (TS 38.331)
Some info in [RRC_IAB_info](./RRC_IAB_Info.md)
# 6. IAB-MT mandatory features (TS 38.306)
- Routing using BAP (TS 38.340-i00 (release 18), pages 11-17)
- Bearer mapping using BAP (TS 38.340-i00 (release 18), pages 11-17)
- IAB-node IP address signalling over RRC (TS 38.331-i00 (release 18), page 133)
<img src="./images/IAB-MT-Requirements.png" width=600>
# 7. IAB Resource Configuration (TS 38.300)
Check TS 38.300-i00 (release 18), pages 122 and 123.
# 8. Required signalling procedures (TS 38.300 and TS 38.401)
## 8.1 IAB-node Integration (TS 38.401-i00, page 87 and 88)
<img src="./images/IAB_node_integration.png" width=600>
## _8.2 IAB-node Migration (Mobile IAB???)_
## 8.3 Topological Management (TS 38.300-i00, page 34)
### 8.3.1 IAB Inter-donor-DU Re-routing (TS 38.401-i00, pages 105, 106)
When an IAB-donor-DU is configured to support inter-donor-DU re-routing, the IAB-donor-DU may identify a rerouted UL IP packet based on the source IP address field of the UL packet, and forwards UL IP packets, whose source IP addresses are anchored at a peer IAB-donor-DU, to this peer IAB-donor-DU via a tunnel. The IAB-donor-DU and the peer IAB-donor-DU may be controlled by the same IAB-donor-CU or by two different IAB-donor-CUs. The interdonor-DU tunnel may be a GTP-U tunnel. The configuration of the tunnel is up to implementation. At the IAB-donor-DU forwarding the UL IP packets, inter-donor-DU tunnelling may be restricted to only a subset of the IP addresses anchored at the peer IAB-donor-DU. For this purpose, the IAB-donor-CU configures the IAB-donor-DU for forwarding the UL IP packets with a list of TNL addresses and/or prefixes for which tunnelling should be permitted and TNL
address filtering should be exempted.
### 8.3.2 IAB Inter-CU topological redundancy procedure (TS 38.3401-i00, pages 106, 107 and 108)
<img src="./images/IAB_inter-CU_redundancy.png" width=600>
### 8.3.3 IAB Inter-CU topology adaptation procedure (TS 38.3401-i00, pages 108 to 111)
<img src="./images/IAB_inter-CU_topology_adaptation.png" width=600>
### 8.3.4 IAB inter-CU topology adaptation procedure with descendant IAB-node (TS 38.3401-i00, pages 111 to 113)
<img src="./images/IAB_inter-CU_topology_adaptation_descendant.png" width=600>
### 8.3.5 IAB Inter-CU Backhaul RLF recovery for single connected IAB-node (TS 38.3401-i00, pages 113 to 116)
<img src="./images/IAB_inter-CU_BH_RLF_recovery_for_single_node.png" width=600>
## 8.4 OTA timing synchronization (38.300-i00, page 34)
An IAB-DU is subject to the same downlink timing alignment of a gNB. The IAB-DU may use the received downlink
signal from a parent as a reference to control its downlink timing using TA in conjunction with an additional Tdelta
parameter received by the collocated IAB-MT from the parent via MAC-CE.
## 8.5 Inter node discovery (38.300-i00, page 35)
Inter node discovery is supported via SSB-based and/or CSI-RS-based measurements. An IAB-node can be configured
to transmit and receive off synchronization raster SSB signals to discover neighbouring IAB-nodes. The configuration
is not expected to create a conflict between IAB-DU SSB transmission and IAB-MT SSB measurement windows.

View File

@@ -0,0 +1,242 @@
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="../images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">RRC - IAB related Documentation</font></b>
</td>
</tr>
</table>
**Table of Contents**
[[_TOC_]]
# Glossary
| Acronym | Description |
| ------- | ------------------------------ |
| BAP | Backhaul Adaptation Protocol |
| BH | Backhaul |
| DL | Downlink |
| IAB | Integrated Access and Backhaul |
| IE | Information Element |
| MCG | Master Cell Group |
| RLC | Radio Link Control |
| RRC | Radio Resource Control |
| SCG | Secondary Cell Group |
| UL | Uplink |
# 1. Scenario
This document aims to gather all the needed requirements to implement IAB in the Radio Resource Control (RRC) level (TS 38.331).
# 2. BAP configuration
The IAB-MT shall:
<pre>
<b>if</b> the <span style="color:#33C8FF"><i>bap_Config</i></span> is set to <span style="color:#33C8FF"><i>setup</i></span>:
<b>if</b> no BAP entity is established:
<b>establish</b> a BAP entity as specified in TS 38.340;
<b>if</b> <span style="color:#33C8FF"><i>bap-Address</i></span> is included:
<b>configure</b> the BAP entity to use the bap-Address as this
node's BAP address;
<b>if</b> <span style="color:#33C8FF"><i>defaultUL-BAP-RoutingID</i></span> is included:
<b>configure</b> the BAP entity to apply the default UL BAP routing ID
according to the configuration;
<b>if</b> <span style="color:#33C8FF"><i>defaultUL-BH-RLC-Channel</i></span> is included:
<b>configure</b> the BAP entity to apply the default UL BH RLC channel
according to the configuration;
<b>if</b> <span style="color:#33C8FF"><i>flowControlFeedbackType</i></span> is included:
<b>configure</b> the BAP entity to apply the flow control feedback according
to the configuration;
<b>if</b> the <span style="color:#33C8FF"><i>bap-Config</i></span> is set to release:
<b>release</b> the concerned <span style="color:#33C8FF"><i>bap-Config</i></span>;
<b>if</b> there is no other configured <span style="color:#33C8FF"><i>bap-Config</i></span> for the MCG or for the SCG
<b>release</b> the BAP entity as specified in TS 38.340.
</pre>
# 3. IAB other configuration
## 3.1 IP address release
The IAB-MT shall:
<pre>
<b>if</b> the release is triggered by reception of the <span style="color:#33C8FF"><i>iab-IP-AddressToReleaseList</i></span>:
<b>for each</b> <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span> value included in
<span style="color:#33C8FF"><i>iab-IP-AddressToReleaseList</i></span>:
<b>release</b> the corresponding <span style="color:#33C8FF"><i>IAB-IP-AddressConfiguration</i></span>.
</pre>
## 3.2 IP address addition/modification
The IAB-MT shall:
<pre>
<b>for each</b> <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span> value included in the <span style="color:#33C8FF"><i>iab-IP-AddressToAddModList</i></span>
that is not part of the current IAB-MT configuration:
<b>add</b> the IP address indicated in <span style="color:#33C8FF"><i>iab-IP-Address</i></span>, corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>if</b> added IP address is <span style="color:#33C8FF"><i>iPv4-Address</i></span>:
<b>if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-C</i></span>:
<b>store</b> the received IPv4 address for F1-C traffic together with
the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-U</i></span>:
<b>store</b> the received IPv4 address for F1-U traffic together with
the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>non-F1</i></span>:
<b>store</b> the received IPv4 address for non-F1 traffic together with
the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else</b>:
<b>store</b> the received IPv4 address for all traffic together with
the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iPv6-Address</i></span> is included:
<b>if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-C</i></span>:
<b>store</b> the received IPv6 address for F1-C traffic together with
the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-U</i></span>:
<b>store</b> the received IPv6 address for F1-U traffic together with
the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>non-F1</i></span>:
<b>store</b> the received IPv6 address for non-F1 traffic together with
the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else</b>:
<b>store</b> the received IPv6 address for all traffic together with the
IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iPv6-Prefix</i></span> is included in <span style="color:#33C8FF"><i>iab-IP-AddressToAddModList</i></span>:
<b>if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-C</i></span>:
<b>store</b> the received IPv6 address prefix for F1-C traffic together
with the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-U</i></span>:
<b>store</b> the received IPv6 address prefix for F1-U traffic together
with the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>non-F1</i></span>:
<b>store</b> the received IPv6 address prefix for non-F1 traffic
together with the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>else</b>:
<b>store</b> the received IPv6 address prefix for all traffic together
with the IAB-donor-DU BAP address corresponding to the
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
<b>for each</b> <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span> value included in the <span style="color:#33C8FF"><i>iab-IP-AddressToAddModList</i></span>
that is part of the current IA-BMT configuration:
<b>modify</b> the IP address configuration(s) in accordance with the
<span style="color:#33C8FF"><i>IAB-IP-AddressConfiguration</i></span> corresponding to the <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
</pre>
# 4 "IAB Other Information" (Procedure)
<p>
<img src="./images/IAB_other_info.png" width=600></br>
<em>Figure 4.1 - IAB Other information procedure (TS 38.331)</em>
</p>
The IAB Other Information procedure is used by IAB-MT to request the IAB-donor-CU to allocate IP address or
inform the IAB-donor-CU of the IP address for the collocated IAB-DU.
## 4.1 Initiation
Upon initiation of the procedure, the IAB-MT shall:
- initiate transmission of the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message.
## 4.2 Actions related to transmission of IABOtherInformation message
The IAB-MT shall set the contents of <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message as follows:
<pre>
<b>if</b> the procedure is used to request IP addresses:
<b>if</b> IPv4 addresses are requested:
<b>set</b> the <span style="color:#33C8FF"><i>iab-IPv4-AddressNumReq</i></span> to the number of IPv4 addresses
requested per specific usage;
<b>if</b> IPv6 addresses or IPv6 address prefixes are requested:
<b>if</b> IPv6 addresses are requested:
<b>set</b> the <span style="color:#33C8FF"><i>iab-IPv6-AddressNumReq</i></span> to the number of IPv6 addresses
requested per specific usage;
<b>else if</b> IPv6 address prefixes are requested:
<b>set</b> the <span style="color:#33C8FF"><i>iab-IPv6-AddressPrefixReq</i></span> to <span style="color:orange"><i>true</i></span> per specific usage;
<b>if</b> the procedure is used to report IP addresses:
<b>if</b> IPv4 addresses are reported:
<b>include</b> <span style="color:#33C8FF"><i>iPv4-Address</i></span> in <span style="color:#33C8FF"><i>iab-IPv4-AddressReport</i></span>, and for each IP
address included:
<b>if</b> IPv4 addresses are used for F1-C traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-C-Traffic-IP-Address</i></span>.
<b>if</b> IPv4 addresses are used for F1-U traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-U-Traffic-IP-Address</i></span>.
<b>if</b> IPv4 address are used for non-F1 traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>non-f1-Traffic-IP-Address</i></span>.
<b>if</b> IPv4 addresses are used for all traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>all-Traffic-IAB-IP-Address</i></span>.
<b>if</b> IPv6 addresses or IPv6 address prefixes are reported:
<b>if</b> IPv6 addresses are reported:
<b>include</b> <span style="color:#33C8FF"><i>iPv6-Address</i></span> in <span style="color:#33C8FF"><i>iab-IPv6-AddressReport</i></span>.
<b>for each</b> IP address included (in previous step):
<b>if</b> IPv6 addresses are used for F1-C traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-C-Traffic-IP-Address</i></span>.
<b>if</b> IPv6 addresses are used for F1-U traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-U-Traffic-IP-Address</i></span>.
<b>if</b> IPv6 addresses are used for non-F1 traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>non-f1-Traffic-IP-Address</i></span>.
<b>if</b> IPv6 addresses are used for all traffic:
<b>include</b> these addresses in <span style="color:#33C8FF"><i>all-Traffic-IAB-IP-Address</i></span>.
<b>else if</b> IPv6 address prefixes are reported:
<b>include</b> these <span style="color:#33C8FF"><i>iPv6-Prefix</i></span> in <span style="color:#33C8FF"><i>iab-IPv6-PrefixReport</i></span>.
<b>for each</b> IP address prefix included (in previous step):
<b>if</b> this IPv6 address prefix is used for F1-C traffic:
<b>include</b> this prefix in <span style="color:#33C8FF"><i>f1-C-Traffic-IP-Address</i></span>.
<b>if</b> this IPv6 address prefix is used for F1-U traffic:
<b>include</b> this prefix in <span style="color:#33C8FF"><i>f1-U-Traffic-IP-Address</i></span>.
<b>if</b> this IPv6 address prefix is used for non-F1 traffic:
<b>include</b> this prefix in <span style="color:#33C8FF"><i>non-f1-Traffic-IP-Address</i></span>.
<b>if</b> this IPv6 address prefix is used for all traffic:
<b>include</b> this prefix in <span style="color:#33C8FF"><i>all-Traffic-IAB-IP-Address</i></span>.
<b>if</b> the IAB-MT is in (NG)EN-DC
<span style="color:#BB8FCE">OR</span>
<b>if</b> the IAB-MT is in NR-DC and the IAB Other Information procedure is
towards the IAB-donor-CU in the SN:
<b>if</b> SRB3 is configured:
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message via SRB3 to lower layers
for transmission;
<b>else if</b> the IAB-MT is in (NG)EN-DC:
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message via the E-UTRA MCG embedded
in E-UTRA RRC message <span style="color:#33C8FF"><i>ULInformationTransferMRDC</i></span> as specified in
TS 36.331;
<b>else</b>:
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message via the NR MCG embedded
in NR RRC message <span style="color:#33C8FF"><i>ULInformationTransferMRDC</i></span>;
<b>else</b>:
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message to lower layers for transmission.
</pre>
## 4.3 Message Definition _IABOtherInformation_
Consult pages 454 to 457 of TS 38.331-i00 (release 18 2023-12)
# 5 Information Elements (IE)
## 5.1 _IAB-IP-Adress_
Consult page 1292 of TS 38.331-i00 (release 18 2023-12)
## 5.2 _IAB-IP-AddressIndex_
Consult pages 1292 and 1293 of TS 38.331-i00 (release 18 2023-12)
## 5.3 _IAB-IP-Usage_
Consult page 1293 of TS 38.331-i00 (release 18 2023-12)

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

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