Commit Graph
73 Commits
Author SHA1 Message Date
Bartosz Podrygajlo 8f9b89925e Replace hashtable with epoll_event_t in rfsimulator
Replace the FD <-> buffer_t hashtable with epoll_event_t mapping.
This simplifies the code, reduces the probability of memory leaks and removes a
possible data race on the hashtable during rfsimulator shutdown.
2025-05-27 10:01:52 +02:00
Thomas Schlichter d6585f3750 rfsimulator: enable and correct NTN LEO doppler simulation 2025-04-10 13:56:20 +00:00
Thomas Schlichter cfde90dc85 rfsimulator: apply deadlock detection only if more than one client is connected 2025-03-27 09:54:20 +00:00
Bartosz Podrygajlo 8672513517 Allow >1 channel models on rfsim server
Use `rfsimu_channel_ue1`, `rfsimu_channel_ue2`, etc. if you want to
use different channel models for each client. The client connection
order determines its channel model name.
2025-02-28 13:53:10 +01:00
Bartosz Podrygajlo 953e4a448b Command line option for rfsim server hanging workaround
Enable/disable workaround based on a new option "hanging-workaround".
This addresses an issue where the workaround will trigger even if there
is no risk of a permanent lockup of the system.
2025-02-28 13:53:06 +01:00
Bartosz Podrygajlo c6ed26fca3 Add a metric for rfsimulator channel emulator performance
Add a print and method to calculate rfsimulators channel emulation performance.
The counter unit is Megasample/second (Msps).
2025-02-19 16:18:16 +01:00
Bartosz Podrygajlo 2fb541a68e Add option to use global noise power for all RX channels in RFSimulator
Added new command line option to channelmod: noise_power_dBFS. This options
allows the user to configure noise power in dBFS added instead of the per-channel
value.

This makes it so noise is not accumulated per channel reaching higher than expected
values.

The dBFS unit allows easy configuration. The gNB by default uses -36 dBFS setting.
To reach 3dB SNR one should set the noise_power_dBFS value to -39.

To configure using command line use --channelmod.noise_power_dBFS -50. Using this
setting the gNB and nrUE connect without issue.
2025-02-19 16:05:38 +01:00
Bartosz Podrygajlo 82fbb6bb04 Remove unused noise_power_dB field in rfsimulator_state_t 2025-02-19 16:05:29 +01:00
Robert Schmidt 7d574ffcfb Merge remote-tracking branch 'origin/fix_ntn_leo' into integration_2025_w07 (!3194)
fix NTN LEO scenarios

- gNB: add support for NTN parameter ta-CommonDrift-r17
- NR UE: fix application of NTN TA information
- NR UE: add command line parameter ntn-initial-time-drift to compensate
  time drift during initial sync
- NR UE: fix writeTimestamp inconsistencies
- NR UE: add MAC state UE_RECEIVING_SIB ensuring to start RA only after
  successfully receiving SIBs
- rfsimulator: update earth radius for LEO simulation to match UE
  position in ue.conf file
- update conf files for NTN LEO scenario
- update description how to run NTN scenarios in RUNMODEM.md
- fix: ta-Common is a round-trip-time, not a one-way delay
- NR UE: simplify calculation of next_tx_slot_and_frame by moving up
  assignment of duration_rx_to_tx
- cellbarredNTN indicates notbarred in SIB1 if NTN access is available
- Removed b66 NTN and enabled B254 NTN conf file in CI
- NR UE: RRC layer now explicitly tells MAC layer when the RA procedure
  can be started
- move NTN LEO config to band 254 and update doc/RUNMODEM.md

Closes #901
2025-02-17 15:09:24 +01:00
Thomas Schlichter 3fce7688aa rfsimulator: update earth radius for LEO simulation to match UE position in ue.conf file 2025-02-14 17:03:56 +00:00
Bartosz Podrygajlo fd20068f26 Deadlock avoidance in rfsimulator 2025-01-31 15:47:41 +01:00
Laurent THOMAS b999177810 remove MMX instruction usage in polar decode 2025-01-24 15:29:28 +01:00
Laurent THOMAS a8f6563060 remove a complex and not very usefull trace in replay_node 2025-01-23 10:35:49 +01:00
Robert Schmidt bc8556eafb Implement RFsim stopServer: close listen socket, free memory 2024-12-16 16:18:10 +01:00
Guido CasatiandArash Sahbafard 3438d45d6c Add tutorial about how to run multiple UEs
* multiple UEs with namespaces (provided new script)
* multiple UEs with Docker UEs
* updated rfsimulator and channel simulation tutorials
* updated README.md

