With the current implementation of oaisim
(rxdata and channel simulation), we cannot
call trx_read_func on a dummy buffer. The
code will actually modify the rxdata buffers
of the UE.
This is has to be rewritten properly. In the
meantime, let's introduce a simple hack. The
idea of the read at this point is to wait for
the synch to finish and not lose samples from
the hardware in the real UE. In the simulator,
as it is today, we can simply sleep until the
synch code has finished its work.
In case of oaisim, dl_phy_sync_success has to be called
by initial_sync, as it used to be.
We introduce an #if OAISIM, this is not elegant, but will
do it for the moment.
This bug happens when we detect uplink failure for one UE.
In this case, a DCI format 1A is sent to the UE to ask it
to do random acces.
The way this DCI is generated was not compatible with how
the software is organized. It was expected that the DCI are
added (with add_ue_spec_dci and add_common_dci) in a very
specific order: first all DCIs in common space are added
(with add_common_dci) then all DCIs in UE specific space
are added (with add_ue_spec_dci).
The problem was that the DCI format 1A DCI sent to the UE
for it to do random access is added (with add_ue_spec_dci)
before the DCIs in common space.
That totally messed up the logic in add_common_dci and
add_ue_spec_dci.
The solution is to get rid of Num_common_dci and Num_ue_spec_dci,
replace those two counters by only one (Num_dci) and add
"search_space" in the dci_alloc structure to be used later by
the function "allocate_CCEs" when calling "get_nCCE_offset".
The software had to be adapted to the new variables, everywhere.
I am not sure that the simulators work. It seems that some
of them didn't use Num_common_dci and Num_ue_spec_dci to
decide on what space (common or UE specific) to put the DCI,
but relied on the rnti (comparing with SI_RNTI). To be tested
properly.
The modified simulators are:
- openair1/SIMULATION/LTE_PHY/dlsim.c
- openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
- openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
- openair1/SIMULATION/LTE_PHY/framegen.c
- openair1/SIMULATION/LTE_PHY/pdcchsim.c
- openair1/SIMULATION/LTE_PHY/syncsim.c
changes:
- ue mcc/mnc 208.93
- use correct key/opc for user
- change addresses in conf file for them to be easier to understand
(maybe)
With those changes, running:
sudo ./run_enb_ue_virt_s1
in cmake_targets/tools should work out of the box
The user still has to configure correct IP addresses in
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf
We supposed oaisim (enb+ue) machine to be on IP address 10.0.1.1
and EPC (hss, mme, spgw) machine to be on IP address 10.0.1.2.
Several problems are present.
The first is that _write returns 0 instead of the
number of samples. We solve it by returning
nsamps.
The second is that _read may return less samples at
the beginning and we don't want to exit for that.
We solve it also by returning nsamps.
(We still need to log more in this, to be done in the
next commit.)
The third is that after initialization we don't send
anything for a while, time for the softmodem to finish
its init. This generates lots of "RX overrun".
We solve it by disabling TX and RX modules after init
and then in trx_brf_start we activate them again (and
also call bladerf_sync_config, which seems to be
mandatory, and bladerf_calibrate_dc, which may be avoided,
perhaps).
Maybe not the end of the story. Sometimes it works, UE connects,
traffic is fine (tested only with 5MHz). Sometimes it does not,
UE does not connect, or it connects but then traffic is bad,
especially uplink.
To be refined.
develop_integration_w22 into develop
Summary of changes:
- UE:
* TDD multiplexing
* TDD autotest
* bug fixes: power control management for Msg3, logging
- eNB:
* CCE allocation fixes
* S1U port in some configuration files set to 2152 (was 2153)
- support for RedHat enterprise linux 7 and derivatives (CentOS, ...)
(work provided by RedHat)
See merge request !198
- rename UE_NO_LOG to DISABLE_LOG_X
because the name is misleading. The full software
is impacted, not only the UE part
- same for compilation option ---ue-no-log
that becomes --disable-log
- keep LOG_X for the standard case, that is the
case without DISABLE_LOG_X where printf has been
put. Two reasons:
* printf is not realtime friendly
* keep behavior similar for other users who may
be troubled by different logs that don't add
any benefit to previous logs
develop_integration_w20 into develop
Summary of changes:
- bug fixes
* UE TDD fixes
* PDCCH size computation (at phy level, still to be corrected at mac level)
* DAI increment
* fix run_enb_ue_virt_noS1 and run_enb_ue_virt_s1 to use Rel14 and
have --xforms to work
* compilation warning removals
* better oaisim logging (print UE security keys,
print version (git commit ID) at runtime, print working directory)
See merge request !190
Problems reported by Jorge Muñoz Castañer <jorgem@gti.uvigo.es>.
- use Rel14 binaries (those are produced by default)
- let -x option work to have graphical output
- fix VCD missing 'echo'
It seems that ciphering_algorithm is "unsigned int" in RRC Rel10
and "unsigned long" in RRC Rel14 (as processed by asn1c)
Let's force it to unsigned long in the log to avoid compilation-time
warnings.
Seems like this commit got lost at some point.
Here was the message:
-----------------------------------------------------------------------------
Author: Cedric Roux <cedric.roux@eurecom.fr>
Date: Tue Jan 10 14:21:02 2017 +0100
add format indicator to get LOG_X warnings
The LOG_X macros emit a lot of warnings when compiling with the T
because they call the function logRecord (or logRecord_mt)
which has not been "marked" as calling printf, so gcc won't
emit typical printf warnings.
With the T, they directly translate to sprintf, so those warnings
pop up, much more verbose due to several macro expansions.
Let's make them pop up all the time so it's easier to fix them.
-----------------------------------------------------------------------------
- print current working directory
- print git version (if available)
- print security keys
this last one is a security breach, but as of today
it's not a problem
develop_integration_w19 into develop
Summary of changes:
- bug fixes:
* RLC AM fixes
* UE TDD fixes
* Fujitsu bug fixes (TDD also)
* mobipass fixes (bad management of carriers, softmodem was failing with more than one CC)
* compilation warnings removal
- PUCCH format 3 preliminary support (work from Fujitsu)
- build fixes: do not include shared library in main executable (work from Nokia)
express MIMO2 needs some more work here
See merge request !184
There is now the function copy_harq_proc_struct and some
procedures for the UE have changed, which makes necessary
to have UE->dlsch valid for both subframes (odd and even).
We increase memory usage, maybe it's not the correct solution.
To be kept in mind if something goes wrong at some point.
----------------------------------------------------------
bug 24
Ttile:
The last line "multicast_group = multicast_group" is hard
to understand. The local variable should be different name
than the global variable.
Bug Location:
const char *multicast_group_list[MULTICAST_LINK_NUM_GROUPS] = {
"239.0.0.161",
"239.0.0.162",
"239.0.0.163",
"239.0.0.164"
};
:
:
void multicast_link_start(void (*rx_handlerP) (unsigned int, char *),
unsigned char multicast_group, char *multicast_ifname)
{
rx_handler = rx_handlerP;
multicast_group = multicast_group;
Note:
Detected by CppCheck
----------------------------------------------------------
In 20MHz the UE didn't do any uplink granted by DCI0.
It was replying to RAR, so uplink decoding was okay.
Turns out the DCI0 structure for TDD was wrong.
The constant RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU is set to 24. This is
too low. Running a downlink TCP iperf with a 10MHz or 20MHz cell
leads to lots of the following warning in the log:
[RLC][W][SN 792] Bad RLC header! Discard this RLC PDU (size=618)
The problem is that the uplink RLC PDU contains a lot of TCP ack.
We can see much more than 24 of them. The RLC layer is not happy
and discards the PDU.
Putting 256 for RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU (arbitrarily chosen,
big but not too big) solves the problem, at least for 10MHz.
Using "system" to call "git log" is too error-prone.
In the test setup, lte-softmodem was blocked because
"git log" uses a pager ("less") and the pager was
waiting for the user to press enter.
We could pass "--no-pager" to "git log" but then
what if someone runs the softmodem out of the source
tree?
cmake defines PACKAGE_VERSION, we can use that instead,
as is done in openair-cn.
This reverts commit 7f24927c43.
With value 13 uplink TDD for a 10MHz configuration was not working.
UDP traffic sent with: "iperf -c XX -u -b10M" was crashing
the eNB.
Develop integration w13
Summary of changes:
- RLC AM reworking (a lot has changed)
- several bug fixes
* support processing multiple MAC RAR control elements in a single MSG2
* fix ACK/NACK resetting
* do not correct USRP frequency from carrier offset estimation when --ue-carrier-scan == off
* fix TDD uplink due to incorrect PUCCH format for SR in TDD
* several other simple fixes
- better support for LMS SDR
See merge request !168
- define _GNU_SOURCE before including pthread.h
- do not use static for the array 'threadname' used
to store the name, it makes it a global variable
accessed by several threads in parallel
- increase size of 'threadname' (maybe not necessary)
- properly indent #define / #under (# should be at column 1)
When you ran it with the scope as:
./dlsim -X
you saw no activity in the "PDSCH I/Q of MF Output" window,
so matter what SNR you put (even for very high SNR, say: ./dlsim -X -s40)
this commit seems to fix it.
I am not sure it is the end of story. The 2 threads PDCCH/PDSCH structures
may still not be used correctly everywhere.