This work is based on work by NTT.
To use the code, do:
./build_oai --oaisim --ue-nas-use-tun -t ETHERNET -c
This commit only handles oaisim in S1 mode.
We won't handle noS1 mode.
Only ulsim and dlsim compile. The others (dlsim_tm4 pucchsim prachsim
pdcchsim pbchsim mbmssim) have been disabled.
Command line to compile: ./build_oai --phy_simulators
The agent_id is a uint64 consisting of: module ID (i.e. mod_id, the several
instances of OAI at once, 16 bit), the enb_id from the configuration file (32
bit) and the cell_id from the configuration file (16 bit).
The module ID is part of the agent ID but it is easier to have it directly in
the struct.
The PHICH was not programmed for the last round (4) because it was
not programmed in rx_sdu but in schedule_ulsch_rnti, only in case
of a programmed retransmission (there is obviously no retransmission
programmed after the last round).
The case of Msg3 is not handled. To be done somehow.
As reported by Emad Alizade:
According to "Issue255 256 257 paging reesta release" that has been
merged in develop version, we have a question: In rrc_eNB_free_UE()
function only all ulsch related memory of user has been cleaned, but
I think not only ulsch memory but also dlsch memory must be cleaned.
I tested the latest develop version and with repetition UE attach-detach
procedures we find that the dlsch memory has not been cleaned and after
repeat this sequence (45 times) assertion with cause UE_id!=-1 (no free
or exiting dlsch_context, dci_tools.c: fill_dci_and_dlsch() ) occurred
and no UE will be attached to system.
The fixes in this commit are from Emad Alizade.
(cherry picked from commit 4b5b556493)
# Conflicts:
# openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
# openair2/LAYER2/MAC/eNB_scheduler.c
# openair2/RRC/LITE/rrc_eNB.c
This is hack-level development.
With this commit you can do UDP DL traffic of say 100Mb/s over
a 5MHz link with one connected UE and the eNB should not crash
because of memory exhaustion. Of course on the receiver side
you won't get 100Mb/s and many many lost packets. But the system
should not crash. 1Gb/s does not work. So in any case try to
remain within some reasonable limits. There is no reason to
push more than twice the maximum achievable throughput of
the link.
This work is based on a patch proposed by Francesco Gringoli.
The code was very unclear and potentially buggy.
This new version is more robust.
We can waste up to 2 bytes because the last header in the MAC PDU
does not contain a length field and when we request data from RLC
we suppose a 3-bytes MAC header. This might be optimized at some
point, but the benefit would be low.
This commit also contains some general cleanup:
- formatting
- variables' types: let's use 'int' instead of trying to be clever
by using small types that may generate bugs if the value is
too big
- remove 'tpc_accumulated' which was globally used for all UEs
and has no purpose other than logging. We may want to rework
a bit the TPC machinery at some point. As the code is today
we may repeatedly send TPC over and over without caring about
the 3GPP limits, in which case no one knows how the UE is
supposed to behave: does it clamp the current max value or does
it accumulate over and over and take the clamped value to compute
its actual power? If we send a reverse TPC (reduce power instead
of increase) does it do it immediately or does it have to decrease
n+1 times if we previously ordered it to increase n times?)
We do not address the problem of prioritizing LCIDs. As of today there
is only one dedicated traffic channel (DTCH), so it's not a problem
at this point.
What has been tested:
- monolithic eNB 5/10/20MHz with one cots UE, TCP/UDP UL/DL. At 20MHz the
machine used was not capable of keeping up, generating lots of Us
and Ls when the throughput reaches 60Mb/s. USRP B210 was used.