Various problems were found with the basic simulator.
Variables used by various threads for synchronization need to
be initialized properly. That is before the various threads
start using them.
This goes for:
- UE->is_synchronized
- UE->proc.instance_cnt_synch
- UE->proc.instance_cnt_rxtx
The function "UE->rfdevice.trx_start_func" was called in
"UE_thread_synch" but should be called in "UE_thread" because
"UE_thread" is the one that calls "UE->rfdevice.trx_read_func"
and there is no guaranty that the call to "UE->rfdevice.trx_start_func"
is done before as it has to (it's in another thread).
And finally "pthread_cond_signal(&proc->cond_rxtx)" was called twice,
which may not be a problem but was certainly not intended. Plus
removing one call simplifies the code by removing some "if" logic,
which is a good thing per se.
This commit was not tested with a real UE and may thus introduce some
issues. Hopefully not!
With 50 RBs and 100 RBs the UE crashes in the basic simulator
because of false detection of DCIs.
Putting nothing in the unused REs in the DCI instead of random
bits solves this issue and let the basic simulator run with 50 RBs
and 100 RBs.
Note that in the real UE the problem needs to be solved because
the channel may lead to false DCI detection and the consequent
crashes have to be solved. This commit sort of "hides" the issue
to have the basic simulator functional.
Note also that putting nothing in the unused REs in the DCI should
be the normal general case. But it has not been tested with anything
but the basic simulator so the previous code is left.
Before this commit we were checking for UE->is_synchronized == 0
then we were waiting for a potentially active synch routine to
finish and then we were starting the synch routine again but the
synch routine that was running may have set UE->is_synchronized
to 1. This was leading to various problems, most notably the following
message repeated over and over in the UE log and the UE unable to
connect properly:
[RRC] [UE 0] Frame 377: OUT OF SYNC FROM eNB 0 (T310 active 0 : T310 0, N310 345, N311 0)
So let's wait for a potentially active synch routine to finish
before anything else.
-- no more -x option at compilation time
-- iperf server report crash better handled
-- python executor retrieve iperf server files in case of failure to analyze
-- comparison w/ requested bandwidth
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
Summary of changes:
- fix compilation on CentOS
- some work on the T tracer:
- add a 'multi' tracer to connect several tracers at the same time
- improve 'to_vcd' to be compatible with previous VCD traces
- preliminary work for X2 handover
- various bug fixes
A new version of asn1c is to be used with this commit.
Do:
cd [top directory of repository]
source oaienv
cd cmake_targets
./build_oai -I
- 'busy' has to be handled in a more atomic fashion to avoid crazy
runtime race conditions
- the basic simulator is too fast sometimes; rewrite the accesses to
the T cache to avoid there again crazy behaviors
Hopefully that's better...
This commit removes the warning:
make[4]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
Basically, inside a Makefile we should use $(MAKE) instead of make.
Since VCD has now to go through the T tracer, we enforce the consistency
of data found in common/utils/LOG/vcd_signal_dumper.[ch] with data
found in common/utils/T/T_messages.txt.
We might get completely rid of common/utils/LOG/vcd_signal_dumper.[ch] at some
point. For the moment, let's keep it.
This commit adds the program common/utils/T/check_vcd.c and necessary
modifications to enforce its use at compilation time.
If you modify common/utils/LOG/vcd_signal_dumper.[ch] but do not update
common/utils/T/T_messages.txt an error will pop up when you compile the
software. You have to keep both modules synchronized.
TODO: Currently the driver picks the two first RX and TX channels when nb_tx and nb_rx are both set to 2. If a developers wants to force usage of two devices, 'set_rx_subdev_spec' and 'set_tx_subdev_spec' can be used to indicate to the driver so that antennas from separate devices will be used. To rephrase: until 4 antennas are supported by OAI, testing with two devices, so that antennas from both devices are used, requires manual configuration of which subdevices' antennas are used.
Conflicts:
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp