S1AP specs say:
initialUEMessage S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE InitialUEMessage
PROCEDURE CODE id-initialUEMessage
CRITICALITY ignore
}
So let's use "ignore", not "reject".
The online decoder http://asn1-playground.oss.com/ did
not decode a message encoded by the eNB because of this.
Only the S1AP messages captured while doing a simple connection
of one UE have been tested with the online decoder.
So, not all the S1AP messages have been checked, maybe some
instances of this problem are still there.
It does not seem to harm the actual UE<->eNB<->EPC communication
(because we don't check the integrity of messages or because
asn1c does not do it), so it's not a big deal.
Try to merge feature-68-enb-agent into develop
develop should be fast-forwarded later to this branch to complete the merge
This code does not compile yet. Among other things:
- the scheduler structure needs to be reworked for FlexRAN
- the config is structured differently. The files enb_config.{c,h} from develop
have been copied in here, the files with merge annotations are in
enb_config.{c,h}.before_merge
- the restart needs to be restructured, since the PHY vars data structure lives
in RC now
It has been chosen to not include the full history of commits
from David. He included a binary version of wireshark, probably
a modified one that understands NFAPI. Wireshark is released under
the GPL license, we cannot include it in the repository. We could
have done a next commit to remove this binary. But then it would
still be present in the history of commits, which may not be allowed.
And it would take space on disk. We could edit the history to remove
wireshark entirely. But this operation is too complicated.
There was also a pcap capture file, which has nothing to do in
the history of commits and would take space on disk. There again,
it's too difficult to edit the history to remove it.
There was a file .gitignore that was also removed.
The original history can be found on David's repository:
https://gitlab.eurecom.fr/daveprice/openairinterface5g/
The branch is: nfapi-ru-rau-split.
A copy of that branch has been included in the internal OAI
repository, for those who have access to it.
The branch is the same. The last commit ID is
9106438239e0bc626ff1fa1d97d911caadd0fbb9.
You can compare the current commit with the commit 9106...
to see what differs.
The current commit has to be considered non-working.
The commit following the current commit will fix problems with
the work in the current commit.
If you use git bisect, don't spend time analyzing the current
commit.
phy_init_lte_ue_signal was renamed init_lte_ue_signal in openair1/PHY/INIT/defs.h
maybe it's the opposite that should have been done?
Functions used in one file and defined in another may have been
declared in the wrong header file.
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.
- 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
see https://gitlab.eurecom.fr/oai/openairinterface5g/issues/227
When the UE connects to the eNodeB and receives its IP address from the
network, it calls system() to set it in the linux kernel world. This call
is not done in a realtime thread, but in the NAS, which uses its own thread,
independent of the realtime processing.
In some situations this totally disrupts realtime processing.
It is difficult to know precisely why that happens, but it seems that calling
fork(), as system() does, in a multi-threaded program is not a good idea. (So
say several people on the internet.) It is not clear why the softmodem is
impacted, but it seems that fork() is really what triggers the disruption.
Several tests lead to that conclusion.
To fix the problem, we create a child background process very early in main()
(before anything else basically). Then instead of calling system(), the main
process sends the string to the background process. The background process
gets the string, passes it to system() and reports the success/failure back
to the main process.
This solution involves a lot of system calls, but calling system() in the
first place is not cheap either. As long as no realtime thread uses this
mechanism, things should be fine. Time will tell.
The compilation line was:
./build_oai --eNB -w USRP
The file openairinterface5g/cmake_targets/log/lte-softmodem.Rel10.txt
has been checked and all LOG_X (and 'msg') warnings have been fixed.
This reverts commit d31634c358.
Laurent Thomas had a problem on one machine with the build_oai
way of checking for nettle.
The problem with the alternative solution of including nettle/bignum.h
is that it is very unclear.
The problem with nettle is that the file nettle/config.h does not
exist for version 2. It was introduced in version 3.
We want to support both versions, but there is an API incompatibility.
So we need an #if #else mechanism.
The file nettle/bignum.h is present in both versions 2 and 3 and it
includes nettle/version.h in the version 3.
So by including this file, we can check for the existence of
NETTLE_VERSION_MAJOR (that comes from nettle/config.h) in the
code.
But as you can see, the reasoning is way too complex.
So it's better to keep the check in cmake_targets/CMakeLists.txt.
As long as we support version 2 this will be the way to go.
It is possible to force a given version in specific non-generic
customized environments.
Those functions modify a global char array (a string).
Let's pass a buffer to those functions, so that it's
thread safe. The caller has been modified, with hopefully
a buffer big enough (still bigger than what was there before,
so should not break more than it did).
It was not setting emm_data->eplmn.plmn[X], only emm_data->eplmn.n_plmns,
leading to the UE to dig for PLMN 00000.
(It's not the end of the story, seems like the PLMN selection
does not work, the UE only tries one from what I've seen, but
I didn't dig much, may be wrong.)
Also included some source files not related to this branch.
modified: openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
modified: openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c
modified: openair1/PHY/MODULATION/beamforming.c
modified: openair1/PHY/TOOLS/twiddle18432.h
modified: openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
modified: openair3/NAS/TOOLS/nvram.c
modified: openair3/NAS/TOOLS/usim.c
modified: openair3/NAS/UE/user_defs.h