A new option -live has been added to run live (ie. like the 'enb' tracer)
and options -live-ip and -live-port to select IP/port of the machine running
the eNodeB.
Some new options to control MIB and SIBs recording have been added.
Some global variables have been removed.
Not much has been changed in the driver (that used libbladerf 1.0).
Some bugs have been fixed. Documentation has been added. A configuration
file has been added too, put in the directory ./configuration/bladeRF.
To use a bladeRF device, see documentation in targets/ARCH/BLADERF/README.
Only the BladeRF x40 has been tested.
Performance is not too bad at 5MHz, a bit worse at 10MHz and on the test
machine I used I face realtime problems at 20MHz when I push downlink
throughput.
So, there is still some work to do to have a good support of bladeRF.
If you run 'make' in common/utils/T/tracer
just after a clone of the repository then the
compilation will fail because the file ../T_IDs.h
was not generated.
Let's add a simple dependency to fix this.
It is to ease the life of people wanting to record traces to be
consumed later on by wireshark.
You just run: ./record -d ../T_messages.txt -o /tmp/record.raw -on WIRESHARK
and you're good.
The tracer macpdu2wireshark can send MIBs to wireshark.
This can be disabled by passing the new -no-mib option.
openair1/SCHED/phy_procedures_lte_eNb.c has been modified
to have a new T trace with the MIB.
The symptom: when two UEs do uplink traffic at the same time, the
eNB fails to decode data sometimes. This has been seen with FDD
and 50 RBs. This generates a cascade of other problems leading to
disconnection/reconnection events seen in the log.
The problem: there are probably many, but one obvious bug was found
while analyzing some logs. Scheduling in the same TTI one UE's uplink
traffic and random access (msg3) was done in the same RB.
This commit fixes this simple case. It is probably not the end of
the story.
This is a hotfix, that does not change the code much.
We need to use vrb_map_UL properly all over the places. Today is
not used, but this is the way to go (most probably).
Fix the assertion:
Assertion ((instance_p->mnc_digit_length[ue_desc_p->selected_plmn_identity] == 3) || (instance_p->mnc_digit_length[ue_desc_p->selected_plmn_identity] == 2)) failed!
In s1ap_eNB_handle_nas_first_req() /home/ubuntu/tmp/openair3/S1AP/s1ap_eNB_nas_procedures.c:243
With this hotfix the UE selects the first PLMN sent by the eNodeB.
The UE has to select the correct PLMN from those received in SIB1. This
will be done with a later merge request.
For whatever reason we need N_TA_offset to be 0 for the basic simulator
to function properly.
This is more a hack than a proper solution. More analysis is needed
to understand what happens and what should be really done.
In TDD mode the eNB does not output data all the time,
only in downlink and special subframes.
The basic simulator needs a continuous stream of samples.
So let's fill the blank with silence.
When compiling in debug mode, the 'inline' semantics of C99 led to the errors:
/roux/w25/openairinterface5g/common/utils/LOG/log.c:479: undefined reference to `log_header'
libUTIL.a(log.c.o): In function `log_dump':
/roux/w25/openairinterface5g/common/utils/LOG/log.c:502: undefined reference to `log_header'
collect2: error: ld returned 1 exit status
Let's use static instead of inline.
This commit manually reverts the commits:
- 97c69dc4a4
- 3278aa494d
The basic simulator was not functional anymore because
the UE did not send RRCConnectionSetupComplete due to
some problem in the PDCP layer, most probably.
Note: we don't include the last commit from origin/recode_itti_from_scratch
because it is just astyle formatting. As of today we don't enforce
astyle and including this work would lead to future merge conflicts.
A proper process to enforce astyle has to be put in place. In the
meantime, no astyle allowed in commits if the changes are too big
and not relevant to work done.
The bug popped up when one UE was doing TCP UL iperf and a second UE
attempted to connect. A crash of the eNB happened because we changed
the wrong NFAPI structure in a TTI where both UEs are scheduled.
Something like that.
Using the basic simulator and valgrind, it was found that
the lack of initialization of those two pointers leads to
some very nasty behavior of some other parts of the system.
In the eNB it's not really used for the moment because there
is a limitation to uplink scheduling. In
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c we have:
while (((rb_table[rb_table_index] > (N_RB_UL - 1 - first_rb[CC_id]))
|| (rb_table[rb_table_index] > 45))
That limits uplink scheduling to at most 44 RBs. The 768 case is for
64 RBs.
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.
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.
Make it compatible with 'template' gtwave files as found in openair's
repository.
The type VCD_NAME was added to the VCD IDs in T_messages.txt.
The database processing code was adapted to use it.
The tracer to_vcd was adapted to use it and render the produced vcd
output compatible with the 'template' gtkwave files.
When running to_vcd, do not forget to pass -vcd to use this feature.
This tracer allows the connection of several tracers to one tracee.
To use the multi tracer:
- run the tracee as usual, eg. ./lte-softmodem -O xxxx.conf --T_stdout 0
- run the multi tracer: ./multi -d ../T_messages.txt
- connect other tracers to the multi tracer:
- ./enb -d ../T_messages.txt -p 2022
- ./textlog -d ../T_messages.txt -p 2022
- etc.
By default the multi tracer connects to the tracee to the port 2021,
as for any other tracer.
Then it accepts connections from other tracers on the port 2022.
This can be changed with parameters on the command line.
The tracee and the other tracers can be stopped/started at any time.
One of the optimized RE allocation function does not work properly
and generates some decoding errors with a COTS UE. Let's use the
generic function for the moment, while analyzing what is wrong.