Co-authored-by: Arash Sahbafard <arash.sahbafard@silicon-austria.com>
2024-12-05 13:50:36 +01:00
Reem Bahsoun 7dcf80398a Update docs and README files to align with modifications in config files 2024-11-12 13:55:49 +01:00
Bartosz Podrygajlo 883333bfe6 Use hashtable for mapping FDs to buffer_ts in rfsimulator.
Use hashtable for determining which buffer_t does a sock map to. This
lifts the restriction for number of FDs used by applications using rfsimulator.
2024-10-24 10:11:00 +02:00
Robert Schmidt d6f0ff37c2 RFsim: doc serveraddr: mention IPv4v6 and DNS 2024-10-07 14:17:12 +02:00
Robert Schmidt a648afd4c6 RFsim Client: Improve logs
- Remove double "Connection ... established" (already printed in
  caller)
- Remove useless, there is already the logging module
- Print getaddrinfo() error as LOG_E (error)
2024-10-07 14:16:15 +02:00
Ghislain Bourgeois 6344fce6e4 Reinitialize sock to -1 after closing
Prevents bug where a closed socket is returned.
2024-10-02 10:34:27 -04:00
Ghislain Bourgeois 320747e0b0 Use getaddrinfo() and add IPv6 support in startServer
This commit refactors startServer to use getaddrinfo() to
prepare the socket creation. Doing so, it also adds support for
IPv6 by using AF_UNSPEC as the address family.
2024-10-02 09:34:24 +02:00
Ghislain Bourgeois 53d31eb26e Use getaddrinfo() when connecting to rfsimulator
This commits uses getaddrinfo(3) when connecting as client to the
rfsimulator. This enables name lookups, through DNS or a hosts file.

This change makes it easier to use the simulator in a dynamic
environment like Docker or Kubernetes by only targeting the name of
the container or service.
2024-10-02 09:34:24 +02:00
Bartosz Podrygajlo 23cc049157 Remove unnecessary includes in rfsimulator 2024-09-26 14:59:14 +02:00
Cedric Roux 532aa1a904 rfsim: print error if write fails
Some strange behavior may happen if write() to the rfsim socket fails.
Let's print some error, can be useful in case of problem.
2024-08-29 15:06:29 +02:00
Cedric Roux 42539b0bec rfsim: add a check on 'sock'
It is very possible that the operating system returns a file
descriptor bigger than the size of bridge->buf (MAX_FD_RFSIMU, which
is 250 as of now). As a minimum, let's fail if the socket file
descriptor is out of bounds.

A proper solution may be implemented later, if needed.
2024-08-29 14:59:51 +02:00
Thomas Schlichter ede6775ac3 fix for compilers that don't support the CMPLX() macro 2024-08-23 14:57:48 +02:00
Thomas Schlichter 6a8edaf317 rfsimulator: add delay and Doppler simulation for circular orbit and add according channel models SAT_LEO_TRANS and SAT_LEO_REGEN
Delay and Doppler computation is done as in Matlab function dopplerShiftCircularOrbit:
https://de.mathworks.com/help/satcom/ref/dopplershiftcircularorbit.html
2024-08-20 16:46:25 +02:00
Thomas Schlichter 68b07d542c rfsimulator: correctly set center frequency 2024-08-20 16:46:25 +02:00
Thomas Schlichter 359880fa73 rfsimulator: use ceil() to calculate the integer number of chan_offset samples from the prop_delay_ms
The actual propagation delay should not be smaller than the one specified.
A too short propagation delay might result in too early reception of Msg1, and with that in a mis-detection of the RAPID.
2024-07-11 14:48:52 +02:00
Robert Schmidt 13517cd6bc Write documentation on performance tuning and security 2024-06-03 14:21:19 +02:00
Robert Schmidt 6a12784872 RFsim: don't shell out to improve kernel socket buffer sizes, teach the user instead
A later commit in this series adds performance tuning tips, which
includes the call made in RFsim until this commit.
2024-06-03 14:00:41 +02:00
Robert Schmidt 55728a98c1 RFsim: demote log level, remove useless log message 2024-06-03 12:37:33 +02:00
Thomas Schlichter d5a0455560 fix error of taking the absolute value of 'uint64_t' 2024-05-07 20:46:37 +02:00
Thomas Schlichter 5ac881b7c1 rfsimulator: add support to simulate a long propagation delay
Add the option `--rfsimulator.prop_delay` to specify the simulated receive-path (gNB: UL, UE: DL) propagation delay in ms.
This option can be used e.g. to simulate a simple GEO satellite channel by specifying `--rfsimulator.prop_delay 238.74` to both, the gNB and the UE.

This is part of the work developed by Fraunhofer IIS within the ESA-funded project 5G-GOA (https://connectivity.esa.int/projects/5ggoa).
2024-05-07 20:46:37 +02:00
Robert Schmidt 42254e6267 Memory sanitizer: unitialized read
Reset all the circular buffer to zero; this ensures that we cannot read
uninitialized data. Since this is RFsimulator, performance is not a
problem here either (and zeroing out happens only once).
2024-04-18 14:16:09 +02:00
Robert Schmidt 513f56e215 One RFsimulator end, close open connections
Use the correct function in order to close open RFsim connections,
instead of a simple close(). If this is not done correctly, it might
happen that the softmodem closes, but an L1 thread might still read
samples (bug in higher layers). Then, RFsim tries to read a socket
(because it has an open connection), but the actual connection had been
close()d. This commit fixes this behavior.
2024-03-19 15:26:49 +01:00
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
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
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
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
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 1fe4cef03d Update/Improve RFsim documentation
- Add TOC
- Better describe what RFsim does
- Remove misleading, wrong, unnecessary information
  * It is futile to mention --phy-test or other modes, RFsim works with
    all
  * Explaining how to ping is not the task of the RFsim documentation
    (that is what tutorials are for)
  * Remove useless/outdated build log information
- Add some more information on which flags to run
- Improve formatting, and minor clarifications
2024-01-05 13:39:00 +01:00
Robert Schmidt 09652061bb Lower RFsim EAGAIN error message to debug message
We set the RFsim TCP socket to non-blocking. Thus, it may happen that we
cannot write() to the socket when the kernel cannot handle the request,
in which case we wait some time before trying again. This is the
correct/expected behavior.

Since this is *normal*, an error message is not justified; we did not
even print a message in this case before commit 21790f9c4f introduced it.
2023-12-20 15:22:15 +01:00
Cedric Roux 578cd23d59 rfsimulator: ignore PIPE signal
When au UE disconnects, a write on the rf simulator socket may
generate a PIPE signal in the gnb and crash it.

Let's ignore this signal.
2023-11-18 21:44:21 +01:00
Laurent THOMAS f50d5f5a9b make multiple config instead of one implicit global 2023-11-10 10:23:11 +01:00
Arash Sahbafard e46eeffe2a There was a simple bug in detecting the channel models in rfsim which is fixed.
modified:   radio/rfsimulator/simulator.c
2023-10-16 18:08:55 +02:00
Laurent THOMAS f8c122a7cf increase the max fd of rfsim, that have been shorten to tightly for cpu saving 2023-10-06 11:21:27 +02:00
Robert Schmidt d8c8c6b103 Merge remote-tracking branch 'origin/rfsimu-optim' into integration_2023_w38 2023-09-22 08:38:18 +02:00
Bruno Mongazon-Cazavet eac8f3b5d6 Limit some optimization to 1 tx and 1 ue 2023-09-18 13:49:48 +02:00
Robert Schmidt 8db0e44d4c Log which sysctl variables are changed in RFsim 2023-09-14 09:26:35 +02:00