Compare commits

..

656 Commits

Author SHA1 Message Date
Cedric Roux
59b31dbb2d Merge remote-tracking branch 'origin/develop_integration_2018_w25' into develop
Summary of changes:
- import work from Fujitsu:
    - multiple UEs
    - TDD configuration 1
- several bugs fixed:
    - UE power changes
      this one introduces two new parameters in the configuration file,
      update yours! The new parameters are "puSch10xSnr" and "puCch10xSnr".
      See targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
    - IQ replay module
    - use MAKE_VERSION(x,y,z) instead of RRC_VERSION
    - some UE fixes

Some new problems may happen. The work from Fujitsu was huge
and their branch diverged a lot from develop, leading to a very
complex merge.

The UE power management may also have an impact. It expects the noise
level to be at around 30 (as seen in the enb T tracer, in the
"input signal" view) and asks for an SNR of 20dB (value 200 for puSch10xSnr
and puCch10xSnr in the configuration file). You may want to put a
lower value, say 100 (SNR of 10dB). This is still work in progress
and needs some more work (we need to calculate the noise level at
runtime and not use a hardcoded value of 30).
2018-06-21 15:00:26 +02:00
Cedric Roux
c221af02db minor: update documentation of basic simulator's compilation. 2018-06-21 10:06:42 +02:00
Cedric Roux
b6fd23caaf fix: revert increasing size of MEM_MNGT_MB5_NB_BLOCKS
This commit reverts the change coming from
675fd0af4e.

On a test machine, running the basic simulator (both eNB, UE
and T tracer) with 100 RBs eats too much of memory on a computer
with 8GB of RAM, leading to a reboot because the computer
was not responsive anymore.

Other solutions are needed to solve the memory issues, but
multiplying by 50 this number is not a good one, at least
not in the basic mode of operation. If this value needs
to be that big, a #ifdef #else #endif may be used.
2018-06-20 11:00:56 +02:00
Cedric Roux
45cf2e1b8b set pucch_n1_AN to 0
Same idea as commit cce51f69bc.
2018-06-19 11:33:57 +02:00
Cedric Roux
4dfaf50977 fix compilation of dlsim/ulsim
The following command did not work anymore:
    ./build_oai --phy_simulators
2018-06-19 10:11:15 +02:00
Cedric Roux
b04ff22645 fix compilation of ue_ip kernel module
May not be the best solution. Maybe we can pass -DXX=XX
on the command line somehow.
2018-06-18 17:19:26 +02:00
Cedric Roux
b65af94d47 Merge remote-tracking branch 'origin/311-encapsulate-lte_gold_generic-functionality' into develop 2018-06-18 16:25:57 +02:00
Cedric Roux
0c445bedda Merge remote-tracking branch 'origin/bugfix-310-IQrecplay' into develop 2018-06-18 16:25:48 +02:00
Cedric Roux
d579a74e54 Merge remote-tracking branch 'origin/migrate_rel10_rel14_to_make_version' into develop 2018-06-18 16:25:39 +02:00
Cedric Roux
9adf1999db Merge remote-tracking branch 'origin/oai_ue_fixes' into develop
Conflicts:
	openair2/RRC/LTE/rrc_eNB.c
2018-06-18 16:13:06 +02:00
Cedric Roux
2f639e45b6 Merge remote-tracking branch 'origin/ulSNRs' into develop
Conflicts:
	openair2/ENB_APP/MACRLC_paramdef.h
	openair2/LAYER2/MAC/mac.h
2018-06-18 16:01:25 +02:00
Cedric Roux
68f0027830 Merge remote-tracking branch 'origin/mu_with_tdd1' into develop 2018-06-18 16:00:14 +02:00
Cedric Roux
4ba4d43aa6 set proper default values for puSch10xSnr and puCch10xSnr
20 was wrong, it means 2 dB.

200 is a bit high on my setup. Today the code hardcodes the noise
level as 30dB and a target of 20dB above noise is chosen by default.
Some more work is needed to estimate the real noise level. Some
more work is needed to set proper defaults.
2018-06-18 12:51:02 +02:00
Cedric Roux
437bd9cbe1 minor: cleaner indentation 2018-06-18 11:33:47 +02:00
Cedric Roux
2e389d61a0 bugfix: bzero was not called if allocating memory 2018-06-18 11:32:57 +02:00
Haruki NAOI
0fb553916b Fix: modify temporary disabled code by the commit of 5c6ad3142d. 2018-06-18 15:29:17 +09:00
Cedric Roux
a7db85a6c2 put back variables in the local stack 2018-06-15 12:31:56 +02:00
Raphael Defosseux
49829f6928 Merge branch 'develop-ci' into 'develop'
eNb CI Integration Job builds locally basic simulator

See merge request oai/openairinterface5g!323
2018-06-15 10:12:00 +02:00
Raphael Defosseux
6f6c90cba8 Proper exit status on local build
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2018-06-15 09:47:16 +02:00
Raphael Defosseux
f9f7e7c5af fix syntax
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2018-06-15 09:47:16 +02:00
Raphael Defosseux
4c92d6785e Improvements on Jenkins file:
- comment to GitLab merge-request does not anymore # as number (misinterpreted as issue number)
  - added local build script w/ generation of HTML result file
Improvements on bash scripts:
  - use of proper option parsing

Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2018-06-15 09:47:16 +02:00
Cedric Roux
cce51f69bc set value of pucch_n1_AN to 0 everywhere by default
Since now pucch_n1_AN is taken from the configuration file,
it has to be set to 0. Value 32 will not work well, at least
in FDD. This has to be handled properly at some point
(do not use uplink resource blocks used by PUCCH for PUSCH).
2018-06-14 16:51:53 +02:00
Cedric Roux
dde219c81b bugfix: fix usage of bundling
Do not set 'bundling' for FDD, that breaks ULSCH decoding.
2018-06-14 16:49:58 +02:00
Haruki NAOI
86802258dd Merge branch 'mu_with_tdd1' of https://gitlab.eurecom.fr/oai/openairinterface5g into mu_with_tdd1 2018-06-14 18:43:00 +09:00
Cedric Roux
6cd761589e bugfix: fix T trace 2018-06-14 10:26:47 +02:00
Haruki NAOI
e84fd27ec1 Fix: build fails when executing build with option "--mu" 2018-06-14 16:49:45 +09:00
Cedric Roux
5c6ad3142d Merge remote-tracking branch 'origin/develop' into mu_with_tdd1
The monolithic eNodeB is not fully functional in FDD.

The TDD mode has not been tested.

Do not consider this commit as functional.

Conflicts:
	cmake_targets/CMakeLists.txt
	cmake_targets/build_oai
	common/utils/itti/intertask_interface.c
	openair1/PHY/INIT/lte_init.c
	openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
	openair1/PHY/LTE_TRANSPORT/dci_tools.c
	openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
	openair1/PHY/LTE_TRANSPORT/transport_eNB.h
	openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
	openair1/PHY/defs_eNB.h
	openair1/PHY/impl_defs_lte.h
	openair1/SCHED/fapi_l1.c
	openair1/SCHED/phy_procedures_lte_eNb.c
	openair1/SCHED/pusch_pc.c
	openair2/COMMON/platform_types.h
	openair2/COMMON/rrc_messages_types.h
	openair2/ENB_APP/enb_config.c
	openair2/ENB_APP/enb_paramdef.h
	openair2/LAYER2/MAC/config.c
	openair2/LAYER2/MAC/eNB_scheduler.c
	openair2/LAYER2/MAC/eNB_scheduler_RA.c
	openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
	openair2/LAYER2/MAC/eNB_scheduler_primitives.c
	openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
	openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c
	openair2/LAYER2/MAC/mac.h
	openair2/LAYER2/MAC/mac_proto.h
	openair2/LAYER2/MAC/pre_processor.c
	openair2/LAYER2/RLC/rlc.c
	openair2/LAYER2/RLC/rlc_rrc.c
	openair2/RRC/LITE/rrc_common.c
	openair2/RRC/LTE/L2_interface.c
	openair2/RRC/LTE/MESSAGES/asn1_msg.c
	openair2/RRC/LTE/rrc_eNB.c
	openair2/UTIL/LOG/log.h
	targets/COMMON/openairinterface5g_limits.h
	targets/RT/USER/lte-enb.c
	targets/RT/USER/lte-ru.c
	targets/RT/USER/lte-softmodem.c
	targets/RT/USER/lte-softmodem.h
2018-06-12 16:23:36 +02:00
Cedric Roux
c88284da05 bugfix: fix compilation of the basic simulator
We need to build the softmodem first, otherwise
compilation of the lib 'config' fails because
of the T tracer.
2018-06-12 15:51:03 +02:00
Raphael Defosseux
076781915f another script location fix
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2018-06-12 15:04:09 +02:00
Raphael Defosseux
9b51d61276 Location of scripts was incorrect
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2018-06-12 14:44:27 +02:00
Raphael Defosseux
e4a772965a Fixing pipeline syntax error
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2018-06-12 14:42:27 +02:00
Raphael Defosseux
346e8fb719 First draft of the CI scripts
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2018-06-12 14:37:42 +02:00
Florian Kaltenberger
432ad112c5 fixing implicit declaration warning 2018-06-04 07:45:28 -07:00
Sebastian Wagner
ee91f661fb Added missing file lte_gold_generic.c 2018-06-04 16:27:17 +02:00
Sebastian Wagner
6742d6f471 Encapsulated lte_gold_generic functionality 2018-06-04 16:09:10 +02:00
bruno mongazon
acbd1f1f7d fix issue 310 IQrecplay 2018-06-04 13:05:13 +02:00
Bi-Ruei, Chiu
f097cca7a5 Compare RRC_VERSION with MAKE_VERSION(x,y,z) macro to provide better SW configuration
To minimize migration effort, we follow the logic of legacy macro Rel10 and Rel14 used
for conditional compilation of current code.

In the future, they might be changed to accommodate finer software configuration, e.g.
MAKE_VERSION(12,2,0) or MAKE_VERSION(13,1,0) .... etc.
2018-05-29 18:00:58 +08:00
Florian Kaltenberger
9edcd9b961 Merge remote-tracking branch 'origin/develop' into oai_ue_fixes 2018-05-29 01:06:54 -07:00
Rajeev Gangula
c5c66eeb4a Merge branch 'develop' into ulSNRs
Conflicts:
	openair2/ENB_APP/enb_config.c
	openair2/LAYER2/MAC/eNB_scheduler.c
	openair2/LAYER2/MAC/mac.h
2018-05-29 09:50:05 +02:00
Cedric Roux
3fd2470533 Merge remote-tracking branch 'origin/fix-unitary-simulations' into develop 2018-05-29 09:38:00 +02:00
Haruki NAOI
a3329b562c Merge commit '8471bd14e2e400887e7419d3307921a1401e2823' into mu_with_tdd1
# Conflicts:
#	common/utils/itti/intertask_interface.c
#	openair1/SCHED/phy_procedures_lte_eNb.c
2018-05-29 14:52:19 +09:00
Haruki NAOI
f5239e0905 Merge remote-tracking branch 'remotes/origin/ues_test' into mu_with_tdd1
# Conflicts:
#	common/utils/itti/intertask_interface.c
#	openair1/SCHED/fapi_l1.c
#	openair1/SCHED/phy_procedures_lte_eNb.c
2018-05-29 14:32:13 +09:00
Masayuki HARADA
8471bd14e2 Merge remote-tracking branch 'origin/sp3_master' into scd_refactoring 2018-05-29 14:30:02 +09:00
Haruki NAOI
18bd37f913 Revert "Fix: TDD uci_procedures misdeal pucch format1a."
This reverts commit c652a883ff.
2018-05-29 14:29:00 +09:00
Masayuki HARADA
fb054e6523 Merge branch 'sp3_master' into scd_refactoring
# Conflicts:
#	openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
2018-05-29 14:24:25 +09:00
Raymond Knopp
b036b18afe moved sidlink L1 functions to LTE_UE_TRANSPORT, corrected issue related to "find_dlsch" which is needed to compile UE and creates problem for unitary simulations (moved to lte-ue.c application) 2018-05-28 11:09:38 -07:00
Cedric Roux
4b943d4b7b Merge remote-tracking branch 'origin/develop_integration_2018_w19' into develop
Summary of changes:
- split UE and eNB directories
- nFAPI L2 emulator
- basic simulator
- various bug fixes

The nFAPI L2 emulator is not functional yet. Some code had to be removed
because it made the monolithic eNB non functional.

The unitary simulators (ulsim, dlsim) do not compile anymore. This will
be fixed later.
2018-05-28 17:31:09 +02:00
Cedric Roux
b66b872928 integration fix: remove warnings
Remove warnings found while running:
    ./build_oai --UE -c -w USRP

And:
    ./build_oai --basic-simulator -c
2018-05-28 12:44:14 +02:00
Cedric Roux
ed49592754 integration fix: remove warnings
Remove warnings popping up on:
    ./build_oai --eNB -w USRP

Maybe not always the best solution.
2018-05-24 17:15:42 +02:00
Haruki NAOI
14740aec74 Merge remote-tracking branch 'remotes/origin/rm916_bugfix' into sp3_master 2018-05-24 21:22:38 +09:00
Haruki NAOI
c652a883ff Fix: TDD uci_procedures misdeal pucch format1a. 2018-05-24 20:08:27 +09:00
Haruki NAOI
ab32cefbe2 Revert "fix DLSCH no retransmission"
This reverts commit 24c669f394.
2018-05-24 20:01:37 +09:00
Masayuki HARADA
91db46b6ba Merge branch 'rm917_bugfix' into sp3_master 2018-05-24 17:06:10 +09:00
Wu Jing
a37c29eb80 fix rm971 bug(delete #if 0) 2018-05-24 16:44:28 +09:00
Masayuki HARADA
17c761afbe Merge branch 'rm918_bugfix' into sp3_master 2018-05-24 13:22:59 +09:00
Masayuki HARADA
44210a0a88 Fix PUSCH decode failure when recieve power is too high situation. 2018-05-24 13:21:37 +09:00
Florian Kaltenberger
81ac396187 Merge branch 'develop' into oai_ue_fixes 2018-05-22 06:25:09 -07:00
Wu Jing
fadba8a1ed fix rm917 bug 2018-05-22 18:42:35 +09:00
jftt_wangshanshan
843e7c8fc4 Change SR detection for TDD for compliance with FDD. (try) 2018-05-21 16:43:12 +08:00
Masayuki HARADA
ff604660fe delete UE_EXPANSION route 2018-05-18 10:58:26 +09:00
Haruki NAOI
8bec50653f Fix: eNB output core dump file when exiting eNB process. 2018-05-18 10:01:07 +09:00
Masayuki HARADA
f55bd83d55 select scheduler by config file 2018-05-17 18:27:09 +09:00
Masayuki HARADA
dc76ce82f3 Fix link error 2018-05-17 11:36:18 +09:00
Masayuki HARADA
677ad4298c Devide source file of scheduler 2018-05-17 10:48:39 +09:00
Cedric Roux
f9aac56e84 fix: let ue_ip.ko compile
MAX_MOBILES_PER_ENB cannot be used to compile ue_ip
because it is defined in platform_constants.h and this
cannot be included to compile a kernel module.

Let's use NUMBER_OF_UE_MAX as it was before instead.
2018-05-15 17:43:35 +02:00
Cedric Roux
343bbbac68 Merge remote-tracking branch 'origin/feature-better-sw-configuration-between-various-version' into develop_integration_2018_w19
Conflicts:
	cmake_targets/CMakeLists.txt
	openair1/PHY/LTE_TRANSPORT/prach.c
	openair1/PHY/LTE_TRANSPORT/print_stats.c
	openair1/PHY/LTE_TRANSPORT/transport_eNB.h
	openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
	openair1/PHY/defs_eNB.h
	openair1/PHY/impl_defs_lte.h
	openair1/SCHED/sched_common.h
	openair1/SCHED_UE/phy_procedures_lte_ue.c
	openair2/LAYER2/MAC/mac.h
	openair2/LAYER2/PDCP_v10.1.0/pdcp.c
	openair2/LAYER2/PDCP_v10.1.0/pdcp.h
	openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
	openair2/LAYER2/RLC/rlc.c
	openair2/PHY_INTERFACE/defs.h
	openair2/RRC/LTE/MESSAGES/asn1_msg.c
	openair2/RRC/LTE/MESSAGES/asn1_msg.h
	openair2/RRC/LTE/rrc_UE.c
	openair2/RRC/LTE/rrc_eNB.c
	targets/SIMU/USER/oaisim_functions.c
2018-05-15 17:43:12 +02:00
Cedric Roux
1038590489 Merge remote-tracking branch 'origin/feature-ubuntu-18.04-build-usrp' into develop_integration_2018_w19 2018-05-15 15:33:28 +02:00
Cedric Roux
96b1d47552 Merge remote-tracking branch 'origin/fix-rdtsc' into develop_integration_2018_w19 2018-05-15 15:30:53 +02:00
Cedric Roux
a42e2de0e0 Merge remote-tracking branch 'origin/bugfix-add-error-indication-handling' into develop_integration_2018_w19 2018-05-15 15:23:00 +02:00
Cedric Roux
bdda76430f Merge remote-tracking branch 'origin/fixes-T-tracer-2018-w17' into develop_integration_2018_w19 2018-05-15 15:20:12 +02:00
Masayuki HARADA
0ffd0ffe18 Change default value of PHY_TX_THREAD and PRE_SCD_THREAD, when UE_EXPANSION is true. 2018-05-15 20:14:58 +09:00
Cedric Roux
f7b3ea03a3 fix: hacks to have the UE functional again
The new 'basic simulator' is now functional.
A proper solution is needed to deal with SIB18/19/21
for the D2D functionality.
2018-05-15 12:09:31 +02:00
Cedric Roux
689f98ea9d fix compilation of lte-uesoftmodem 2018-05-15 12:07:40 +02:00
Masayuki HARADA
de1996ec3e change compile option from UE_EXPANSION to UE_EXPANSION,PHY_TX_THREAD,PRE_SCD_THREAD. 2018-05-15 17:37:43 +09:00
Cedric Roux
11a1dd090c fix: hack to have the UE compile
This is a quick and dirty solution, something better is needed.
2018-05-15 09:55:11 +02:00
Wu Jing
24c669f394 fix DLSCH no retransmission 2018-05-15 14:52:39 +09:00
Wu Jing
38363b10e3 fix rm916 bug 2018-05-15 14:42:33 +09:00
Cedric Roux
5fcc9a6106 bugfix: fix compilation of basic simulator
- conf2uedata compilation was not properly started
- success/failure of compilation of UE and eNB
  was not handled properly
2018-05-14 17:31:30 +02:00
Cedric Roux
351ca5e726 Merge remote-tracking branch 'origin/basic-simulator' into develop_integration_2018_w19
Conflicts:
	openair1/PHY/LTE_TRANSPORT/prach.c
	targets/RT/USER/lte-ue.c
2018-05-14 17:30:18 +02:00
Cedric Roux
7da4367cb7 Merge remote-tracking branch 'origin/fix-remove-lte-ran-file' into develop_integration_2018_w19
Conflicts:
	openair1/PHY/defs_eNB.h
2018-05-14 16:34:50 +02:00
Cedric Roux
68479fa4f8 Merge remote-tracking branch 'origin/develop-uedirectorysplit' into develop_integration_2018_w19
Status so far:
- monolithic eNB compiles and is functional with 1 UE in FDD, 5/10/20MHz.
  For 20MHz we don't have a nice TCP downlink (on haswell).
- oaisim does not compile
- UE does not compile
- phy simulators don't compile
- many new warnings

Conflicts:
	cmake_targets/CMakeLists.txt
	openair1/PHY/LTE_TRANSPORT/transport_eNB.h
	openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
	openair1/PHY/defs_eNB.h
	openair1/SCHED/pusch_pc.c
	openair1/SCHED/sched_common.h
	openair1/SCHED_UE/phy_procedures_lte_ue.c
	openair2/LAYER2/MAC/eNB_scheduler.c
	openair2/LAYER2/MAC/eNB_scheduler_mch.c
	openair2/LAYER2/MAC/mac.h
	openair2/LAYER2/MAC/ra_procedures.c
	openair2/LAYER2/MAC/ue_procedures.c
	openair2/RRC/LTE/MESSAGES/asn1_msg.h
	openair2/RRC/LTE/rrc_UE.c
	openair2/RRC/LTE/rrc_defs.h
	targets/RT/USER/lte-softmodem.h
	targets/RT/USER/lte-ue.c
2018-05-14 16:28:04 +02:00
Rajeev Gangula
899f50456e Changed config files to update ul channel SNRs. 2018-05-14 10:28:30 +02:00
Bi-Ruei, Chiu
02aeb1c16d Build eNB using USRP on Ubuntu 18.04 2018-05-13 10:45:48 +08:00
Cedric Roux
ad46183e23 fix rdtsc usage
One user had a problem compiling oaisim.
This commit fixes it.

The compilation log was saying:

    targets/RT/USER/lte-ue.c:
    In function UE_thread_rxn_txnp4:

    openair2/UTIL/LOG/log.h:370:3:
    error: inconsistent operand constraints in an asm

         __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));

         ^
2018-05-11 14:21:05 +02:00
Haruki NAOI
bb6d116551 Merge remote-tracking branch 'remotes/origin/rm902_bugfix_sp3_master_base' into sp3_master 2018-05-10 12:52:43 +09:00
Wu Jing
7807e677e7 fix RM902 base on sp3_master 2018-05-10 11:53:06 +09:00
Haruki NAOI
54a36ff54d Merge remote-tracking branch 'remotes/origin/rm804_bugfix2' into sp3_master 2018-05-10 11:40:16 +09:00
Rajeev Gangula
dc9b0fa53a Added uplink channels SNR in config file. 2018-05-09 15:55:36 +02:00
Cedric Roux
f488673e80 Merge remote-tracking branch 'origin/nfapi-L2-emulator-for-develop' into develop_integration_2018_w19 2018-05-09 14:51:48 +02:00
Haruki NAOI
11d9a286c1 Merge remote-tracking branch 'remotes/origin/rm894_assertion' into sp3_master 2018-05-09 20:29:14 +09:00
jftt_wangshanshan
0928f049bb Fix cqi_req_flag, to prevent continously schedule cqi after set it to 1 and before actually receive it at the right subframe. 2018-05-09 18:22:22 +08:00
Cedric Roux
f254107b24 import work from the branch nfapi-L2-emulator to merge it to develop
It was not possible to merge the branch directly, because the
history of this branch contains files that cannot be in the
repository, namely wireshark from Cisco work on nFAPI.

As for Cisco work on nFAPI, a special commit containing all the
work is thus created.

Below is the output of the command:
git log --graph 184d51c6eabe8d76ee0adaefca4c295393bdeb7d..61276d87106465220b1c27424077f244837b4578

184d51c6ea is the commit ID of the develop
branch prior to the merge.

61276d8710 is the commit ID of the
nfapi-L2-emulator branch prior to the merge.

The commit 61276d8710 (and all its
history) will be removed from the main OAI repository. It is
present in the internal OAI repository for those who have access
to it.

There was also some cleanup done on the code.

Some changes were necessary to have the eNB functional. They may have an
impact on the FAPI L2 simulator, which may be non-functional and requires
some work to be functional (and not break other use cases).

The most critical ones are:
- in openair2/RRC/LITE/MESSAGES/asn1_msg.c, in the function do_SIB23:
  SIB 18/18/21 are not included because they make the MAC message to
  big for the SIB scheduler
- in targets/RT/USER/lte-enb.c, in the function eNB_thread_rxtx,
  the following code has not been included because it breaks the
  regular eNB:
     //Panos: NEW ACHECK FOR VNF HERE!
     //if(nfapi_mode!=2){
     if(get_nprocs() >= 8)      wakeup_tx(eNB,eNB->proc.ru_proc);
     else if(get_nprocs() > 4)
     {
       LOG_I(PHY, "Panos-D: In eNB_thread_rxtx() before re-calling phy_procedures_eNB_TX() and wakeup_txfh() \n");
       phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1);
       wakeup_txfh(proc,eNB->proc.ru_proc);
     }

It is possible to see the differences between this commit and the commit
61276d8710 to get all the differences between
the two. Use: git diff 61276d8710 <this commit>

Here is now the output of "git log [...]".

------------------------------------------------------------------------------
* commit 61276d8710
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Fri May 4 15:10:23 2018 +0200
|
|     Fix before merge
|
* commit 1d3c88cd0b
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Fri May 4 12:41:22 2018 +0200
|
|     Fixed some warnings and removed redundant files.
|
* commit ea33b91425
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Mon Apr 30 17:40:03 2018 +0200
|
|     Modifications related to using single copies of nfapi config. messages for all the UEs at each subframe.
|
* commit f578c1cf73
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Mon Apr 30 11:13:23 2018 +0200
|
|     Updated instructions file for launching nfapi-L2-emulator and polishing the code.
|
* commit e8180fd633
| Merge: dc3787d37 184d51c6e
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Fri Apr 27 18:48:49 2018 +0200
|
|     Merge branch develop.
|
* commit dc3787d37b
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Tue Apr 17 14:56:02 2018 +0200
|
|     Added configuration option for nfapi-L2-emulation mode and updated instructions file.
|
* commit 4e5b67c412
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Thu Apr 5 13:36:21 2018 +0200
|
|     Added instructions file for launching nfapi-L2-emulator.
|
* commit 848d5e0aa3
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Thu Mar 29 19:02:49 2018 +0200
|
|     Fixed some more issues for running with multiple UEs. Added configuration option for the number of UEs.
|
* commit 230421bc05
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Tue Mar 27 16:17:32 2018 +0200
|
|     More stable performance of nfapi-L2-emulator with 2 UEs, after dealing with some PNF-VNF synchronization issues.
|
* commit d74c43bd2f
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Wed Mar 21 19:56:26 2018 +0100
|
|     Minor modifications.
|
* commit 4f93ef56d5
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Tue Mar 20 18:14:49 2018 +0100
|
|     Fixed a bug. Now both UEs reaching RRC Connection Reconfiguration state about 90% of the executions. Less frequently appearing issues remain to be fixed.
|
* commit 1ed57bbffc
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Tue Mar 20 12:00:53 2018 +0100
|
|     Extension to multiple UEs. Currently being tested with two UEs. Second UE doesn't always reach the RRC Connection Reconfiguration stage.
|
* commit 6cc3fb72b4
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Tue Mar 6 16:21:55 2018 +0100
|
|     process SidelinkUEInformation/RRCConnectionReconfiguration (partially)
|
* commit b3ecd62f43
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Tue Mar 6 14:17:06 2018 +0100
|
|     add SIB21/SidelinkUEInformation support
|
* commit 93052033e2
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Thu Mar 1 18:35:57 2018 +0100
|
|     [RRC] add sIB19 support (partially)
|
*   commit 907b4f80c6
|\  Merge: 77072adf9 c64f9cd8c
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Wed Feb 28 19:25:52 2018 +0100
| |
| |     [RRC] support SIB18 (partially)
| |
| * commit c64f9cd8ce
| | Author: matzakos <panagiotis.matzakos@eurecom.fr>
| | Date:   Tue Feb 27 20:02:05 2018 +0100
| |
| |     Minor modifications. Some problem appears rarely that prevents the reception of RRCConnectionSetupComplete message at the eNB.
| |
* | commit 77072adf9a
|/  Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
|   Date:   Wed Feb 28 19:18:20 2018 +0100
|
|       [RRC] support SIB18 (partially)
|
*   commit 709e59742a
|\  Merge: 8b28e71b1 314bf57f5
| | Author: matzakos <panagiotis.matzakos@eurecom.fr>
| | Date:   Mon Feb 19 12:29:14 2018 +0100
| |
| |     Merge branch 'master' of gitlab.eurecom.fr:matzakos/LTE-D2D
| |
| |     Merge with latest changes of LTE-D2D/master
| |
| * commit 314bf57f5c
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Wed Feb 14 13:30:29 2018 +0100
| |
| |     minor update
| |
| * commit 84177053ce
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Mon Feb 12 12:13:59 2018 +0100
| |
| |     update instructions for 1-1, update multicast_link.c
| |
| * commit c24e4e6d64
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Mon Feb 12 11:32:24 2018 +0100
| |
| |     update control socket for 1-1 scenario
| |
| * commit 9cf15c8088
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Thu Feb 8 16:02:00 2018 +0100
| |
| |     polish the code/update instructions
| |
| * commit f265344390
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Wed Feb 7 13:45:34 2018 +0100
| |
| |     passing S+D from PDCP to lower layers (PC5-S)
| |
| *   commit a76a5a564b
| |\  Merge: ff8d9a814 6823e3aa0
| | | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | | Date:   Wed Feb 7 11:55:50 2018 +0100
| | |
| | |     Merge branch 'master' of gitlab.eurecom.fr:matzakos/LTE-D2D
| | |
| * | commit ff8d9a8142
| | | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | | Date:   Wed Feb 7 11:55:34 2018 +0100
| | |
| | |     separation of SLRB establishment PC5-U/PC5-S
| | |
* | | commit 8b28e71b17
| |/  Merge: 6823e3aa0 be8d32d55
|/|   Author: matzakos <panagiotis.matzakos@eurecom.fr>
| |   Date:   Mon Feb 19 12:27:21 2018 +0100
| |
| |       Merge with develop branch of main OAI repository.
| |
* | commit 6823e3aa09
|/  Author: matzakos <panagiotis.matzakos@eurecom.fr>
|   Date:   Tue Feb 6 18:05:52 2018 +0100
|
|       Successful RRC Connection establishment without any errors, based on testing up to now
|
* commit 97c2aff911
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Tue Feb 6 16:44:58 2018 +0100
|
|     PC5-U - passing (source,destination) down to PDCP/RLC/MAC (first alternative - mapping of L2Ids form IP Addresses
|
* commit 24d5700c7c
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Thu Feb 1 11:53:07 2018 +0100
|
|     change ue-ip.ko to extract L2 Id from IP adress, update PC5-Signalling message
|
* commit 713e31357f
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Wed Jan 31 19:47:22 2018 +0100
|
|     Seemed to have fixed pnf(UE) -vnf(eNB) sync issue. Works up to the reception of RRConnectionReconfigurationComplete message at the eNB but crashing after that.
|
* commit d794f6905a
| Author: William Johnson <wjohnson@vencorelabs.com>
| Date:   Tue Jan 30 11:50:42 2018 -0500
|
|     Merge cleanup
|
* commit ee62792135
| Author: William Johnson <wjohnson@vencorelabs.com>
| Date:   Tue Jan 30 11:10:33 2018 -0500
|
|     Merge cleanup
|
* commit d4102b55a9
| Author: William Johnson <wjohnson@vencorelabs.com>
| Date:   Mon Jan 22 15:20:55 2018 -0500
|
|     Resolved issues with PC5-D implementation.
|
* commit 7fb0902dbc
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Mon Jan 29 18:02:31 2018 +0100
|
|     Works up to the reception of Msg4 at the eNB. Still sometimes SF sync between PNF and VNF is lost.
|
* commit 507c1ea9ab
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Wed Jan 24 20:07:09 2018 +0100
|
|     Added correct handling of HI_DCI0.req + memory management issues
|
* commit 5dc306ec1d
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Wed Jan 24 11:12:53 2018 +0100
|
|     Works up to the reception of HI_DCI0.request at the UE-PNF. Sometimes Msg3 arrives later than expected at the eNB-VNF.
|
* commit 17baaaa132
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Wed Jan 24 09:38:42 2018 +0100
|
|     update instructions regarding PC5-D
|
* commit 2403529e76
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Mon Jan 22 16:52:16 2018 +0100
|
|     fix issues related to PC5D transmission/reception
|
* commit dd3ed7a5c0
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Mon Jan 22 11:03:25 2018 +0100
|
|     minor update PC5DiscoveryAnnouncement -> PC5DiscoveryMessage
|
* commit ad2da99d46
| Author: William Johnson <wjohnson@vencorelabs.com>
| Date:   Thu Jan 18 17:28:36 2018 -0500
|
|     testing of Discovery transmission/reception
|
* commit ccdc09c824
| Author: Rohit Gupta <rohit.gupta@eurecom.fr>
| Date:   Thu Jan 18 14:08:19 2018 +0100
|
|     final pieces for SLDCH emulation
|
* commit a7f212818b
| Author: Rohit Gupta <rohit.gupta@eurecom.fr>
| Date:   Thu Jan 18 13:18:57 2018 +0100
|
|     force instance 0 for PDCP netlink
|
* commit 276556acfd
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Tue Jan 16 09:56:39 2018 +0100
|
|     update instructions
|
* commit 241aa2bbc0
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Mon Jan 15 16:03:48 2018 +0100
|
|     support PC5-D (RRC/MAC)
|
* commit c6aefa310b
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Sun Jan 14 14:59:01 2018 +0100
|
|     minor update to fix issues related to PC5-S
|
* commit 9c00f4b782
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Fri Jan 12 11:43:15 2018 +0100
|
|     update RRC_UE to support PC5-S
|
* commit 952ec555e7
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Thu Jan 11 16:36:37 2018 +0100
|
|     update instructions
|
* commit 153af28dde
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Thu Jan 11 15:17:24 2018 +0100
|
|     first version for supporting PC5-S
|
* commit d5d6ecabd3
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Fri Jan 5 22:32:50 2018 +0100
|
|     minor update - d2d-emulator-setup
|
* commit 7781cd5875
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Fri Jan 5 00:08:49 2018 +0100
|
|     Configure MAC with Source/groupL2Id, add possiblility to filter at MAC layer
|
* commit 2e5af5a92d
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Thu Jan 4 15:50:36 2018 +0100
|
|     add network configuration
|
* commit c5a3e4048e
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Thu Jan 4 15:31:43 2018 +0100
|
|     add instructions to setup emulator
|
* commit a1c1e9ce38
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Wed Jan 3 22:54:38 2018 +0100
|
|     enable control socket
|
* commit ff6c711973
| Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| Date:   Wed Jan 3 07:26:05 2018 -0800
|
|     added MAC header handling for reception.
|
*   commit 532a566c34
|\  Merge: 86a308bbd 109d6bb7a
| | Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| | Date:   Wed Jan 3 06:58:58 2018 -0800
| |
| |     Merge branch 'master' of https://gitlab.eurecom.fr/matzakos/LTE-D2D
| |
| * commit 109d6bb7a1
| | Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| | Date:   Mon Dec 25 19:55:21 2017 +0100
| |
| |     uplink path tested.
| |
* | commit 86a308bbd6
|/  Author: Raymond Knopp <raymond.knopp@eurecom.fr>
|   Date:   Wed Jan 3 06:58:28 2018 -0800
|
|       added MAC header handling for TX
|
* commit 5b59872dff
| Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| Date:   Mon Dec 25 04:32:45 2017 -0800
|
|     added new L1 files for Sidelink
|
* commit b215b431f0
| Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| Date:   Mon Dec 25 04:25:37 2017 -0800
|
|     changes to allow configuring multicast interface on command line
|
*   commit 6434e645c8
|\  Merge: a33802048 f31928926
| | Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| | Date:   Sun Dec 24 12:54:29 2017 -0800
| |
| |     Merge branch 'master' of https://gitlab.eurecom.fr/matzakos/LTE-D2D
| |
| |     Conflicts:
| |             targets/RT/USER/lte-ue.c
| |
| * commit f31928926f
| | Author: matzakos <panagiotis.matzakos@eurecom.fr>
| | Date:   Wed Dec 20 15:29:40 2017 +0100
| |
| |     Works up to the reception of the RA_RESPONSE at the UE. Crashing at fill_rx_indication_UE_MAC just before sending Msg3.
| |
| * commit ee61cb5164
| | Author: matzakos <panagiotis.matzakos@eurecom.fr>
| | Date:   Mon Dec 18 16:18:00 2017 +0100
| |
| |     Fixed the issue with synchronization but only for the case o running both eNB (vnf) and UE (pnf) processes in the same machine. Receiving and decoding now all MIBs and SIBs1/2/3.
| |
* | commit a338020482
|/  Author: Raymond Knopp <raymond.knopp@eurecom.fr>
|   Date:   Fri Dec 22 20:22:41 2017 -0800
|
|       addition of Sidelink UE-UE stub and initial MAC scheduling for Sidelink for off-network scenario
|
*   commit d34ac16511
|\  Merge: 7b6a9c445 63ac8b4c5
| | Author: matzakos <panagiotis.matzakos@eurecom.fr>
| | Date:   Wed Dec 13 23:58:48 2017 +0100
| |
| |     Merge branch 'master' of gitlab.eurecom.fr:matzakos/LTE-D2D
| |
| |     Merge with Thin's last commit
| |
| *   commit 63ac8b4c59
| |\  Merge: c7c8057fa 93627a4c2
| | | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | | Date:   Wed Dec 6 23:05:13 2017 +0100
| | |
| | |     Merge branch 'master' of gitlab.eurecom.fr:matzakos/LTE-D2D
| | |
| * | commit c7c8057fa2
| | | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | | Date:   Wed Dec 6 23:02:39 2017 +0100
| | |
| | |     integrate RRC control socket
| | |
* | | commit 7b6a9c445e
| |/  Author: matzakos <panagiotis.matzakos@eurecom.fr>
|/|   Date:   Wed Dec 13 23:58:15 2017 +0100
| |
| |       Testing works up to the reception of SIB1/2/3 from the UE through nfapi, but there is an issue with missing some of the nfapi messages for some frames.
| |
* |   commit 93627a4c22
|\ \  Merge: db011d28d a2f8a3665
| | | Author: matzakos <matzakos@eurecom.fr>
| | | Date:   Wed Dec 6 14:12:23 2017 +0100
| | |
| | |     Merge branch 'master' of https://gitlab.eurecom.fr/matzakos/LTE-D2D
| | |
| | |     Testing of phy_stub
| | |
| * | commit a2f8a36651
| |/  Author: matzakos <panagiotis.matzakos@eurecom.fr>
| |   Date:   Tue Dec 5 20:27:29 2017 +0100
| |
| |       Testing works until the call of callback function pnf_p7_subframe_ind. There, it never satisfies the condition if(tx_subframe_buffer->sfn_sf == sfn_sf_tx) so both sides (vnf and pnf are hanging).
| |
| * commit b3cc16ba75
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Tue Dec 5 15:41:50 2017 +0100
| |
| |     update RRC for SL
| |
* | commit db011d28dd
|/  Author: matzakos <matzakos@eurecom.fr>
|   Date:   Wed Dec 6 14:11:06 2017 +0100
|
|       Necessary modifications to support noS1 with nfapi and eNB side for testing vnf-pnf up to the stage of previous commit
|
* commit ec67c1c93c
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Fri Dec 1 20:05:40 2017 +0100
|
|     Introduce new executable for the UE (nfapi pnf in stub mode) lte-softmodem-stub
|
* commit 9de8b0fc94
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Mon Nov 27 16:25:57 2017 +0100
|
|     Added function to extract nfapi address-port from UE specific configuration file
|
* commit 3cced60a00
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Thu Nov 23 17:10:48 2017 +0100
|
|     Connected new callback functions at nfapi_pnf for phy_stub mode + Intorducing new functions initializing UE variables and threads specific to phy_stub mode, instead of extending the existing ones + Direct connection of the timer_thread with UE_phy_stub_thread_rxn_txnp4.
|
*   commit 911ed2280c
|\  Merge: 83394cd3a c42a59329
| | Author: matzakos <panagiotis.matzakos@eurecom.fr>
| | Date:   Mon Nov 20 11:42:51 2017 +0100
| |
| |     Merge with Cisco nfapi-ru-rau-split remote branch
| |
| * commit c42a593292
| | Author: David Price <davpric2@cisco.com>
| | Date:   Tue Nov 14 14:44:25 2017 +0000
| |
| |     Works in monolithic mode and nFAPI mode
| |
| * commit 4fea20e710
| | Author: David Price <davpric2@cisco.com>
| | Date:   Tue Nov 14 12:34:36 2017 +0000
| |
| |     Get logging working - merge changes from develop branch
| |
| * commit cc02d6c1d0
| | Merge: 673b2e9f3 d915c2089
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Nov 10 12:53:22 2017 +0000
| |
| |     Merge of develop branch as of 10 Nov.  Tested with single UE attach.
| |
| * commit 673b2e9f38
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Nov 10 09:21:30 2017 +0000
| |
| |     Turn down logging
| |
| * commit b9268bc3ad
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Nov 10 09:09:07 2017 +0000
| |
| |     How the hell did that work???
| |
| * commit 6482d18c91
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Nov 6 12:45:58 2017 +0000
| |
| |     Sample attach
| |
| * commit d98502d41e
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Nov 6 11:08:57 2017 +0000
| |
| |     Add wireshark with nfapi
| |
| * commit e59250841a
| | Author: David Price <davpric2@cisco.com>
| | Date:   Sun Nov 5 22:15:50 2017 +0000
| |
| |     He has only gone and done it.  11th hour and it works.  Phone has attached twice
| |
| * commit 4dfbcf5882
| | Author: David Price <davpric2@cisco.com>
| | Date:   Sun Nov 5 21:32:59 2017 +0000
| |
| |     Update open-nfapi patch - has new dissector in it
| |
| * commit bcd998ab12
| | Author: David Price <davpric2@cisco.com>
| | Date:   Sun Nov 5 21:25:57 2017 +0000
| |
| |     Attach accept and then crash
| |
| * commit 91aeda82fb
| | Author: David Price <davpric2@cisco.com>
| | Date:   Sun Nov 5 17:53:09 2017 +0000
| |
| |     Gets late packets during attach
| |
| * commit 25af68d37f
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Nov 3 06:36:45 2017 +0000
| |
| |     Logging...
| |
| * commit 7382d9134f
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Nov 3 06:35:41 2017 +0000
| |
| |     logging...
| |
| * commit f90444a1fc
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Nov 3 06:35:11 2017 +0000
| |
| |     Cannot run vnf 3 ahead it runs out of space with downlink messages and their harq
| |
| * commit ebee0e1220
| | Author: David Price <davpric2@cisco.com>
| | Date:   Thu Nov 2 16:13:04 2017 +0000
| |
| |     Now seem to be getting uplink data, but it is error'd
| |
| * commit 9f781408af
| | Author: David Price <davpric2@cisco.com>
| | Date:   Wed Nov 1 18:18:12 2017 +0000
| |
| |     Fails at the point core sends Identity Request to UE
| |
| * commit 3a7456df7b
| | Author: David Price <davpric2@cisco.com>
| | Date:   Wed Nov 1 17:36:52 2017 +0000
| |
| |     Bad harq configuration
| |
| * commit 30c76c6d3c
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 30 15:21:39 2017 +0000
| |
| |     Works up to rrc connection setup complete in nfapi mode
| |
| * commit e10c0c085a
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 30 08:40:34 2017 +0000
| |
| |     Crashes due to clearing out the wrong info from subframe buffer
| |
| * commit 2ac91f0533
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 30 07:04:33 2017 +0000
| |
| |     uplink data from ue received, corrected scheduling of DCI0/UPLINK_CFG.  Fails to correctly form (SFNSF) for PHICH ACK
| |
| * commit 22367109da
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Oct 27 06:49:20 2017 +0100
| |
| |     Change +4 for tx to a variable and get it to run at +2, this alllows nFAPI to get the reply back for HI_DCI0 to generate the PHICH in time
| |
| * commit 7a57709478
| | Author: David Price <davpric2@cisco.com>
| | Date:   Wed Oct 25 14:45:37 2017 +0100
| |
| |     Crashes around msg4 time, but understand that need to get the ACK for the UE UL of msg3 back to UE within 4ms
| |
| * commit 74cbde7c2c
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 23 14:16:24 2017 +0100
| |
| |     Add a gtk wave for pnf
| |
| * commit 9d5d78f5db
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 23 14:16:07 2017 +0100
| |
| |     Stack smashing error reported.  Fixed by parameter changing int to uint16_t.  Not obvious!
| |
| * commit f7670c4b67
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Oct 20 10:48:30 2017 +0100
| |
| |     Yet another small tweak still proving that RACH works
| |
| * commit b9fc5e679f
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Oct 20 09:18:24 2017 +0100
| |
| |     Small update mostly tweaking.  Still RACHs
| |
| * commit 80aaca76b4
| | Author: David Price <davpric2@cisco.com>
| | Date:   Thu Oct 19 16:19:22 2017 +0100
| |
| |     More tidy up
| |
| * commit b6a9bb3399
| | Author: David Price <davpric2@cisco.com>
| | Date:   Thu Oct 19 16:08:19 2017 +0100
| |
| |     Bit of tidy up, rename variables. change some logs
| |
| * commit 1732217095
| | Merge: 1ec934f9f 599ba826a
| | Author: David Price <davpric2@cisco.com>
| | Date:   Wed Oct 18 09:32:11 2017 +0100
| |
| |     Merged RU-RAU-split as of 18 Oct
| |
| * commit 1ec934f9fc
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 16 14:04:05 2017 +0100
| |
| |     Works up to message 3 reception at VNF
| |
| * commit 5be8cf7b77
| | Author: David Price <davpric2@cisco.com>
| | Date:   Tue Oct 10 08:58:21 2017 +0100
| |
| |     RACH received on VNF.  Message 2 created and sent to PNF.  Got Message 2 received on PNF.  Nothing useful done with it yet
| |
| * commit 6c519f5bcf
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 9 17:11:49 2017 +0100
| |
| |     Merge from RU-RAU-split and fix of frame/subframe handling.  Was very confused with the counter in the main loop, the incrementing from the USRP read library and the nFAPI frame handling.  RACH seen on wireshark and something happens on VNF
| |
| * commit 6559fc199f
| | Merge: 8da3d5cc2 8e6cc0190
| | Author: David Price <davpric2@cisco.com>
| | Date:   Mon Oct 9 07:14:17 2017 +0100
| |
| |     Merge from RU-RAU-split 9th Oct
| |
| * commit 8da3d5cc22
| | Merge: 483cd5cf8 e52c57b89
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Oct 6 11:24:35 2017 +0100
| |
| |     Merge from official RU-RAU-split branch.  Tested with san jole and UE - network is seen.  Not tried RACH
| |
| * commit 483cd5cf82
| | Author: David Price <davpric2@cisco.com>
| | Date:   Thu Oct 5 11:48:01 2017 +0100
| |
| |     NFAPI RACH now working.  Gets sent to VNF.  VNF cores currently on receipt.  Probably fixed by merge from main RU-RAU-split which I will do next
| |
| * commit de5bec310d
| | Author: David Price <davpric2@cisco.com>
| | Date:   Tue Oct 3 15:12:46 2017 +0100
| |
| |     Over write Raymond's copy of the open nfapi diff with the one that I am using - it re-orders the processing of dl_config and tx_req
| |
| * commit 53e7a57297
| | Author: David Price <davpric2@cisco.com>
| | Date:   Tue Oct 3 15:06:39 2017 +0100
| |
| |     Network search working again.  Now calling generate_dci_top every subframe, using dummy subframe if no data to transmit. MIB and SIB2/3 coming out.  UE sees cell
| |
| * commit 142d96fdc9
| | Author: David Price <davpric2@cisco.com>
| | Date:   Thu Sep 28 09:05:44 2017 +0100
| |
| |     Store a complete list of DLSCH PDUs because it is possible they might get written over otherwise
| |
| * commit 3cb04fc327
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Sep 22 15:39:30 2017 +0100
| |
| |     Phone sees network on network search.  Need to schedule MIB every frame.  Fixed pdu length. fixed number of dcis
| |
| * commit 0bd5978edc
| | Author: David Price <davpric2@cisco.com>
| | Date:   Fri Sep 22 09:22:39 2017 +0100
| |
| |     Both MIB and SIB1 are coming out on san jole.  SIB2/3 is missing
| |
| * commit fbd450eecc
| | Author: David Price <davpric2@cisco.com>
| | Date:   Thu Sep 21 12:09:45 2017 +0100
| |
| |     Missing checkin.
| |
| * commit 9496696a5d
| | Author: David Price <davpric2@cisco.com>
| | Date:   Thu Sep 21 11:50:04 2017 +0100
| |
| |     Remove hard coding of my IP address and use config file address
| |
| * commit 7210741113
| | Merge: 17e158f61 b421d467a
| | Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| | Date:   Thu Sep 21 08:48:46 2017 +0200
| |
| |     Merge branch 'RU-RAU-split' of https://gitlab.eurecom.fr/oai/openairinterface5g into nfapi-ru-rau-split
| |
| |     Conflicts:
| |             openair2/RRC/LITE/L2_interface.c
| |             targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
| |
| *   commit 17e158f61f
| |\  Merge: 16a36ec84 ca96ede83
| | | Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| | | Date:   Wed Sep 20 14:51:36 2017 +0200
| | |
| | |     Merge branch 'nfapi-ru-rau-split' of https://gitlab.eurecom.fr/daveprice/openairinterface5g into nfapi-ru-rau-split
| | |
| | * commit ca96ede83b
| | | Author: David Price <davpric2@cisco.com>
| | | Date:   Wed Sep 20 11:32:40 2017 +0100
| | |
| | |     NFAPI_DIR was set to my personal directory
| | |
| * | commit 16a36ec849
| |/  Author: Raymond Knopp <raymond.knopp@eurecom.fr>
| |   Date:   Wed Sep 20 12:49:46 2017 +0200
| |
| |       removed ITTI message transfer for MAC->RRC
| |
| * commit 8b12045bcc
|   Author: David Price <davpric2@cisco.com>
|   Date:   Wed Sep 20 10:50:09 2017 +0100
|
|       Trying to get NFAPI working.  BCH not being sent out over the air but is being scheduled
|
* commit 83394cd3a5
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Fri Nov 17 14:41:34 2017 +0100
|
|     Small correction wrt the UE_MAC state machine in phy_stub_UE
|
* commit 725ad9d9e4
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Thu Nov 16 15:59:22 2017 +0100
|
|     Introduced a new timer_thread within lte-ue. This thread is ticking the subframes and wakes up UE_thread function which is waiting on a condition variable for nfapi_mode=3 (phy_stub)
|
* commit c3f984d0b6
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Tue Nov 14 12:34:55 2017 +0100
|
|     Introduce nfapi_mode variable to differentiate functionality between phy_stub_ue mode (nfapi_mode=3) and normal full stack mode (nfapi_mode!=3).
|
* commit 96f18a06d2
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Mon Nov 13 16:58:11 2017 +0100
|
|     Added functions copying nfapi requests to UE_mac_inst + Substituted calls to phy_procedures_ue rx/tx with phy_stub functions triggering MAC layer Tx/Rx procedures at UE MAC. Changes within UE_thread_rxn_txnp4
|
* commit 66ae679d26
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Thu Nov 9 15:51:45 2017 +0100
|
|     update SidelinkUEInformation (UE's side), RRCConnectionReconfiguration (eNB's side), add rrc_ue_process_radioResourceConfig to process RPs and configure MAC/PHY
|
*   commit 511c48c7a4
|\  Merge: 34f5368cb d91742560
| | Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| | Date:   Tue Nov 7 16:12:03 2017 +0100
| |
| |     XMerge branch 'master' of gitlab.eurecom.fr:matzakos/LTE-D2D
| |
| * commit d917425604
| | Author: matzakos <panagiotis.matzakos@eurecom.fr>
| | Date:   Mon Nov 6 11:58:59 2017 +0100
| |
| |     Added handling of HI_DCI0_config requests at UE MAC. Eliminated calls to PHY functions from utilized UE MAC functions (e.g., ue_send_sdu) to support phy_stub operation mode.
| |
* | commit 34f5368cbc
|/  Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
|   Date:   Tue Nov 7 16:11:28 2017 +0100
|
|       add function to fill MIB_SL
|
* commit 7e77fb674d
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Fri Nov 3 13:56:29 2017 +0100
|
|     support SidelinkUEInformation (eNB) and RRCConnectionReconfiguration (SL)
|
* commit 418da5b401
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Thu Nov 2 19:53:40 2017 +0100
|
|     Updated handling of DL_config and Tx_req pdus in phy_stub_UE to be compliant with nfapi callback functions
|
* commit a37ff36d35
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Thu Nov 2 14:34:58 2017 +0100
|
|     Added MAC level state variable for the UE and control mechanisms to ensure the correct operation of the UE MAC state machine.
|
* commit 4757a1b6da
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Sat Oct 28 14:16:33 2017 +0200
|
|     Added remaining fill_harq indication functions + the functionality to handle ul_config request pdus arriving from nfapi-vnf: trigger the appropriate UE_MAC and fill_indication functions to prepare the UL_indications which will be put into the socket for transfer back to vnf. Main changes within phy_stub_UE().
|
* commit 6719eefbcd
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Mon Oct 23 15:40:02 2017 +0200
|
|     minor update to process SidelinkUEInformation
|
* commit 136c61ac14
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Mon Oct 23 15:31:02 2017 +0200
|
|     receive SidelinkUEInformation (eNB)
|
* commit 7abf122701
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Mon Oct 23 15:07:56 2017 +0200
|
|     generate/process SidelinkUEInformation
|
* commit afa442bbef
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Thu Oct 19 17:20:59 2017 +0200
|
|     Added fill functions for rach and ulsch_cqi indications.
|
* commit 8314a2644e
| Merge: 2d50ccafd 2516216d1
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Wed Oct 18 15:53:49 2017 +0200
|
|     Merge remote-tracking branch 'main/RU-RAU-split'
|
* commit 2d50ccafd2
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Wed Oct 18 15:45:09 2017 +0200
|
|     Added fill functions for rx, crc and sr indications in phy_stub_UE. These functions will be getting called directly from the MAC layer of the UE. Rest of fill functions remain to be added.
|
* commit 22bcc7a513
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Tue Oct 17 15:14:46 2017 +0200
|
|     add SIB19 support - eNB
|
* commit 2de24be284
| Author: Tien-Thinh Nguyen <tien-thinh.nguyen@eurecom.fr>
| Date:   Mon Oct 16 11:14:28 2017 +0200
|
|     add SIB18 support - eNB
|
* commit 931ae71326
| Merge: d4e6d45cb 493110af7
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Fri Oct 13 11:00:14 2017 +0200
|
|     Merge with RU-RAU-split
|
* commit d4e6d45cb9
| Author: matzakos <panagiotis.matzakos@eurecom.fr>
| Date:   Fri Sep 22 19:57:43 2017 +0200
|
|     Definition of the UE<->eNB MAC to MAC interface based on nFAPI structures: Currently supporting the triggering of MAC layer Rx operations at the UE side based on the reception of NFAPI DL messages. Partial definition of Sidelink MAC subheaders.
|
* commit 0422bf8bb9
  Author: matzakos <panagiotis.matzakos@eurecom.fr>
  Date:   Mon Sep 4 10:12:55 2017 +0200

      Definition of the UE MAC interface: IF_Module_UE.h, IF_Module_UE.c, UE_MAC_interface.h and the supporting functions.
------------------------------------------------------------------------------
2018-05-09 12:16:49 +02:00
Haruki NAOI
a3e1a24947 Merge remote-tracking branch 'remotes/origin/rm912_bugfix' into sp3_master 2018-05-09 17:37:55 +09:00
Haruki NAOI
f2db393923 Merge remote-tracking branch 'remotes/origin/rm804_bugfix2' into sp3_master 2018-05-09 17:36:06 +09:00
jftt_wangshanshan
f1cd05c1e0 Fix ul config pdu info setting missing problem 2018-05-09 11:56:45 +08:00
Wu Jing
6f4ee013d2 fix RM912 SegmentFault in dlsch_coding while using a UE which has been removed 2018-05-07 18:15:42 +09:00
Bi-Ruei, Chiu
f994140a3c Fix S1AP error indication message sent from MME not handled in eNB 2018-05-02 23:40:11 +08:00
Raymond Knopp
c73cada3f4 added phich_common.c 2018-05-02 07:18:08 -07:00
Cedric Roux
727b368df3 minor: always exit on error 2018-05-02 12:28:02 +02:00
Cedric Roux
57eef276cb bugfix: intialize memory
This is taken from commit 7bc1434733
and is necessary for the UE to function properly.
2018-05-02 12:25:18 +02:00
Florian Kaltenberger
880d768729 removing the 4 bit left shift of TX signal as already done in driver 2018-05-02 12:23:27 +02:00
Cedric Roux
52cf61de97 T tracer: don't depend on T_BUFFER_MAX anymore in the tracers
Whenever the value T_BUFFER_MAX changes, the tracers had to
be recompiled. The only reason why it was needed is because we
used some fixed size buffers to read events. This commit removes
this restriction.

Also, with the basic simulator, this value T_BUFFER_MAX now comes
with an #ifdef which would have required some special hackish-level
tricks in the tracers, which is not good.

Let's just allocate memory when needed.
2018-05-02 12:11:34 +02:00
Cedric Roux
6cb04bb43a basic simulator: initial release
This commit introduces a 'basic simulator'.

This basic simulator is made of:
- the standard eNB code using a special driver that mimics the USRP driver
- the standard UE code using a special driver that mimics the USRP driver
- no channel simulation
- some special code to deal with faster-than-realtime behaviour of this
  basic simulator

It connects one UE to one eNB. It requires an EPC, populated with the
correct configuration for the UE.

This is the initial release and may contain bugs (most probably race
conditions due to the faster-than-realtime behaviour).

To use it, see the documentation at:
    targets/ARCH/tcp_bridge/README.tcp_bridge_oai.

It has been tested with 25, 50 and 100 RBs, FDD mode.
(No check at all has been done to know if it could work in TDD mode.)
2018-05-02 11:27:41 +02:00
Raymond Knopp
e4c44dd0a9 checked compilation/execution of dlsim/ulsim. removal of most warnings. 2018-04-29 11:08:32 -07:00
Raymond Knopp
ea784f2b4b full IF4p5 simulation working 2018-04-29 09:35:23 -07:00
Haruki NAOI
55ed45df8d Fix: avoid "U" and "L" RF messages during eNB start up. 2018-04-27 09:28:32 +09:00
Masayuki HARADA
30427be126 Fix problem of RF-IF on TDD system. 2018-04-26 13:26:09 +09:00
jftt_wangshanshan
ebbc7fadd0 add previous fix to non-ue-extension 2018-04-26 09:29:29 +08:00
Cedric Roux
2160f8758c cleanup - remove unnecessary calls to get_cpu_freq_GHz
The one in lte-enb.c disrupts the realtime. Using a B200mini with
20MHz bandwidth leads to the UE unable to connect for it seesms like
the UL and DL are not properly time synched because of this sleep
of one second that happens after the USRP streaming has started.
We see some random access attempts but the decoded preamble is
wrong.

This may be dependant on the setup. I had sporadic errors with
a B210, where sometimes the UE could connect and sometimes not.

(cherry picked from commit 5a61f9944c)
2018-04-26 10:05:24 +09:00
Florian Kaltenberger
0604e146ff check on UE TX amplitude 2018-04-25 17:45:33 +02:00
Florian Kaltenberger
e7a221278c removing the 4 bit left shift of TX signal as already done in driver
This reverts commit 9cff72959a.
2018-04-25 16:11:38 +02:00
jftt_wangshanshan
a60ac11320 fix ul config pdu type while there are cqi,harq and ulsch at the same time. 2018-04-25 17:05:12 +08:00
Raymond Knopp
596736afae dlsim/ulsim functional. lte-softmodem/lte-uesoftmodem compile. 2018-04-24 22:14:20 -07:00
Cedric Roux
c14dd7ffbb T: use PID for the SHM name
That allows to run several programs using this mechanism on the
same computer (say both eNB and UE, to debug).
2018-04-24 14:53:12 +02:00
Cedric Roux
7576e3fa52 T: bugfix: fix check on return value of mmap 2018-04-24 14:40:28 +02:00
Raymond Knopp
68b86d5f6f fixes after merge with develop 2018-04-24 02:01:48 -07:00
Raymond Knopp
83b2f1c01c Merge remote-tracking branch 'origin/develop' into develop-uedirectorysplit
Conflicts:
	openair1/PHY/INIT/lte_init.c
	openair1/PHY/LTE_TRANSPORT/dci_tools.c
	openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
	openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
	openair1/PHY/defs_eNB.h
	openair1/SCHED_UE/phy_procedures_lte_ue.c
	openair2/LAYER2/MAC/mac.h
	targets/RT/USER/lte-enb.c
	targets/RT/USER/lte-softmodem.h
2018-04-23 23:08:10 -07:00
Haruki NAOI
a3f5e632ea Merge remote-tracking branch 'remotes/origin/rm804_bugfix2' into sp3_master 2018-04-23 19:12:31 +09:00
jftt_wangshanshan
c5b3aaa2dd Fix a bug in log 2018-04-23 14:26:43 +08:00
Haruki NAOI
9a8ea23f9f Merge remote-tracking branch 'remotes/origin/rm804_bugfix2' into sp3_master 2018-04-23 11:21:15 +09:00
Haruki NAOI
20fd63b1e2 Merge remote-tracking branch 'remotes/origin/rm898_bugfix' into sp3_master 2018-04-23 11:20:05 +09:00
jftt_wangshanshan
ef5ff53ecf change log level to debug 2018-04-23 09:58:50 +08:00
jftt_wangshanshan
0889d79969 Modify CQI scheduling strategy 2018-04-23 09:45:08 +08:00
Raymond Knopp
861d06e855 UE directory splits, creation of UE-specific files, common UE/eNB files and extraction of UE/common components from eNodeB files. renaming of files to minimize common names across directories (i.e. defs.h, vars.h, extern.h) 2018-04-22 11:33:43 -07:00
Haruki NAOI
c8267c2cf9 Revert "Merge branch 'rm884_bugfix' into 'sp3_master'"
This reverts commit fad303fe37, reversing
changes made to e35921cf96.
2018-04-20 18:41:35 +09:00
Wu Jing
e2a1b98658 fix rm898 SecurityModeFailure 2018-04-20 17:56:47 +09:00
tomita.y
fad303fe37 Merge branch 'rm884_bugfix' into 'sp3_master'
Rm884 bugfix

See merge request !36
2018-04-19 19:00:02 +09:00
tomita
2bf209e469 Delete LOG_I . 2018-04-19 18:25:34 +09:00
Wu Jing
7813e898ba RM884 fix, when cqi received is 0, don not update dl_cqi 2018-04-19 12:26:20 +09:00
shono.takafumi
e2741d2b3d Merge branch 'sp3_master' into rm894_assertion 2018-04-19 11:38:42 +09:00
naoi.haruki
e35921cf96 Merge branch 'rm886_bugfix' into 'sp3_master'
fix RM886 bug

See merge request !35
2018-04-18 16:34:03 +09:00
Robert Schmidt
72529e6c3a remove useless file/pthread_single declaration 2018-04-17 13:56:19 +02:00
Wu Jing
22da1eac0c fix rm894 bug 2018-04-17 20:12:16 +09:00
Florian Kaltenberger
aca606f90d making init_nas_s1 script executable 2018-04-17 09:24:34 +02:00
Florian Kaltenberger
fd2e093412 RRC will not send second RRCConnectionReconfiguration with additional DRBs in noS1 mode 2018-04-17 09:23:59 +02:00
Cedric Roux
c03650fdc7 minor: fix order of comparisons (easier to understand) 2018-04-16 12:50:34 +02:00
Wu Jing
33b652c5df fix RM886 bug 2018-04-16 19:40:18 +09:00
Bi-Ruei, Chiu
5c23af773a Compare version number using MAKE_VERSION macro to provide better SW configuration:
1. Previous SW configuration for different RRC version relies on whether macro Rel10,
   Rel14 defined or not by checking #ifdef Rel14 or #if defined(Rel10) || defined(R14).
   Whenever there is a newer RRC version, e.g. Rel15, it will be very a tedious and
   error-prone job to add defined(Rel15) in every place.

2. Some RRC messages are defined in release 13 instead of release 14, NB-IoT
   feature is one of such example. Our code shall reflect this fact instead of using
   an afterward version number in software configuration.

3. Some RRC messages or some fields of certain RRC messages are added in the middle
   a release, e.g. SystemInformationBlockType1_v1310_IEs_t defined in RRC 13.1.0
   and RRC 9.2.0 made some changes to SIB12 and SIB13 so we have sib12_v920 and
   sib13_v920 fields in SIB12 and SIB13's struct.
   We need a finer grain of control when using ASN1 from different RRC version.

4. S1AP also has this problem that it use UPDATE_RELEASE_9 and UPDATE_RELEASE_10 to
   differentiate between various S1AP version.

This commit propose using MAKE_VERSION(x,y,z) to designate the version number and
modify current conditional compilation accordingly.

Note: 2018/04/16, Modified based on Cedric's comment.
2018-04-16 12:32:29 +02:00
Cedric Roux
184d51c6ea Merge remote-tracking branch 'origin/develop_integration_2018_w15' into develop
Summary of changes:
- some work on better parallel processing of eNB
  try the eNB with options: --fepw --codingw
- small changes for multi-UE simulation and simulation accuracy
  (UE power levels)
- initial work for the UE to use TUN device instead of ue_ip.ko
  only done for oaisim, default bearer, compile with:
    ./build_oai --ue-nas-use-tun <rest of options>
2018-04-16 12:19:20 +02:00
Cedric Roux
79eb6eb4d2 integration fix: fix UE softmodem compilation 2018-04-16 11:23:05 +02:00
Haruki NAOI
6e7db95981 clean log. 2018-04-16 16:54:02 +09:00
Cedric Roux
17dda7bd70 integration fix: minor fix 2018-04-13 11:59:56 +02:00
Florian Kaltenberger
9cff72959a Revert "removing the 4 bit left shift of TX signal as already done in driver"
This reverts commit 1043313175.
2018-04-12 17:16:11 +02:00
Florian Kaltenberger
1043313175 removing the 4 bit left shift of TX signal as already done in driver 2018-04-12 17:15:31 +02:00
Haruki NAOI
b0798357b9 Merge branch 'sp3_rlc_assertion' into sp3_master 2018-04-12 20:16:01 +09:00
Wu Jing
a8ab765fe5 patch rrc_assertion.patch into closed_item
# Conflicts:
#	openair2/RRC/LITE/rrc_eNB.c
2018-04-12 20:05:04 +09:00
Wu Jing
675fd0af4e patch develop-get-freememblock.patch into closed_item 2018-04-12 20:02:36 +09:00
Cedric Roux
fa4a9a0cb9 integration fix: update T tracer: add new VCD variables 2018-04-12 11:36:31 +02:00
Cedric Roux
a1a60dc19a integration fix: revert target_rx_power to 178 in eNB_scheduler_ulsch.c
158 does not work well with the eNB softmodem.
2018-04-12 11:28:51 +02:00
Wu Jing
5d06a1cabd RLC assert fix ct 2_114 bug 2018-04-12 11:06:35 +09:00
Haruki NAOI
afcdb1e6a9 enb-log-mem_sp2.patch into closed_item
(cherry picked from commit 3432385280c3155ee63a54be7c2e4846a17299de)

# Conflicts:
#	openair2/UTIL/LOG/log.c
2018-04-12 10:53:44 +09:00
Haruki NAOI
7b4298a637 Merge remote-tracking branch 'remotes/origin/sp3_tdd_config1' into sp3_master 2018-04-12 10:13:12 +09:00
Cedric Roux
e29d500db6 integration fix: various fixes
- fix compilation of dlsim/ulsim/oaisim by defining some needed
  global variables
- fix compilation of oaisim: compile coding and params_libconfig
- fix running of if4p5 with low CPU count (oaisim was not working
  on the machine 'haswell' because of this)
2018-04-11 17:15:14 +02:00
Cedric Roux
1f446432f6 Merge remote-tracking branch 'origin/develop-simL1-fixes' into develop_integration_2018_w15 2018-04-11 15:15:54 +02:00
Cedric Roux
86599d47a9 Merge remote-tracking branch 'origin/ue-use-tun-for-nas' into develop_integration_2018_w15 2018-04-11 15:15:49 +02:00
Cedric Roux
bf678f7fb0 Merge remote-tracking branch 'origin/RU-RAU-split-parallel-EMUFH-phy-test-merge' into develop_integration_2018_w15 2018-04-11 15:15:39 +02:00
WANG Tsu-Han
68fdd19cb7 fixs for 5-7 core 2018-04-11 15:09:07 +02:00
Haruki NAOI
597890ab61 eNB RLC Assertions(assert macros) skip & fix warning. 2018-04-11 19:01:43 +09:00
Wu Jing
b27984349d fix ct test bug 2_37 2_72 2018-04-11 13:44:56 +09:00
WANG Tsu-Han
658aa00119 bug fix for threading with under 8core 2018-04-10 16:52:05 +02:00
Wu Jing
a32857885a Merge branch 'sp3_tdd_config1' of http://10.37.145.15:8000/gitlab/vran/release_enb into sp3_tdd_config1 2018-04-10 17:32:31 +09:00
Wu Jing
b7a8889741 fix Assertion because of round==8 in extract_harq when re-establishment happen 2018-04-10 17:31:52 +09:00
Wu Jing
aca800dae9 fix SegmentFault by harq_pid==8 after clean_dlsch_eNB 2018-04-10 17:19:52 +09:00
Wu Jing
7b0231f926 Merge branch 'sp3_rlc_assertion' of http://10.37.145.15:8000/gitlab/vran/release_enb into sp3_rlc_assertion 2018-04-10 15:53:55 +09:00
Wu Jing
03232d30c2 RLC assertion 760~796 add 1428 1429 2018-04-10 15:37:30 +09:00
Raymond Knopp
b458c09841 Merge branch 'develop-uedirectorysplit' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop-uedirectorysplit
Conflicts:
	cmake_targets/CMakeLists.txt
	openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
	openair1/PHY/LTE_UE_TRANSPORT/dci_ue.c
2018-04-09 15:55:08 -07:00
Raymond Knopp
8b1416b862 debugging of new directory structure, file renaming, and eNB/UE splitting. dlsim/ulsim functional. 2018-04-09 15:32:49 -07:00
teramoto.genki
c5310874fa Merge branch 'sp3_rlc_assertion' of http://10.37.145.15:8000/gitlab/vran/release_enb into sp3_rlc_assertion
# Conflicts:
#	openair2/LAYER2/RLC/rlc.c
2018-04-09 21:12:02 +09:00
teramoto.genki
43382defec eNB RLC Assertions skip. 2018-04-09 21:00:13 +09:00
Masayuki HARADA
5e4f0a924d Merge branch 'ues_test' into sp3_tdd_config1
# Conflicts:
#	openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
2018-04-09 20:21:24 +09:00
Masayuki HARADA
f8f149fd1b Fix calculation of ul_total_buffer. 2018-04-09 20:05:45 +09:00
Masayuki HARADA
b58ecfc5d8 Change SCH_PAYLOAD_SIZE_MAX from 4096 to 8192. 2018-04-09 20:01:38 +09:00
Haruki NAOI
8b44c8bfb6 modify: skip RLC assertion. 2018-04-09 19:57:33 +09:00
Masayuki HARADA
7ced1a2eb1 Remove nb_rb = 64 form rb_table in SCD. Because PHY UL cannot decode nb_rb = 64. 2018-04-09 19:56:33 +09:00
Masayuki HARADA
901c0da013 Fix attach NG on FDD 10MHz 20MHz. 2018-04-09 15:10:23 +09:00
naoi.haruki
dcf3b235f5 Merge branch 'sp3_tdd_config1' into 'sp3_master'
Sp3 tdd config1

See merge request !31
2018-04-09 10:59:43 +09:00
Raymond Knopp
ef719e7945 Merge remote-tracking branch 'origin/develop' into develop-uedirectorysplit 2018-04-08 13:07:23 -07:00
Raymond Knopp
ac7cbf17e2 band 38 files x310 2018-04-08 13:07:07 -07:00
Raymond Knopp
551f32cc20 more splitting eNB/UE files/directories 2018-04-08 13:00:08 -07:00
Raymond Knopp
0ab2b2b261 modifications for simulator : power normalizations for UE TX, small changes to SNR targets for power control, default UE power (23 dBm now) 2018-04-06 10:27:23 -07:00
Florian Kaltenberger
7bc1434733 various small fixes for UE 2018-04-06 17:00:53 +02:00
Cedric Roux
cf45997110 Use TUN device for NAS for the UE instead of ue_ip.ko
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.
2018-04-06 16:53:42 +02:00
Raymond Knopp
eee7673893 warning remove 2018-04-06 15:57:23 +02:00
Raymond Knopp
be816fab6f Merge branch 'develop' into RU-RAU-split-parallel-EMUFH-phy-test-merge 2018-04-06 15:12:46 +02:00
Raymond Knopp
fb4752a2cf default RF configuration 2018-04-06 00:07:23 +02:00
Raymond Knopp
3d8a21636a multi-ue checks in pdcp 2018-04-05 22:32:18 +02:00
Raymond Knopp
0f5470b913 removal of logging in UE 2018-04-05 11:11:58 -07:00
Raymond Knopp
9fa001c3c5 prevent UL_indication from overlapping with tx process which cause the drop 2018-04-05 16:33:08 +02:00
Wu Jing
dbddecb775 fix Paging bug when PO=subframe0 and sfn_sf error 2018-04-04 18:56:56 +09:00
jftt_wangshanshan
1846c56d54 Add the missing part of DAI setting and harq_pid calculation to OAI SCD 2018-04-04 15:54:44 +08:00
Wu Jing
6d21972e43 merge ues_test branch 2018-04-03 17:24:27 +09:00
Haruki NAOI
8f86f38d58 Fix: memory leak occurs when memblock is exhausted.
(cherry picked from commit 0e550a32e46d797d03fd72e54e474762d4db7614)

# Conflicts:
#	openair2/LAYER2/RLC/rlc.c
2018-03-26 19:32:11 +09:00
Masayuki HARADA
5646b07870 Fix ul scd problems.
・Delete double BSR calculation.
・change TBS for mcs setting bit to byte.

(cherry picked from commit 39cd022424ebe98c95be32cbb4127aa9d0e0ff3b)
2018-03-26 19:30:12 +09:00
Cedric Roux
1272cabb35 Merge remote-tracking branch 'origin/develop_integration_2018_w12' into develop
Summary of changes:
- free configmodule memory when shutting down
  It is possible to restart the lte-softmodem via the FlexRAN controller.
  For this to work, the end_configmodule() method needs to be called when
  shutting the lte-softmodem down so that the configuration can be read
  again during a restart.
- Feature agent
  Implements an agent ID, consisting of the OAI module ID, the OAI eNB ID
  and the cell ID. The agent reads this information in its configuration
  read function and forwards it to the controller.
  This MR also contains some code forwarding SI info to the controller.
- various bugs fixed
  - remove start_background_system from eNB softmodem
  - fix memory leak when doing traffic
  - disable ITTI dump (does someone uses this?)
  - disable U-plane inactivity timer: it's very simple to put this back,
    but as of now it comes with its own problems that we don't have time
    to check/fix
2018-03-23 16:24:17 +01:00
Cedric Roux
ff3c929ecf fix PHY simulators compilation
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
2018-03-23 15:15:51 +01:00
Cedric Roux
3288a6bbe4 Merge remote-tracking branch 'origin/bugfixes-2018-w12' into develop_integration_2018_w12 2018-03-23 10:47:43 +01:00
Cedric Roux
f15b446469 Merge remote-tracking branch 'origin/feature-agent-id' into develop_integration_2018_w12 2018-03-23 10:47:36 +01:00
Cedric Roux
b79e6bfb10 Merge remote-tracking branch 'origin/fix-softmodem-restart' into develop_integration_2018_w12 2018-03-23 10:47:31 +01:00
Cedric Roux
16cb7eba64 remove start_background_system from eNB softmodem
This is only needed by the UE code, to setup IP settings.
The eNB does not need this. (To be reverted if this is
wrong.)
2018-03-23 10:44:13 +01:00
Cedric Roux
3a0d9339dc bugfix: fix a memory leak
When doing TCP downlink traffic with iperf for several
hours, the memory consumption of lte-softmodem does not
stop to grow.

After analysis, this commit seems to be the only fix needed.
To be checked somehow.
2018-03-23 10:42:36 +01:00
Cedric Roux
e7bca7fdac Disable ITTI dump
If anyone needs it, it's a simple matter of reverting this
basic commit.
2018-03-23 10:42:36 +01:00
Cedric Roux
5fdc3077db disable U-plane inactivity timer.
It is annoying and does not seem to work properly.
To be checked/reworked if needed.

Keep in mind that we also want oaisim to be functional.
2018-03-23 10:42:30 +01:00
Robert Schmidt
9c47c860bc FlexRAN: RCconfig_flexran(): only read necessary information
if the FlexRAN agent is disabled, do not read all the data and skip reading
of more information
2018-03-23 09:20:19 +01:00
Robert Schmidt
d54d415125 FlexRAN: add Information in enb_config_reply msg 2018-03-22 18:43:15 +01:00
Robert Schmidt
1854826053 FlexRAN: send agent_id (aka enb_id) 2018-03-22 18:43:15 +01:00
Robert Schmidt
e7a60fc992 FlexRAN: make agent_id for identification purposes, discern from mod_id
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.
2018-03-22 18:41:14 +01:00
Guy De Souza
2c83775087 Fix CMakeLists.txt for lte-uesoftmodem 2018-03-21 15:08:01 +01:00
Guy De Souza
8824d20cd3 Fix CMakeLists.txt for lte-softmodem 2018-03-21 11:34:08 +01:00
Raymond Knopp
846268fdd3 bug fix for qpsk modulation 2018-03-20 18:02:52 +01:00
Robert Schmidt
318e4a345e free configmodule memory when shutting down
It is possible to restart the lte-softmodem via the FlexRAN controller. For
this to work, the end_configmodule() method needs to be called when shutting
the lte-softmodem down so that the configuration can be read again during a
restart.
2018-03-20 14:41:58 +01:00
Haruki NAOI
eaa3f533a5 Fix: segmentation fault happens when clean_eNb_dlsch() function is executed while pdsch procedure running. 2018-03-20 13:00:21 +09:00
Cedric Roux
3fe90157e6 Merge remote-tracking branch 'origin/bugfixes-2018-w11' into develop 2018-03-19 10:57:35 +01:00
Cedric Roux
89201888e3 Merge remote-tracking branch 'origin/cherry-pick-5722d493' into develop 2018-03-19 10:57:16 +01:00
Cedric Roux
d393814772 bugfix: send UL NACK (on PHICH) at the right place
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.
2018-03-19 10:28:16 +01:00
Raymond Knopp
dad93fe297 SCHED_NBIOT directory 2018-03-19 01:38:45 -07:00
Raymond Knopp
6d2158f37a added SCHED_NR directories 2018-03-19 01:34:57 -07:00
Raymond Knopp
ece0996946 added readme for NR_REFSIG directory 2018-03-19 01:24:55 -07:00
Raymond Knopp
bf13e67b55 added README files to NBIoT/NR directories so they appear in gitlab 2018-03-19 01:23:34 -07:00
Raymond Knopp
fe95f0f478 created new directories for NBIoT and NR and split eNB/gNB/UE 2018-03-19 01:13:12 -07:00
Wang Tsu-Han
71a98a977e bug fix for killing thread 2018-03-16 18:18:55 +01:00
Haruki NAOI
dbe3208302 Fix: eNB can not accept attach more than 257 times. 2018-03-16 15:32:14 +09:00
Cedric Roux
f1f3b8a0a8 bugfix: fix issue 285 - connect/disconnect multiple time
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
2018-03-16 15:25:31 +09:00
Cedric Roux
3da8cac59b bugfix: try to release HARQ processes properly
The code is too complex. This commit may not be enough.
2018-03-15 10:48:16 +01:00
Raymond Knopp
8d90eda600 bug fix after merge 2018-03-14 16:21:51 +01:00
Raymond Knopp
d943cd281d initial split of UE/eNB directories 2018-03-13 01:17:10 -07:00
Raymond Knopp
6295e57331 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop 2018-03-13 00:06:42 -07:00
Eino Virtanen
445524bc87 fix building protobuf when user name is not the same as primary group name 2018-03-12 15:57:58 +01:00
Raymond Knopp
b2cc1252c6 Merge remote-tracking branch 'origin/develop' into RU-RAU-split-parallel-EMUFH-phy-test-merge
Conflicts:
	cmake_targets/build_oai
	common/utils/itti/intertask_interface.c
	openair1/PHY/INIT/lte_init.c
	openair1/PHY/LTE_TRANSPORT/dci.c
	openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
	openair1/PHY/defs.h
	openair1/SCHED/phy_procedures_lte_eNb.c
	openair2/ENB_APP/enb_paramdef.h
	openair2/LAYER2/MAC/defs.h
	openair2/LAYER2/MAC/eNB_scheduler.c
	targets/ARCH/COMMON/common_lib.c
	targets/COMMON/create_tasks.c
	targets/RT/USER/lte-enb.c
	targets/RT/USER/lte-ru.c
	targets/RT/USER/lte-softmodem.h
2018-03-12 12:10:48 +01:00
jftt_wangshanshan
2505f15eab Fix previous problem for no-ue-extension version of schedule_ulsch_rnti 2018-03-12 12:49:34 +08:00
jftt_wangshanshan
485b7fc060 Fix the defecitve process while there is an uci scheduled before an ulsch. 2018-03-12 11:07:59 +08:00
Cedric Roux
e56ae69bc3 Merge remote-tracking branch 'origin/develop_integration_2018_w10' into develop
Summary of changes:
- bug fix in the FlexRAN API (correct a check)
- bug fix for sending the right RNTI in a FlexRAN message
- fixes small bug in ulsim which kills one RX antenna in channel simulation.
  Another simple but bad bug in ulsch_demodulation.c (bad access of avgU
  array). This probably resulted in a performance degradation for non-ideal
  channels, even for 1 antenna. The avgU was read in position 1 instead of
  0 for 1-antenna and in positions 1 and 2 instead of 0 and 1 for 2-antennas.
- work from Nokia:
    1) shared library loader, with integration for oai devices, encoder and telnet server
    2) telnet server (use build-oai --build-telnetsrv option and --telnetsrv softmodem option)
    3) UE/eNB in different executables (lte-uesoftmodem and lte-softmodem + noS1 variants)
    4) config module fixes and extensions
    5) very preliminary NB-IoT integration preparation, using shared lib loader ( use make NB-IoT to build, after building the eNB softmodem)
    6) Rename NB-IoT configuration sources from nbiot_ to NB-IoT_ to be consistent with other NB-IoT developments.
- various bugs fixed:
  - try to avoid "buffer full" problem when pushing DL traffic
  - add a stop_rf function in the RU
  - cleanup - remove unnecessary calls to get_cpu_freq_GHz
    (was disrupting realtime at startup, generating lots of UU and LL)
  - cleanup MAC PDU generation

Compilation with Rel10 is not functional anymore.
Compilation of unitary simulator is not functional anymore.
2018-03-09 16:47:08 +01:00
Cedric Roux
e7cfe377db integration fix: fix file format (dos2unix)
End of line character has to be unix-style, not dos-style.
2018-03-09 16:43:08 +01:00
Cedric Roux
92bb82eb2b integration fix: fix license version to 1.1 2018-03-09 16:40:09 +01:00
Cedric Roux
cd103f7c3d Merge remote-tracking branch 'origin/fixes-flexran' into develop_integration_2018_w10
* bug fix in the FlexRAN API (correct a check)
* bug fix for sending the right RNTI in a FlexRAN message
2018-03-09 14:58:51 +01:00
Cedric Roux
00f234029a Merge remote-tracking branch 'origin/bugfixes-2018-w10' into develop_integration_2018_w10 2018-03-09 14:58:37 +01:00
Cedric Roux
727e29e3c0 Merge remote-tracking branch 'origin/ulsch-rx-2ant-fix' into develop_integration_2018_w10
fixes small bug in ulsim which kills one RX antenna in channel simulation.
Another simple but bad bug in ulsch_demodulation.c (bad access of avgU
array). This probably resulted in a performance degradation for non-ideal
channels, even for 1 antenna. The avgU was read in position 1 instead of
0 for 1-antenna and in positions 1 and 2 instead of 0 and 1 for 2-antennas.
2018-03-09 14:57:32 +01:00
Cedric Roux
3e99c7aa97 Merge remote-tracking branch 'origin/develop-nbiotconf-shlibloader' into develop_integration_2018_w10
1) shared library loader, with integration for oai devices, encoder and telnet server
2) telnet server (use build-oai --build-telnetsrv option and --telnetsrv softmodem option)
3) UE/eNB in different executables (lte-uesoftmodem and lte-softmodem + noS1 variants)
4) config module fixes and extensions
5) very preliminary NB-IoT integration preparation, using shared lib loader ( use make NB-IoT to build, after building the eNB softmodem)
6) Rename NB-IoT configuration sources from nbiot_ to NB-IoT_ to be consistent with other NB-IoT developments.
2018-03-09 14:56:18 +01:00
Cedric Roux
71e7f9713a hack: try to avoid "buffer full" problem when pushing DL traffic
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.
2018-03-09 10:18:12 +01:00
oai
da50d68b06 more NB-IoT integration 2018-03-08 17:35:35 +01:00
oai
b04f3b54a4 introduce distinct executables for ue and eNodeB (lte-uesoftmodem, lte-softmodem) 2018-03-08 17:29:34 +01:00
oai
45302792ee config module fix and extensions for Nb-IoT, shared lib loader and telnet server implementation 2018-03-08 17:24:23 +01:00
Cedric Roux
963805820c add a stop_rf function in the RU
When the program exits it has to stop the streaming of the USRP.
The function exit_fun is supposed to do that. When quitting with
control+c (very common case) this function is not called. The
code is very unclear there, so let's add a stop_rf in the RU,
as there is already a start_rf.

If we don't call trx_end_func, then at the next run the USRP
device may be in an unstable state and behave improperly.

If the program crashes then the USRP device may be in an
unstable state. The only solution to this problem is to reset
the USRP device.

Maybe there is a way to clean the state of the device when we
open it, before we start using it. Sort of a cleanup before
use. That could be a better solution to "bad state after program
crash".

What has been tested:
- monolithic eNB only
2018-03-08 10:29:28 +01:00
Cedric Roux
5a61f9944c cleanup - remove unnecessary calls to get_cpu_freq_GHz
The one in lte-enb.c disrupts the realtime. Using a B200mini with
20MHz bandwidth leads to the UE unable to connect for it seesms like
the UL and DL are not properly time synched because of this sleep
of one second that happens after the USRP streaming has started.
We see some random access attempts but the decoded preamble is
wrong.

This may be dependant on the setup. I had sporadic errors with
a B210, where sometimes the UE could connect and sometimes not.
2018-03-08 10:11:09 +01:00
Cedric Roux
1a8d81ba57 cleanup MAC PDU generation (plus some general cleanup)
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.
2018-03-08 10:04:18 +01:00
Wu Jing
d45572446c fix mcs when retranssmission 2018-03-08 12:38:54 +09:00
Wu Jing
f58d4aa05f fix pdcch_alloc2ul_subframe when TDD config1 2018-03-08 12:26:39 +09:00
Wu Jing
8a89a16fde fix issue about att_rx and att_tx config 2018-03-08 12:01:43 +09:00
Wu Jing
45655197eb merge ues_test branch into sp3_tdd_config1 2018-03-07 13:42:05 +09:00
Raymond Knopp
957cdbab48 fixes bug in ulsim for 2 antenna RX. 2018-03-07 01:26:04 +01:00
Raymond Knopp
bcaabe513f bugfix on access of avgU array 2018-03-06 23:32:51 +01:00
Wang Tsu-Han
822416e9e2 fep initialization for less core 2018-03-06 15:41:05 +01:00
Wu Jing
54cf2d9aef fix TBS_UL data_type from uint8_t to uint16_t 2018-03-06 16:15:24 +09:00
Wang Tsu-Han
ac95f89aa5 fixes for fewer core 2018-03-05 11:43:14 +01:00
Wang Tsu-Han
23f5628735 changing into double sided signal for pipeline 2018-03-05 11:20:51 +01:00
Robert Schmidt
4924b18ebd FlexRAN: send RNTI in protobuf mac_stats_reply message 2018-03-02 17:36:43 +01:00
Robert Schmidt
8cace6537e correctly check for MAC presence in FlexRAN RAN API 2018-03-02 17:36:43 +01:00
Cedric Roux
307e2f299a Merge remote-tracking branch 'origin/hotfix-rlc-2018-w09' into develop 2018-03-02 15:29:36 +01:00
Cedric Roux
2f8dc35583 Merge remote-tracking branch 'origin/fix-unnecessary-decl' into develop 2018-03-02 15:29:10 +01:00
Cedric Roux
26d68e9c5e hotfix: fix bad RLC UM packet creation
Running TCP DL traffic with one connected UE showed a lot of
fluctuations in throughput. After analysis it was found that
sometimes the RLC UM PDU was not correct. It contained one byte
more than it should. On the receiver side, the TCP packet
contained in the RLC packet seems to be rejected by the TCP
stack of the UE (it has one byte more than it should),
leading to a brutal reduction of the throughput, probably due
to some congestion detection in the TCP implementation.
Or something.

This hotfix seems to solve the problem. Using iperf in downlink
with a 5MHz eNB, we see no more fluctuations, the traffic is
very steady at 16.8Mb/s, as reported by the iperf server running
on the phone. (17.5 in the PHY plot of the T tracer.)

A rewrite of both the MAC and RLC UM packet generation is needed.
The code is way too complex for what it does and may contain
several similar problems that only trigger in specific rare
conditions.
2018-03-02 12:02:06 +01:00
naoi
7f03a6e32a Fix: log argument issue. 2018-03-01 19:21:21 +09:00
Wang.shanshan
57a9156f88 Fix index used while checking harq result with SR collision 2018-03-01 18:59:19 +09:00
naoi
1f9a6c1369 Fix: improve success rate of lower layer re-establishment. 2018-03-01 17:12:36 +09:00
Robert Schmidt
7d8d1588c3 remove unnecessary function declaration
has been introduced in commit 365ca71a4a
2018-03-01 09:04:41 +01:00
naoi
4b02d81839 Fix: Random access information may not release if msg3_round initial value is not zero. 2018-03-01 16:21:32 +09:00
naoi
95f677f735 Fix: pucch procedures moves after UE removed. 2018-02-28 19:34:20 +09:00
naoi
3d1b8a9cef Fix: S1-U Bearers is generated incorrectly when PDCCH order re-establishment succeeded. 2018-02-28 17:50:10 +09:00
naoi
af6ca15020 Fix: Random access information is not released when Msg3(response to PDCCH order) re-transmission fails. 2018-02-28 17:11:37 +09:00
Cedric Roux
c9f89db89b hotfix: clear DCI padding bits
The problem is the following (as reported by an user):

  "one UE is attached to OAI system. UE is near the antenna. Try to detach
  the UE and attach again. Repeat this procedure for 5-6 times. OAI system
  does not work and any the UE can not attach to this system. I use TEMS
  software and I can see MIB signaling on this UE but UE can not decode SIB1
  and SIB2."

What happens is that the DCI for SIB1 and SIB2 is not cleared before
use. That is the bits in the 'padding' field keep the values that were
set before. If the structure has been used to transmit other DCIs
(eg. for UEs) in the past, it may be reused with some of those bits set
to 1. When receiving this DCI, the UE won't accept it because it
gets some bits at 1 where it expects them to be 0.

The short-term/quick solution is to clear the 'padding' field.
A better solution would be to rewrite this part of the code,
which is way too complicated for what it does. But this takes
too much time.

In dci.h the field 'dummy' of some structures was renamed to 'padding'.
The fields 'padding32' and 'padding64' were also renamed to 'padding'
for consistency.

Some structures (DCI2B_1_5MHz_TDD, DCI2B_10MHz_FDD, DCI2D_1_5MHz_FDD,
DCI2D_5MHz_FDD, DCI2D_10MHz_FDD) had a 'padding' field at the end, which
was renamed to 'padding0'. I don't know if this field should be here at all.
To me this field looks very suspicious. When we test DCIs 2B and 2D we
should be careful.

(cherry picked from commit c5ca2bd862)
2018-02-27 18:37:46 +09:00
jftt_wangshanshan
87fb55c792 Fix a bug in previous commit Fix:harq_pid.... 2018-02-27 11:55:53 +08:00
Xu Bo
dab82a2705 fix for-loop index in pdate_ul_dci 2018-02-27 11:24:44 +09:00
Wang.shanshan
5808ce3934 Fix:harq_pid for TDD is not completely fixed in pre processer. 2018-02-26 20:21:16 +09:00
Cedric Roux
6858b55c60 Merge remote-tracking branch 'origin/develop_integration_2018_w08' into develop
Summary of changes:
- fix dlsim/ulsim
- fix centOS compilation
- Move the accounting phase of the DL pre-processor in a separate procedure
  and fix some issues
- additional Mac stats and Improvements
- minor fix in test setup v2
2018-02-26 11:43:27 +01:00
Cedric Roux
9f1530c3c9 Merge remote-tracking branch 'origin/fix-centos-network-device-compilation' into develop_integration_2018_w08 2018-02-26 11:34:36 +01:00
jftt_wangshanshan
9f31d41b44 Add the setting ofharq_information_rel10_tdd.n_pucch_1_0 for tdd in allocate_CCEs 2018-02-26 17:31:43 +08:00
jftt_wangshanshan
699bbcb80f simplify source of ulsch_scheduler_pre_processor 2018-02-24 17:27:18 +08:00
Wu Jing
0504659eb8 fix RM778 PRACH failure by adding reset RA when CRNTI_ACK in extract_harq 2018-02-24 15:16:17 +09:00
Wang Tsu-Han
4b39203763 adding te/td distructure 2018-02-23 16:59:57 +01:00
Raymond Knopp
dc0638d7f6 added compilation directives for nasmesh and ue_ip kernel modules to allow for building on RHEL systems. 2018-02-22 16:45:18 +01:00
Cedric Roux
37425ee967 bugfix: revert bad change
Without this revert, the following does not compile:

    ./build_oai --oaisim
2018-02-22 16:03:45 +01:00
Wang Tsu-Han
cb4dc53042 adding wait stage for every wakeup 2018-02-22 15:59:23 +01:00
Cedric Roux
b23a8ad0fe integation fix: minor typo 2018-02-22 15:04:09 +01:00
Cedric Roux
84882d9414 Merge remote-tracking branch 'origin/fix-test-setup-2018-w08' into develop_integration_2018_w08 2018-02-22 15:03:57 +01:00
Cedric Roux
365ca71a4a remove compilation warnings 2018-02-22 15:03:45 +01:00
Cedric Roux
8ca5fb4ef2 integration: cleanup
- remove spaces at the end of lines
- remove useless dead code
  use: git show -p <this commit> -w
  to see it clearly
2018-02-22 15:03:09 +01:00
Cedric Roux
58eab7515f integration fix: fix crash
With value 4 when connecting one UE and doing some downlink
iperf TCP there is a crash. Probably due to the multiple wrong
RA detected leading to uplink failure of fake UE that never
sends Msg3 (because, well, there is no other UE).

This is another problem that will be fixed at some point.

Anyway, this value 4 fails. Let's put back 3.
2018-02-22 15:02:30 +01:00
Cedric Roux
d5e179fa1f Merge remote-tracking branch 'origin/flexran-mac-stats' into develop_integration_2018_w08 2018-02-22 15:02:15 +01:00
Cedric Roux
4fb2e609fd Merge remote-tracking branch 'origin/enhancement-preprocessor' into develop_integration_2018_w08 2018-02-22 15:02:04 +01:00
Cedric Roux
7b06a540d8 Merge remote-tracking branch 'origin/fix-centos-compilation-2018-w08' into develop_integration_2018_w08 2018-02-22 15:01:54 +01:00
Cedric Roux
5e581a4b06 Merge remote-tracking branch 'origin/dlsim-ulsim-fix' into develop_integration_2018_w08 2018-02-22 15:01:38 +01:00
Masayuki HARADA
2d975ca61b Change scheduling priority : UL-SCH == MAC-CE 2018-02-22 22:11:44 +09:00
Robert Schmidt
e66bd0e2b1 RAN API: unify style, declare missing function in header 2018-02-22 12:03:10 +01:00
Cedric Roux
1e2a7156e0 test setup v2: minor bugfix 2018-02-22 11:54:16 +01:00
tomita
2f4c21ced3 Fix to avoid Segmemtation Fault in case of physicalConfigDedicated is NULL. 2018-02-22 17:10:21 +09:00
tomita
1008080e31 Bug fix for harq_pid calculation in MAC layer. 2018-02-22 16:40:27 +09:00
Masayuki HARADA
5d91a36ebc Merge branch 'ues_test' of http://10.37.145.15:8000/gitlab/vran/release_enb into ues_test 2018-02-22 11:28:36 +09:00
Masayuki HARADA
59623646cf Avoid NULL access in rrc_eNB_process_RRCConnectionReestablishmentComplete. 2018-02-22 11:11:15 +09:00
naoi
497a3275c6 fix: drop reestablishment request after UL failure is detected in layer2.
eNB should be keep UE context longer than T311 timer after UL failure is detected in layer2.
Configuration file(GENERIC-LTE-EPC) sets T311 to 10s, so eNB keep UE context up to 20s.
2018-02-22 10:17:34 +09:00
Wang Tsu-Han
56a32a22d4 changing emulate-rf into an executional option instead of compiler option 2018-02-21 18:13:34 +01:00
shahab SHARIAT BAGHERI
9a9c867a75 additional Mac stats and Improvements 2018-02-20 15:09:24 +01:00
Wang Tsu-Han
869b9a5c6f fix for phy-test UL and adding wakeup_txfh 2018-02-20 15:05:00 +01:00
tomita
19509f08eb Changed log level. 2018-02-20 18:40:05 +09:00
Niccolò Iardella
10e91d4e2f Move the accounting phase of the DL pre-processor in a separate procedure 2018-02-19 15:48:17 +01:00
Cedric Roux
62787a8893 fix CentOS compilation
The following was not working properly:

    ./build_oai -I -w USRP

After this commit it works.

And so does:

  ./build_oai --eNB -w USRP
2018-02-19 14:09:09 +01:00
tomita
ea3aecf486 Bug fix about harq_pid calculation (harq_pid is calculated less than 0). 2018-02-19 19:42:06 +09:00
tomita
a53e22c294 Fixed harq_pid calculation. 2018-02-19 19:31:09 +09:00
tomita
c80246a9a5 Changed log level. 2018-02-19 19:18:15 +09:00
Wolfgang A. Mozart
2194bc8564 fixed timing issue for phy-test scheduling UL. UL is broken after first execution of dlsch decoding 2018-02-19 10:45:34 +01:00
Raymond Knopp
1c46dd7c69 updates for oaisim 2018-02-18 17:31:40 +01:00
Raymond Knopp
b42d83bead memory allocation bugs for 2x2 transmission in dlsim 2018-02-18 12:19:31 +01:00
Raymond Knopp
da83df84f1 Merge remote-tracking branch 'origin/develop' into dlsim-ulsim-fix
Conflicts:
	openair1/PHY/INIT/lte_init.c
2018-02-18 01:39:36 -08:00
Raymond Knopp
e6be94eca2 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop 2018-02-17 12:51:59 -08:00
Raymond Knopp
a1dc99724b missing file 2018-02-17 11:15:53 -08:00
Raymond Knopp
f7c58f27ca dlsim and ulsim functional. dlsim 1-2 antenna ports, TM1/2. ulsim 1-2 antenna ports. 2018-02-17 11:08:56 -08:00
Wang Tsu-Han
bf601fce71 adding phy-test for UL 2018-02-16 19:15:40 +01:00
Cedric Roux
5357ef2050 Merge remote-tracking branch 'origin/develop_integration_2018_w07' into develop
Summary of changes:
- a lot of work on flexran
- several compilation bugfixes
- some bugfixes for some bad conflict resolutions
- various bugs fixed
2018-02-16 15:30:23 +01:00
Cedric Roux
2d6dd02b95 bugfix: fix bad conflict resolutions from previous commits
Some more fixes for some bad conflict resolutions.

I ran:

    git diff 2018.w04 2018.w05

And saw some problems with config_sib2.

There was also something strange in openair2/LAYER2/openair2_proc.c
in the function dump_eNB_l2_stats. Maybe the fix is wrong for
this one. To be checked.
2018-02-16 11:11:50 +01:00
Cedric Roux
c0be5a129c integration fix: set default max MCS for UL back to 20
Doing an iperf UDP uplink test, we could reach only 6Mb/s
with very good radio conditions instead of around 8Mb/s.

It turns out the MCS was limited to 16.

With this commit, we are back to a bit more than 8Mb/s
as it used to be.

(This is with a 5MHz bandwidth.)
2018-02-15 16:50:30 +01:00
Cedric Roux
b2ac257ef5 integration fix: compilation failed
The following compilation failed before this commit:

    ./build_oai --eNB -w USRP -c --T-tracer
2018-02-15 13:40:34 +01:00
Masayuki HARADA
de35844c42 Change priority of itti thread. 2018-02-15 20:23:54 +09:00
Masayuki HARADA
d82ebce55b If TB buffer's all regments recieved is NOT equal RLC's all regments recieved, discard that TB buffer. 2018-02-15 20:10:08 +09:00
Cedric Roux
e4a5470d47 integration fix: noS1 compilation
The following compilation did not work anymore:

    ./build_oai --eNB -c -w USRP --noS1

Neither did:

    ./build_oai --UE --noS1
2018-02-15 11:34:53 +01:00
naoi
897d3c49df Fix: avoid conflict between pre-scd thread and ru thread. 2018-02-15 18:05:40 +09:00
Cedric Roux
8cab562b9f Merge remote-tracking branch 'origin/feature-merge-merge-f68' into develop_integration_2018_w07 2018-02-15 09:58:26 +01:00
Masayuki HARADA
4c0a8f88f9 Add fail safe when RF TX thread is busy. 2018-02-15 10:58:47 +09:00
Cedric Roux
91332d3906 fixup previous bad merge (UE disconnection did not work properly anymore)
Doing airplane mode off to connect a cots UE followed by airplane mode on
to disconnect it gives very bad results (bad disconnection with lots of
UL failures followed by lots of logs in the eNB). It used to work properly
after the work done by Xu Bo.

It turns out that in 2018.w04 things were still working okay. But
in 2018.w05 no.

So I ran:

    git diff 2018.w04 2018.w05

And I checked all the modifications that I thought were relevant
(everything related to the UE, oaisim, if4 and fapi has not been checked).

This commits takes back the version of 2018.w04.

The modifications in openair2/RRC/LITE/rrc_eNB.c are necessary, I think.

The other modifications may not be necessary or even wrong. To be checked
at some point.
2018-02-14 17:59:04 +01:00
Robert Schmidt
a4f260f5a4 fix: no FLEXRAN_AGENT_SB_IF compilation directive 2018-02-14 17:50:41 +01:00
Niccolò Iardella
7e3b1f5d0a Niccolo: Add sorting policy 2018-02-14 17:06:04 +01:00
Robert Schmidt
7b1afbb0bf provide stop_L1L2()/restart_L1L2() in oaisim
the functions are meant to restart the lte-softmodem (lower layers) and are not
supported in oaisim. They are provided to make oaisim compile.
2018-02-14 16:45:14 +01:00
Robert Schmidt
9dcd1f9b89 bugfix: max_allowed_rbs has been renamed max_rbs_allowed_slice 2018-02-14 16:45:14 +01:00
Robert Schmidt
50f7053159 return 0 for unsigned in RAN API 2018-02-14 16:44:29 +01:00
Robert Schmidt
d741b951fa define&send IMSI in Protobuf 2018-02-13 19:01:47 +01:00
Robert Schmidt
df43d19c35 refactoring of the original IMSI extraction code
- move IMSI extraction code to function, remove FLEXRAN comp. directive
- refactor the code, esp. don't do deep if-nesting
- remove m-tmsi part (does not give correct value)
- copy complete IMSI info to UE context, decode in RAN API
2018-02-13 19:01:47 +01:00
Robert Schmidt
d8a6715395 store IMSI information + provide FlexRAN API to query UE's IMSI 2018-02-13 19:01:47 +01:00
Robert Schmidt
9d05a9a3b1 track IMSIs by decoding NAS messages
Original Author: Xenofon Foukas
Changed formatting
does not compile
RS: cast to get rid of compiler warning
-> ImsiEpsMobileIdentity_t to ImsiMobileIdentity_t which is defined the same
way
2018-02-13 19:01:47 +01:00
Robert Schmidt
ef78dcde55 send UE Capabilities to Flexran RTController 2018-02-13 19:00:34 +01:00
Raymond Knopp
e9d536972c updated dlsim to FAPI interfaces 2018-02-13 07:18:52 -08:00
Cedric Roux
2f1acb16ab Merge remote-tracking branch 'origin/oaisim-compilation-ubuntu-17-10_2018-w07' into develop_integration_2018_w07 2018-02-13 15:33:04 +01:00
Cedric Roux
22742a4c9c hack: get oaisim to compile on Ubuntu 17.10
The following did not work before this commit
on ubuntu 17.10:

    ./build_oai --oaisim -c

oaisim has not been tested. It may fail to work. To be tested.
2018-02-13 15:30:39 +01:00
Robert Schmidt
12ac8b180d prevent warnings: init Protocol__FlexHeader to NULL 2018-02-13 14:29:15 +01:00
Robert Schmidt
c33e184dde bugfix: selectively inform FlexRAN RTController of UE state change 2018-02-13 14:25:50 +01:00
Robert Schmidt
a68d70a13d bugfix: prevent segfault in pre_processor.c 2018-02-13 14:23:54 +01:00
Navid Nikaein
5865c141d0 Improve UL/DL MCS assignment 2018-02-13 11:45:16 +01:00
naoi
1ba0155944 clean: log modification. 2018-02-13 18:22:38 +09:00
jftt_wangshanshan
7b9422a8c5 Merge branch 'sp3_tdd_config1' of http://takoyaki.np1s.css.fujitsu.com:8000/gitlab/vran/release_enb into sp3_tdd_config1 2018-02-13 17:08:57 +08:00
jftt_wangshanshan
831ce2e910 Fix frame_cnt to prevent it from getting too big 2018-02-13 17:08:32 +08:00
naoi
5eac636b34 FIX: E-RAB is removed when UE's status is E_RAB_STATUS_DONE. 2018-02-13 17:57:44 +09:00
Wu Jing
ebecb55733 add if-else case for first_rb=3 when TDD config1 20MHz in ULSCH_pre_processor 2018-02-13 12:30:25 +09:00
Cedric Roux
e794f920c7 integration fix: remove definition of OAI_NW_DRIVER_USE_NETLINK in source file
This is done better by commit 6210eb056f.
2018-02-12 16:15:09 +01:00
Cedric Roux
0b5d0a1761 Merge remote-tracking branch 'origin/fix-ue-compilation-2018-w07' into develop_integration_2018_w07 2018-02-12 16:12:19 +01:00
Cedric Roux
d68ddebe21 Merge branch 'develop-oaisim-ue-hotfix' into develop_integration_2018_w07 2018-02-12 16:11:17 +01:00
Cedric Roux
8d0f964755 Merge remote-tracking branch 'origin/tx_att_rx_att' into develop_integration_2018_w07 2018-02-12 16:09:35 +01:00
Cedric Roux
94a11ee54e Merge branch 'emad72:patch-1' into develop_integration_2018_w07
The branch has been rebased to current origin/develop before merge.
2018-02-12 16:08:13 +01:00
Emad
ddd3e97f14 srb_id must be between [1,3] 2018-02-12 16:07:22 +01:00
Robert Schmidt
4bf4ad8e98 change build scripts: always compile FlexRAN 2018-02-12 15:30:30 +01:00
Cedric Roux
6210eb056f bugfix: fix ue_ip.ko compilation
Not sure that the use of __KERNEL__ is the correct solution.
To be checked at some point.

After this commit, the following works:
./build_oai --UE -c
2018-02-12 15:26:45 +01:00
Robert Schmidt
54e803e71a Sample configuration FlexRAN: Agent is disabled 2018-02-12 15:21:44 +01:00
Robert Schmidt
135b06ae66 bugfix: only send eNB stats to controller if agent enabled 2018-02-12 15:21:02 +01:00
Emad
1056604b25 I tried to change rx and tx attenuation by the config file, but they are not changed. The bug is because att_rx and att_tx do not put in RC.rru when local_rf is "yes" in config file. We need to put att_rx and att_rx for both local_rf = "yes" and "no". Also RF config which send to RF device must be fill by this parameters. 2018-02-12 15:12:22 +01:00
Robert Schmidt
219b5bc92f make FlexRAN Agent activation configurable 2018-02-12 15:11:19 +01:00
Robert Schmidt
adec4e39df remove all conditional FlexRAN-related compilation directives 2018-02-12 14:38:44 +01:00
Robert Schmidt
3768723c62 remove unnecessary comments 2018-02-12 13:50:48 +01:00
Robert Schmidt
ceece5694d rename flexran_slice_member() -> ue_slice_membership() 2018-02-12 13:50:48 +01:00
Robert Schmidt
8108d59a0b no regression, fixes compilation warnings&errors 2018-02-12 13:50:48 +01:00
Robert Schmidt
cf0a5ca920 fix RAN API due to merge + repair functions 2018-02-12 13:50:48 +01:00
Robert Schmidt
a78aaa451c fix slicing capability in ulsch scheduler 2018-02-12 13:50:45 +01:00
Wu Jing
c641f334bb fix total usable RBs when pucch rb=6 2018-02-12 18:38:26 +09:00
jftt_wangshanshan
19a2b37c75 Fix bug in Adaptive Retransmission for ULSCH. Fix Qm,mcs,TBS setting. 2018-02-12 16:52:48 +08:00
jftt_wangshanshan
5a461002a1 Merge branch 'sp3_tdd_config1' of http://takoyaki.np1s.css.fujitsu.com:8000/gitlab/vran/release_enb into sp3_tdd_config1 2018-02-12 14:01:46 +08:00
jftt_wangshanshan
bba24dc2fa Remove comments 2018-02-11 20:33:07 +08:00
jftt_wangshanshan
2974c20c69 Move tdd config case 1 to top 2018-02-11 19:55:52 +08:00
Xu Bo
dcdda7ba35 set UL schedule period to 5Frame for TDD config1 2018-02-11 18:10:11 +09:00
jftt_wangshanshan
4898d609e6 Fix a bug in HI_DCI0_req clear 2018-02-11 16:42:12 +08:00
Raymond Knopp
4070f0bfdf Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop
Conflicts:
	openair2/LAYER2/MAC/config.c
2018-02-09 22:47:29 -08:00
Raymond Knopp
b073445f99 removed NFAPI libraries from oaisim target. added #define to allow ue_ip.ko to compile. This should be revisited, there's a problem in CMakelists.txt, no flags.cmake generate for all 3 kernel modules. 2018-02-09 19:15:30 +01:00
Robert Schmidt
8877b18a9a fix eNB_ulsch_dlsch_scheduler() broken by merge 2c8443121d 2018-02-09 19:05:36 +01:00
Robert Schmidt
e8e58e2594 Merge branch 'develop' into feature-merge-merge-f68 2018-02-09 17:10:41 +01:00
Robert Schmidt
d746ff6127 update comments in restart_L1L2() 2018-02-09 16:29:59 +01:00
Robert Schmidt
1eabadb137 remove unnecessary code from lte-enb.c 2018-02-09 15:47:59 +01:00
Robert Schmidt
386fd21c93 free_eNB_{d,u}lsch(): remove log, complete function dlsch 2018-02-09 15:31:59 +01:00
naoi
0684f6dda1 Fix: All UEs are detached when rf_tx_thread_busy occurs. 2018-02-09 23:27:30 +09:00
Cedric Roux
6868329384 Merge remote-tracking branch 'origin/develop_integration_2018_w06' into develop
Summary of changes:
- fix MAC indentation
- bug fixes:
  - fix uplink over-scheduling
  - fix CQI updating (it was done even when it shouldn't)
  - fix rrc rel10 compilation
  - some minor bug fixes related to ASN.1
2018-02-09 11:20:28 +01:00
Cedric Roux
26073a353b Merge remote-tracking branch 'origin/fix-enb-name-2018-w06' into develop_integration_2018_w06 2018-02-09 11:04:56 +01:00
Robert Schmidt
bb6fd31de6 free all memory for lte_ul_ref* structures 2018-02-09 10:59:59 +01:00
Robert Schmidt
6cff88b9c8 free memory on teardown after all RU/eNB threads have been released 2018-02-09 10:56:14 +01:00
Cedric Roux
11fe5f97c7 bugfix: fix eNB name in configuration files
'_' is not a valid character.

S1AP specs say:

    ENBname ::= PrintableString (SIZE (1..150,...))

And X.680 (08/2015) 41.4 table 10 lists the valid characters for
PrintableString. '_' is not there. We replace by '-' which is there.

Connection of eNB to ppenair-cn has not been tested. There is no reason
why it would fail.
2018-02-09 10:49:50 +01:00
Robert Schmidt
c518ed89e2 bugfix after merge 2018-02-08 19:12:20 +01:00
Robert Schmidt
1a1ad6ed8f remove non-existing files from build description file 2018-02-08 19:11:57 +01:00
Robert Schmidt
c8ae5b7c09 decrease warning 2018-02-08 18:55:23 +01:00
Robert Schmidt
a21bc513bb Merge branch 'develop' into feature-merge-f68 2018-02-08 18:05:28 +01:00
jftt_wangshanshan
1bc258a729 Merge branch 'sp3_tdd_config1' of http://takoyaki.np1s.css.fujitsu.com:8000/gitlab/vran/release_enb into sp3_tdd_config1 2018-02-08 18:09:53 +08:00
jftt_wangshanshan
593ebc4732 Fix bug in subframe2harq_pid. Remove if tdd condition while calling this method since there is already if-else in the method. 2018-02-08 18:08:38 +08:00
Cedric Roux
7ce1621622 Merge remote-tracking branch 'origin/fix-sib3-2018-w06' into develop_integration_2018_w06 2018-02-08 11:04:27 +01:00
jftt_wangshanshan
9ba0355000 add switch tdd config to Msg4 timing setting 2018-02-08 18:04:23 +08:00
Cedric Roux
f3e7a72e55 Merge remote-tracking branch 'origin/fix-cqi-update-2018-w06' into develop_integration_2018_w06
Conflicts:
	openair2/LAYER2/MAC/eNB_scheduler_primitives.c
2018-02-08 11:03:50 +01:00
Cedric Roux
724970e2ef Merge remote-tracking branch 'origin/fix-ul-buffer-info-2018-w06' into develop_integration_2018_w06
Conflicts:
	openair2/LAYER2/MAC/eNB_scheduler_primitives.c
	openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
2018-02-08 10:59:19 +01:00
jftt_wangshanshan
89b261efe5 Fix bug in schedule_ulsch 2018-02-08 16:28:13 +08:00
Wu Jing
8fffe90dbe fix hundreds_of_ues issue(n1_PUCCH_AN DAI) for TDD cofnig1 2018-02-08 02:24:54 +00:00
Cedric Roux
f6345f048e Merge remote-tracking branch 'origin/fix-rrc-rel10-compilation-2018-w06' into develop_integration_2018_w06
Conflicts:
	openair2/LAYER2/MAC/eNB_scheduler_RA.c
	openair2/LAYER2/MAC/eNB_scheduler_primitives.c
2018-02-07 15:12:08 +01:00
Cedric Roux
8e3ecf3399 Merge remote-tracking branch 'origin/fix-s1ap-2018-w06' into develop_integration_2018_w06 2018-02-07 15:03:56 +01:00
Cedric Roux
d23b02af56 Merge remote-tracking branch 'origin/mac-indentation-fix' into develop_integration_2018_w06 2018-02-07 15:03:38 +01:00
Cedric Roux
1fce1bbf82 bugfix: fix SIB3 encoding
The unused bits are the lower bits, so we need to shift.

Not sure that the value 1 is what we want though.
2018-02-07 14:51:50 +01:00
naoi
0efa1185f3 fix: UE dosen't respond to pdcch order(contention based) 2018-02-07 20:40:06 +09:00
Cedric Roux
c0bcd78673 bugfix: don't take into account report CQI in case of NACK or DTX
The problem that may happen is that when the UE does not transmit
on PUCCH (for whatever reason) we may get no signal at all, and
thus compute a very low CQI. Later on we may ask the UE to transmit
louder which may lead to saturation and more problems.

The solution is simple: don't care about CQI in case of DTX
(and NACK also, as done for PUSCH).

Only FDD case done.
For TDD it seems that:
- nfapi structures are not correct. See nfapi_harq_indication_tdd_rel13_t
  in nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h, all the cases
  (bundling, multiplex, ...) use nfapi_harq_indication_tdd_harq_data_t
- the function extract_harq does not handle TDD
2018-02-07 12:31:26 +01:00
Cedric Roux
9b7364a3ca minor: fix AssertFatal 2018-02-07 12:30:00 +01:00
Cedric Roux
eccb96c4c2 bugfix: fix UL over scheduling
There is too much UL scheduling because the buffer status is
overestimated.

This commit tries to make things simpler.
2018-02-06 14:37:03 +01:00
jftt_wangshanshan
e8300aa944 Don't use assert since the comment above said it's perfectly possible to have this NULL here. 2018-02-06 16:50:27 +08:00
jftt_wangshanshan
367e076347 Fix merge bug in return value of ul_ACK_subframe2_dl_frame 2018-02-06 11:58:25 +08:00
Xu Bo
5c76360c2d Fix special subframe only use 2 symbols to transmit pdcch 2018-02-06 11:01:05 +09:00
Cedric Roux
a21c0b809f bugfix: fix RRC Release 10 compilation
The following compilation did not work anymore:

    ./build_oai --eNB -w USRP -r Rel10 -c

(Rel8 still does not work.)
2018-02-05 17:21:40 +01:00
Cedric Roux
f55cbe475c bugfix: fix initialUEMessage criticality
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.
2018-02-05 16:50:52 +01:00
Xu Bo
f9f20c7300 allocate_CCEs only called on dl subframes 2018-02-05 20:17:53 +09:00
jftt_wangshanshan
5ece3937d4 CRS only send on first symbol in special subframe config 0 2018-02-05 17:37:34 +08:00
Xu Bo
4387070cda fix merge bug 2018-02-05 17:25:57 +09:00
jftt_wangshanshan
9c820805fa TDD config1 initial merge 2018-02-05 15:43:20 +08:00
Raymond Knopp
01f06bcf09 compilation success 2018-02-03 08:11:48 -08:00
Raymond Knopp
4af41d2a26 more correction of indentation 2018-02-03 07:53:33 -08:00
Raymond Knopp
2c8443121d Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into mac-indentation-fix
Conflicts:
	openair2/LAYER2/MAC/config.c
	openair2/LAYER2/MAC/eNB_scheduler.c
	openair2/LAYER2/MAC/eNB_scheduler_primitives.c
2018-02-03 06:23:55 -08:00
Raymond Knopp
1a082041b8 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop
Conflicts:
	openair2/LAYER2/MAC/config.c
2018-02-03 06:03:04 -08:00
Xu Bo
10d7599d08 fix merge error 2018-02-03 17:52:03 +09:00
Wu Jing
069ce49e9c Merge remote-tracking branch 'other/issue289_tdd_config1' into sp3_master 2018-02-03 17:50:53 +09:00
Cedric Roux
be8d32d55f Merge remote-tracking branch 'origin/develop_integration_2018_w05' into develop
Summary of changes:
- noS1 fixes
- various bugs fixed
2018-02-02 11:43:54 +01:00
Cedric Roux
ea0d778176 Merge remote-tracking branch 'origin/develop-nos1-fixes' into develop_integration_2018_w05 2018-02-02 10:18:31 +01:00
naoi
3ea62dbdee modify log. 2018-02-01 21:26:05 +09:00
Wu Jing
ba8a111ea1 merge the latest develop branch into issue289 2018-02-01 19:25:29 +09:00
Xu Bo
d42ddeac56 fix CRNTI process 2018-02-01 01:57:54 +00:00
Eurecom
863c469d35 bug fix for adjustable thread structure 2018-01-31 17:53:54 +01:00
Robert Schmidt
fcddbc2b44 RAN API: add functions using UE_Capability
- flexran_get_half_duplex()
- flexran_get_intra_sf_hopping()
- flexran_get_type2_sb_1()
- flexran_get_ue_category()
- flexran_get_res_alloc_type1()
2018-01-31 16:49:24 +01:00
Robert Schmidt
6eeb257717 add UE_Capability to type eNB_RRC_UE_t and read it when received 2018-01-31 16:49:24 +01:00
Robert Schmidt
dd7d2ef63b Navid: revise RRC 2018-01-31 16:49:24 +01:00
Robert Schmidt
e669f83dc1 Navid: revise RAN API 2018-01-31 16:49:24 +01:00
Robert Schmidt
6dcac9234c Navid: revise FlexRAN 2018-01-31 16:49:24 +01:00
Robert Schmidt
d092231181 free memory when stopping/restarting lte-softmodem
- add function free_td() -> complements init_td() [seems to not be used, added
  for completeness]
- add function free_td8() -> undoes init_td8() [free memory of 8-bit LLR Turbo
  decoder]
- add function free_td16() -> undoes init_td16() [free memory of 16-bit LLR
  Turbo decoder]
- change function free_tdavx216() -> undoes init_tdavx216() [free memory of
  16-bit LLR Turbo decoder, AVX2 version]
- add free_lte_top() -> frees memory allocated by init_lte_top()
- change free_ul_ref_sigs() to set freed pointers to NULL
- add method free_transport() -> frees memory of ULSCH/DLSCH transport channels
- use the above functions when stopping/restarting the lte-softmodem
2018-01-31 16:49:24 +01:00
Robert Schmidt
4f1c51f38c add phy_free_RU() and phy_free_lte_eNB()
this methods free the memory that is allocated by the functions
phy_init_RU() and phy_init_lte_eNB()
2018-01-31 16:49:24 +01:00
shahab SHARIAT BAGHERI
2c8dd796e8 Scheduler must send FlexRAN stats updates 2018-01-31 16:49:24 +01:00
Robert Schmidt
d5b8310fb9 add some logging for RRM command parsing 2018-01-31 16:49:24 +01:00
Robert Schmidt
3f043c7d73 FlexRAN: implement possibilty to await a configuration
Through configuration, the lte-softmodem can be halted to await a
reconfiguration from the lte-softmodem. A mutex and condition variable are used
to implement this.

Furthermore, the dependance of lte-softmodem.c on FlexRAN has been reduced to
one include and the flexran_agent_start() call.
2018-01-31 16:49:24 +01:00
Robert Schmidt
811ada2429 soft-restart (i.e. only layers PHY-RRC) the lte-softmodem 2018-01-31 16:49:24 +01:00
Robert Schmidt
8e9d9807ae lte-ru.c: fct for interface -dependant config, export more functions
- add set_function_spec_param() which configures RU_t instance depending on its
  function(al split)
- export more functions like kill_RU_proc() so that they can be reused by
  restart functionality
2018-01-31 16:49:24 +01:00
Robert Schmidt
a91a35877d join all RU threads 2018-01-31 16:49:24 +01:00
Robert Schmidt
9333c16ecb bugfixes: correctly initialize mutexes, conds of RU_proc_t, unlock RU.mutex after using 2018-01-31 16:49:24 +01:00
Robert Schmidt
1576b7bd08 bugfix: max_rbs_allowed_slice is array over CC, not LCID 2018-01-31 16:49:24 +01:00
Robert Schmidt
6179d9d748 Navid: fix access to non-existent harq_pid_* variables via RC read 2018-01-31 16:49:01 +01:00
Robert Schmidt
356d406cff Navid: remove FlexRAN Agent MAC xface function callbacks for scheduling 2018-01-31 16:48:37 +01:00
Robert Schmidt
3740afecc7 consider changed RAN API 2018-01-31 16:48:36 +01:00
Robert Schmidt
56d4d0ebef Bugfix: avoid cyclic header dependency, use FlexRAN variables instead 2018-01-31 16:48:36 +01:00
Robert Schmidt
6a6729bdac fix various compilaton errors due to merge 2018-01-31 16:48:29 +01:00
Robert Schmidt
dfece3ff58 correct scheduler typedefs 2018-01-31 16:42:01 +01:00
Robert Schmidt
9b4d3bbae7 move scheduler function pointer typedef to proto.h 2018-01-31 16:42:01 +01:00
Robert Schmidt
a03877e7f7 delete unnecessary code 2018-01-31 16:42:01 +01:00
Robert Schmidt
7dfac059b0 Review Navid: UL Scheduler: make slice aware 2018-01-31 16:42:01 +01:00
Robert Schmidt
024904db90 repair enb_app.c after merge, delete unnecessary code 2018-01-31 16:42:01 +01:00
Robert Schmidt
a6098dbf09 delete unnecessary FlexRAN source files
all the FlexRAN scheduling code is now also handled by the general OAI
scheduling code
2018-01-31 16:42:01 +01:00
Robert Schmidt
b45a340b63 RAN API: no set_RC_vars(), check use RC directly, give error messages 2018-01-31 16:42:01 +01:00
Robert Schmidt
cdbf65f5af revise RAN API
- when changing values RC.rrc[i]->configuration should be changed too
- then, RRC_RECONFIGURATION_REQ will pass the changed conf down until PHY
- give warnings at functions that are not implemented

- rename functions
flexran_get_tdd_ack_nack_feedback() -> flexran_get_tdd_ack_nack_feedback_mode()
flexran_get_ue_pmi() -> flexran_get_ue_wpmi()
2018-01-31 16:41:56 +01:00
Eurecom
5f028730cd bug fix for RXTX same thread 2018-01-30 17:22:34 +01:00
Eurecom
f0e10b0d89 bug fix for shared info between threads 2018-01-30 14:56:23 +01:00
Raymond Knopp
200be2b1ee Merge branch 'develop-nos1-fixes' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop-nos1-fixes 2018-01-28 13:14:51 +01:00
Raymond Knopp
0d05de6382 minor changes after merge with develop for noS1 simulation 2018-01-28 13:13:59 +01:00
Xu Bo
ef4aee1e28 Merge branch 'issue255_256_257_tmp' into ues_test 2018-01-27 04:14:06 +00:00
Xu Bo
0dcc3dceaf reduce UL failure timer log by change LOG_I to LOG_D 2018-01-27 04:13:12 +00:00
Xu Bo
664d1a4b5f merge issue271_hundreds_of_ues into ues_test and fix conflict in openair2/LAYER2/MAC/defs.h 2018-01-27 02:24:43 +00:00
Xu Bo
098a177d6f Merge branch 'issue271_hundreds_of_ues' into ues_test 2018-01-27 02:12:47 +00:00
Xu Bo
dedd3c6344 fix issue that when RRCConnectionRelease happened by UL failure DL SCD doesn't send DCCH(RRCConnectionRelease) to UE because ul_out_of_sync is set to 1 2018-01-27 02:11:57 +00:00
Xu Bo
b7e2a90ef4 fix release timer by starting timer after SCD DCCH(RRCConnectionRelease) 2018-01-27 02:06:08 +00:00
Wang Tsu-Han
3efaa38394 adjustable thread structure 2018-01-26 18:05:17 +01:00
Xu Bo
260a2a7d3d Merge branch 'issue255_256_257_tmp' into ues_test 2018-01-26 17:08:09 +09:00
Xu Bo
d9d28e3209 reset release_timer from 200ms to 100ms because of flightmode on/off issue, reduce ul failure timer log 2018-01-26 08:00:57 +00:00
Xu Bo
1547a45eae Merge remote-tracking branch 'remotes/origin/issue255_256_257_tmp' into ues_test 2018-01-26 07:15:45 +00:00
Xu Bo
0105373cdc Merge remote-tracking branch 'remotes/origin/issue271_hundreds_of_ues' into ues_test 2018-01-26 06:43:41 +00:00
Xu Bo
b44c83ef46 add remove ue info of pre_scd thread to freeList and for ru_thread to remove the UE in the freeList 2018-01-26 06:15:28 +00:00
Xu Bo
23b5b6ac20 add remove ue info to freeList when RRCConnectionReestablish occurs and for ru_thread to remove the info 2018-01-26 05:57:37 +00:00
Florian Kaltenberger
13c8931bf2 bugfix in modulation 2018-01-25 16:20:25 +01:00
Raymond Knopp
2d610d95c8 Merge branch 'develop-nos1-fixes' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop-nos1-fixes 2018-01-25 15:55:24 +01:00
Raymond Knopp
fe1912a193 correcting issues after merge with develop 2018-01-25 06:54:01 -08:00
Raymond Knopp
8b052dadd5 Merge branch 'develop-nos1-fixes' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop-nos1-fixes
Conflicts:
	cmake_targets/CMakeLists.txt
	openair1/SCHED/phy_procedures_lte_eNb.c
	openair2/RRC/LITE/rrc_UE.c
	openair2/RRC/LITE/rrc_common.c
	targets/SIMU/USER/oaisim_functions.c
2018-01-25 00:00:24 -08:00
Raymond Knopp
ceb4edf7e6 minor changes 2018-01-25 08:53:40 +01:00
Raymond Knopp
f8b0cd5bd4 Merge remote-tracking branch 'origin/develop' into develop-nos1-fixes
Conflicts:
	cmake_targets/CMakeLists.txt
	openair1/PHY/LTE_TRANSPORT/dci_tools.c
	openair2/RRC/LITE/rrc_UE.c
2018-01-24 23:36:39 -08:00
Raymond Knopp
866a23a136 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop 2018-01-24 23:25:16 -08:00
Massive
a6db17ffcd Merge branch 'RU-RAU-split-parallel-EMUFH' of http://gitlab.eurecom.fr/oai/openairinterface5g into RU-RAU-split-parallel-EMUFH 2018-01-24 15:29:24 +01:00
Robert Schmidt
6198a673f0 correctly instantiate flexran agent 2018-01-24 11:51:35 +01:00
Robert Schmidt
ab3f9dad49 add flexran sample config 2018-01-24 11:51:35 +01:00
Robert Schmidt
fac968246d define FlexRAN data in RAN context and use it
- defines RCconfig data structures
- adds method to read data
- use it in source files
2018-01-24 11:51:35 +01:00
Robert Schmidt
765d6370f6 update FlexRAN configuration definition (paramdef) 2018-01-24 11:51:35 +01:00
Navid Nikaein
0937339a53 Update MAC scheduler for slicing (not tested) 2018-01-24 11:51:35 +01:00
Robert Schmidt
78dd80b086 Merge branch 'feature-68-enb-agent' into feature-merge-f68
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
2018-01-24 11:47:28 +01:00
Xu Bo
da94f64c95 Merge remote-tracking branch 'remotes/origin/issue255_256_257_tmp' into ues_test 2018-01-23 09:37:15 +00:00
Xu Bo
573c703cd2 fix issue about nb_rb=0 assertion failed 2018-01-23 09:31:01 +00:00
Cedric Roux
cd8e8458cf Merge remote-tracking branch 'origin/develop_integration_2018_w04' into develop
Summary of changes:
- heavy code cleanup (#ifdef removal)
- bugfixes
2018-01-23 09:30:04 +01:00
Cedric Roux
ecd4aebbe0 Merge remote-tracking branch 'origin/issue-285-connect-disconnect-multiple-time' into develop_integration_2018_w04 2018-01-22 18:44:32 +01:00
Eurecom
30d5f151c3 specified modulation for QPSK 2018-01-22 18:02:02 +01:00
Cedric Roux
97ebc165cc Merge remote-tracking branch 'origin/282-flags-cleanup' into develop_integration_2018_w04
Conflicts:
	openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
	openair1/SCHED/defs.h
	openair2/LAYER2/PDCP_v10.1.0/pdcp.c
	openair2/RRC/LITE/rrc_eNB.c
2018-01-22 17:47:01 +01:00
Cedric Roux
b5513cadf1 hotfix: fix nfapi for correct compilation on ubuntu 17.10 2018-01-22 16:00:21 +01:00
Cedric Roux
4b5b556493 bugfix: fix issue 285 - connect/disconnect multiple time
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.
2018-01-22 15:32:41 +01:00
Massive
5d199f4500 adding an addition error check on harq_pid as it is sometimes not in range. root cause still to be identified 2018-01-22 12:52:37 +01:00
Xu Bo
70371e124d fix issue about Arithmetic exception for pre_scd thread 2018-01-22 10:15:08 +00:00
Xu Bo
2efaf51280 modify pre_scd thread and add phy_tx thread and rf_tx thread 2018-01-22 05:58:14 +00:00
Xu Bo
b67c169145 Merge branch 'issue255_256_257_tmp' into ues_test 2018-01-22 13:58:56 +09:00
Xu Bo
38eacea022 fix noS1 compile error 2018-01-22 04:53:17 +00:00
Xu Bo
70da4b5902 modify pre_scd thread and add phy_tx and rf_tx thread 2018-01-22 03:59:04 +00:00
Xu Bo
f59a509ec7 fix RRCConnectionRelease timer from 100ms to 200ms and clear MSG3_round after schedule_RA 2018-01-22 02:38:17 +00:00
Raymond Knopp
b350f8557e fixes for broken automatic indentation in MAC #1 2018-01-21 16:58:21 -08:00
Raymond Knopp
20c7af9a96 forgot to add a file 2018-01-21 22:21:30 +01:00
Rohit Gupta
046589e76d fixes after merge with develop. Partial UE/eNB separation in build to avoid problems with NFAPI in oaisim UE/RRU.
tested with simulator.
2018-01-21 22:15:45 +01:00
Cedric Roux
91dd7ed4b6 Merge remote-tracking branch 'origin/develop_integration_2018_w03' into develop
Summary of changes:
- Implementation of paging (see issue #255 in gitlab)
- Implementation of RRC RE-ESTABLISHMENT (see issue #256 in gitlab)
- Implementation of RRC CONNECTION RELEASE (see issue #257 in gitlab)

Some modifications with timers have been done.
Expect (and report) problems, thanks.

What has been tested:
- monolithic eNB 5 and 10MHz with one commercial UE. UDP and TCP
  traffic, uplink and downlink, with iperf (with a third party
  EPC, not openair-cn). TCP downlink traffic is not stable.
  Reason yet unknown. Will be fixed later.
2018-01-19 16:32:18 +01:00
Cedric Roux
3a867ac767 integration fix: add T trace 2018-01-19 15:51:38 +01:00
Massive
f0376d1b4f adding uhd network interface 2018-01-19 13:00:51 +01:00
Raymond Knopp
dd3dce8fcf small changes after merge with develop 2018-01-19 00:35:11 -08:00
Eurecom
dea858849e code cleanup 2018-01-17 16:30:50 +01:00
Cedric Roux
282f6a5077 Merge branch 'issue255_256_257_paging_reesta_release' into develop_integration_2018_w03
Conflicts:
	targets/RT/USER/lte-softmodem.c
2018-01-17 11:49:44 +01:00
Wang Tsu-Han
cfec3ffd56 adding EMULATE_RF into CMakelist 2018-01-16 15:50:57 +01:00
bruno mongazon
9c93307ab4 Fix #582, merge from develop 2018-01-16 14:31:23 +01:00
Raymond Knopp
d32cdd1f33 Merge remote-tracking branch 'origin/develop' into develop-nos1-fixes
Conflicts:
	openair1/SCHED/fapi_l1.c
	openair1/SCHED/phy_procedures_lte_eNb.c
	openair2/LAYER2/MAC/config.c
2018-01-16 03:55:37 -08:00
Raymond Knopp
5dc0d7ccea Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop
Conflicts:
	openair2/LAYER2/MAC/config.c
2018-01-16 03:46:24 -08:00
bruno mongazon
d100398658 Fix #582, double check all removed flags in cmake template files 2018-01-16 12:45:06 +01:00
bruno mongazon
8d2f0931a7 Fix #582, NB_ANTENNAS_TXRX removed 2018-01-16 12:35:56 +01:00
bruno mongazon
88d0b68c7b Fix #582, MIH_C_MEDIEVAL_EXTENSIONS removed 2018-01-16 12:24:58 +01:00
bruno mongazon
28497cae6f Fix #582, SPECTRA removed 2018-01-16 12:15:21 +01:00
bruno mongazon
339905d191 Fix #582, OPENAIR1, NO_OPENAIR1 removed 2018-01-16 12:11:33 +01:00
bruno mongazon
da7a4a19cd Fix #582, HARD_RT removed 2018-01-16 11:39:16 +01:00
bruno mongazon
ea3aff84e9 Fix #582, PUCCH removed 2018-01-16 11:33:45 +01:00
bruno mongazon
7943ea92d1 Fix #582, RANDOM_BF removed 2018-01-16 11:27:34 +01:00
bruno mongazon
f4d19c0d63 Fix #582, PERFECT_CE removed 2018-01-16 11:22:45 +01:00
bruno mongazon
f44064a221 Fix #582, NEW_FFT removed 2018-01-16 11:16:49 +01:00
bruno mongazon
2157727f5f Fix #582, PC_TARGET removed 2018-01-16 11:10:05 +01:00
bruno mongazon
dac7888f27 Fix #582, PC_DSP removed 2018-01-16 10:52:41 +01:00
bruno mongazon
f7653f90b0 Fix #582, PBS_SIM removed 2018-01-16 10:44:59 +01:00
bruno mongazon
71a6b5d0f0 Fix #582, ENABLE_FXP removed 2018-01-16 10:35:53 +01:00
bruno mongazon
bbaf588352 Fix #582, DISABLE_USE_NAS removed 2018-01-16 10:26:42 +01:00
bruno mongazon
d62fe071cb Fix #582, ENABLE_PGM_TRANSPORT removed, RRH related removed 2018-01-16 10:15:35 +01:00
Xu Bo
3e550e02ef revert modification of pre_scd and reduce of LC channel number 2018-01-16 16:41:18 +09:00
bruno mongazon
cf0e9175dd Fix #582, RTAI, RTAI_ENABLED, ENABLE_RTAI_CLOCK, RTAI_ISNT_POSIX, _RTAI_MATH_H, CELLULAR, TIMER_ONESHOT_MODE, EMOS, EMOS_CHANNEL, OAI_EMU, OPENAIR_EMU, PHY_ABSTRACTION, PHY_ABSTRACTION_UL removed 2018-01-15 18:47:07 +01:00
Cedric Roux
8489e40659 Merge remote-tracking branch 'origin/develop_integration_2018_w02' into develop
Summary of changes:
- integration of Cisco work on nFAPI.
  See commits 7757b9e7e7
  and 922b5b595a for details.
- support Ubuntu 17.04 and 17.10
- bugfix: DCI padding bits
  This bug made the system non-working because the DCIs for
  SIBs were wrong. See commit c5ca2bd862
  for details.
- fix issue 281: IQ record/playback explicit filename segv.
2018-01-15 17:04:56 +01:00
Cedric Roux
55641754d9 Merge remote-tracking branch 'origin/issue281_iq_filename' into develop_integration_2018_w02 2018-01-15 15:58:48 +01:00
Cedric Roux
c3ba7ba713 Merge remote-tracking branch 'origin/support-ubuntu17' into develop_integration_2018_w02 2018-01-15 15:45:47 +01:00
Cedric Roux
9c8b6e56f2 Merge remote-tracking branch 'origin/hotfix-dci-clear-padding-bits' into develop_integration_2018_w02 2018-01-15 15:45:18 +01:00
Cedric Roux
cb250cba35 Merge remote-tracking branch 'origin/nfapi-integration' into develop_integration_2018_w02 2018-01-15 15:44:41 +01:00
Cedric Roux
922b5b595a Fix NFAPI integration
This commit fixes issues introduced by the previous commit.

Summary of work:
- cleanup:
  - fix LOG_XX to be less verbose
  - fix cmake_targets/CMakeLists.txt
  - fix oaienv
  - remove dead code
- bug fixes:
  - in openair1/SCHED/fapi_l1.c we had:
      eNB->pdcch_vars[subframe&1].num_dci           = number_dci;
    should be:
      eNB->pdcch_vars[subframe&1].num_dci           = 0;
    This bug let the PHY send more DCIs than what should have been
    sent because num_dci is incremented later on in the code.
    This fix may be a problem for fapi mode, to be checked.
  - add new T VCD traces
  - revert openair1/PHY/TOOLS/file_output.c to 'develop' version
  - remove thread_id in logRecord/logRecord_mt
  - revert (and adapt) configuration files
  - be careful when doing frame++, we need to % 1024
  - revert target_rx_power in openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
- NFAPI:
  - the open-nFAPI code has been included in the repository. See nfapi/README.
    Maybe we should "git clone" the Cisco repository instead. We have to be
    careful of availability though.

What has been tested:
- monolithic eNB FDD 5/10MHz with one UE, iperf UDP/TCP uplink/downlink

Anything else may fail to work, especially the FAPI mode, which has not
been tested at all.
2018-01-15 15:24:50 +01:00
Cedric Roux
7757b9e7e7 import NFAPI work from David Price from Cisco (non-working commit, do not use it)
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.
2018-01-15 11:32:30 +01:00
Rohit Gupta
39d33dc4df Merge branch 'develop-nos1-fixes' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop-nos1-fixes 2018-01-14 08:56:21 +01:00
Rohit Gupta
3120f16610 changes for noS1 IP addressing (UE side) 2018-01-14 08:55:46 +01:00
Rohit Gupta
8b5a963346 changes for noS1 IP addressing 2018-01-14 08:54:51 +01:00
bruno mongazon
afcc9aabd8 Fix #582, USER_MODE flag removed 2018-01-11 16:50:50 +01:00
bruno mongazon
1823ce9525 Fix #281 2018-01-11 10:37:17 +01:00
Younes
5a202db54d removal of assertions which failed for TDD 2018-01-10 21:10:35 +01:00
Raymond Knopp
380222eefd timestamp handling for IF4p5, attenuation parameters 2018-01-10 21:07:45 +01:00
Guy De Souza
9d03290858 rx_dump_frame ue_mode fix 2018-01-09 22:15:15 +01:00
Eurecom
67c37417b6 timing measure for full coding process 2018-01-08 16:31:13 +01:00
Raymond Knopp
b74bab25b5 Merge remote-tracking branch 'origin/develop' into develop-nos1-fixes 2018-01-07 23:57:17 -08:00
Eurecom
d1f7346c08 bug fix for missing wait sync 2018-01-05 17:02:49 +01:00
Cedric Roux
ec56a416b7 Add support for Ubuntu 17.04 and 17.10.
Basically, build_helper has been adapted so that:
  ./buil_oai -I -w USRP
works for Ubuntu 17.04 and 17.10.

Concerning those systems:
- compilation with "--eNB --UE -w USRP" works
- the enb softmodem runs on 17.04 (not tested on 17.10)
- nothing else has been tested.

Users should report any problem.
2018-01-04 16:35:09 +01:00
Wang Tsu-Han
cabb4561d5 seperating rx tx process and fixixng coding threads on different cores 2018-01-03 12:01:48 +01:00
Cedric Roux
c5ca2bd862 hotfix: clear DCI padding bits
The problem is the following (as reported by an user):

  "one UE is attached to OAI system. UE is near the antenna. Try to detach
  the UE and attach again. Repeat this procedure for 5-6 times. OAI system
  does not work and any the UE can not attach to this system. I use TEMS
  software and I can see MIB signaling on this UE but UE can not decode SIB1
  and SIB2."

What happens is that the DCI for SIB1 and SIB2 is not cleared before
use. That is the bits in the 'padding' field keep the values that were
set before. If the structure has been used to transmit other DCIs
(eg. for UEs) in the past, it may be reused with some of those bits set
to 1. When receiving this DCI, the UE won't accept it because it
gets some bits at 1 where it expects them to be 0.

The short-term/quick solution is to clear the 'padding' field.
A better solution would be to rewrite this part of the code,
which is way too complicated for what it does. But this takes
too much time.

In dci.h the field 'dummy' of some structures was renamed to 'padding'.
The fields 'padding32' and 'padding64' were also renamed to 'padding'
for consistency.

Some structures (DCI2B_1_5MHz_TDD, DCI2B_10MHz_FDD, DCI2D_1_5MHz_FDD,
DCI2D_5MHz_FDD, DCI2D_10MHz_FDD) had a 'padding' field at the end, which
was renamed to 'padding0'. I don't know if this field should be here at all.
To me this field looks very suspicious. When we test DCIs 2B and 2D we
should be careful.
2018-01-03 11:19:54 +01:00
Raymond Knopp
b6b86292d0 small changes in tracing 2018-01-02 08:39:08 -08:00
Wolfgang A. Mozart
55af824cc0 some extra logging 2018-01-02 08:06:05 +01:00
Raymond Knopp
840d37edf3 Merge branch 'oaisim_config_module_fix' into develop-nos1-fixes
Includes the following updates:
1. oaisim/lte-softmodem in noS1
2. UE fixes for oaisim
3. IF4p5 fixes (doesn't work on develop)
4. UE fixes for DCI handling (corrects problem introduced in develop)
Conflicts:
	cmake_targets/CMakeLists.txt
	targets/SIMU/USER/oaisim_functions.c
2018-01-01 08:34:02 -08:00
Raymond Knopp
02d18cc583 noS1 will compile and run correctly on develop, also for oaisim/RRU 2017-12-28 17:30:00 -08:00
shahab SHARIAT BAGHERI
a09728addb Warning decreasing 2017-12-24 10:17:18 +01:00
shahab SHARIAT BAGHERI
b1acde2007 Neighbouring cell RRC measurement + decrease warning 2017-12-21 13:55:37 +01:00
navid nikaein
63ba3f9543 Better slice management in FlexRAN UL/DL scheduler 2017-12-15 18:13:18 +01:00
Navid Nikaein
b049f0c820 Ue stats bugfix for dynamic reconfiguration 2017-12-15 18:10:12 +01:00
shahab SHARIAT BAGHERI
ccac021050 Ue stats bugfix for dynamic reconfiguration 2017-12-14 18:34:41 +01:00
Wang Tsu-Han
409eadc937 measuring time for coding worker 2017-12-14 17:17:31 +01:00
Wang Tsu-Han
7c27e09fcd Bug fix for coding worker thread 2017-12-14 15:38:02 +01:00
Wang Tsu-Han
22e7b1e6da extending dlsch_coding into four thread 2017-12-14 15:29:05 +01:00
Navid Nikaein
d35f52a228 Add observation window to the PDCP stats 2017-12-14 15:15:00 +01:00
Robert Schmidt
359e1528dd refactor: FlexRAN reads eNB configuration automatically 2017-12-14 13:06:05 +01:00
Robert Schmidt
f39dd5df18 bugfix: handle variable start_eNB in restart 2017-12-14 13:06:05 +01:00
Robert Schmidt
fea641220b Start FlexRAN agent directly, lock with mutex&condition
- lock with mutexes
- don't start ENB_APP task, but Agent directly and wait in case of
  reconfiguration
2017-12-14 13:06:05 +01:00
Robert Schmidt
022916305c Fix multiple compilation warnings 2017-12-14 13:06:05 +01:00
Robert Schmidt
730ffc76f4 stop_L1L2(): no sleep, better oai_exit handling 2017-12-14 13:06:05 +01:00
Robert Schmidt
eb2dfa1b70 kill_eNB_proc(): join all PHY threads 2017-12-14 13:06:05 +01:00
Robert Schmidt
c619f6eff7 Feature: Provide restart for lte-softmodem
- {restart,stop}_L1L2() in lte-softmodem.c
- add function start_phy_rrc() in enb_app.{c,h}, accessible from outside
- will be used to restart PHY and RRC when lte-softmodem is restarted

use only one FlexRAN wait function
2017-12-14 13:06:05 +01:00
Robert Schmidt
e88a3cdf46 bugfix ITTI: clean up in itti_exit_task()
- when exiting task, the task is set as "not configured"
- this permits to start a task again
2017-12-14 13:06:05 +01:00
Robert Schmidt
ea65ddad2c fill PHY_vars_eNB_g in own function 2017-12-14 13:06:05 +01:00
Robert Schmidt
1aa5d2930a Handle TERMINATE_MESSAGE in TASK_MAC 2017-12-14 13:06:04 +01:00
Robert Schmidt
c313dff2ad better logging, remove warnings 2017-12-14 13:06:04 +01:00
Robert Schmidt
c62be7a101 Uniform messages of exiting threads 2017-12-14 13:06:04 +01:00
Navid Nikaein
612ab055d7 Add control logic to reconfigure and start eNB 2017-12-14 13:05:34 +01:00
Robert Schmidt
6e6a462dc4 check whether RRC instance is present in RAN API 2017-12-14 12:49:25 +01:00
Navid Nikaein
49ea474807 Fix the compilation issues 2017-12-13 17:00:33 +01:00
Navid Nikaein
33696a4e93 *Update RRC RSRP/RSRQ measurement reports for multiple UEs, and add the corresponding RAN APIs
*Fix the issue with the PDCP UE ID/RNTI management
2017-12-12 20:24:29 +01:00
Wang Tsu-Han
79b11d6b93 Bug fix for ulsch_decoding 2017-12-12 16:23:38 +01:00
shahab SHARIAT BAGHERI
b74c668ddb bug zero division for pdcp stats 2017-12-12 15:57:24 +01:00
Wang Tsu-Han
d82a0d900d adding ulsch_decoding multiy threading 2017-12-12 15:24:00 +01:00
Navid Nikaein
b7a1661855 Better management of frame counter and stats in PDCP 2017-12-12 11:57:24 +01:00
Navid Nikaein
38627c85d0 Minor fix in the PDCP stats update 2017-12-12 10:14:30 +01:00
Navid Nikaein
9601ea66c5 Update PDCP stats 2017-12-11 16:46:22 +01:00
Wang Tsu-Han
7ac9d2ab81 Deadline scheduling for 40MHz 2017-12-11 14:27:26 +01:00
shahab
acd996d2eb ul proto msg 2017-12-10 18:23:21 +01:00
shahab SHARIAT BAGHERI
cd74f4d61b Message balance 2017-12-10 16:19:27 +01:00
shahab
5e20c970e9 warning decreasing 2017-12-09 17:41:06 +01:00
Navid Nikaein
dc9cada6c2 Add PDCP stats and update agent and RAN APIs 2017-12-08 18:05:42 +01:00
Raymond Knopp
1a5a029768 minor changes to config.c 2017-12-02 15:15:30 -08:00
Wang Tsu-Han
d174e15ac8 Measure timing wait for FEP and FEPTX 2017-11-27 11:27:10 +01:00
Wang Tsu-Han
22911600a8 Adding measurment for waking up the thread 2017-11-24 14:31:19 +01:00
Wang Tsu-Han
6b99b1b1e4 emulated RF using seperate thread condition signal every time period 2017-11-21 14:41:36 +01:00
Navid Nikaein
e996f5d0f5 Add new RAN APIs form SMA app based on the initial eNb config file 2017-11-17 16:53:58 +01:00
Wang Tsu-Han
8950c6ddd3 Bug fix for UDP loading 2017-11-17 16:42:17 +01:00
Wang Tsu-Han
69e90fa6cb Creating Emulated FH 2017-11-17 11:11:24 +01:00
Wang Tsu-Han
81177a8a73 making the numerology into a executional option 2017-11-10 15:42:50 +01:00
Wang Tsu-Han
29bc996641 Merge branch 'RU-RAU-split-parallel' of https://gitlab.eurecom.fr/oai/openairinterface5g into RU-RAU-split-parallel 2017-11-10 14:26:33 +01:00
Wang Tsu-Han
3f6c5430a2 changing back the rxtx thread and add another worker thread for coding 2017-11-10 14:23:18 +01:00
Wolfgang A. Mozart
8d5dc07a15 making noS1 mode compile 2017-11-10 09:04:10 +01:00
Wang Tsu-Han
c8420152de seperate processing thread into RX thread and TX thread 2017-11-03 14:57:45 +01:00
Wang Tsu-Han
caef8c6e56 fixing the sleep delay problem for tx 2017-11-03 12:27:39 +01:00
Wang Tsu-Han
c84ddacd00 Seperate Front haul RX TX and process into three threads 2017-11-02 16:37:03 +01:00
Florian Kaltenberger
ecee5edcce enabling new modulation 2017-10-27 16:16:05 +02:00
Wang Tsu-Han
ccba43e2f0 adding phy-test to config. fixing power allocation for phy-test. 2017-10-27 15:47:09 +02:00
Wang Tsu-Han
85ce7de775 added thread for TX streaming 2017-10-27 10:33:30 +02:00
Florian Kaltenberger
2466f16ec3 adding flag for phy-test 2017-10-23 15:02:08 +02:00
Florian Kaltenberger
5487c709b1 adding some missing parameters 2017-10-23 15:02:08 +02:00
Florian Kaltenberger
2dc1a602c6 first phy-test version to be tested 2017-10-23 15:02:07 +02:00
Wang Tsu-Han
23c54b8db4 added parallelization of fep and encoding
added numerology paramter
2017-10-23 14:47:26 +02:00
Xenofon Foukas
c8c4b42317 Merge remote-tracking branch 'origin/develop' into feature-68-enb-agent 2017-08-22 14:44:12 +03:00
shahab SHARIAT BAGHERI
c3adbb9545 warnings 2017-08-09 22:46:42 +02:00
shahab SHARIAT BAGHERI
4d3689a56c warning reducing 2017-08-09 13:42:50 +02:00
shahab SHARIAT BAGHERI
0b3e617089 Merge branch 'feature-68-enb-agent' of https://gitlab.eurecom.fr/oai/openairinterface5g into feature-68-enb-agent 2017-08-05 00:21:56 +02:00
Anta Huang
1e857d5ba5 Update the naming of cell config parameters 2017-08-04 18:19:38 +02:00
Anta Huang
863e9404fc Add additional cell config info to flexran API and message 2017-08-04 17:42:32 +02:00
shahab SHARIATBAGHERI
3cc3762ed9 carrier index 2017-08-04 16:27:15 +02:00
shahab SHARIATBAGHERI
d12f55d2ed add operating downlink frequency 2017-08-04 16:22:57 +02:00
shahab SHARIATBAGHERI
8e5b174047 merge to 68 2017-08-04 16:02:17 +02:00
shahab SHARIATBAGHERI
8de28502e1 Merge branch 'feature-68-uplink' into feature-68-enb-agent 2017-08-04 14:49:25 +02:00
shahab SHARIATBAGHERI
9e7e57de74 DL Fixed Bug get TBS 2017-07-25 19:12:42 +02:00
Anta Huang
e51d8d3fd7 Add the slice_maxmcs_uplink to flexran agent ulsch 2017-07-20 13:24:16 +02:00
Xenofon Foukas
e2ac251cc6 Merge remote-tracking branch 'origin/develop' into feature-68-enb-agent 2017-07-14 12:53:54 +03:00
Xenofon Foukas
f7e376ed5f Added support of FlexRAN agent compilation for oaisim with S1 enabled 2017-07-14 12:52:51 +03:00
shahab SHARIAT BAGHERI
4b696e9341 Merge branch 'feature-68-uplink' into feature-68-enb-agent 2017-06-24 23:22:13 +02:00
shahab SHARIATBAGHERI
1ecdcba33a uplink VSF 2017-06-08 18:36:25 +02:00
Xenofon Foukas
7a86fd3216 Merge remote-tracking branch 'origin/develop' into feature-68-enb-agent
Conflicts:
	openair2/RRC/LITE/rrc_eNB.c
2017-05-31 10:42:40 +00:00
shahab SHARIAT BAGHERI
8458c8fcf8 uplink mac parser 2017-05-23 23:46:31 +02:00
shahab SHARIATBAGHERI
2e2b07ef9e push update load 2017-05-22 19:19:28 +02:00
shahab SHARIATBAGHERI
042a16d1f6 Fix percentage 2017-05-18 17:26:08 +02:00
shahab SHARIATBAGHERI
5c7377e1c0 Fix bug header 2017-05-18 17:21:07 +02:00
shahab SHARIATBAGHERI
5de045b802 Uplink slices 2017-05-18 15:25:10 +02:00
shahab SHARIATBAGHERI
689eae92ee Fix Bug dl scheduler 2017-05-10 13:11:09 +02:00
shahab SHARIATBAGHERI
eee0c1b84b uplink percentage 2017-04-27 09:29:00 +02:00
shahab SHARIATBAGHERI
b9b45c4ac0 uplink primitives 2017-04-26 19:15:39 +02:00
Xenofon Foukas
897c8da299 Fixed size of arrays for RSRP and RSRQ measurements 2017-04-26 07:50:04 +00:00
Xenofon Foukas
600c64a7f5 Merge remote-tracking branch 'origin/develop' into feature-68-enb-agent 2017-04-26 07:35:39 +00:00
shahab SHARIATBAGHERI
57129bc0af Uplink Slicing 2017-04-25 18:19:47 +02:00
shahab SHARIATBAGHERI
fdac4d178b uplink harq api 2017-04-22 12:43:04 +02:00
shahab SHARIATBAGHERI
5ce9858d63 uplink scheduling 2017-04-21 13:22:20 +02:00
shahab SHARIATBAGHERI
169f33464e Uplink Agent Mac function 2017-04-18 18:13:42 +02:00
Xenofon Foukas
7df4a7813f Merge remote-tracking branch 'origin/feature-68-enb-agent' into feature-68-uplink 2017-04-12 15:43:19 +03:00
Xenofon Foukas
3bd3bedcd2 Fixed ue state change notification functionality for deactivation of UEs 2017-04-11 13:25:08 +00:00
Xenofon Foukas
e3df5d3de5 Fixed warnings and bugs 2017-04-11 11:46:34 +00:00
Xenofon Foukas
e36c5b6024 Fixed compilation errors when compiling without agent enabled 2017-04-11 09:28:22 +00:00
Xenofon Foukas
1603d3674d Merge remote-tracking branch 'origin/develop' into feature-68-RRC
Conflicts:
	openair2/ENB_APP/flexran_agent_common.c
2017-04-11 09:12:04 +00:00
Xenofon Foukas
14fb9e2ba2 Changed default scheduler to local 2017-04-11 08:58:20 +00:00
shahab SHARIATBAGHERI
77c4d3742f Wanring Preventing remote-sch 2017-04-07 11:28:51 +02:00
shahab SHARIATBAGHERI
714ad4d774 Warning Decreasing 2017-04-05 16:48:21 +02:00
shahab SHARIATBAGHERI
4cfa87b6b3 downlink throughput enhancement 2017-04-05 10:38:36 +02:00
Xenofon Foukas
a08178fa0e Made modifications to UL scheduling messages 2017-04-04 21:11:16 +00:00
shahab SHARIATBAGHERI
1a516df2db proto uplink mac 2017-03-31 16:40:26 +02:00
shahab SHARIATBAGHERI
0b83862fc2 uplink proto 2017-03-28 18:28:30 +02:00
781 changed files with 150906 additions and 84109 deletions

View File

@@ -0,0 +1,106 @@
// Comments
pipeline {
agent {
label 'bellatrix'
}
options {
disableConcurrentBuilds()
timestamps()
gitLabConnection('OAI GitLab')
//gitlabBuilds(builds: ["Build", "Test"])
gitlabBuilds(builds: ["Local Build"])
}
stages {
stage ("Verify Guidelines") {
steps {
echo "Git URL is ${GIT_URL}"
echo "GitLab Act is ${env.gitlabActionType}"
script {
if ("MERGE".equals(env.gitlabActionType)) {
// GitLab-Jenkins plugin integration is lacking to perform the merge by itself
// Doing it manually --> it may have merge conflicts
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
// Running astyle options on the list of modified files by the merge request
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
sh "./ci-scripts/checkCodingFormattingRules.sh --src-branch ${env.gitlabSourceBranch} --target-branch ${env.gitlabTargetBranch}"
def res=readFile('./oai_rules_result.txt').trim();
if ("0".equals(res)) {
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): All Changed files in Merge Request follow OAI Formatting Rules"
addGitLabMRComment comment: message
} else {
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Some Changed files in Merge Request DO NOT follow OAI Formatting Rules"
addGitLabMRComment comment: message
}
} else {
echo "Git Branch is ${GIT_BRANCH}"
echo "Git Commit is ${GIT_COMMIT}"
// Running astyle options on all C/H files in the repository
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
sh "./ci-scripts/checkCodingFormattingRules.sh"
}
}
}
}
stage ("Local Build") {
steps {
gitlabCommitStatus(name: "Local Build") {
sh "./ci-scripts/buildLocally.sh --workspace $WORKSPACE"
}
}
post {
always {
script {
if(fileExists('archives/local_build_logs.zip')) {
archiveArtifacts artifacts: 'archives/local_build_logs.zip'
}
if ("MERGE".equals(env.gitlabActionType)) {
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
} else {
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
}
if(fileExists('build_results.html')) {
archiveArtifacts artifacts: 'build_results.html'
}
}
}
}
}
}
post {
always {
script {
echo "End of script"
}
}
success {
script {
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): passed (" + BUILD_URL + ")"
if ("MERGE".equals(env.gitlabActionType)) {
echo "This is a MERGE event"
addGitLabMRComment comment: message
def message2 = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): passed (" + BUILD_URL + ") -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")"
slackSend channel: 'ci-enb', color: 'good', message: message2
} else {
slackSend channel: 'ci-enb', color: 'good', message: message
}
}
}
failure {
script {
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): failed (" + BUILD_URL + ")"
if ("MERGE".equals(env.gitlabActionType)) {
echo "This is a MERGE event"
addGitLabMRComment comment: message
def message2 = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): failed (" + BUILD_URL + ") -- MergeRequest #" + env.gitlabMergeRequestIid + " (" + env.gitlabMergeRequestTitle + ")"
slackSend channel: 'ci-enb', color: 'danger', message: message2
} else {
slackSend channel: 'ci-enb', color: 'danger', message: message
}
}
}
}
}

View File

@@ -0,0 +1,20 @@
# OAI is using a style that is similar to the Google style
--style=google
# long options can be written without the preceding '--'
# Convert tabs to spaces
convert-tabs
# Indentation is 2 spaces
indent=spaces=2
# Indent 'switch' blocks so that the 'case X:' statements are indented in the switch block.
indent-switches
# Indent C++ comments beginning in column one.
indent-col1-comments
# Pad empty lines around header blocks
break-blocks
delete-empty-lines
# Attach a pointer or reference operator (*, &, or ^) to the variable name (right)
align-pointer=name
# The code line length is 200 characters/columns
max-code-length=200
break-after-logical
lineend=linux

153
ci-scripts/buildLocally.sh Executable file
View File

@@ -0,0 +1,153 @@
#!/bin/bash
function usage {
echo "OAI Local Build Check script"
echo " Original Author: Raphael Defosseux"
echo ""
echo "Usage:"
echo "------"
echo " buildLocally.sh [OPTIONS]"
echo ""
echo "Options:"
echo "--------"
echo " --workspace #### OR -ws ####"
echo " Specify the workspace"
echo ""
echo " --help OR -h"
echo " Print this help message."
echo ""
}
if [ $# -ne 2 ] && [ $# -ne 1 ]
then
echo "Syntax Error: not the correct number of arguments"
echo ""
usage
exit 1
fi
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-h|--help)
shift
usage
exit 0
;;
-ws|--workspace)
JENKINS_WKSP="$2"
shift
shift
;;
*)
echo "Syntax Error: unknown option: $key"
echo ""
usage
exit 1
esac
done
cd $JENKINS_WKSP
STATUS=0
############################################################
# Creating a tmp folder to store results and artifacts
############################################################
if [ ! -d $JENKINS_WKSP/archives ]
then
mkdir $JENKINS_WKSP/archives
fi
source oaienv
cd $JENKINS_WKSP/cmake_targets
############################################################
# Building eNb with USRP option
############################################################
ARCHIVES_LOC=$JENKINS_WKSP/archives/enb_usrp
if [ ! -d $ARCHIVES_LOC ]
then
mkdir $ARCHIVES_LOC
fi
./build_oai --eNB -w USRP -c
# Generated log files:
if [ -f $JENKINS_WKSP/cmake_targets/log/lte-softmodem.Rel14.txt ]
then
LOCAL_STAT=`egrep -c "Built target lte-softmodem" $JENKINS_WKSP/cmake_targets/log/lte-softmodem.Rel14.txt`
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
cp $JENKINS_WKSP/cmake_targets/log/lte-softmodem.Rel14.txt $ARCHIVES_LOC
else
STATUS=-1
fi
if [ -f $JENKINS_WKSP/cmake_targets/log/params_libconfig.Rel14.txt ]
then
LOCAL_STAT=`egrep -c "Built target params_libconfig" $JENKINS_WKSP/cmake_targets/log/params_libconfig.Rel14.txt`
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
cp $JENKINS_WKSP/cmake_targets/log/params_libconfig.Rel14.txt $ARCHIVES_LOC
else
STATUS=-1
fi
if [ -f $JENKINS_WKSP/cmake_targets/log/coding.Rel14.txt ]
then
LOCAL_STAT=`egrep -c "Built target coding" $JENKINS_WKSP/cmake_targets/log/coding.Rel14.txt`
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
cp $JENKINS_WKSP/cmake_targets/log/coding.Rel14.txt $ARCHIVES_LOC
else
STATUS=-1
fi
if [ -f $JENKINS_WKSP/cmake_targets/log/oai_usrpdevif.Rel14.txt ]
then
LOCAL_STAT=`egrep -c "Built target oai_usrpdevif" $JENKINS_WKSP/cmake_targets/log/oai_usrpdevif.Rel14.txt`
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
cp $JENKINS_WKSP/cmake_targets/log/oai_usrpdevif.Rel14.txt $ARCHIVES_LOC
else
STATUS=-1
fi
############################################################
# Building basic simulator
############################################################
ARCHIVES_LOC=$JENKINS_WKSP/archives/basic_sim
if [ ! -d $ARCHIVES_LOC ]
then
mkdir $ARCHIVES_LOC
fi
cd $JENKINS_WKSP/cmake_targets
./build_oai --basic-simulator -c
# Generated log files:
if [ -f $JENKINS_WKSP/cmake_targets/log/basic_simulator_enb.txt ]
then
LOCAL_STAT=`egrep -c "Built target lte-softmodem" $JENKINS_WKSP/cmake_targets/log/basic_simulator_enb.txt`
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
cp $JENKINS_WKSP/cmake_targets/log/basic_simulator_enb.txt $ARCHIVES_LOC
else
STATUS=-1
fi
if [ -f $JENKINS_WKSP/cmake_targets/log/basic_simulator_ue.txt ]
then
LOCAL_STAT=`egrep -c "Built target lte-uesoftmodem" $JENKINS_WKSP/cmake_targets/log/basic_simulator_ue.txt`
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
cp $JENKINS_WKSP/cmake_targets/log/basic_simulator_ue.txt $ARCHIVES_LOC
else
STATUS=-1
fi
if [ -f $JENKINS_WKSP/cmake_targets/log/conf2uedata.Rel14.txt ]
then
LOCAL_STAT=`egrep -c "Built target conf2uedata" $JENKINS_WKSP/cmake_targets/log/conf2uedata.Rel14.txt`
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
cp $JENKINS_WKSP/cmake_targets/log/conf2uedata.Rel14.txt $ARCHIVES_LOC
else
STATUS=-1
fi
############################################################
# Creating a zip for Jenkins archiving
############################################################
cd $JENKINS_WKSP/archives/
zip -r local_build_logs.zip basic_sim enb_usrp
exit $STATUS

View File

@@ -0,0 +1,121 @@
#!/bin/bash
function usage {
echo "OAI Coding / Formatting Guideline Check script"
echo " Original Author: Raphael Defosseux"
echo ""
echo " Requirement: astyle shall be installed"
echo ""
echo " By default (no options) the complete repository will be checked"
echo " In case of merge request, provided source and target branch,"
echo " the script will check only the modified files"
echo ""
echo "Usage:"
echo "------"
echo " checkCodingFormattingRules.sh [OPTIONS]"
echo ""
echo "Options:"
echo "--------"
echo " --src-branch #### OR -sb ####"
echo " Specify the source branch of the merge request."
echo ""
echo " --target-branch #### OR -tb ####"
echo " Specify the target branch of the merge request (usually develop)."
echo ""
echo " --help OR -h"
echo " Print this help message."
echo ""
}
if [ $# -ne 4 ] && [ $# -ne 1 ] && [ $# -ne 0 ]
then
echo "Syntax Error: not the correct number of arguments"
echo ""
usage
exit 1
fi
if [ $# -eq 0 ]
then
echo " ---- Checking the whole repository ----"
echo ""
NB_FILES_TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt --recursive *.c *.h | grep -c Formatted `
echo "Nb Files that do NOT follow OAI rules: $NB_FILES_TO_FORMAT"
echo $NB_FILES_TO_FORMAT > ./oai_rules_result.txt
exit 0
fi
checker=0
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-h|--help)
shift
usage
exit 0
;;
-sb|--src-branch)
SOURCE_BRANCH="$2"
let "checker|=0x1"
shift
shift
;;
-tb|--target-branch)
TARGET_BRANCH="$2"
let "checker|=0x2"
shift
shift
;;
*)
echo "Syntax Error: unknown option: $key"
echo ""
usage
exit 1
esac
done
if [ $checker -ne 3 ]
then
echo "Source Branch is : $SOURCE_BRANCH"
echo "Target Branch is : $TARGET_BRANCH"
echo ""
echo "Syntax Error: missing option"
echo ""
usage
exit 1
fi
# Merge request scenario
MERGE_COMMMIT=`git log -n1 | grep commit | sed -e "s@commit @@"`
TARGET_INIT_COMMIT=`cat .git/refs/remotes/origin/$TARGET_BRANCH`
echo " ---- Checking the modified files by the merge request ----"
echo ""
echo "Source Branch is : $SOURCE_BRANCH"
echo "Target Branch is : $TARGET_BRANCH"
echo "Merged Commit is : $MERGE_COMMMIT"
echo "Target Init is : $TARGET_INIT_COMMIT"
# Retrieve the list of modified files since the latest develop commit
MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq`
NB_TO_FORMAT=0
for FULLFILE in $MODIFIED_FILES
do
echo $FULLFILE
filename=$(basename -- "$FULLFILE")
EXT="${filename##*.}"
if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ]
then
TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt $FULLFILE | grep -c Formatted `
NB_TO_FORMAT=$((NB_TO_FORMAT + TO_FORMAT))
fi
done
echo "Nb Files that do NOT follow OAI rules: $NB_TO_FORMAT"
echo $NB_TO_FORMAT > ./oai_rules_result.txt
exit 0

109
ci-scripts/doGitLabMerge.sh Executable file
View File

@@ -0,0 +1,109 @@
#!/bin/bash
function usage {
echo "OAI GitLab merge request applying script"
echo " Original Author: Raphael Defosseux"
echo ""
echo "Usage:"
echo "------"
echo ""
echo " doGitLabMerge.sh [OPTIONS] [MANDATORY_OPTIONS]"
echo ""
echo "Mandatory Options:"
echo "------------------"
echo ""
echo " --src-branch #### OR -sb ####"
echo " Specify the source branch of the merge request."
echo ""
echo " --src-commit #### OR -sc ####"
echo " Specify the source commit ID (SHA-1) of the merge request."
echo ""
echo " --target-branch #### OR -tb ####"
echo " Specify the target branch of the merge request (usually develop)."
echo ""
echo " --target-commit #### OR -tc ####"
echo " Specify the target commit ID (SHA-1) of the merge request."
echo ""
echo "Options:"
echo "--------"
echo " --help OR -h"
echo " Print this help message."
echo ""
}
if [ $# -ne 8 ] && [ $# -ne 1 ]
then
echo "Syntax Error: not the correct number of arguments"
echo ""
usage
exit 1
fi
checker=0
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-h|--help)
shift
usage
exit 0
;;
-sb|--src-branch)
SOURCE_BRANCH="$2"
let "checker|=0x1"
shift
shift
;;
-sc|--src-commit)
SOURCE_COMMIT_ID="$2"
let "checker|=0x2"
shift
shift
;;
-tb|--target-branch)
TARGET_BRANCH="$2"
let "checker|=0x4"
shift
shift
;;
-tc|--target-commit)
TARGET_COMMIT_ID="$2"
let "checker|=0x8"
shift
shift
;;
*)
echo "Syntax Error: unknown option: $key"
echo ""
usage
exit 1
esac
done
echo "Source Branch is : $SOURCE_BRANCH"
echo "Source Commit ID is : $SOURCE_COMMIT_ID"
echo "Target Branch is : $TARGET_BRANCH"
echo "Target Commit ID is : $TARGET_COMMIT_ID"
if [ $checker -ne 15 ]
then
echo ""
echo "Syntax Error: missing option"
echo ""
usage
exit 1
fi
git config user.email "jenkins@openairinterface.org"
git config user.name "OAI Jenkins"
git checkout -f $SOURCE_COMMIT_ID
git merge --ff $TARGET_COMMIT_ID -m "Temporary merge for CI"
exit 0

535
ci-scripts/reportBuildLocally.sh Executable file
View File

@@ -0,0 +1,535 @@
#!/bin/bash
function usage {
echo "OAI Local Build Report script"
echo " Original Author: Raphael Defosseux"
echo ""
echo "Usage:"
echo "------"
echo ""
echo " reportBuildLocally.sh [OPTIONS]"
echo ""
echo "Options:"
echo "--------"
echo ""
echo " --help OR -h"
echo " Print this help message."
echo ""
echo "Job Options:"
echo "------------"
echo ""
echo " --git-url #### OR -gu ####"
echo " Specify the URL of the GIT Repository."
echo ""
echo " --job-name #### OR -jn ####"
echo " Specify the name of the Jenkins job."
echo ""
echo " --build-id #### OR -id ####"
echo " Specify the build ID of the Jenkins job."
echo ""
echo " --trigger merge-request OR -mr"
echo " --trigger push OR -pu"
echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event."
echo ""
echo "Merge-Request Options:"
echo "----------------------"
echo ""
echo " --src-branch #### OR -sb ####"
echo " Specify the source branch of the merge request."
echo ""
echo " --src-commit #### OR -sc ####"
echo " Specify the source commit ID (SHA-1) of the merge request."
echo ""
echo " --target-branch #### OR -tb ####"
echo " Specify the target branch of the merge request (usually develop)."
echo ""
echo " --target-commit #### OR -tc ####"
echo " Specify the target commit ID (SHA-1) of the merge request."
echo ""
echo "Push Options:"
echo "----------------------"
echo ""
echo " --branch #### OR -br ####"
echo " Specify the branch of the push event."
echo ""
echo " --commit #### OR -co ####"
echo " Specify the commit ID (SHA-1) of the push event."
echo ""
echo ""
}
function trigger_usage {
echo "OAI Local Build Report script"
echo " Original Author: Raphael Defosseux"
echo ""
echo " --trigger merge-request OR -mr"
echo " --trigger push OR -pu"
echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event."
echo ""
}
jb_checker=0
mr_checker=0
pu_checker=0
MR_TRIG=0
PU_TRIG=0
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-h|--help)
shift
usage
exit 0
;;
-gu|--git-url)
GIT_URL="$2"
let "jb_checker|=0x1"
shift
shift
;;
-jn|--job-name)
JOB_NAME="$2"
let "jb_checker|=0x2"
shift
shift
;;
-id|--build-id)
BUILD_ID="$2"
let "jb_checker|=0x4"
shift
shift
;;
--trigger)
TRIG="$2"
case $TRIG in
merge-request)
MR_TRIG=1
;;
push)
PU_TRIG=1
;;
*)
echo ""
echo "Syntax Error: Invalid Trigger option -> $TRIG"
echo ""
trigger_usage
exit
;;
esac
let "jb_checker|=0x8"
shift
shift
;;
-mr)
MR_TRIG=1
let "jb_checker|=0x8"
shift
;;
-pu)
PU_TRIG=1
let "jb_checker|=0x8"
shift
;;
-sb|--src-branch)
SOURCE_BRANCH="$2"
let "mr_checker|=0x1"
shift
shift
;;
-sc|--src-commit)
SOURCE_COMMIT_ID="$2"
let "mr_checker|=0x2"
shift
shift
;;
-tb|--target-branch)
TARGET_BRANCH="$2"
let "mr_checker|=0x4"
shift
shift
;;
-tc|--target-commit)
TARGET_COMMIT_ID="$2"
let "mr_checker|=0x8"
shift
shift
;;
-br|--branch)
SOURCE_BRANCH="$2"
let "pu_checker|=0x1"
shift
shift
;;
-co|--commit)
SOURCE_COMMIT_ID="$2"
let "pu_checker|=0x2"
shift
shift
;;
*)
echo "Syntax Error: unknown option: $key"
echo ""
usage
exit 1
;;
esac
done
if [ $jb_checker -ne 15 ]
then
echo ""
echo "Syntax Error: missing job information."
# TODO : list missing info
echo ""
exit 1
fi
if [ $PU_TRIG -eq 1 ] && [ $MR_TRIG -eq 1 ]
then
echo ""
echo "Syntax Error: trigger action incoherent."
echo ""
trigger_usage
exit 1
fi
if [ $PU_TRIG -eq 1 ]
then
if [ $pu_checker -ne 3 ]
then
echo ""
echo "Syntax Error: missing push information."
# TODO : list missing info
echo ""
exit 1
fi
fi
if [ $MR_TRIG -eq 1 ]
then
if [ $mr_checker -ne 15 ]
then
echo ""
echo "Syntax Error: missing merge-request information."
# TODO : list missing info
echo ""
exit 1
fi
fi
echo "<!DOCTYPE html>" > ./build_results.html
echo "<html class=\"no-js\" lang=\"en-US\">" >> ./build_results.html
echo "<head>" >> ./build_results.html
echo " <title>Build Results for $JOB_NAME job build #$BUILD_ID</title>" >> ./build_results.html
echo "</head>" >> ./build_results.html
echo "<body>" >> ./build_results.html
echo " <h1>Job Summary -- Job: $JOB_NAME -- Build-ID: $BUILD_ID</h1>" >> ./build_results.html
echo " <table border = \"1\">" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >GIT Repository</td>" >> ./build_results.html
echo " <td>$GIT_URL</td>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Job Trigger</td>" >> ./build_results.html
if [ $PU_TRIG -eq 1 ]; then echo " <td>Push Event</td>" >> ./build_results.html; fi
if [ $MR_TRIG -eq 1 ]; then echo " <td>Merge-Request</td>" >> ./build_results.html; fi
echo " </tr>" >> ./build_results.html
if [ $PU_TRIG -eq 1 ]
then
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Branch</td>" >> ./build_results.html
echo " <td>$SOURCE_BRANCH</td>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Commit ID</td>" >> ./build_results.html
echo " <td>$SOURCE_COMMIT_ID</td>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
fi
if [ $MR_TRIG -eq 1 ]
then
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Source Branch</td>" >> ./build_results.html
echo " <td>$SOURCE_BRANCH</td>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Source Commit ID</td>" >> ./build_results.html
echo " <td>$SOURCE_COMMIT_ID</td>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Target Branch</td>" >> ./build_results.html
echo " <td>$TARGET_BRANCH</td>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Target Commit ID</td>" >> ./build_results.html
echo " <td>$TARGET_COMMIT_ID</td>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
fi
echo " </table>" >> ./build_results.html
echo " <h2>Build Summary</h2>" >> ./build_results.html
if [ -f ./oai_rules_result.txt ]
then
echo " <h3>OAI Coding / Formatting Guidelines Check</h3>" >> ./build_results.html
echo " <table border = "1">" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Result:</td>" >> ./build_results.html
NB_FILES=`cat ./oai_rules_result.txt`
if [ $NB_FILES = "0" ]
then
if [ $PU_TRIG -eq 1 ]; then echo " <td bgcolor = \"green\">All files in repository follow OAI rules. </td>" >> ./build_results.html; fi
if [ $MR_TRIG -eq 1 ]; then echo " <td bgcolor = \"green\">All modified files in Merge-Request follow OAI rules.</td>" >> ./build_results.html; fi
else
if [ $PU_TRIG -eq 1 ]; then echo " <td bgcolor = \"orange\">$NB_FILES files in repository DO NOT follow OAI rules. </td>" >> ./build_results.html; fi
if [ $MR_TRIG -eq 1 ]; then echo " <td bgcolor = \"orange\">$NB_FILES modified files in Merge-Request DO NOT follow OAI rules.</td>" >> ./build_results.html; fi
fi
echo " </tr>" >> ./build_results.html
echo " </table>" >> ./build_results.html
fi
echo " <h3>OAI Build eNb -- USRP option</h3>" >> ./build_results.html
echo " <table border = "1">" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th>Element</th>" >> ./build_results.html
echo " <th>Status</th>" >> ./build_results.html
echo " <th>Nb Errors</th>" >> ./build_results.html
echo " <th>Nb Warnings</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >LTE SoftModem - Release 14</th>" >> ./build_results.html
if [ -f ./archives/enb_usrp/lte-softmodem.Rel14.txt ]
then
STATUS=`egrep -c "Built target lte-softmodem" ./archives/enb_usrp/lte-softmodem.Rel14.txt`
if [ $STATUS -eq 1 ]
then
echo " <td bgcolor = \"green\" >OK</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >KO</th>" >> ./build_results.html
fi
STATUS=`egrep -c "error:" ./archives/enb_usrp/lte-softmodem.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >$STATUS</th>" >> ./build_results.html
fi
STATUS=`egrep -c "warning:" ./archives/enb_usrp/lte-softmodem.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"orange\" >$STATUS</th>" >> ./build_results.html
fi
else
echo " <td bgcolor = \"lightgray\" >Unknown</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
fi
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Coding - Release 14</th>" >> ./build_results.html
if [ -f ./archives/enb_usrp/coding.Rel14.txt ]
then
STATUS=`egrep -c "Built target coding" ./archives/enb_usrp/coding.Rel14.txt`
if [ $STATUS -eq 1 ]
then
echo " <td bgcolor = \"green\" >OK</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >KO</th>" >> ./build_results.html
fi
STATUS=`egrep -c "error:" ./archives/enb_usrp/coding.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >$STATUS</th>" >> ./build_results.html
fi
STATUS=`egrep -c "warning:" ./archives/enb_usrp/coding.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"orange\" >$STATUS</th>" >> ./build_results.html
fi
else
echo " <td bgcolor = \"lightgray\" >Unknown</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
fi
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >OAI USRP device if - Release 14</th>" >> ./build_results.html
if [ -f ./archives/enb_usrp/oai_usrpdevif.Rel14.txt ]
then
STATUS=`egrep -c "Built target oai_usrpdevif" ./archives/enb_usrp/oai_usrpdevif.Rel14.txt`
if [ $STATUS -eq 1 ]
then
echo " <td bgcolor = \"green\" >OK</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >KO</th>" >> ./build_results.html
fi
STATUS=`egrep -c "error:" ./archives/enb_usrp/oai_usrpdevif.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >$STATUS</th>" >> ./build_results.html
fi
STATUS=`egrep -c "warning:" ./archives/enb_usrp/oai_usrpdevif.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"orange\" >$STATUS</th>" >> ./build_results.html
fi
else
echo " <td bgcolor = \"lightgray\" >Unknown</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
fi
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Parameters Lib Config - Release 14</th>" >> ./build_results.html
if [ -f ./archives/enb_usrp/params_libconfig.Rel14.txt ]
then
STATUS=`egrep -c "Built target params_libconfig" ./archives/enb_usrp/params_libconfig.Rel14.txt`
if [ $STATUS -eq 1 ]
then
echo " <td bgcolor = \"green\" >OK</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >KO</th>" >> ./build_results.html
fi
STATUS=`egrep -c "error:" ./archives/enb_usrp/params_libconfig.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >$STATUS</th>" >> ./build_results.html
fi
STATUS=`egrep -c "warning:" ./archives/enb_usrp/params_libconfig.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"orange\" >$STATUS</th>" >> ./build_results.html
fi
else
echo " <td bgcolor = \"lightgray\" >Unknown</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
fi
echo " </tr>" >> ./build_results.html
echo " </table>" >> ./build_results.html
# conf2uedata.Rel14.txt
# archives/basic_sim
echo " <h3>OAI Build basic simulator option</h3>" >> ./build_results.html
echo " <table border = "1">" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <th>Element</th>" >> ./build_results.html
echo " <th>Status</th>" >> ./build_results.html
echo " <th>Nb Errors</th>" >> ./build_results.html
echo " <th>Nb Warnings</th>" >> ./build_results.html
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Basic Simulator eNb - Release 14</th>" >> ./build_results.html
if [ -f ./archives/basic_sim/basic_simulator_enb.txt ]
then
STATUS=`egrep -c "Built target lte-softmodem" ./archives/basic_sim/basic_simulator_enb.txt`
if [ $STATUS -eq 1 ]
then
echo " <td bgcolor = \"green\" >OK</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >KO</th>" >> ./build_results.html
fi
STATUS=`egrep -c "error:" ./archives/basic_sim/basic_simulator_enb.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >$STATUS</th>" >> ./build_results.html
fi
STATUS=`egrep -c "warning:" ./archives/basic_sim/basic_simulator_enb.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"orange\" >$STATUS</th>" >> ./build_results.html
fi
else
echo " <td bgcolor = \"lightgray\" >Unknown</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
fi
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Basic Simulator UE - Release 14</th>" >> ./build_results.html
if [ -f ./archives/basic_sim/basic_simulator_ue.txt ]
then
STATUS=`egrep -c "Built target lte-uesoftmodem" ./archives/basic_sim/basic_simulator_ue.txt`
if [ $STATUS -eq 1 ]
then
echo " <td bgcolor = \"green\" >OK</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >KO</th>" >> ./build_results.html
fi
STATUS=`egrep -c "error:" ./archives/basic_sim/basic_simulator_ue.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >$STATUS</th>" >> ./build_results.html
fi
STATUS=`egrep -c "warning:" ./archives/basic_sim/basic_simulator_ue.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"orange\" >$STATUS</th>" >> ./build_results.html
fi
else
echo " <td bgcolor = \"lightgray\" >Unknown</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
fi
echo " </tr>" >> ./build_results.html
echo " <tr>" >> ./build_results.html
echo " <td bgcolor = \"lightcyan\" >Conf 2 UE data - Release 14</th>" >> ./build_results.html
if [ -f ./archives/basic_sim/conf2uedata.Rel14.txt ]
then
STATUS=`egrep -c "Built target conf2uedata" ./archives/basic_sim/conf2uedata.Rel14.txt`
if [ $STATUS -eq 1 ]
then
echo " <td bgcolor = \"green\" >OK</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >KO</th>" >> ./build_results.html
fi
STATUS=`egrep -c "error:" ./archives/basic_sim/conf2uedata.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"red\" >$STATUS</th>" >> ./build_results.html
fi
STATUS=`egrep -c "warning:" ./archives/basic_sim/conf2uedata.Rel14.txt`
if [ $STATUS -eq 0 ]
then
echo " <td bgcolor = \"green\" >$STATUS</th>" >> ./build_results.html
else
echo " <td bgcolor = \"orange\" >$STATUS</th>" >> ./build_results.html
fi
else
echo " <td bgcolor = \"lightgray\" >Unknown</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
echo " <td bgcolor = \"lightgray\" >--</th>" >> ./build_results.html
fi
echo " </tr>" >> ./build_results.html
echo " </table>" >> ./build_results.html
echo "</body>" >> ./build_results.html
echo "</html>" >> ./build_results.html
exit 0

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -24;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -24;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -24;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -24;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -24;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -24;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -29;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -29;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -29;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -29;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -29;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -1,4 +1,4 @@
Active_eNBs = ( "eNB_Eurecom_LTEBox");
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
@@ -10,7 +10,7 @@ eNBs =
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB_Eurecom_LTEBox";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
@@ -49,7 +49,7 @@ eNBs =
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -29;
pdsch_p_b = 0;
pusch_n_SB = 1;

View File

@@ -13,7 +13,7 @@ class connection:
try:
(pid, fd) = os.forkpty()
except BaseException, e:
log("ERROR: forkpty for '" + description + "': " + e)
log("ERROR: forkpty for '" + description + "': " + str(e))
(pid, fd) = (-1, -1)
if pid == -1:
@@ -26,7 +26,7 @@ class connection:
os.execvp('sshpass', ['sshpass', '-p', password,
'ssh', user + '@' + host])
except BaseException, e:
log("ERROR: execvp for '" + description + "': " + e)
log("ERROR: execvp for '" + description + "': " + str(e))
log("ERROR: execvp failed for '" + description + "'")
os._exit(1)

View File

@@ -42,7 +42,6 @@ conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
MSC_GEN="False"
XFORMS="True"
FLEXRAN_AGENT_SB_IF="True"
UE_EXPANSION="False"
PRINT_STATS="False"
VCD_TIMING="False"
@@ -69,6 +68,8 @@ UE_TIMING_TRACE="False"
DISABLE_LOG_X="False"
USRP_REC_PLAY="False"
BUILD_ECLIPSE=0
UE_NAS_USE_TUN="False"
BASIC_SIMULATOR=0
trap handle_ctrl_c INT
function print_help() {
@@ -101,10 +102,6 @@ Options
Specify conf_nvram_path (default \"$conf_nvram_path\")
--UE-gen-nvram [output path]
Specify gen_nvram_path (default \"$gen_nvram_path\")
--RRH
Makes the RRH
-a | --agent
Enables agent for software-defined control of the eNB
-r | --3gpp-release
default is Rel14,
Rel8 limits the implementation to 3GPP Release 8 version
@@ -162,6 +159,11 @@ Options
Build eclipse project files. Paths are auto corrected by fixprj.sh
--usrp-recplay
Build for I/Q record-playback modes
--ue-nas-use-tun
Use TUN devices for the UEs instead of ue_ip.ko
--basic-simulator
Generates a basic [1 UE + 1 eNB + no channel] simulator.
See targets/ARCH/tcp_bridge/README.tcp_bridge_oai for documentation.
Usage (first build):
oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files
Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files
@@ -200,15 +202,14 @@ function main() {
GDB=1
CMAKE_BUILD_TYPE="Debug"
echo_info "Will Compile with gdb symbols and disable compiler optimization"
CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug"
CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug --trace-expand"
shift;;
--eNB)
eNB=1
echo_info "Will compile eNB"
shift;;
-a | --agent)
FLEXRAN_AGENT=1
echo_info "Will compile eNB with agent support"
echo_info "FlexRAN support is always compiled into the eNB"
shift;;
--UE)
UE=1
@@ -219,15 +220,11 @@ function main() {
echo_info "Will compile with UE_EXPANSION"
shift;;
--UE-conf-nvram)
conf_nvram_path=$(readlink -f "$1")
conf_nvram_path=$(readlink -f $2)
shift 2;;
--UE-gen-nvram)
gen_nvram_path=$(readlink -f $2)
shift 2;;
--RRH)
RRH=1
echo_info "Will compile RRH"
shift;;
-r | --3gpp-release)
REL=$2
echo_info "Setting release to: $REL"
@@ -362,6 +359,14 @@ function main() {
USRP_REC_PLAY="True"
echo_info "Enabling USRP record playback mode"
shift 1;;
--ue-nas-use-tun)
UE_NAS_USE_TUN="True"
echo_info "Enabling UE NAS TUN device usage instead of ue_ip.ko"
shift 1;;
--basic-simulator)
BASIC_SIMULATOR=1
echo_info "Compiling the basic simulator"
shift 1;;
-h | --help)
print_help
exit 1;;
@@ -374,9 +379,13 @@ function main() {
CMAKE_CMD="$CMAKE_CMD .."
echo_info "CMAKE_CMD=$CMAKE_CMD"
if [ "$eNB" = "1" ] && [ "$UE" = "1" ]; then
echo_error "Cannot build UE and eNB on one build_oai execution"
echo_error "use 2 build_oai invocations"
exit
fi
#########################################################
# check validity of HW and TP parameters for RRH and eNB
# check validity of HW and TP parameters for eNB
#########################################################
# to be discussed
@@ -392,15 +401,6 @@ function main() {
fi
fi
if [ "$RRH" = "1" ] ; then
if [ "$TP" = "None" ] ; then
echo_fatal "A transport protocol (e.g. -t ETHERNET) must be defined!"
fi
if [ "$HW" = "None" ] ; then
echo_info "No radio head has been selected (HW set to $HW)"
fi
fi
echo_info "RF HW set to $HW"
#Now we set flags to enable deadline scheduler settings
#By default: USRP: disable,
@@ -485,11 +485,9 @@ function main() {
flash_firmware_bladerf
fi
fi
if [ "$FLEXRAN_AGENT" == "1" ] ; then
echo_info "installing protobuf/protobuf-c for flexran agent support"
install_protobuf_from_source
install_protobuf_c_from_source
fi
echo_info "installing protobuf/protobuf-c for flexran agent support"
install_protobuf_from_source
install_protobuf_c_from_source
fi
if [ "$INSTALL_OPTIONAL" = "1" ] ; then
@@ -514,10 +512,20 @@ function main() {
DIR=$OPENAIR_DIR/cmake_targets
if [ "$NOS1" = "1" ] ; then
lte_build_dir=lte_noS1_build_oai
lte_exec=lte-softmodem-nos1
if [ "$eNB" = "1" ] ; then
lte_exec=lte-softmodem-nos1
fi
if [ "$UE" = "1" ] ; then
lte_exec=lte-uesoftmodem-nos1
fi
else
lte_build_dir=lte_build_oai
lte_exec=lte-softmodem
if [ "$eNB" = "1" ] ; then
lte_exec=lte-softmodem
fi
if [ "$UE" = "1" ] ; then
lte_exec=lte-uesoftmodem
fi
fi
# configuration module libraries, one currently available, using libconfig
@@ -537,10 +545,9 @@ function main() {
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
echo "set ( XFORMS $XFORMS )" >> $cmake_file
if [ "$FLEXRAN_AGENT" = "1" ] ; then
echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )" >> $cmake_file
fi
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
@@ -574,6 +581,9 @@ function main() {
compilations \
$lte_build_dir $config_libconfig_shlib \
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
compilations \
$lte_build_dir coding \
libcoding.so $dbin/libcoding.so
if [ "$NOS1" = "1" ] ; then
compilations \
@@ -639,12 +649,17 @@ function main() {
if [ "$SIMUS_PHY" = "1" ] ; then
# lte unitary simulators compilation
echo_info "Compiling unitary tests simulators"
simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
#simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
simlist="dlsim ulsim"
for f in $simlist ; do
compilations \
lte-simulators $f \
$f $dbin/$f.$REL
done
compilations \
lte-simulators coding \
libcoding.so $dbin/libcoding.so
fi
# Core simulators
@@ -700,14 +715,14 @@ function main() {
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
echo "set ( XFORMS $XFORMS )" >> $cmake_file
if [ "$FLEXRAN_AGENT" = "1" ] ; then
echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )" >> $cmake_file
fi
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
echo "set ( PRINT_STATS $PRINT_STATS )" >> $cmake_file
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
echo "set ( UE_NAS_USE_TUN $UE_NAS_USE_TUN )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
[ "$CLEAN" = "1" ] && rm -rf $DIR/$oaisim_build_dir/build
mkdir -p $DIR/$oaisim_build_dir/build
@@ -716,6 +731,12 @@ function main() {
compilations \
$oaisim_build_dir $oaisim_exec \
$oaisim_exec $dbin/$oaisim_exec.$REL
compilations \
$oaisim_build_dir $config_libconfig_shlib \
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
compilations \
$oaisim_build_dir coding \
libcoding.so $dbin/libcoding.so
if [ "$NOS1" != "1" ] ; then
@@ -784,10 +805,9 @@ function main() {
cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
echo "set ( XFORMS $XFORMS )" >> $cmake_file
if [ "$FLEXRAN_AGENT" = "1" ] ; then
echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )" >> $cmake_file
fi
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
@@ -801,61 +821,20 @@ function main() {
# oaisim_mme $dbin/oaisim_mme.$REL
fi
# RRH compilation
#####################
if [ "$RRH" = "1" ] ; then
rrh_exec=rrh_gw
rrh_build_dir=rrh_gw
echo_info "Compiling $rrh_exec ..."
[ "$CLEAN" = "1" ] && rm -rf $DIR/rrh_gw/build
mkdir -p $DIR/$rrh_build_dir/build
cmake_file=$DIR/$rrh_build_dir/CMakeLists.txt
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
echo "set ( ENABLE_ITTI False )" >> $cmake_file
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
echo 'set ( PACKAGE_NAME "\"rrh_gw\"")' >> $cmake_file
echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file
echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
cd $DIR/$rrh_build_dir/build
eval $CMAKE_CMD
compilations \
rrh_gw rrh_gw \
rrh_gw $dbin/rrh_gw
fi
# Telnet server compilation
#####################
if [ "$BUILD_TELNETSRV" = "1" ] ; then
telnetsrv_build_dir=telnetsrv
mkdir -p $DIR/$telnetsrv_build_dir/build
cd $DIR/$telnetsrv_build_dir/build
echo_info "Compiling telnet server library ..."
[ "$CLEAN" = "1" ] && rm -rf $DIR/$telnetsrv_build_dir
cmake_file=$OPENAIR_DIR/common/utils/$telnetsrv_build_dir/CMakeLists.txt
cd $DIR/$telnetsrv_build_dir/build
eval "$CMAKE_CMD $OPENAIR_DIR/common/utils/$telnetsrv_build_dir/"
make
build_dir=$lte_build_dir
compilations \
$build_dir telnetsrv \
libtelnetsrv.so $dbin/libtelnetsrv.so
fi
# build RF device and transport protocol libraries
#####################################
if [ "$eNB" = "1" -o "$UE" = "1" -o "$RRH" = "1" ] ; then
if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
build_dir=$lte_build_dir
else
build_dir=$rrh_build_dir
fi
build_dir=$lte_build_dir
# build RF device libraries
if [ "$HW" != "None" ] ; then
@@ -962,6 +941,124 @@ fi
else
echo_info "10. Bypassing the Tests ..."
fi
# basic simulator
#####################
if [ "$BASIC_SIMULATOR" = "1" ]; then
echo_info "Build basic simulator"
[ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/basic_simulator
[ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator
mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator/enb
mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator/ue
mkdir -p $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
# enb
cmake_file=$OPENAIR_DIR/cmake_targets/basic_simulator/enb/CMakeLists.txt
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
echo "set ( XFORMS $XFORMS )" >> $cmake_file
echo "set ( RF_BOARD \"OAI_USRP\")" >> $cmake_file
echo "set ( TRANSP_PRO \"None\")" >> $cmake_file
echo "set(PACKAGE_NAME \"simulator_enb\")" >> $cmake_file
echo "set (DEADLINE_SCHEDULER \"False\" )" >> $cmake_file
echo "set (CPU_AFFINITY \"False\" )" >> $cmake_file
echo "set ( T_TRACER \"True\" )" >> $cmake_file
echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file
echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file
echo "set (DISABLE_LOG_X $DISABLE_LOG_X)" >> $cmake_file
echo "set (USRP_REC_PLAY $USRP_REC_PLAY)" >> $cmake_file
echo "set (BASIC_SIMULATOR \"True\" )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)' >> $cmake_file
echo_info "Build eNB"
echo_info "logs are in $dlog/basic_simulator_enb.txt"
set +e
{
cd $OPENAIR_DIR/cmake_targets/basic_simulator/enb
cmake .
make -j`nproc` lte-softmodem
make -j`nproc` coding params_libconfig tcp_bridge_oai
ln -sf libtcp_bridge_oai.so liboai_device.so
cd ../..
} > $dlog/basic_simulator_enb.txt 2>&1
set -e
if [ -s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/lte-softmodem -a \
-s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libcoding.so -a \
-s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libparams_libconfig.so -a \
-s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libtcp_bridge_oai.so ] ; then
echo_success "eNB compiled"
check_warnings "$dlog/basic_simulator_enb.txt"
else
echo_error "eNB compilation failed"
exit 1
fi
# ue
echo_info "Compile conf2uedata"
cd $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
eval $CMAKE_CMD
compilations \
nas_sim_tools conf2uedata \
conf2uedata $dbin/conf2uedata
cmake_file=$OPENAIR_DIR/cmake_targets/basic_simulator/ue/CMakeLists.txt
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
echo "set ( XFORMS $XFORMS )" >> $cmake_file
echo "set ( RF_BOARD \"OAI_USRP\")" >> $cmake_file
echo "set ( TRANSP_PRO \"None\")" >> $cmake_file
echo "set(PACKAGE_NAME \"simulator_ue\")" >> $cmake_file
echo "set (DEADLINE_SCHEDULER \"False\" )" >> $cmake_file
echo "set (CPU_AFFINITY \"False\" )" >> $cmake_file
echo "set ( T_TRACER \"False\" )" >> $cmake_file
echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file
echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file
echo "set (DISABLE_LOG_X $DISABLE_LOG_X)" >> $cmake_file
echo "set (USRP_REC_PLAY $USRP_REC_PLAY)" >> $cmake_file
echo "set (LINUX True )" >> $cmake_file
echo "set (PDCP_USE_NETLINK True )" >> $cmake_file
echo "set (BASIC_SIMULATOR \"True\" )" >> $cmake_file
echo "set (UE_NAS_USE_TUN \"True\" )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)' >> $cmake_file
echo_info "Build UE"
echo_info "logs are in $dlog/basic_simulator_ue.txt"
set +e
{
cd $OPENAIR_DIR/cmake_targets/basic_simulator/ue
cmake .
make -j`nproc` lte-uesoftmodem
make -j`nproc` coding params_libconfig tcp_bridge_oai
ln -sf libtcp_bridge_oai.so liboai_device.so
cd ../..
} > $dlog/basic_simulator_ue.txt 2>&1
set -e
if [ -s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/lte-uesoftmodem -a \
-s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libcoding.so -a \
-s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libparams_libconfig.so -a \
-s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libtcp_bridge_oai.so ] ; then
echo_success "UE compiled"
check_warnings "$dlog/basic_simulator_ue.txt"
else
echo_error "UE compilation failed"
exit 1
fi
echo_info "Generate UE SIM data"
$OPENAIR_DIR/targets/bin/conf2uedata -c $OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf -o $OPENAIR_DIR/cmake_targets/basic_simulator/ue
fi
}
main "$@"

View File

@@ -2,17 +2,13 @@ cmake_minimum_required(VERSION 2.8)
set ( CMAKE_BUILD_TYPE "RelWithDebInfo" )
set ( ASN_DEBUG False)
set ( ADDR_CONF False )
set ( DEBUG_OMG False )
set ( DISABLE_XER_PRINT False )
set ( DRIVER2013 True )
set ( EMOS False )
set ( EMIT_ASN_DEBUG False )
set ( ENABLE_FXP True )
set ( ENABLE_ITTI True )
set ( ENABLE_NAS_UE_LOGGING True )
set ( ENABLE_NEW_MULTICAST True )
set ( ENABLE_PGM_TRANSPORT True )
set ( ENABLE_SECURITY True )
set ( ENABLE_STANDALONE_EPC False)
set ( ENABLE_USE_CPU_EXECUTION_TIME True )
@@ -21,7 +17,6 @@ set ( ENABLE_USE_RAW_SOCKET_FOR_SGI True)
set ( ENABLE_VCD_FIFO False )
set ( ENB_MODE True )
set ( EXMIMO_IOT True )
set ( HARD_RT False )
set ( JUMBO_FRAME True )
set ( LARGE_SCALE False )
set ( LINK_ENB_PDCP_TO_GTPV1U True)
@@ -33,7 +28,6 @@ set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False)
set ( MIH_C_MEDIEVAL_EXTENSIONS False )
set ( MSG_PRINT False )
set ( MU_RECEIVER False )
set ( NAS_ADDRESS_FIX False )
@@ -42,38 +36,25 @@ set ( NAS_MME False )
set ( NAS_UE True )
set ( NB_ANTENNAS_RX "2" )
set ( NB_ANTENNAS_TX "2" )
set ( NB_ANTENNAS_TXRX "2" )
set ( NEW_FFT True )
set ( NO_RRM True )
set ( OAI_EMU False )
set ( OAISIM False )
set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
set ( OAI_NW_DRIVER_USE_NETLINK True )
set ( OPENAIR1 True )
set ( OPENAIR2 True )
set ( OPENAIR_LTE True )
set ( PACKAGE_NAME "epc_test" )
set ( PBS_SIM False )
set ( PDCP_USE_NETLINK True )
set ( PC_DSP True )
set ( PC_TARGET True )
set ( PDCP_MSG_PRINT False )
set ( PERFECT_CE False )
set ( PHY_ABSTRACTION True )
set ( PHY_CONTEXT False )
set ( PHY_EMUL False )
set ( PHYSIM True )
set ( PUCCH True )
set ( RANDOM_BF False )
set ( RF_BOARD "False" )
set ( RLC_STOP_ON_LOST_PDU False )
set ( RRC_ASN1_VERSION "Rel10" )
set ( RRC_DEFAULT_RAB_IS_AM True)
set ( RRC_MSG_PRINT False )
set ( RTAI False )
set ( SECU False )
set ( SMBV False )
set ( TEST_OMG False )
set ( USE_MME "R10" )
set ( USER_MODE True )
set ( XER_PRINT True )

View File

@@ -6,10 +6,7 @@ set(XFORMS True)
set(ENABLE_ITTI False)
set(DEBUG_PHY False)
set(MU_RECIEVER False)
set(RANDOM_BF False)
set(PBS_SIM False)
set(PERFECT_CE True)
set(NAS_UE False)
set(MESSAGE_CHART_GENERATOR False)
set(RRC_ASN1_VERSION "Rel14")
include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)

View File

@@ -1,16 +1,12 @@
cmake_minimum_required(VERSION 2.8)
set ( CMAKE_BUILD_TYPE "RelWithDebInfo" )
set ( ADDR_CONF False )
set ( DEBUG_OMG False )
set ( DISABLE_XER_PRINT False )
set ( DRIVER2013 True )
set ( EMOS False )
set ( ENABLE_FXP True )
set ( ENABLE_ITTI True )
set ( ENABLE_NAS_UE_LOGGING True )
set ( ENABLE_NEW_MULTICAST True )
set ( ENABLE_PGM_TRANSPORT True )
set ( ENABLE_RAL False )
set ( ENABLE_SECURITY True )
set ( ENABLE_STANDALONE_EPC False)
@@ -20,7 +16,6 @@ set ( ENABLE_USE_RAW_SOCKET_FOR_SGI True)
set ( ENABLE_VCD_FIFO False )
set ( ENB_MODE True )
set ( EXMIMO_IOT True )
set ( HARD_RT False )
set ( JUMBO_FRAME True )
set ( LARGE_SCALE False )
set ( LINK_ENB_PDCP_TO_GTPV1U True)
@@ -32,7 +27,6 @@ set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False)
set ( MIH_C_MEDIEVAL_EXTENSIONS False )
set ( MSG_PRINT False )
set ( MU_RECEIVER False )
set ( NAS_ADDRESS_FIX False )
@@ -41,40 +35,26 @@ set ( NAS_MME False )
set ( NAS_UE True )
set ( NB_ANTENNAS_RX "2" )
set ( NB_ANTENNAS_TX "2" )
set ( NB_ANTENNAS_TXRX "2" )
set ( NEW_FFT True )
set ( NO_RRM True )
set ( OAI_EMU True )
set ( OAISIM True )
set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
set ( OAI_NW_DRIVER_USE_NETLINK True )
set ( OPENAIR1 True )
set ( OPENAIR2 True )
set ( OPENAIR_LTE True )
set ( PACKAGE_NAME "oaisim" )
set ( PBS_SIM False )
set ( PDCP_USE_NETLINK True )
set ( PC_DSP True )
set ( PC_TARGET True )
set ( PDCP_MSG_PRINT False )
set ( PERFECT_CE False )
set ( PHY_ABSTRACTION True )
set ( PHY_CONTEXT False )
set ( PHY_EMUL False )
set ( PHYSIM True )
set ( PUCCH True )
set ( RANDOM_BF False )
set ( RF_BOARD "False" )
set ( RLC_STOP_ON_LOST_PDU False )
set ( RRC_ASN1_VERSION "Rel10" )
set ( RRC_DEFAULT_RAB_IS_AM True)
set ( RRC_MSG_PRINT False )
set ( RTAI False )
set ( SECU False )
set ( SMBV False )
set ( SPECTRA False )
set ( TEST_OMG False )
set ( USE_3GPP_ADDR_AS_LINK_ADDR False )
set ( USE_MME "R10" )
set ( USER_MODE True )
set ( XER_PRINT False )

View File

@@ -1,16 +1,12 @@
cmake_minimum_required(VERSION 2.8)
set ( CMAKE_BUILD_TYPE "RelWithDebInfo" )
set ( ADDR_CONF False )
set ( DEBUG_OMG False )
set ( DISABLE_XER_PRINT False )
set ( DRIVER2013 False )
set ( EMOS False )
set ( ENABLE_FXP False )
set ( ENABLE_ITTI True )
set ( ENABLE_NAS_UE_LOGGING False )
set ( ENABLE_NEW_MULTICAST False )
set ( ENABLE_PGM_TRANSPORT False )
set ( ENABLE_RAL False )
set ( ENABLE_SECURITY False )
set ( ENABLE_STANDALONE_EPC False )
@@ -21,7 +17,6 @@ set ( ENABLE_VCD_FIFO False )
set ( ENB_MODE False )
set ( EPC_BUILD True )
set ( EXMIMO_IOT False )
set ( HARD_RT False )
set ( JUMBO_FRAME False )
set ( LARGE_SCALE False )
set ( LINK_ENB_PDCP_TO_GTPV1U True)
@@ -32,7 +27,6 @@ set ( LOG_NO_THREAD False )
set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MIH_C_MEDIEVAL_EXTENSIONS False )
set ( MSG_PRINT False )
set ( MU_RECEIVER False )
set ( NAS_ADDRESS_FIX False )
@@ -42,42 +36,27 @@ set ( NAS_NETLINK False )
set ( NAS_UE False )
set ( NB_ANTENNAS_RX "2" )
set ( NB_ANTENNAS_TX "2" )
set ( NB_ANTENNAS_TXRX "2" )
set ( NEW_FFT False )
set ( NO_RRM False )
set ( OAI_EMU False )
set ( OAISIM False )
set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
set ( OAI_NW_DRIVER_USE_NETLINK False )
set ( OPENAIR1 False )
set ( OPENAIR2 False )
set ( OPENAIR_EMU False )
set ( OPENAIR_LTE False )
set ( PACKAGE_NAME "EPC" )
set ( PBS_SIM False )
set ( PC_DSP False )
set ( PC_TARGET False )
set ( PDCP_MSG_PRINT False )
set ( PERFECT_CE False )
set ( PHY_ABSTRACTION False )
set ( PHY_CONTEXT False )
set ( PHY_EMUL False )
set ( PHYSIM False )
set ( PUCCH False )
set ( RANDOM_BF False )
set ( RF_BOARD "False" )
set ( RRC_ASN1_VERSION "Rel10" )
set ( RLC_STOP_ON_LOST_PDU False )
set ( RRC_MSG_PRINT False )
set ( RTAI False )
set ( SECU False )
set ( SMBV False )
set ( SPECTRA False )
set ( TEST_OMG False )
set ( UPDATE_RELEASE_9 True)
set ( UPDATE_RELEASE_10 True)
set ( USE_3GPP_ADDR_AS_LINK_ADDR False )
set ( USE_MME "R10" )
set ( USER_MODE True )
set ( XER_PRINT False )
set ( XFORMS False )

View File

@@ -1,15 +1,11 @@
cmake_minimum_required(VERSION 2.8)
set ( ADDR_CONF False )
set ( DEBUG_OMG False )
set ( DISABLE_XER_PRINT False )
set ( DRIVER2013 True )
set ( EMOS False )
set ( ENABLE_FXP True )
set ( ENABLE_ITTI True )
set ( ENABLE_NAS_UE_LOGGING False )
set ( ENABLE_NEW_MULTICAST True )
set ( ENABLE_PGM_TRANSPORT True )
set ( ENABLE_RAL False )
set ( ENABLE_SECURITY False )
set ( ENABLE_STANDALONE_EPC False)
@@ -19,7 +15,6 @@ set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False)
set ( ENABLE_VCD_FIFO False )
set ( ENB_MODE True )
set ( EXMIMO_IOT True )
set ( HARD_RT False )
set ( JUMBO_FRAME True )
set ( LARGE_SCALE False )
set ( LINK_ENB_PDCP_TO_GTPV1U False)
@@ -33,51 +28,35 @@ set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False )
set ( MESSAGE_CHART_GENERATOR_RLC_MAC False )
set ( MESSAGE_CHART_GENERATOR_PHY False )
set ( MIH_C_MEDIEVAL_EXTENSIONS False )
set ( MSG_PRINT False )
set ( MU_RECEIVER False )
set ( NAS_ADDRESS_FIX True )
set ( NAS_ADDRESS_FIX False )
set ( NAS_BUILT_IN_UE False)
set ( NAS_MME False )
set ( NAS_UE False )
set ( NB_ANTENNAS_RX "2" )
set ( NB_ANTENNAS_TX "2" )
set ( NB_ANTENNAS_TXRX "2" )
set ( NEW_FFT True )
set ( NO_RRM True )
set ( OAI_EMU True )
set ( OAISIM True )
set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
set ( OAI_NW_DRIVER_USE_NETLINK True )
set ( OPENAIR1 True )
set ( OPENAIR2 True )
set ( OPENAIR_EMU False )
set ( OPENAIR_LTE True )
set ( PACKAGE_NAME "oaisim" )
set ( PBS_SIM False )
set ( PDCP_USE_NETLINK True )
set ( PC_DSP True )
set ( PC_TARGET True )
set ( PDCP_MSG_PRINT False )
set ( PERFECT_CE False )
set ( PHY_ABSTRACTION True )
set ( PHY_CONTEXT False )
set ( PHY_EMUL False )
set ( PHYSIM True )
set ( PUCCH True )
set ( RANDOM_BF False )
set ( RF_BOARD "False" )
set ( RRC_ASN1_VERSION "Rel10" )
set ( RLC_STOP_ON_LOST_PDU False )
set ( RRC_MSG_PRINT False )
set ( RTAI False )
set ( SECU False )
set ( SMBV False )
set ( SPECTRA False )
set ( TEST_OMG False )
set ( USE_3GPP_ADDR_AS_LINK_ADDR False )
set ( USE_MME "R10" )
set ( USER_MODE True )
set ( XER_PRINT False )
set ( DEBUG_PHY False )
set ( DEBUG_PHY_PROC False)

View File

@@ -1,17 +1,13 @@
cmake_minimum_required(VERSION 2.8)
set ( CMAKE_BUILD_TYPE "RelWithDebInfo" )
set ( ADDR_CONF False )
set ( DEBUG_OMG False )
set ( DISABLE_XER_PRINT False )
set ( DRIVER2013 True )
set ( EMOS False )
set ( ENABLE_FXP True )
set ( ENABLE_ITTI True )
set ( ENABLE_NAS_UE_LOGGING True )
set ( ENABLE_NEW_MULTICAST True )
set ( ENABLE_PDCP_NETLINK_FIFO False )
set ( ENABLE_PGM_TRANSPORT True )
set ( ENABLE_RAL False )
set ( ENABLE_SECURITY True )
set ( ENABLE_STANDALONE_EPC False)
@@ -21,7 +17,6 @@ set ( ENABLE_USE_RAW_SOCKET_FOR_SGI True)
set ( ENABLE_VCD_FIFO False )
set ( ENB_MODE True )
set ( EXMIMO_IOT True )
set ( HARD_RT False )
set ( JUMBO_FRAME True )
set ( LARGE_SCALE False )
set ( LINK_ENB_PDCP_TO_GTPV1U True)
@@ -33,7 +28,6 @@ set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False)
set ( MIH_C_MEDIEVAL_EXTENSIONS False )
set ( MSG_PRINT False )
set ( MU_RECEIVER False )
set ( NAS_ADDRESS_FIX False )
@@ -42,44 +36,30 @@ set ( NAS_MME False )
set ( NAS_UE True )
set ( NB_ANTENNAS_RX "2" )
set ( NB_ANTENNAS_TX "2" )
set ( NB_ANTENNAS_TXRX "2" )
set ( NEW_FFT True )
set ( NO_RRM True )
set ( OAI_EMU True )
set ( OAISIM True )
set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
set ( OAI_NW_DRIVER_USE_NETLINK True )
set ( OPENAIR1 True )
set ( OPENAIR2 True )
set ( OPENAIR_LTE True )
set ( PACKAGE_NAME "oaisim" )
set ( PBS_SIM False )
set ( PDCP_USE_NETLINK True )
set ( PC_DSP True )
set ( PC_TARGET True )
set ( PDCP_MSG_PRINT False )
set ( PERFECT_CE False )
set ( PHY_ABSTRACTION True )
set ( PHY_CONTEXT False )
set ( PHY_EMUL False )
set ( PHYSIM True )
set ( PUCCH True )
set ( RANDOM_BF False )
set ( RF_BOARD "False" )
set ( RLC_STOP_ON_LOST_PDU False )
set ( RRC_ASN1_VERSION "Rel10" )
set ( RRC_DEFAULT_RAB_IS_AM True)
set ( RRC_MSG_PRINT False )
set ( RTAI False )
set ( SECU False )
set ( SMBV False )
set ( SPECTRA False )
set ( TEST_OMG False )
set ( TEST_S1C_MME True )
set ( USE_3GPP_ADDR_AS_LINK_ADDR False )
set ( USE_MME "R10" )
set ( USER_MODE True )
set ( XER_PRINT False )
set ( XFORMS False )

View File

@@ -95,6 +95,9 @@ get_distribution_release() {
check_supported_distribution() {
local distribution=$(get_distribution_release)
case "$distribution" in
"ubuntu18.04") return 0 ;;
"ubuntu17.10") return 0 ;;
"ubuntu17.04") return 0 ;;
"ubuntu16.04") return 0 ;;
"ubuntu14.04") return 0 ;;
"fedora24") return 0 ;;
@@ -208,7 +211,7 @@ install_protobuf_from_source(){
#cd protobuf-2.6.1/
rm -rf /tmp/protobuf-cpp-3.3.0.tar.gz* /tmp/protobuf-3.3.0
wget https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz
tar -xzvf protobuf-cpp-3.3.0.tar.gz --owner $USER --group $USER --no-same-owner
tar -xzvf protobuf-cpp-3.3.0.tar.gz --owner $USER --group $(groups | cut -d" " -f1) --no-same-owner
cd protobuf-3.3.0/
./configure
echo "Compiling protobuf"
@@ -230,6 +233,7 @@ install_protobuf_c_from_source(){
rm -rf /tmp/protobuf-c
git clone https://github.com/protobuf-c/protobuf-c.git
cd protobuf-c
git checkout 2a46af42784abf86804d536f6e0122d47cfeea45
./autogen.sh
./configure
echo "Compiling protobuf-c"
@@ -246,14 +250,14 @@ install_usrp_uhd_driver_from_source(){
cd /tmp
echo "Downloading UHD driver"
rm -rf /tmp/uhd
git clone git://github.com/EttusResearch/uhd.git
git clone https://github.com/EttusResearch/uhd.git
cd uhd
git checkout tags/release_003_010_001_001
mkdir -p host/build
cd host/build
$CMAKE ../
echo "Compiling UHD"
make
make -j`nproc`
make test
$SUDO make install
$SUDO ldconfig
@@ -264,7 +268,7 @@ check_install_usrp_uhd_driver(){
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
#first we remove old installation
$SUDO apt-get remove -y uhd || true
$SUDO apt-get remove libuhd-dev libuhd003 uhd-host -y
$SUDO apt-get remove libuhd-dev libuhd003 uhd-host -y || true
v=$(lsb_release -cs)
$SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
#The new USRP repository
@@ -274,10 +278,11 @@ check_install_usrp_uhd_driver(){
$SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
$SUDO $INSTALLER -y install python boost libusb-devel libusbx-devel boost-devel python-mako python-docutils cmake
$SUDO pip install requests
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
# until EPEL repo hasn't bumped UHD driver to >=3.10 in EPEL, build driver from source
$SUDO $INSTALLER -y remove uhd uhd-devel uhd-firmware
install_ursp_uhd_driver_from_source
install_usrp_uhd_driver_from_source
else
$SUDO $INSTALLER -y install uhd uhd-devel uhd-firmware
fi
@@ -479,16 +484,31 @@ check_install_oai_software() {
fi
$SUDO $INSTALLER update -y
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
local LAPACK_LIBNAME="liblapack.so"
local LAPACK_TARGET="/usr/lib/atlas-base/atlas/liblapack.so"
$SUDO apt install -y software-properties-common
case "$(get_distribution_release)" in
"ubuntu14.04")
specific_packages="libtasn1-3-dev"
specific_packages="libtasn1-3-dev gccxml libgnutls-dev libatlas-dev iproute libconfig8-dev"
# For iperf3
$SUDO add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty-backports universe"
$SUDO apt-get update
;;
"ubuntu16.04")
specific_packages="libtasn1-6-dev"
specific_packages="libtasn1-6-dev gccxml libgnutls-dev libatlas-dev iproute libconfig8-dev"
;;
"ubuntu17.04")
specific_packages="libtasn1-6-dev castxml libgnutls28-dev libatlas-dev iproute libconfig8-dev"
;;
"ubuntu17.10")
specific_packages="libtasn1-6-dev castxml libgnutls28-dev iproute libconfig8-dev"
LAPACK_LIBNAME="liblapack.so-x86_64-linux-gnu"
LAPACK_TARGET="/usr/lib/x86_64-linux-gnu/atlas/liblapack.so"
;;
"ubuntu18.04")
specific_packages="libtasn1-6-dev castxml libgnutls28-dev iproute2 libconfig-dev"
LAPACK_LIBNAME="liblapack.so-x86_64-linux-gnu"
LAPACK_TARGET="/usr/lib/x86_64-linux-gnu/atlas/liblapack.so"
;;
esac
$SUDO apt-get install -y \
@@ -504,20 +524,16 @@ check_install_oai_software() {
texlive-latex-base \
ethtool \
flex \
gccxml \
gdb \
git \
graphviz \
gtkwave \
guile-2.0-dev \
iperf \
iproute \
iptables \
iptables-dev \
libatlas-base-dev \
libatlas-dev \
libblas-dev \
libconfig8-dev \
libffi-dev \
libforms-bin \
libforms-dev \
@@ -553,11 +569,9 @@ check_install_oai_software() {
wget \
libxpm-dev
$SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
$SUDO apt-get install -y nettle-dev nettle-bin
$SUDO update-alternatives --set "$LAPACK_LIBNAME" "$LAPACK_TARGET"
$SUDO apt-get install -y libgnutls-dev
$SUDO apt-get install -y nettle-dev nettle-bin
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
if rpm -q epel-release > /dev/null; then
@@ -635,7 +649,8 @@ check_install_oai_software() {
lapack \
lapack-devel \
blas \
blas-devel
blas-devel \
libyaml-devel
fi
install_asn1c_from_source

View File

@@ -5,6 +5,7 @@
RRC_Rel14=(
"SystemInformation-r8-IEs.h" 4df485c5ddf2540eca271876cdc512caa19b0890 "fix_asn1.data/RRC.rel14/SystemInformation-r8-IEs.h.diff"
"SystemInformation-NB-r13-IEs.h" 6d91332d5c39205819b06e5e36efe62ff8e5b33b "fix_asn1.data/RRC.rel14/SystemInformation-NB-r13-IEs.h.diff"
)
RRC_Rel10=(

View File

@@ -0,0 +1,47 @@
48a49,70
> struct SystemInformation_NB_r13_IEs__sib_TypeAndInfo_r13__Member {
> SystemInformation_NB_r13_IEs__sib_TypeAndInfo_r13__Member_PR present;
> union SystemInformation_NB_r13_IEs__sib_TypeAndInfo_r13__Member_u {
> SystemInformationBlockType2_NB_r13_t sib2_r13;
> SystemInformationBlockType3_NB_r13_t sib3_r13;
> SystemInformationBlockType4_NB_r13_t sib4_r13;
> SystemInformationBlockType5_NB_r13_t sib5_r13;
> SystemInformationBlockType14_NB_r13_t sib14_r13;
> SystemInformationBlockType16_NB_r13_t sib16_r13;
> /*
> * This type is extensible,
> * possible extensions are below.
> */
> SystemInformationBlockType15_NB_r14_t sib15_v1430;
> SystemInformationBlockType20_NB_r14_t sib20_v1430;
> SystemInformationBlockType22_NB_r14_t sib22_v1430;
> } choice;
>
> /* Context for parsing across buffer boundaries */
> asn_struct_ctx_t _asn_ctx;
> };
>
52,72c74
< A_SEQUENCE_OF(struct SystemInformation_NB_r13_IEs__sib_TypeAndInfo_r13__Member {
< SystemInformation_NB_r13_IEs__sib_TypeAndInfo_r13__Member_PR present;
< union SystemInformation_NB_r13_IEs__sib_TypeAndInfo_r13__Member_u {
< SystemInformationBlockType2_NB_r13_t sib2_r13;
< SystemInformationBlockType3_NB_r13_t sib3_r13;
< SystemInformationBlockType4_NB_r13_t sib4_r13;
< SystemInformationBlockType5_NB_r13_t sib5_r13;
< SystemInformationBlockType14_NB_r13_t sib14_r13;
< SystemInformationBlockType16_NB_r13_t sib16_r13;
< /*
< * This type is extensible,
< * possible extensions are below.
< */
< SystemInformationBlockType15_NB_r14_t sib15_v1430;
< SystemInformationBlockType20_NB_r14_t sib20_v1430;
< SystemInformationBlockType22_NB_r14_t sib22_v1430;
< } choice;
<
< /* Context for parsing across buffer boundaries */
< asn_struct_ctx_t _asn_ctx;
< } ) list;
---
> A_SEQUENCE_OF(struct SystemInformation_NB_r13_IEs__sib_TypeAndInfo_r13__Member) list;

View File

@@ -44,11 +44,11 @@ load_module $OPENAIR_DIR/targets/bin/nasmesh.ko
if [ "$1" = "eNB" ]; then
echo "bring up oai0 interface for enb"
sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
$OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.9 -r 1
$OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 1
else
if [ "$1" = "UE" ]; then
echo "bring up oai0 interface for UE"
sudo ifconfig oai0 10.0.1.9 netmask 255.255.255.0 broadcast 10.0.1.255
$OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i0 -z0 -s 10.0.1.9 -t 10.0.1.1 -r 1
sudo ifconfig oai0 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255
$OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i0 -z0 -s 10.0.1.2 -t 10.0.1.1 -r 1
fi
fi

0
cmake_targets/tools/init_nas_s1 Normal file → Executable file
View File

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -197,25 +197,40 @@ int i;
return cfgptr;
}
void end_configmodule()
/* free memory allocated when reading parameters */
/* config module could be initialized again after this call */
void end_configmodule(void)
{
if (cfgptr != NULL) {
if (cfgptr->end != NULL) {
printf ("[CONFIG] calling config module end function...\n");
cfgptr->end();
}
printf ("[CONFIG] free %u config value pointers\n",cfgptr->numptrs);
for(int i=0; i<cfgptr->numptrs ; i++) {
if (cfgptr->ptrs[i] != NULL) {
free(cfgptr->ptrs[i]);
cfgptr->ptrs[i]=NULL;
}
}
cfgptr->numptrs=0;
}
}
/* free all memory used by config module */
/* should be called only at program exit */
void free_configmodule(void)
{
if (cfgptr != NULL) {
end_configmodule();
if( cfgptr->cfgmode != NULL) free(cfgptr->cfgmode);
printf ("[CONFIG] free %u config parameter pointers\n",cfgptr->num_cfgP);
for (int i=0; i<cfgptr->num_cfgP; i++) {
if ( cfgptr->cfgP[i] != NULL) free(cfgptr->cfgP[i]);
}
printf ("[CONFIG] free %u config value pointers\n",cfgptr->numptrs);
for(int i=0; i<cfgptr->numptrs ; i++) {
if (cfgptr->ptrs[i] != NULL) {
free(cfgptr->ptrs[i]);
}
cfgptr->ptrs[i]=NULL;
}
free(cfgptr);
cfgptr=NULL;

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -40,15 +40,18 @@
#define CONFIG_MAX_OOPT_PARAMS 10 // maximum number of parameters in the -O option (-O <cfgmode>:P1:P2...
#define CONFIG_MAX_ALLOCATEDPTRS 1024 // maximum number of parameters that can be dynamicaly allocated in the config module
/* default values for configuration module parameters */
#define DEFAULT_CFGMODE "libconfig" // use libconfig file
#define DEFAULT_CFGFILENAME "oai.conf" // default config file
/* rtflags bit position definitions */
#define CONFIG_PRINTPARAMS 1 // print parameters values while processing
#define CONFIG_DEBUGPTR 2 // print memory allocation/free debug messages
#define CONFIG_DEBUGCMDLINE 4 // print command line processing messages
#define CONFIG_HELP 8 // print help message
#define CONFIG_ABORT 16 // config failed,abort execution
#define CONFIG_NOOOPT 32 // no -O option found when parsing command line
#define CONFIG_PRINTPARAMS 1 // print parameters values while processing
#define CONFIG_DEBUGPTR 1<<1 // print memory allocation/free debug messages
#define CONFIG_DEBUGCMDLINE 1<<2 // print command line processing messages
#define CONFIG_NOABORTONCHKF 1<<3 // disable abort execution when parameter checking function fails
#define CONFIG_HELP 1<<20 // print help message
#define CONFIG_ABORT 1<<21 // config failed,abort execution
#define CONFIG_NOOOPT 1<<22 // no -O option found when parsing command line
typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP);
typedef int(*configmodule_getfunc_t)(paramdef_t *,int numparams, char *prefix);
typedef int(*configmodule_getlistfunc_t)(paramlist_def_t *, paramdef_t *,int numparams, char *prefix);

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -55,16 +55,61 @@
#define PARAMFLAG_PARAMSET (1 << 16) // parameter has been explicitely set in get functions
#define PARAMFLAG_PARAMSETDEF (1 << 17) // parameter has been set to default value in get functions
/* checkedparam_t is possibly used in paramdef_t for specific parameter value validation */
#define CONFIG_MAX_NUMCHECKVAL 20
typedef struct paramdef paramdef_t;
typedef union checkedparam {
struct {
int (*f1)(paramdef_t *param); /* check an integer against a list of authorized values */
int okintval[CONFIG_MAX_NUMCHECKVAL]; /* integer array, store possible values */
int num_okintval; /* number of valid values in the checkingval array */
} s1;
struct {
int (*f1a)(paramdef_t *param); /* check an integer against a list of authorized values and set param value */
/* to the corresponding item in setintval array (mainly for RRC params) */
int okintval[CONFIG_MAX_NUMCHECKVAL]; /* integer array, store possible values in config file */
int setintval[CONFIG_MAX_NUMCHECKVAL]; /* integer array, values set in the paramdef structure */
int num_okintval; /* number of valid values in the checkingval array */
} s1a;
struct {
int (*f2)(paramdef_t *param); /* check an integer against an authorized range, defined by its min and max value */
int okintrange[CONFIG_MAX_NUMCHECKVAL]; /* integer array, store min and max values */
} s2;
struct {
int (*f3)(paramdef_t *param); /* check a string against a list of authorized values */
char *okstrval[CONFIG_MAX_NUMCHECKVAL]; /* string array, store possible values */
int num_okstrval; /* number of valid values in the checkingval array */
} s3;
struct {
int (*f3a)(paramdef_t *param); /* check a string against a list of authorized values and set param value */
/* to the corresponding item in setintval array (mainly for RRC params) */
char *okstrval[CONFIG_MAX_NUMCHECKVAL]; /* string array, store possible values */
int setintval[CONFIG_MAX_NUMCHECKVAL]; /* integer array, values set in the paramdef structure */
int num_okstrval; /* number of valid values in the checkingval array */
} s3a;
struct {
int (*f4)(paramdef_t *param); /* generic check function, no arguments but the param description */
} s4;
struct {
void (*checkfunc)(void) ;
} s5;
} checkedparam_t;
/* paramdef is used to describe a parameter, array of paramdef_t strustures is used as the main parameter in */
/* config apis used to retrieve parameters values */
typedef struct paramdef
{
char optname[MAX_OPTNAME_SIZE]; /* parameter name, can be used as long command line option */
char *helpstr; /* help string */
unsigned int paramflags; /* value is a "ored" combination of above PARAMFLAG_XXXX values */
union { /* pointer to the parameter value, completed by the config module */
char optname[MAX_OPTNAME_SIZE]; /* parameter name, can be used as long command line option */
char *helpstr; /* help string */
unsigned int paramflags; /* value is a "ored" combination of above PARAMFLAG_XXXX values */
union { /* pointer to the parameter value, completed by the config module */
char **strptr;
char **strlistptr;
uint8_t *u8ptr;
char *i8ptr;
int8_t *i8ptr;
uint16_t *u16ptr;
int16_t *i16ptr;
uint32_t *uptr;
@@ -72,18 +117,21 @@ typedef struct paramdef
uint64_t *u64ptr;
int64_t *i64ptr;
double *dblptr;
void *voidptr;
} ;
union { /* default parameter value, to be used when PARAMFLAG_MANDATORY is not specified */
char *defstrval;
char **defstrlistval;
uint32_t defuintval;
int defintval;
uint64_t defint64val;
int *defintarrayval;
double defdblval;
char *defstrval;
char **defstrlistval;
uint32_t defuintval;
int defintval;
uint64_t defint64val;
int *defintarrayval;
double defdblval;
} ;
char type; /* parameter value type, as listed below as TYPE_XXXX macro */
int numelt; /* number of elements in a list or array parameters or max size of string value */
checkedparam_t *chkPptr; /* possible pointer to the structure containing the info used to check parameter values */
int *processedvalue; /* used to store integer values computed from string original value */
} paramdef_t;
#define TYPE_INT TYPE_INT32

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -36,6 +36,7 @@
#include <errno.h>
#include <dlfcn.h>
#include "config_userapi.h"
extern void exit_fun(const char* s); // lte-softmodem clean exit function
configmodule_interface_t *config_get_if(void)
@@ -59,7 +60,7 @@ char * config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length)
*ptr = malloc(length);
if ( *ptr != NULL) {
memset(*ptr,0,length);
if ( (cfgoptions->paramflags & PARAMFLAG_NOFREE) != 0) {
if ( (cfgoptions->paramflags & PARAMFLAG_NOFREE) == 0) {
config_get_if()->ptrs[config_get_if()->numptrs] = *ptr;
config_get_if()->numptrs++;
}
@@ -111,7 +112,29 @@ int tmpval=val;
break;
}
}
void config_assign_processedint(paramdef_t *cfgoption, int val) {
cfgoption->processedvalue = malloc(sizeof(int));
if ( cfgoption->processedvalue != NULL) {
*(cfgoption->processedvalue) = val;
} else {
fprintf (stderr,"[CONFIG] %s %d malloc error\n",__FILE__, __LINE__);
exit(-1);
}
}
int config_get_processedint(paramdef_t *cfgoption) {
int ret;
if ( cfgoption->processedvalue != NULL) {
ret=*(cfgoption->processedvalue);
free( cfgoption->processedvalue);
cfgoption->processedvalue=NULL;
printf_params("[CONFIG] %s: set from %s to %i\n",cfgoption->optname, *(cfgoption->strptr), ret);
} else {
fprintf (stderr,"[CONFIG] %s %d %s has no processed integer availablle\n",__FILE__, __LINE__, cfgoption->optname);
ret=0;
}
return ret;
}
void config_printhelp(paramdef_t *params,int numparams)
{
for (int i=0 ; i<numparams ; i++) {
@@ -124,6 +147,27 @@ void config_printhelp(paramdef_t *params,int numparams)
}
}
int config_execcheck(paramdef_t *params,int numparams, char *prefix)
{
int st=0;
for (int i=0 ; i<numparams ; i++) {
if ( params[i].chkPptr == NULL) {
continue;
}
if (params[i].chkPptr->s4.f4 != NULL) {
st += params[i].chkPptr->s4.f4(&(params[i]));
}
}
if (st != 0) {
fprintf(stderr,"[CONFIG] config_execcheck: %i parameters with wrong value\n", -st);
if ( CONFIG_ISFLAGSET(CONFIG_NOABORTONCHKF) == 0) {
exit_fun("exit because configuration failed\n");
}
}
return st;
}
int config_get(paramdef_t *params,int numparams, char *prefix)
{
int ret= -1;
@@ -137,6 +181,7 @@ configmodule_interface_t *cfgif = config_get_if();
ret = config_get_if()->get(params, numparams,prefix);
if (ret >= 0) {
config_process_cmdline(params,numparams,prefix);
config_execcheck(params,numparams,prefix);
}
return ret;
}
@@ -152,6 +197,89 @@ int config_isparamset(paramdef_t *params,int paramidx)
}
}
int config_getparamval_fromparamdefidx(paramdef_t *cfgoptions,int paramidx) {
void print_intvalueerror(paramdef_t *param, char *fname, int *okval, int numokval) {
fprintf(stderr,"[CONFIG] %s: %s: %i invalid value, authorized values:\n ",
fname,param->optname, (int)*(param->uptr));
for ( int i=0; i<numokval ; i++) {
fprintf(stderr, " %i",okval[i]);
}
fprintf(stderr, " \n");
}
int config_check_intval(paramdef_t *param)
{
if ( param == NULL ){
fprintf(stderr,"[CONFIG] config_check_intval: NULL param argument\n");
return -1;
}
for ( int i=0; i<param->chkPptr->s1.num_okintval ; i++) {
if( *(param->uptr) == param->chkPptr->s1.okintval[i] ) {
return 0;
}
}
print_intvalueerror(param,"config_check_intval", param->chkPptr->s1.okintval,param->chkPptr->s1.num_okintval);
return -1;
}
int config_check_modify_integer(paramdef_t *param)
{
for (int i=0; i < param->chkPptr->s1a.num_okintval ; i++) {
if (*(param->uptr) == param->chkPptr->s1a.okintval[i] ) {
printf_params("[CONFIG] %s: read value %i, set to %i\n",param->optname,*(param->uptr),param->chkPptr->s1a.setintval [i]);
*(param->uptr) = param->chkPptr->s1a.setintval [i];
return 0;
}
}
print_intvalueerror(param,"config_check_modify_integer", param->chkPptr->s1a.okintval,param->chkPptr->s1a.num_okintval);
return -1;
}
int config_check_intrange(paramdef_t *param)
{
if( *(param->iptr) >= param->chkPptr->s2.okintrange[0] && *(param->iptr) <= param->chkPptr->s2.okintrange[1] ) {
return 0;
}
fprintf(stderr,"[CONFIG] config_check_intrange: %s: %i invalid value, authorized range: %i %i\n",
param->optname, (int)*(param->uptr), param->chkPptr->s2.okintrange[0], param->chkPptr->s2.okintrange[1]);
return -1;
}
void print_strvalueerror(paramdef_t *param, char *fname, char **okval, int numokval) {
fprintf(stderr,"[CONFIG] %s: %s: %s invalid value, authorized values:\n ",
fname,param->optname, *(param->strptr));
for ( int i=0; i<numokval ; i++) {
fprintf(stderr, " %s",okval[i]);
}
fprintf(stderr, " \n");
}
int config_check_strval(paramdef_t *param)
{
if ( param == NULL ){
fprintf(stderr,"[CONFIG] config_check_strval: NULL param argument\n");
return -1;
}
for ( int i=0; i<param->chkPptr->s3.num_okstrval ; i++) {
if( strcasecmp(*(param->strptr),param->chkPptr->s3.okstrval[i] ) == 0) {
return 0;
}
}
print_strvalueerror(param, "config_check_strval", param->chkPptr->s3.okstrval, param->chkPptr->s3.num_okstrval);
return -1;
}
int config_checkstr_assign_integer(paramdef_t *param)
{
for (int i=0; i < param->chkPptr->s3a.num_okstrval ; i++) {
if (strcasecmp(*(param->strptr),param->chkPptr->s3a.okstrval[i] ) == 0) {
config_assign_processedint(param, param->chkPptr->s3a.setintval[i]);
return 0;
}
}
print_strvalueerror(param, "config_check_strval", param->chkPptr->s3a.okstrval, param->chkPptr->s3a.num_okstrval);
return -1;
}

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -38,24 +38,34 @@
extern "C"
{
#endif
#define DEFAULT_CFGFILENAME "oaisoftmodem.conf"
#define DEFAULT_CFGMODE "libconfig"
#define CONFIG_GETSOURCE ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgmode )
#define CONFIG_GETNUMP ( (config_get_if()==NULL) ? 0 : config_get_if()->num_cfgP )
#define CONFIG_GETP(P) ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgP[P] )
#define CONFIG_ISFLAGSET(P) ( (config_get_if()==NULL) ? 0 : !!(config_get_if()->rtflags & P))
#define CONFIG_ISPARAMFLAGSET(P,F) ( !!(P.paramflags & F))
/* utility functions, to be used by configuration module and/or configuration libraries */
extern configmodule_interface_t *config_get_if(void);
extern char * config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) ;
extern void config_printhelp(paramdef_t *,int numparams);
extern int config_process_cmdline(paramdef_t *params,int numparams, char *prefix);
extern int config_get(paramdef_t *params,int numparams, char *prefix);
extern int config_isparamset(paramdef_t *params,int paramidx);
extern void config_assign_processedint(paramdef_t *cfgoption, int val);
extern void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val);
extern int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix);
extern int config_getparamval_fromparamdefidx(paramdef_t *cfgoptions,int paramidx);
/* apis to get parameters, to be used by oai modules, at configuration time */
extern int config_get(paramdef_t *params,int numparams, char *prefix);
#define config_getlist config_get_if()->getlist
/* apis to retrieve parameters info after calling get or getlist functions */
extern int config_isparamset(paramdef_t *params,int paramidx);
extern int config_get_processedint(paramdef_t *cfgoption);
/* functions to be used in parameters definition, to check parameters values */
extern int config_check_intval(paramdef_t *param);
extern int config_check_modify_integer(paramdef_t *param);
extern int config_check_intrange(paramdef_t *param);
extern int config_check_strval(paramdef_t *param);
extern int config_checkstr_assign_integer(paramdef_t *param);
#define CONFIG_GETCONFFILE (config_get_if()->cfgP[0])
#ifdef __cplusplus

View File

@@ -1,3 +1,33 @@
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file common/config/libconfig/config_libconfig.c
* \brief: implementation libconfig configuration library
* \author Francois TABURET
* \date 2017
* \version 0.1
* \company NOKIA BellLabs France
* \email: francois.taburet@nokia-bell-labs.com
* \note
* \warning
*/
#define _GNU_SOURCE
#include <libconfig.h>
@@ -21,21 +51,23 @@ int read_strlist(paramdef_t *cfgoptions,config_setting_t *setting, char *cfgpath
{
const char *str;
int st;
int numelt;
cfgoptions->numelt=config_setting_length(setting);
cfgoptions->strlistptr=malloc(sizeof(char *) * (cfgoptions->numelt));
numelt=config_setting_length(setting);
config_check_valptr(cfgoptions,(char **)&(cfgoptions->strlistptr), sizeof(char *) * numelt);
st=0;
for (int i=0; i< cfgoptions->numelt && cfgoptions->strlistptr != NULL; i++) {
for (int i=0; i< numelt ; i++) {
str=config_setting_get_string_elem(setting,i);
if (str==NULL) {
printf("[LIBCONFIG] %s%i not found in config file\n", cfgoptions->optname,i);
} else {
cfgoptions->strlistptr[i]=malloc(strlen(str)+1);
config_check_valptr(cfgoptions,&(cfgoptions->strlistptr[i]),strlen(str)+1);
sprintf(cfgoptions->strlistptr[i],"%s",str);
st++;
printf_params("[LIBCONFIG] %s%i: %s\n", cfgpath,i,cfgoptions->strlistptr[i]);
}
}
cfgoptions->numelt=numelt;
return st;
}
@@ -98,6 +130,7 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
{
case TYPE_STRING:
printf("call config_lookup_string for '%s' %p\n", cfgpath, &(libconfig_privdata.cfg)); fflush(stdout);
if ( config_lookup_string(&(libconfig_privdata.cfg),cfgpath, (const char **)&str)) {
if ( cfgoptions[i].numelt > 0 && str != NULL && strlen(str) >= cfgoptions[i].numelt ) {
fprintf(stderr,"[LIBCONFIG] %s: %s exceeds maximum length of %i bytes, value truncated\n",
@@ -108,10 +141,10 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1);
sprintf( *(cfgoptions[i].strptr) , "%s", str);
printf_params("[LIBCONFIG] %s: %s\n", cfgpath,*(cfgoptions[i].strptr) );
printf_params("[LIBCONFIG] %s: \"%s\"\n", cfgpath,*(cfgoptions[i].strptr) );
} else {
sprintf( (char *)(cfgoptions[i].strptr) , "%s", str);
printf_params("[LIBCONFIG] %s: %s\n", cfgpath,(char *)cfgoptions[i].strptr );
printf_params("[LIBCONFIG] %s: \"%s\"\n", cfgpath,(char *)cfgoptions[i].strptr );
}
} else {
if( cfgoptions[i].defstrval != NULL) {
@@ -121,10 +154,10 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(cfgoptions[i].defstrval)+1);
sprintf(*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval);
printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, *(cfgoptions[i].strptr));
printf_params("[LIBCONFIG] %s set to default value \"%s\"\n", cfgpath, *(cfgoptions[i].strptr));
} else {
sprintf((char *)(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval);
printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, (char *)cfgoptions[i].strptr);
sprintf((char *)*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval);
printf_params("[LIBCONFIG] %s set to default value \"%s\"\n", cfgpath, (char *)*(cfgoptions[i].strptr));
}
} else {
notfound=1;
@@ -374,6 +407,7 @@ void config_libconfig_end(void )
config_destroy(&(libconfig_privdata.cfg));
if ( libconfig_privdata.configfile != NULL ) {
free(libconfig_privdata.configfile);
libconfig_privdata.configfile=NULL;
}
}

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -35,11 +35,12 @@
#include <pthread.h>
#include "COMMON/platform_constants.h"
#include "PHY/defs.h"
#include "PHY/defs_eNB.h"
#include "PHY/types.h"
#include "PHY/impl_defs_top.h"
#include "PHY/impl_defs_lte.h"
#include "RRC/LITE/defs.h"
#include "RRC/LTE/rrc_defs.h"
#include "flexran_agent_defs.h"
#include "gtpv1u.h"
#include "NwGtpv1u.h"
@@ -47,6 +48,8 @@
#include "NwGtpv1uPrivate.h"
#include "gtpv1u_eNB_defs.h"
#include "PHY/defs_L1_NB_IoT.h"
#include "RRC/LTE/defs_NB_IoT.h"
typedef struct {
/// RAN context config file name
char *config_file_name;
@@ -54,22 +57,36 @@ typedef struct {
int nb_inst;
/// Number of Component Carriers per instance in this node
int *nb_CC;
/// Number of NB_IoT instances in this node
int nb_nb_iot_rrc_inst;
/// Number of MACRLC instances in this node
int nb_macrlc_inst;
/// Number of NB_IoT MACRLC instances in this node
int nb_nb_iot_macrlc_inst;
/// Number of component carriers per instance in this node
int *nb_mac_CC;
/// Number of L1 instances in this node
int nb_L1_inst;
/// Number of NB_IoT L1 instances in this node
int nb_nb_iot_L1_inst;
/// Number of Component Carriers per instance in this node
int *nb_L1_CC;
/// Number of RU instances in this node
int nb_RU;
/// FlexRAN context variables
flexran_agent_info_t **flexran;
/// eNB context variables
struct PHY_VARS_eNB_s ***eNB;
/// NB_IoT L1 context variables
struct PHY_VARS_eNB_NB_IoT_s **L1_NB_IoT;
/// RRC context variables
struct eNB_RRC_INST_s **rrc;
/// RRC context variables
/// NB_IoT RRC context variables
//struct eNB_RRC_INST_NB_IoT_s **nb_iot_rrc;
/// MAC context variables
struct eNB_MAC_INST_s **mac;
/// NB_IoT MAC context variables
struct eNB_MAC_INST_NB_IoT_s **nb_iot_mac;
/// GTPu descriptor
gtpv1u_data_t *gtpv1u_data_g;
/// RU descriptors. These describe what each radio unit is supposed to do and contain the necessary functions for fronthaul interfaces

View File

@@ -88,7 +88,7 @@ static void new_thread(void *(*f)(void *), void *data)
/* defined in local_tracer.c */
void T_local_tracer_main(int remote_port, int wait_for_tracer,
int local_socket);
int local_socket, char *shm_file);
/* We monitor the tracee and the local tracer processes.
* When one dies we forcefully kill the other.
@@ -113,6 +113,9 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
int s;
int T_shm_fd;
int child1, child2;
char shm_file[128];
sprintf(shm_file, "/%s%d", T_SHM_FILENAME, getpid());
if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair))
{ perror("socketpair"); abort(); }
@@ -122,7 +125,8 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
child1 = fork(); if (child1 == -1) abort();
if (child1 == 0) {
close(socket_pair[1]);
T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0]);
T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0],
shm_file);
exit(0);
}
close(socket_pair[0]);
@@ -142,13 +146,13 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
T_socket = s;
/* setup shared memory */
T_shm_fd = shm_open(T_SHM_FILENAME, O_RDWR /*| O_SYNC*/, 0666);
shm_unlink(T_SHM_FILENAME);
if (T_shm_fd == -1) { perror(T_SHM_FILENAME); abort(); }
T_shm_fd = shm_open(shm_file, O_RDWR /*| O_SYNC*/, 0666);
shm_unlink(shm_file);
if (T_shm_fd == -1) { perror(shm_file); abort(); }
T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
PROT_READ | PROT_WRITE, MAP_SHARED, T_shm_fd, 0);
if (T_cache == NULL)
{ perror(T_SHM_FILENAME); abort(); }
if (T_cache == MAP_FAILED)
{ perror(shm_file); abort(); }
close(T_shm_fd);
new_thread(T_receive_thread, NULL);

View File

@@ -110,6 +110,16 @@ typedef struct {
extern volatile int *T_freelist_head;
extern T_cache_t *T_cache;
/* When running the basic simulator, we may fill the T cache too fast.
* Let's not crash if it's full, just wait.
*/
#if BASIC_SIMULATOR
# define T_BASIC_SIMULATOR_WAIT \
while (T_cache[T_LOCAL_slot].busy) usleep(100)
#else
# define T_BASIC_SIMULATOR_WAIT /* */
#endif
/* used at header of Tn, allocates buffer */
#define T_LOCAL_DATA \
char *T_LOCAL_buf; \
@@ -118,6 +128,7 @@ extern T_cache_t *T_cache;
T_LOCAL_slot = __sync_fetch_and_add(T_freelist_head, 1) \
& (T_CACHE_SIZE - 1); \
(void)__sync_fetch_and_and(T_freelist_head, T_CACHE_SIZE - 1); \
T_BASIC_SIMULATOR_WAIT; \
if (T_cache[T_LOCAL_slot].busy) { \
printf("%s:%d:%s: T cache is full - consider increasing its size\n", \
__FILE__, __LINE__, __FUNCTION__); \

View File

@@ -8,10 +8,20 @@
#define T_MAX_ARGS 16
/* maximum size of a message - increase if needed */
#define T_BUFFER_MAX (1024*64)
#if BASIC_SIMULATOR
/* let's have 100 RBs functional for the basic simulator */
# define T_BUFFER_MAX (1024*64*2)
#else
# define T_BUFFER_MAX (1024*64)
#endif
/* size of the local cache for messages (must be pow(2,something)) */
#define T_CACHE_SIZE (8192 * 2)
#if BASIC_SIMULATOR
/* we don't need much space for the basic simulator */
# define T_CACHE_SIZE 1024
#else
# define T_CACHE_SIZE (8192 * 2)
#endif
/* maximum number of bytes a message can contain */
#ifdef T_SEND_TIME
@@ -29,10 +39,10 @@ typedef struct {
#define T_SHM_FILENAME "/T_shm_segment"
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
#define VCD_NUM_FUNCTIONS 178
#define VCD_NUM_FUNCTIONS 187
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
#define VCD_NUM_VARIABLES 128
#define VCD_NUM_VARIABLES 131
/* first VCD function (to be kept up to date! see in T_messages.txt) */
#define VCD_FIRST_FUNCTION ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)

View File

@@ -185,6 +185,10 @@ ID = ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST
DESC = RRC connection reestablishment request
GROUP = ALL:RRC:ENB
FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
ID = ENB_RRC_CONNECTION_REESTABLISHMENT
DESC = RRC connection reestablishment
GROUP = ALL:RRC:ENB
FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
ID = ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE
DESC = RRC connection reestablishment complete
GROUP = ALL:RRC:ENB
@@ -1438,6 +1442,18 @@ ID = VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING
DESC = VCD variable UE0_TRX_WRITE_NS_MISSING
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_CPUID_ENB_THREAD_RXTX
DESC = VCD variable CPUID_ENB_THREAD_RXTX
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_CPUID_RU_THREAD
DESC = VCD variable CPUID_RU_THREAD
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_CPUID_RU_THREAD_TX
DESC = VCD variable CPUID_RU_THREAD_TX
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
#functions
@@ -2157,3 +2173,39 @@ ID = VCD_FUNCTION_TRX_DECOMPR_IF
DESC = VCD function TRX_DECOMPR_IF
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_NFAPI
DESC = VCD function NFAPI
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_GENERATE_PCFICH
DESC = VCD function GENERATE_PCFICH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_GENERATE_DCI0
DESC = VCD function GENERATE_DCI0
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_GENERATE_DLSCH
DESC = VCD function GENERATE_DLSCH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_GENERATE_PHICH
DESC = VCD function GENERATE_PHICH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_PDCCH_SCRAMBLING
DESC = VCD function PDCCH_SCRAMBLING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_PDCCH_MODULATION
DESC = VCD function PDCCH_MODULATION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_PDCCH_INTERLEAVING
DESC = VCD function PDCCH_INTERLEAVING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_PDCCH_TX
DESC = VCD function PDCCH_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value

View File

@@ -300,6 +300,20 @@ static void forward(void *_forwarder, char *buf, int size)
if (f->tail != NULL) f->tail->next = new;
f->tail = new;
#if BASIC_SIMULATOR
/* When runnng the basic simulator, the tracer may be too slow.
* Let's not take too much memory in the tracee and
* wait if there is too much data to send. 200MB is
* arbitrary.
*/
while (f->memusage > 200 * 1024 * 1024) {
if (pthread_cond_signal(&f->cond)) abort();
if (pthread_mutex_unlock(&f->lock)) abort();
usleep(1000);
if (pthread_mutex_lock(&f->lock)) abort();
}
#endif /* BASIC_SIMULATOR */
f->memusage += size+4;
/* warn every 100MB */
if (f->memusage > f->last_warning_memusage &&
@@ -326,17 +340,17 @@ static void wait_message(void)
while (T_local_cache[T_busylist_head].busy == 0) usleep(1000);
}
static void init_shm(void)
static void init_shm(char *shm_file)
{
int i;
int s = shm_open(T_SHM_FILENAME, O_RDWR | O_CREAT /*| O_SYNC*/, 0666);
if (s == -1) { perror(T_SHM_FILENAME); abort(); }
int s = shm_open(shm_file, O_RDWR | O_CREAT /*| O_SYNC*/, 0666);
if (s == -1) { perror(shm_file); abort(); }
if (ftruncate(s, T_CACHE_SIZE * sizeof(T_cache_t)))
{ perror(T_SHM_FILENAME); abort(); }
{ perror(shm_file); abort(); }
T_local_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
PROT_READ | PROT_WRITE, MAP_SHARED, s, 0);
if (T_local_cache == NULL)
{ perror(T_SHM_FILENAME); abort(); }
if (T_local_cache == MAP_FAILED)
{ perror(shm_file); abort(); }
close(s);
/* let's garbage the memory to catch some potential problems
@@ -347,7 +361,7 @@ static void init_shm(void)
}
void T_local_tracer_main(int remote_port, int wait_for_tracer,
int local_socket)
int local_socket, char *shm_file)
{
int s;
int port = remote_port;
@@ -357,7 +371,7 @@ void T_local_tracer_main(int remote_port, int wait_for_tracer,
/* write on a socket fails if the other end is closed and we get SIGPIPE */
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
init_shm();
init_shm(shm_file);
s = local_socket;
if (dont_wait) {

View File

@@ -12,7 +12,6 @@
#include "gui/gui.h"
#include "filter/filter.h"
#include "utils.h"
#include "../T_defs.h"
#include "event_selector.h"
#include "openair_logo.h"
#include "config.h"
@@ -875,6 +874,8 @@ int main(int n, char **v)
if (pthread_mutex_init(&enb_data.lock, NULL)) abort();
setup_event_selector(g, database, is_on, is_on_changed, &enb_data);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
restart:
clear_remote_config();
enb_data.socket = connect_to(ip, port);
@@ -884,9 +885,8 @@ restart:
/* read messages */
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(enb_data.socket, v, database);
e = get_event(enb_data.socket, &ebuf, database);
if (e.type == -1) goto restart;
if (pthread_mutex_lock(&enb_data.lock)) abort();
handle_event(h, e);

View File

@@ -6,7 +6,7 @@
#include <stdlib.h>
#include <string.h>
event get_event(int socket, char *event_buffer, void *database)
event get_event(int socket, OBUF *event_buffer, void *database)
{
#ifdef T_SEND_TIME
struct timespec t;
@@ -29,17 +29,23 @@ again:
#endif
if (fullread(socket, &type, sizeof(int)) == -1) goto read_error;
length -= sizeof(int);
if (fullread(socket, event_buffer, length) == -1) goto read_error;
if (event_buffer->omaxsize < length) {
event_buffer->omaxsize = (length + 65535) & ~65535;
event_buffer->obuf = realloc(event_buffer->obuf, event_buffer->omaxsize);
if (event_buffer->obuf == NULL) { printf("out of memory\n"); exit(1); }
}
if (fullread(socket, event_buffer->obuf, length) == -1) goto read_error;
event_buffer->osize = length;
if (type == -1) append_received_config_chunk(event_buffer, length);
if (type == -1) append_received_config_chunk(event_buffer->obuf, length);
if (type == -2) verify_config();
if (type == -1 || type == -2) goto again;
#ifdef T_SEND_TIME
return new_event(t, type, length, event_buffer, database);
return new_event(t, type, length, event_buffer->obuf, database);
#else
return new_event(type, length, event_buffer, database);
return new_event(type, length, event_buffer->obuf, database);
#endif
read_error:

View File

@@ -1,6 +1,7 @@
#ifndef _EVENT_H_
#define _EVENT_H_
#include "utils.h"
#include "../T_defs.h"
#ifdef T_SEND_TIME
#include <time.h>
@@ -37,7 +38,7 @@ typedef struct {
int ecount;
} event;
event get_event(int s, char *v, void *d);
event get_event(int s, OBUF *v, void *d);
#ifdef T_SEND_TIME
event new_event(struct timespec sending_time, int type,

View File

@@ -99,10 +99,11 @@ int main(int n, char **v)
found = 0;
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(fd, v, database);
e = get_event(fd, &ebuf, database);
if (e.type == -1) break;
if (e.type != input_event_id) continue;
for (i = 0; i < filter_count; i++)

View File

@@ -1,6 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "utils.h"
#include "../T_defs.h"
void usage(void)
@@ -35,14 +36,22 @@ int main(int n, char **v)
in = fopen(input_filename, "r");
if (in == NULL) { perror(input_filename); abort(); }
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
while (1) {
int type;
int32_t length;
char v[T_BUFFER_MAX];
char *v;
int vpos = 0;
/* read event from file */
if (fread(&length, 4, 1, in) != 1) break;
if (ebuf.omaxsize < length) {
ebuf.omaxsize = (length + 65535) & ~65535;
ebuf.obuf = realloc(ebuf.obuf, ebuf.omaxsize);
if (ebuf.obuf == NULL) { printf("out of memory\n"); exit(1); }
}
v = ebuf.obuf;
memcpy(v+vpos, &length, 4);
vpos += 4;
#ifdef T_SEND_TIME

View File

@@ -104,11 +104,12 @@ err:
fd = open(file, O_RDONLY);
if (fd == -1) { perror(file); exit(1); }
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* get wanted frame/subframe */
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(fd, v, database);
e = get_event(fd, &ebuf, database);
if (e.type == -1) break;
if (e.type != input_event_id) continue;
if (verbose)

View File

@@ -100,10 +100,12 @@ err:
int last_frame = -1;
int last_subframe = -1;
int subframe_written = 0;
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(fd, v, database);
e = get_event(fd, &ebuf, database);
if (e.type == -1) break;
if (e.type != output_event_id) continue;
if (verbose)

View File

@@ -73,17 +73,22 @@ int main(int n, char **v)
socket_send(socket, is_on, number_of_events * sizeof(int)) == -1)
abort();
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
char dump[10][T_BUFFER_MAX];
event dump_ev[10];
FILE *z = fopen("/tmp/dd", "w"); if (z == NULL) abort();
while (1) {
char v[T_BUFFER_MAX];
char *v;
event e;
e = get_event(socket, v, database);
e = get_event(socket, &ebuf, database);
v = ebuf.obuf;
if (e.type == -1) break;
if (e.type == ev_input) {
int sf = e.e[2].i;
memcpy(dump[sf], v, T_BUFFER_MAX);
if (ebuf.osize > T_BUFFER_MAX)
{ printf("event size too big\n"); exit(1); }
memcpy(dump[sf], ebuf.obuf, ebuf.osize);
dump_ev[sf] = e;
printf("input %d/%d\n", e.e[1].i, sf);
if (fwrite(dump_ev[sf].e[4].b, dump_ev[sf].e[4].bsize, 1, z) != 1) abort();

View File

@@ -84,11 +84,12 @@ int main(int n, char **v)
socket_send(socket, is_on, number_of_events * sizeof(int)) == -1)
abort();
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
while (1) {
char v[T_BUFFER_MAX];
event e;
int on_off;
e = get_event(socket, v, database);
e = get_event(socket, &ebuf, database);
if (e.type == -1) break;
if (e.type != ev_fun)
{ printf("unhandled event %d\n", e.type); continue; }

View File

@@ -246,11 +246,12 @@ int main(int n, char **v)
new_thread(receiver, &d);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* read messages */
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(in, v, database);
e = get_event(in, &ebuf, database);
if (e.type == -1) break;
if (!(e.type == ul_id || e.type == dl_id)) continue;
handle_event(h, e);

View File

@@ -123,14 +123,22 @@ int main(int n, char **v)
if (signal(SIGINT, force_stop) == SIG_ERR) abort();
if (signal(SIGTSTP, force_stop) == SIG_ERR) abort();
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* read messages */
while (run) {
int type;
int32_t length;
char v[T_BUFFER_MAX];
char *v;
int vpos = 0;
if (fullread(socket, &length, 4) == -1) goto read_error;
if (ebuf.omaxsize < length) {
ebuf.omaxsize = (length + 65535) & ~65535;
ebuf.obuf = realloc(ebuf.obuf, ebuf.omaxsize);
if (ebuf.obuf == NULL) { printf("out of memory\n"); exit(1); }
}
v = ebuf.obuf;
memcpy(v+vpos, &length, 4);
vpos += 4;
#ifdef T_SEND_TIME

View File

@@ -136,14 +136,22 @@ int main(int n, char **v)
new_thread(get_message_thread, &socket);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
while (1) {
int type;
int32_t length;
char v[T_BUFFER_MAX];
char *v;
int vpos = 0;
/* read event from file */
if (fread(&length, 4, 1, in) != 1) break;
if (ebuf.omaxsize < length) {
ebuf.omaxsize = (length + 65535) & ~65535;
ebuf.obuf = realloc(ebuf.obuf, ebuf.omaxsize);
if (ebuf.obuf == NULL) { printf("out of memory\n"); exit(1); }
}
v = ebuf.obuf;
memcpy(v+vpos, &length, 4);
vpos += 4;
#ifdef T_SEND_TIME

View File

@@ -10,7 +10,6 @@
#include "view/view.h"
#include "gui/gui.h"
#include "utils.h"
#include "../T_defs.h"
#include "event_selector.h"
#include "config.h"
@@ -182,11 +181,12 @@ int main(int n, char **v)
/* send the first message - activate selected traces */
is_on_changed(&textlog_data);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* read messages */
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(textlog_data.socket, v, database);
e = get_event(textlog_data.socket, &ebuf, database);
if (e.type == -1) abort();
handle_event(h, e);
}

View File

@@ -287,11 +287,12 @@ int main(int n, char **v)
if (signal(SIGINT, force_stop) == SIG_ERR) abort();
if (signal(SIGTSTP, force_stop) == SIG_ERR) abort();
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* read messages */
while (run) {
char v[T_BUFFER_MAX];
event e;
e = get_event(socket, v, database);
e = get_event(socket, &ebuf, database);
if (e.type == -1) { printf("disconnected? let's quit gently\n"); break; }
handle_event(h, e);
}

View File

@@ -12,7 +12,6 @@
#include "gui/gui.h"
#include "filter/filter.h"
#include "utils.h"
#include "../T_defs.h"
#include "event_selector.h"
#include "openair_logo.h"
#include "config.h"
@@ -854,6 +853,8 @@ int main(int n, char **v)
if (pthread_mutex_init(&ue_data.lock, NULL)) abort();
setup_event_selector(g, database, is_on, is_on_changed, &ue_data);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
restart:
clear_remote_config();
ue_data.socket = connect_to(ip, port);
@@ -863,9 +864,8 @@ restart:
/* read messages */
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(ue_data.socket, v, database);
e = get_event(ue_data.socket, &ebuf, database);
if (e.type == -1) goto restart;
if (pthread_mutex_lock(&ue_data.lock)) abort();
handle_event(h, e);

View File

@@ -10,7 +10,6 @@
#include "view/view.h"
#include "gui/gui.h"
#include "utils.h"
#include "../T_defs.h"
#include "event_selector.h"
#include "config.h"
@@ -188,11 +187,12 @@ int main(int n, char **v)
/* send the first message - activate selected traces */
is_on_changed(&vcd_data);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* read messages */
while (1) {
char v[T_BUFFER_MAX];
event e;
e = get_event(vcd_data.socket, v, database);
e = get_event(vcd_data.socket, &ebuf, database);
if (e.type == -1) abort();
handle_event(h, e);
}

View File

@@ -35,9 +35,11 @@
#ifndef ASSERTIONS_H_
#define ASSERTIONS_H_
void output_log_mem(void);
#define _Assert_Exit_ \
{ \
fprintf(stderr, "\nExiting execution\n"); \
output_log_mem(); \
display_backtrace(); \
fflush(stdout); \
fflush(stderr); \

View File

@@ -31,10 +31,6 @@
#include <sys/epoll.h>
#include <sys/eventfd.h>
#ifdef RTAI
# include <rtai_shm.h>
#endif
#if !defined(TRUE)
#define TRUE 1
#endif
@@ -45,11 +41,6 @@
#include "intertask_interface.h"
#include "intertask_interface_dump.h"
#if defined(OAI_EMU) || defined(RTAI)
# include "memory_pools.h"
# include "vcd_signal_dumper.h"
#endif
#if T_TRACER
#include "T.h"
#endif
@@ -63,17 +54,6 @@
#include "signals.h"
#include "timer.h"
#ifdef UE_EXPANSION
#include "log.h"
#endif
#ifdef RTAI
# include <rtai.h>
# include <rtai_fifos.h>
# define FIFO_PRINTF_MAX_STRING_SIZE 1000
# define FIFO_PRINTF_NO 62
# define FIFO_PRINTF_SIZE 65536
#endif
/* ITTI DEBUG groups */
#define ITTI_DEBUG_POLL (1<<0)
@@ -86,21 +66,14 @@
const int itti_debug = (ITTI_DEBUG_ISSUES | ITTI_DEBUG_MP_STATISTICS);
/* Don't flush if using RTAI */
#ifdef RTAI
# define ITTI_DEBUG(m, x, args...) do { if ((m) & itti_debug) rt_log_debug (x, ##args); } while(0);
#else
# define ITTI_DEBUG(m, x, args...) do { if ((m) & itti_debug) {fprintf(stdout, "[ITTI][D]"x, ##args); fflush (stdout);} } while(0);
#endif
#define ITTI_ERROR(x, args...) do { fprintf(stdout, "[ITTI][E]"x, ##args); fflush (stdout); } while(0);
/* Global message size */
#define MESSAGE_SIZE(mESSAGEiD) (sizeof(MessageHeader) + itti_desc.messages_info[mESSAGEiD].size)
#ifdef RTAI
# define ITTI_MEM_PAGE_SIZE (1024)
# define ITTI_MEM_SIZE (16 * 1024 * 1024)
#endif
extern int emulate_rf;
typedef enum task_state_s {
TASK_STATE_NOT_CONFIGURED, TASK_STATE_STARTING, TASK_STATE_READY, TASK_STATE_ENDED, TASK_STATE_MAX,
@@ -140,13 +113,11 @@ typedef struct thread_desc_s {
int epoll_nb_events;
//#ifdef RTAI
/* Flag to mark real time thread */
unsigned real_time;
/* Counter to indicate from RTAI threads that messages are pending for the thread */
/* Counter to indicate that messages are pending for the thread */
unsigned messages_pending;
//#endif
} thread_desc_t;
typedef struct task_desc_s {
@@ -178,17 +149,6 @@ typedef struct itti_desc_s {
volatile uint32_t created_tasks;
volatile uint32_t ready_tasks;
volatile int wait_tasks;
#ifdef RTAI
pthread_t rt_relay_thread;
#endif
#if defined(OAI_EMU) || defined(RTAI)
memory_pools_handle_t memory_pools_handle;
uint64_t vcd_poll_msg;
uint64_t vcd_receive_msg;
uint64_t vcd_send_msg;
#endif
} itti_desc_t;
static itti_desc_t itti_desc;
@@ -197,20 +157,8 @@ void *itti_malloc(task_id_t origin_task_id, task_id_t destination_task_id, ssize
{
void *ptr = NULL;
#if defined(OAI_EMU) || defined(RTAI)
ptr = memory_pools_allocate (itti_desc.memory_pools_handle, size, origin_task_id, destination_task_id);
if (ptr == NULL) {
char *statistics = memory_pools_statistics (itti_desc.memory_pools_handle);
ITTI_ERROR (" Memory pools statistics:\n%s", statistics);
free (statistics);
}
#else
ptr = malloc (size);
if (ptr) memset(ptr,0,size);
#endif
AssertFatal (ptr != NULL, "Memory allocation of %d bytes failed (%d -> %d)!\n", (int) size, origin_task_id, destination_task_id);
@@ -222,13 +170,7 @@ int itti_free(task_id_t task_id, void *ptr)
int result = EXIT_SUCCESS;
AssertFatal (ptr != NULL, "Trying to free a NULL pointer (%d)!\n", task_id);
#if defined(OAI_EMU) || defined(RTAI)
result = memory_pools_free (itti_desc.memory_pools_handle, ptr, task_id);
AssertError (result == EXIT_SUCCESS, {}, "Failed to free memory at %p (%d)!\n", ptr, task_id);
#else
free (ptr);
#endif
return (result);
}
@@ -284,27 +226,6 @@ static task_id_t itti_get_current_task_id(void)
return TASK_UNKNOWN;
}
#ifdef RTAI
static void rt_log_debug(char *format, ...)
{
task_id_t task_id;
va_list args;
char log_buffer[FIFO_PRINTF_MAX_STRING_SIZE];
int len;
task_id = itti_get_current_task_id ();
len = snprintf(log_buffer, FIFO_PRINTF_MAX_STRING_SIZE-1, "[ITTI][D][%s]", itti_get_task_name(task_id));
va_start(args, format);
len += vsnprintf(&log_buffer[len], FIFO_PRINTF_MAX_STRING_SIZE-1-len, format, args);
va_end (args);
if (task_id != TASK_UNKNOWN)
fwrite(log_buffer, len, 1, stdout);
else
rtf_put (FIFO_PRINTF_NO, log_buffer, len);
}
#endif
void itti_update_lte_time(uint32_t frame, uint8_t slot)
{
itti_desc.lte_time.frame = frame;
@@ -361,10 +282,6 @@ MessageDef *itti_alloc_new_message_sized(task_id_t origin_task_id, MessagesIds m
AssertFatal (message_id < itti_desc.messages_id_max, "Message id (%d) is out of range (%d)!\n", message_id, itti_desc.messages_id_max);
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG, size);
#endif
if (origin_task_id == TASK_UNKNOWN) {
/* Try to identify real origin task ID */
origin_task_id = itti_get_current_task_id();
@@ -376,10 +293,6 @@ MessageDef *itti_alloc_new_message_sized(task_id_t origin_task_id, MessagesIds m
temp->ittiMsgHeader.originTaskId = origin_task_id;
temp->ittiMsgHeader.ittiMsgSize = size;
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG, 0);
#endif
return temp;
}
@@ -397,11 +310,6 @@ int itti_send_msg_to_task(task_id_t destination_task_id, instance_t instance, Me
message_number_t message_number;
uint32_t message_id;
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG,
__sync_or_and_fetch (&itti_desc.vcd_send_msg, 1L << destination_task_id));
#endif
AssertFatal (message != NULL, "Message is NULL!\n");
AssertFatal (destination_task_id < itti_desc.task_max, "Destination task id (%d) is out of range (%d)\n", destination_task_id, itti_desc.task_max);
@@ -420,16 +328,115 @@ int itti_send_msg_to_task(task_id_t destination_task_id, instance_t instance, Me
/* Increment the global message number */
message_number = itti_increment_message_number ();
#if 0
/* itti dump is disabled */
itti_dump_queue_message (origin_task_id, message_number, message, itti_desc.messages_info[message_id].name,
sizeof(MessageHeader) + message->ittiMsgHeader.ittiMsgSize);
#endif
if (destination_task_id != TASK_UNKNOWN) {
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_ENQUEUE_MESSAGE, VCD_FUNCTION_IN);
memory_pools_set_info (itti_desc.memory_pools_handle, message, 1, destination_task_id);
if (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_ENDED) {
ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Message %s, number %lu with priority %d can not be sent from %s to queue (%u:%s), ended destination task!\n",
itti_desc.messages_info[message_id].name,
message_number,
priority,
itti_get_task_name(origin_task_id),
destination_task_id,
itti_get_task_name(destination_task_id));
} else {
if(!emulate_rf){
/* We cannot send a message if the task is not running */
AssertFatal (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_READY,
"Task %s Cannot send message %s (%d) to thread %d, it is not in ready state (%d)!\n",
itti_get_task_name(origin_task_id),
itti_desc.messages_info[message_id].name,
message_id,
destination_thread_id,
itti_desc.threads[destination_thread_id].task_state);
}
/* Allocate new list element */
new = (message_list_t *) itti_malloc (origin_task_id, destination_task_id, sizeof(struct message_list_s));
/* Fill in members */
new->msg = message;
new->message_number = message_number;
new->message_priority = priority;
/* Enqueue message in destination task queue */
if (lfds611_queue_enqueue(itti_desc.tasks[destination_task_id].message_queue, new) == 0) {
AssertFatal(0, "Error: lfds611_queue_enqueue returns 0, queue is full, exiting\n");
}
{
/* Only use event fd for tasks, subtasks will pool the queue */
if (TASK_GET_PARENT_TASK_ID(destination_task_id) == TASK_UNKNOWN) {
ssize_t write_ret;
eventfd_t sem_counter = 1;
/* Call to write for an event fd must be of 8 bytes */
write_ret = write (itti_desc.threads[destination_thread_id].task_event_fd, &sem_counter, sizeof(sem_counter));
AssertFatal (write_ret == sizeof(sem_counter), "Write to task message FD (%d) failed (%d/%d)\n",
destination_thread_id, (int) write_ret, (int) sizeof(sem_counter));
}
}
ITTI_DEBUG(ITTI_DEBUG_SEND, " Message %s, number %lu with priority %d successfully sent from %s to queue (%u:%s)\n",
itti_desc.messages_info[message_id].name,
message_number,
priority,
itti_get_task_name(origin_task_id),
destination_task_id,
itti_get_task_name(destination_task_id));
}
} else {
/* This is a debug message to TASK_UNKNOWN, we can release safely release it */
int result = itti_free(origin_task_id, message);
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
}
return 0;
}
/* same as itti_send_msg_to_task but returns -1 in case of failure instead of crashing */
/* TODO: this is a hack - the whole logic needs a proper rework. */
/* look for HACK_RLC_UM_LIMIT for others places related to the hack. Please do not remove this comment. */
int itti_try_send_msg_to_task(task_id_t destination_task_id, instance_t instance, MessageDef *message)
{
thread_id_t destination_thread_id;
task_id_t origin_task_id;
message_list_t *new;
uint32_t priority;
message_number_t message_number;
uint32_t message_id;
AssertFatal (message != NULL, "Message is NULL!\n");
AssertFatal (destination_task_id < itti_desc.task_max, "Destination task id (%d) is out of range (%d)\n", destination_task_id, itti_desc.task_max);
destination_thread_id = TASK_GET_THREAD_ID(destination_task_id);
message->ittiMsgHeader.destinationTaskId = destination_task_id;
message->ittiMsgHeader.instance = instance;
message->ittiMsgHeader.lte_time.frame = itti_desc.lte_time.frame;
message->ittiMsgHeader.lte_time.slot = itti_desc.lte_time.slot;
message_id = message->ittiMsgHeader.messageId;
AssertFatal (message_id < itti_desc.messages_id_max, "Message id (%d) is out of range (%d)!\n", message_id, itti_desc.messages_id_max);
origin_task_id = ITTI_MSG_ORIGIN_ID(message);
priority = itti_get_message_priority (message_id);
/* Increment the global message number */
message_number = itti_increment_message_number ();
#if 0
/* itti dump is disabled */
itti_dump_queue_message (origin_task_id, message_number, message, itti_desc.messages_info[message_id].name,
sizeof(MessageHeader) + message->ittiMsgHeader.ittiMsgSize);
#endif
if (destination_task_id != TASK_UNKNOWN) {
if (itti_desc.threads[destination_thread_id].task_state == TASK_STATE_ENDED) {
ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Message %s, number %lu with priority %d can not be sent from %s to queue (%u:%s), ended destination task!\n",
itti_desc.messages_info[message_id].name,
@@ -458,35 +465,10 @@ int itti_send_msg_to_task(task_id_t destination_task_id, instance_t instance, Me
/* Enqueue message in destination task queue */
if (lfds611_queue_enqueue(itti_desc.tasks[destination_task_id].message_queue, new) == 0) {
#ifdef UE_EXPANSION
LOG_I(UDP_, " Assertion Message %s(id:%d), number %lu with priority %d can not be sent from (%u:%s) to queue (%u:%s). discarding...\n",
itti_desc.messages_info[message_id].name,
message_id,
message_number,
priority,
origin_task_id,
itti_get_task_name(origin_task_id),
destination_task_id,
itti_get_task_name(destination_task_id));
int result = itti_free(origin_task_id, message);
AssertFatal( result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
return 0;
#else
AssertFatal(0, "Error: lfds611_queue_enqueue returns 0, queue is full, exiting\n");
#endif
itti_free(origin_task_id, new);
return -1;
}
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_ENQUEUE_MESSAGE, VCD_FUNCTION_OUT);
#endif
#ifdef RTAI
if (itti_desc.threads[TASK_GET_THREAD_ID(origin_task_id)].real_time) {
/* This is a RT task, increase destination task messages pending counter */
__sync_fetch_and_add (&itti_desc.threads[destination_thread_id].messages_pending, 1);
} else
#endif
{
/* Only use event fd for tasks, subtasks will pool the queue */
if (TASK_GET_PARENT_TASK_ID(destination_task_id) == TASK_UNKNOWN) {
@@ -514,11 +496,6 @@ int itti_send_msg_to_task(task_id_t destination_task_id, instance_t instance, Me
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
}
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG,
__sync_and_and_fetch (&itti_desc.vcd_send_msg, ~(1L << destination_task_id)));
#endif
return 0;
}
@@ -643,14 +620,7 @@ static inline void itti_receive_msg_internal_event_fd(task_id_t task_id, uint8_t
if (lfds611_queue_dequeue (itti_desc.tasks[task_id].message_queue, (void **) &message) == 0) {
/* No element in list -> this should not happen */
#ifdef UE_EXPANSION
LOG_I(UDP_, "Assertion No message in queue for task %d while there are %d events and some for the messages queue!\n", task_id, epoll_ret);
/* Mark that the event has been processed */
itti_desc.threads[thread_id].events[i].events &= ~EPOLLIN;
return;
#else
AssertFatal (0, "No message in queue for task %d while there are %d events and some for the messages queue!\n", task_id, epoll_ret);
#endif
}
AssertFatal(message != NULL, "Message from message queue is NULL!\n");
@@ -670,17 +640,9 @@ static inline void itti_receive_msg_internal_event_fd(task_id_t task_id, uint8_t
void itti_receive_msg(task_id_t task_id, MessageDef **received_msg)
{
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG,
__sync_and_and_fetch (&itti_desc.vcd_receive_msg, ~(1L << task_id)));
#endif
itti_receive_msg_internal_event_fd(task_id, 0, received_msg);
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG,
__sync_or_and_fetch (&itti_desc.vcd_receive_msg, 1L << task_id));
#endif
}
void itti_poll_msg(task_id_t task_id, MessageDef **received_msg)
@@ -689,11 +651,6 @@ void itti_poll_msg(task_id_t task_id, MessageDef **received_msg)
*received_msg = NULL;
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_POLL_MSG,
__sync_or_and_fetch (&itti_desc.vcd_poll_msg, 1L << task_id));
#endif
{
struct message_list_s *message;
@@ -710,10 +667,6 @@ void itti_poll_msg(task_id_t task_id, MessageDef **received_msg)
ITTI_DEBUG(ITTI_DEBUG_POLL, " No message in queue[(%u:%s)]\n", task_id, itti_get_task_name(task_id));
}
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_POLL_MSG,
__sync_and_and_fetch (&itti_desc.vcd_poll_msg, ~(1L << task_id)));
#endif
}
int itti_create_task(task_id_t task_id, void *(*start_routine)(void *), void *args_p)
@@ -745,7 +698,6 @@ int itti_create_task(task_id_t task_id, void *(*start_routine)(void *), void *ar
return 0;
}
//#ifdef RTAI
void itti_set_task_real_time(task_id_t task_id)
{
thread_id_t thread_id = TASK_GET_THREAD_ID(task_id);
@@ -754,7 +706,6 @@ void itti_set_task_real_time(task_id_t task_id)
itti_desc.threads[thread_id].real_time = TRUE;
}
//#endif
void itti_wait_ready(int wait_tasks)
{
@@ -776,13 +727,16 @@ void itti_mark_task_ready(task_id_t task_id)
AssertFatal (thread_id < itti_desc.thread_max, "Thread id (%d) is out of range (%d)!\n", thread_id, itti_desc.thread_max);
#if 0
/* itti dump is disabled */
/* Register the thread in itti dump */
itti_dump_thread_use_ring_buffer();
#endif
/* Mark the thread as using LFDS queue */
lfds611_queue_use(itti_desc.tasks[task_id].message_queue);
#ifdef RTAI
#if defined(UE_EXPANSION) || defined(RTAI)
/* Assign low priority to created threads */
{
struct sched_param sched_param;
@@ -803,15 +757,19 @@ void itti_mark_task_ready(task_id_t task_id)
void itti_exit_task(void)
{
#if defined(OAI_EMU) || defined(RTAI)
task_id_t task_id = itti_get_current_task_id();
thread_id_t thread_id = TASK_GET_THREAD_ID(task_id);
#if defined(OAI_EMU) || defined(RTAI)
if (task_id > TASK_UNKNOWN) {
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG,
__sync_and_and_fetch (&itti_desc.vcd_receive_msg, ~(1L << task_id)));
}
#endif
itti_desc.threads[thread_id].task_state = TASK_STATE_NOT_CONFIGURED;
itti_desc.created_tasks--;
ITTI_DEBUG(ITTI_DEBUG_EXIT, "Thread for task %s (%d) exits\n", itti_get_task_name(task_id), task_id);
pthread_exit (NULL);
}
@@ -827,45 +785,6 @@ void itti_terminate_tasks(task_id_t task_id)
pthread_exit (NULL);
}
#ifdef RTAI
static void *itti_rt_relay_thread(void *arg)
{
thread_id_t thread_id;
unsigned pending_messages;
while (itti_desc.running) {
usleep (200); // Poll for messages a little more than 2 time by slot to get a small latency between RT and other tasks
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_RELAY_THREAD, VCD_FUNCTION_IN);
#endif
/* Checks for all non real time tasks if they have pending messages */
for (thread_id = THREAD_FIRST; thread_id < itti_desc.thread_max; thread_id++) {
if ((itti_desc.threads[thread_id].task_state == TASK_STATE_READY)
&& (itti_desc.threads[thread_id].real_time == FALSE)) {
pending_messages = __sync_fetch_and_and (&itti_desc.threads[thread_id].messages_pending, 0);
if (pending_messages > 0) {
ssize_t write_ret;
eventfd_t sem_counter = pending_messages;
/* Call to write for an event fd must be of 8 bytes */
write_ret = write (itti_desc.threads[thread_id].task_event_fd, &sem_counter, sizeof(sem_counter));
DevCheck(write_ret == sizeof(sem_counter), write_ret, sem_counter, thread_id);
}
}
}
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_RELAY_THREAD, VCD_FUNCTION_OUT);
#endif
}
return NULL;
}
#endif
int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_id_max, const task_info_t *tasks_info,
const message_info_t *messages_info, const char * const messages_definition_xml, const char * const dump_file_name)
{
@@ -946,46 +865,16 @@ int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_i
ITTI_DEBUG(ITTI_DEBUG_EVEN_FD, " Successfully subscribed fd %d for thread %d\n",
itti_desc.threads[thread_id].task_event_fd, thread_id);
#ifdef RTAI
itti_desc.threads[thread_id].real_time = FALSE;
itti_desc.threads[thread_id].messages_pending = 0;
#endif
}
itti_desc.running = 1;
itti_desc.wait_tasks = 0;
itti_desc.created_tasks = 0;
itti_desc.ready_tasks = 0;
#ifdef RTAI
/* Start RT relay thread */
DevAssert(pthread_create (&itti_desc.rt_relay_thread, NULL, itti_rt_relay_thread, NULL) >= 0);
rt_global_heap_open();
#endif
#if defined(OAI_EMU) || defined(RTAI)
itti_desc.memory_pools_handle = memory_pools_create (5);
memory_pools_add_pool (itti_desc.memory_pools_handle, 1000 + ITTI_QUEUE_MAX_ELEMENTS, 50);
memory_pools_add_pool (itti_desc.memory_pools_handle, 1000 + (2 * ITTI_QUEUE_MAX_ELEMENTS), 100);
memory_pools_add_pool (itti_desc.memory_pools_handle, 10000, 1000);
memory_pools_add_pool (itti_desc.memory_pools_handle, 400, 20050);
memory_pools_add_pool (itti_desc.memory_pools_handle, 100, 30050);
{
char *statistics = memory_pools_statistics (itti_desc.memory_pools_handle);
ITTI_DEBUG(ITTI_DEBUG_MP_STATISTICS, " Memory pools statistics:\n%s", statistics);
free (statistics);
}
#endif
#if defined(OAI_EMU) || defined(RTAI)
itti_desc.vcd_poll_msg = 0;
itti_desc.vcd_receive_msg = 0;
itti_desc.vcd_send_msg = 0;
#endif
#if 0
/* itti dump is disabled */
itti_dump_init (messages_definition_xml, dump_file_name);
#endif
CHECK_INIT_RETURN(timer_init ());
@@ -1047,21 +936,15 @@ void itti_wait_tasks_end(void)
itti_desc.running = 0;
#if defined(OAI_EMU) || defined(RTAI)
{
char *statistics = memory_pools_statistics (itti_desc.memory_pools_handle);
ITTI_DEBUG(ITTI_DEBUG_MP_STATISTICS, " Memory pools statistics:\n%s", statistics);
free (statistics);
}
#endif
if (ready_tasks > 0) {
ITTI_DEBUG(ITTI_DEBUG_ISSUES, " Some threads are still running, force exit\n");
exit (0);
}
#if 0
/* itti dump is disabled */
itti_dump_exit();
#endif
}
void itti_send_terminate_message(task_id_t task_id)

View File

@@ -27,10 +27,6 @@
#include <sys/epoll.h>
#ifdef RTAI
# include <rtai_sem.h>
#endif
#ifndef INTERTASK_INTERFACE_H_
#define INTERTASK_INTERFACE_H_
@@ -112,6 +108,18 @@ int itti_send_broadcast_message(MessageDef *message_p);
**/
int itti_send_msg_to_task(task_id_t task_id, instance_t instance, MessageDef *message);
/* TODO: this is a hack. Almost no caller of itti_send_msg_to_task checks
* the return value so it has been changed to crash the program in case
* of failure instead of returning -1 as the documentation above says.
* The RLC UM code may receive too much data when doing UDP at a higher
* throughput than the link allows and so for this specific case we need
* a version that actually returns -1 on failure.
*
* This needs to be cleaned at some point.
*/
/* look for HACK_RLC_UM_LIMIT for others places related to the hack. Please do not remove this comment. */
int itti_try_send_msg_to_task(task_id_t task_id, instance_t instance, MessageDef *message);
/** \brief Add a new fd to monitor.
* NOTE: it is up to the user to read data associated with the fd
* \param task_id Task ID of the receiving task
@@ -155,12 +163,10 @@ int itti_create_task(task_id_t task_id,
void *(*start_routine) (void *),
void *args_p);
//#ifdef RTAI
/** \brief Mark the task as a real time task
* \param task_id task to mark as real time
**/
void itti_set_task_real_time(task_id_t task_id);
//#endif
/** \brief Indicates to ITTI if newly created tasks should wait for all tasks to be ready
* \param wait_tasks non 0 to make new created tasks to wait, 0 to let created tasks to run

View File

@@ -51,23 +51,14 @@
#include "intertask_interface.h"
#include "intertask_interface_dump.h"
#if defined(OAI_EMU) || defined(RTAI)
#include "vcd_signal_dumper.h"
#endif
#if T_TRACER
#include "T.h"
#endif
static const int itti_dump_debug = 0; // 0x8 | 0x4 | 0x2;
#ifdef RTAI
# define ITTI_DUMP_DEBUG(m, x, args...) do { if ((m) & itti_dump_debug) rt_printk("[ITTI_DUMP][D]"x, ##args); } \
while(0)
#else
# define ITTI_DUMP_DEBUG(m, x, args...) do { if ((m) & itti_dump_debug) fprintf(stdout, "[ITTI_DUMP][D]"x, ##args); } \
while(0)
#endif
#define ITTI_DUMP_ERROR(x, args...) do { fprintf(stdout, "[ITTI_DUMP][E]"x, ##args); } \
while(0)
@@ -99,13 +90,8 @@ typedef struct itti_desc_s {
int nb_connected;
#ifndef RTAI
/* Event fd used to notify new messages (semaphore) */
int event_fd;
#else
unsigned long messages_in_queue __attribute__((aligned(8)));
#endif
int itti_listen_socket;
itti_client_desc_t itti_clients[ITTI_DUMP_MAX_CON];
@@ -194,9 +180,7 @@ static int itti_dump_fwrite_message(itti_dump_queue_item_t *message)
fwrite (&new_message_header, sizeof(itti_dump_message_t), 1, dump_file);
fwrite (message->data, message->data_size, 1, dump_file);
fwrite (&itti_dump_message_type_end, sizeof(itti_message_types_t), 1, dump_file);
// #if !defined(RTAI)
fflush (dump_file);
// #endif
return (1);
}
@@ -280,10 +264,6 @@ static int itti_dump_enqueue_message(itti_dump_queue_item_t *new, uint32_t messa
int overwrite_flag;
AssertFatal (new != NULL, "Message to queue is NULL!\n");
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE, VCD_FUNCTION_IN);
#endif
new->message_type = message_type;
new->message_size = message_size;
@@ -303,9 +283,6 @@ static int itti_dump_enqueue_message(itti_dump_queue_item_t *new, uint32_t messa
lfds611_ringbuffer_put_write_element(itti_dump_queue.itti_message_queue, new_queue_element);
if (overwrite_flag == 0) {
#ifdef RTAI
__sync_fetch_and_add (&itti_dump_queue.messages_in_queue, 1);
#else
{
ssize_t write_ret;
eventfd_t sem_counter = 1;
@@ -314,25 +291,18 @@ static int itti_dump_enqueue_message(itti_dump_queue_item_t *new, uint32_t messa
write_ret = write(itti_dump_queue.event_fd, &sem_counter, sizeof(sem_counter));
AssertFatal (write_ret == sizeof(sem_counter), "Write to dump event failed (%d/%d)!\n", (int) write_ret, (int) sizeof(sem_counter));
}
#endif
// add one to pending_messages, atomically
__sync_fetch_and_add (&pending_messages, 1);
}
ITTI_DUMP_DEBUG (0x2, " Added element to queue %p %p, pending %u, type %u\n", new_queue_element, new, pending_messages, message_type);
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE, VCD_FUNCTION_OUT);
#endif
return 0;
}
static void itti_dump_socket_exit(void)
{
#ifndef RTAI
close(itti_dump_queue.event_fd);
#endif
close(itti_dump_queue.itti_listen_socket);
/* Leave the thread as we detected end signal */
@@ -346,10 +316,6 @@ static int itti_dump_flush_ring_buffer(int flush_all)
int j;
int consumer;
#ifdef RTAI
unsigned long number_of_messages;
#endif
/* Check if there is a least one consumer */
consumer = 0;
@@ -365,18 +331,6 @@ static int itti_dump_flush_ring_buffer(int flush_all)
}
if (consumer > 0) {
#ifdef RTAI
number_of_messages = itti_dump_queue.messages_in_queue;
ITTI_DUMP_DEBUG(0x4, "%lu elements in queue\n", number_of_messages);
if (number_of_messages == 0) {
return (consumer);
}
__sync_sub_and_fetch(&itti_dump_queue.messages_in_queue, number_of_messages);
#endif
do {
/* Acquire the ring element */
lfds611_ringbuffer_get_read_element(itti_dump_queue.itti_message_queue, &element);
@@ -419,9 +373,6 @@ static int itti_dump_flush_ring_buffer(int flush_all)
lfds611_ringbuffer_put_read_element(itti_dump_queue.itti_message_queue, element);
}
} while(flush_all
#ifdef RTAI
&& --number_of_messages
#endif
);
}
@@ -478,9 +429,6 @@ static void *itti_dump_socket(void *arg_p)
struct sockaddr_in servaddr; /* socket address structure */
struct timeval *timeout_p = NULL;
#ifdef RTAI
struct timeval timeout;
#endif
ITTI_DUMP_DEBUG(0x2, " Creating TCP dump socket on port %u\n", ITTI_PORT);
@@ -536,15 +484,11 @@ static void *itti_dump_socket(void *arg_p)
/* Add the listener */
FD_SET(itti_listen_socket, &read_set);
#ifndef RTAI
/* Add the event fd */
FD_SET(itti_dump_queue.event_fd, &read_set);
/* Max of both sd */
max_sd = itti_listen_socket > itti_dump_queue.event_fd ? itti_listen_socket : itti_dump_queue.event_fd;
#else
max_sd = itti_listen_socket;
#endif
itti_dump_queue.itti_listen_socket = itti_listen_socket;
@@ -557,14 +501,7 @@ static void *itti_dump_socket(void *arg_p)
int i;
memcpy(&working_set, &read_set, sizeof(read_set));
#ifdef RTAI
timeout.tv_sec = 0;
timeout.tv_usec = 100000;
timeout_p = &timeout;
#else
timeout_p = NULL;
#endif
/* No timeout: select blocks till a new event has to be handled
* on sd's.
@@ -592,8 +529,6 @@ static void *itti_dump_socket(void *arg_p)
if (FD_ISSET(i, &working_set)) {
desc_ready -= 1;
#ifndef RTAI
if (i == itti_dump_queue.event_fd) {
/* Notification of new element to dump from other tasks */
eventfd_t sem_counter;
@@ -613,7 +548,6 @@ static void *itti_dump_socket(void *arg_p)
if (itti_dump_running) {
ITTI_DUMP_DEBUG (0x4, " No messages consumers, waiting ...\n");
usleep(100 * 1000);
#ifndef RTAI
{
ssize_t write_ret;
@@ -622,7 +556,6 @@ static void *itti_dump_socket(void *arg_p)
write_ret = write(itti_dump_queue.event_fd, &sem_counter, sizeof(sem_counter));
AssertFatal (write_ret == sizeof(sem_counter), "Failed to write to dump event FD (%d/%d)!\n", (int) write_ret, (int) sem_counter);
}
#endif
} else {
itti_dump_socket_exit();
}
@@ -630,7 +563,6 @@ static void *itti_dump_socket(void *arg_p)
ITTI_DUMP_DEBUG(0x1, " Write element to file\n");
}
} else
#endif
if (i == itti_listen_socket) {
do {
client_socket = accept(itti_listen_socket, NULL, NULL);
@@ -719,21 +651,9 @@ int itti_dump_queue_message(task_id_t sender_task,
AssertFatal (message_name != NULL, "Message name is NULL!\n");
AssertFatal (message_p != NULL, "Message is NULL!\n");
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC, VCD_FUNCTION_IN);
#endif
new = itti_malloc(sender_task, TASK_MAX, sizeof(itti_dump_queue_item_t));
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC, VCD_FUNCTION_OUT);
#endif
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC, VCD_FUNCTION_IN);
#endif
new->data = itti_malloc(sender_task, TASK_MAX, message_size);
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC, VCD_FUNCTION_OUT);
#endif
memcpy(new->data, message_p, message_size);
new->data_size = message_size;
@@ -791,9 +711,6 @@ int itti_dump_init(const char * const messages_definition_xml, const char * cons
AssertFatal (0, " Failed to create ring buffer!\n");
}
#ifdef RTAI
itti_dump_queue.messages_in_queue = 0;
#else
itti_dump_queue.event_fd = eventfd(0, EFD_SEMAPHORE);
if (itti_dump_queue.event_fd == -1) {
@@ -801,8 +718,6 @@ int itti_dump_init(const char * const messages_definition_xml, const char * cons
AssertFatal (0, "eventfd failed: %s!\n", strerror(errno));
}
#endif
itti_dump_queue.nb_connected = 0;
for(i = 0; i < ITTI_DUMP_MAX_CON; i++) {

View File

@@ -27,10 +27,17 @@
#ifndef _ITTI_TYPES_H_
#define _ITTI_TYPES_H_
#ifdef USER_MODE
#include <stdint.h>
/* The current file is included in the ue_ip.ko compilation.
* For it to work we need to include linux/types.h and
* not stdint.h.
* A solution to this problem is to use #ifndef __KERNEL__.
* Maybe a better solution would be to clean things up
* so that ue_ip.ko does not include the current file.
*/
#ifndef __KERNEL__
# include <stdint.h>
#else
#include <linux/types.h>
# include <linux/types.h>
#endif
#define CHARS_TO_UINT32(c1, c2, c3, c4) (((c4) << 24) | ((c3) << 16) | ((c2) << 8) | (c1))

View File

@@ -19,15 +19,8 @@
* contact@openairinterface.org
*/
#ifdef RTAI
# include <rtai_shm.h>
#endif
#include "assertions.h"
#include "memory_pools.h"
#if defined(OAI_EMU) || defined(RTAI)
# include "vcd_signal_dumper.h"
#endif
#if T_TRACER
#include <string.h>
@@ -37,18 +30,8 @@
/*------------------------------------------------------------------------------*/
const static int mp_debug = 0;
#ifdef RTAI
# define MP_DEBUG(x, args...) do { if (mp_debug) rt_printk("[MP][D]"x, ##args); } \
while(0)
#else
# define MP_DEBUG(x, args...) do { if (mp_debug) fprintf(stdout, "[MP][D]"x, ##args); fflush (stdout); } \
while(0)
#endif
#if defined(OAI_EMU) || defined(RTAI)
uint64_t vcd_mp_alloc;
uint64_t vcd_mp_free;
#endif
/*------------------------------------------------------------------------------*/
#ifndef CHARS_TO_UINT32
@@ -414,11 +397,6 @@ memory_pool_item_handle_t memory_pools_allocate (memory_pools_handle_t memory_po
pool_id_t pool;
items_group_index_t item_index = ITEMS_GROUP_INDEX_INVALID;
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC,
__sync_or_and_fetch (&vcd_mp_alloc, 1L << info_0));
#endif
/* Recover memory_pools */
memory_pools = memory_pools_from_handler (memory_pools_handle);
AssertError (memory_pools != NULL, {}, "Failed to retrieve memory pool for handle %p!\n", memory_pools_handle);
@@ -464,11 +442,6 @@ memory_pool_item_handle_t memory_pools_allocate (memory_pools_handle_t memory_po
MP_DEBUG(" Alloc [--][------]{------}, %3u %3u, %6u, failed!\n", info_0, info_1, item_size);
}
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC,
__sync_and_and_fetch (&vcd_mp_alloc, ~(1L << info_0)));
#endif
return memory_pool_item_handle;
}
@@ -493,11 +466,6 @@ int memory_pools_free (memory_pools_handle_t memory_pools_handle, memory_pool_it
info_1 = memory_pool_item->start.info[1];
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE,
__sync_or_and_fetch (&vcd_mp_free, 1L << info_1));
#endif
/* Recover pool index */
pool = memory_pool_item->start.pool_id;
AssertFatal (pool < memory_pools->pools_defined, "Pool index is invalid (%u/%u)!\n", pool, memory_pools->pools_defined);
@@ -531,11 +499,6 @@ int memory_pools_free (memory_pools_handle_t memory_pools_handle, memory_pool_it
AssertError (result == EXIT_SUCCESS, {}, "Failed to free memory pool item (pool %u, item %d)!\n", pool, item_index);
#if defined(OAI_EMU) || defined(RTAI)
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE,
__sync_and_and_fetch (&vcd_mp_free, ~(1L << info_1)));
#endif
return (result);
}

View File

@@ -117,16 +117,19 @@ int signal_handle(int *end)
case SIGUSR1:
SIG_DEBUG("Received SIGUSR1\n");
*end = 1;
output_log_mem();
break;
case SIGSEGV: /* Fall through */
case SIGABRT:
SIG_DEBUG("Received SIGABORT\n");
output_log_mem();
backtrace_handle_signal(&info);
break;
case SIGINT:
printf("Received SIGINT\n");
output_log_mem();
itti_send_terminate_message(TASK_UNKNOWN);
*end = 1;
break;

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -34,9 +34,10 @@
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <dlfcn.h>
#include "openair1/PHY/defs.h"
#include "openair1/PHY/defs_common.h"
#define LOAD_MODULE_SHLIB_MAIN
#include "common/config/config_userapi.h"
@@ -44,68 +45,162 @@
void loader_init(void) {
paramdef_t LoaderParams[] = LOADER_PARAMS_DESC;
loader_data.mainexec_buildversion = PACKAGE_VERSION;
int ret = config_get( LoaderParams,sizeof(LoaderParams)/sizeof(paramdef_t),LOADER_CONFIG_PREFIX);
if (ret <0) {
fprintf(stderr,"[LOADER] configuration couldn't be performed");
printf("[LOADER] configuration couldn't be performed via config module, parameters set to default values\n");
if (loader_data.shlibpath == NULL) {
loader_data.shlibpath=DEFAULT_PATH;
}
return;
}
loader_data.maxshlibs = DEFAULT_MAXSHLIBS;
}
loader_data.shlibs = malloc(loader_data.maxshlibs * sizeof(loader_shlibdesc_t));
if(loader_data.shlibs == NULL) {
fprintf(stderr,"[LOADER] %s %d memory allocation error %s\n",__FILE__, __LINE__,strerror(errno));
exit_fun("[LOADER] unrecoverable error");
}
memset(loader_data.shlibs,0,loader_data.maxshlibs * sizeof(loader_shlibdesc_t));
}
/* build the full shared lib name from the module name */
char *loader_format_shlibpath(char *modname)
{
char *tmpstr;
char *shlibpath =NULL;
char *shlibversion=NULL;
char *cfgprefix;
paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0},
{"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0}};
int ret;
/* looks for specific path for this module in the config file */
/* specific value for a module path and version is located in a modname subsection of the loader section */
/* shared lib name is formatted as lib<module name><module version>.so */
cfgprefix = malloc(sizeof(LOADER_CONFIG_PREFIX)+strlen(modname)+16);
if (cfgprefix == NULL) {
fprintf(stderr,"[LOADER] %s %d malloc error loading module %s, %s\n",__FILE__, __LINE__, modname, strerror(errno));
exit_fun("[LOADER] unrecoverable error");
} else {
sprintf(cfgprefix,LOADER_CONFIG_PREFIX ".%s",modname);
int ret = config_get( LoaderParams,sizeof(LoaderParams)/sizeof(paramdef_t),cfgprefix);
if (ret <0) {
fprintf(stderr,"[LOADER] %s %d couldn't retrieve config from section %s\n",__FILE__, __LINE__,cfgprefix);
}
}
/* no specific path, use loader default shared lib path */
if (shlibpath == NULL) {
shlibpath = loader_data.shlibpath ;
}
/* no specific shared lib version */
if (shlibversion == NULL) {
shlibversion = "" ;
}
/* alloc memory for full module shared lib file name */
tmpstr = malloc(strlen(shlibpath)+strlen(modname)+strlen(shlibversion)+16);
if (tmpstr == NULL) {
fprintf(stderr,"[LOADER] %s %d malloc error loading module %s, %s\n",__FILE__, __LINE__, modname, strerror(errno));
exit_fun("[LOADER] unrecoverable error");
}
if(shlibpath[0] != 0) {
ret=sprintf(tmpstr,"%s/",shlibpath);
} else {
ret = 0;
}
sprintf(tmpstr+ret,"lib%s%s.so",modname,shlibversion);
return tmpstr;
}
int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
{
void *lib_handle;
initfunc_t fpi;
char *tmpstr;
checkverfunc_t fpc;
getfarrayfunc_t fpg;
char *shlib_path;
char *afname=NULL;
int ret=0;
if (loader_data.shlibpath == NULL) {
loader_init();
}
tmpstr = malloc(strlen(loader_data.shlibpath)+strlen(modname)+16);
if (tmpstr == NULL) {
fprintf(stderr,"[LOADER] %s %d malloc error loading module %s, %s\n",__FILE__, __LINE__, modname, strerror(errno));
return -1;
}
if(loader_data.shlibpath[0] != 0) {
ret=sprintf(tmpstr,"%s/",loader_data.shlibpath);
}
if(strstr(modname,".so") == NULL) {
sprintf(tmpstr+ret,"lib%s.so",modname);
} else {
sprintf(tmpstr+ret,"%s",modname);
}
shlib_path = loader_format_shlibpath(modname);
ret = 0;
lib_handle = dlopen(tmpstr, RTLD_LAZY|RTLD_NODELETE|RTLD_GLOBAL);
lib_handle = dlopen(shlib_path, RTLD_LAZY|RTLD_NODELETE|RTLD_GLOBAL);
if (!lib_handle) {
fprintf(stderr,"[LOADER] library %s is not loaded: %s\n", tmpstr,dlerror());
fprintf(stderr,"[LOADER] library %s is not loaded: %s\n", shlib_path,dlerror());
ret = -1;
} else {
printf("[LOADER] library %s uccessfully loaded loaded\n", tmpstr);
sprintf(tmpstr,"%s_autoinit",modname);
fpi = dlsym(lib_handle,tmpstr);
printf("[LOADER] library %s successfully loaded\n", shlib_path);
afname=malloc(strlen(modname)+15);
sprintf(afname,"%s_checkbuildver",modname);
fpc = dlsym(lib_handle,afname);
if (fpc != NULL ){
int chkver_ret = fpc(loader_data.mainexec_buildversion, &(loader_data.shlibs[loader_data.numshlibs].shlib_buildversion));
if (chkver_ret < 0) {
fprintf(stderr,"[LOADER] %s %d lib %s, version mismatch",__FILE__, __LINE__, modname);
exit_fun("[LOADER] unrecoverable error");
}
}
sprintf(afname,"%s_autoinit",modname);
fpi = dlsym(lib_handle,afname);
if (fpi != NULL )
{
if (fpi != NULL ) {
fpi();
}
}
if (farray != NULL) {
loader_data.shlibs[loader_data.numshlibs].funcarray=malloc(numf*sizeof(loader_shlibfunc_t));
loader_data.shlibs[loader_data.numshlibs].numfunc=0;
for (int i=0; i<numf; i++) {
farray[i].fptr = dlsym(lib_handle,farray[i].fname);
if (farray[i].fptr == NULL ) {
fprintf(stderr,"[LOADER] %s %d %s function not found %s\n",__FILE__, __LINE__, dlerror(),farray[i].fname);
ret= -1;
}
ret= -1;
} else { /* farray[i].fptr == NULL */
loader_data.shlibs[loader_data.numshlibs].funcarray[i].fname=strdup(farray[i].fname);
loader_data.shlibs[loader_data.numshlibs].funcarray[i].fptr = farray[i].fptr;
loader_data.shlibs[loader_data.numshlibs].numfunc++;
}/* farray[i].fptr != NULL */
} /* for int i... */
} /* farray ! NULL */
}
} else { /* farray ! NULL */
sprintf(afname,"%s_getfarray",modname);
fpg = dlsym(lib_handle,afname);
if (fpg != NULL ) {
loader_data.shlibs[loader_data.numshlibs].numfunc = fpg(&(loader_data.shlibs[loader_data.numshlibs].funcarray));
}
} /* farray ! NULL */
loader_data.shlibs[loader_data.numshlibs].name=strdup(modname);
loader_data.shlibs[loader_data.numshlibs].thisshlib_path=strdup(shlib_path);
(loader_data.numshlibs)++;
} /* lib_handle != NULL */
if (tmpstr != NULL) free(tmpstr);
if ( shlib_path!= NULL) free(shlib_path);
if ( afname!= NULL) free(afname);
if (lib_handle != NULL) dlclose(lib_handle);
return ret;
}
void * get_shlibmodule_fptr(char *modname, char *fname)
{
for (int i=0; i<loader_data.numshlibs && loader_data.shlibs[i].name != NULL; i++) {
if ( strcmp(loader_data.shlibs[i].name, modname) == 0) {
for (int j =0; j<loader_data.shlibs[i].numfunc ; j++) {
if (strcmp(loader_data.shlibs[i].funcarray[j].fname, fname) == 0) {
return loader_data.shlibs[i].funcarray[j].fptr;
}
} /* for j loop on module functions*/
}
} /* for i loop on modules */
return NULL;
}

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -33,33 +33,60 @@
#define LOAD_SHLIB_H
typedef int(*initfunc_t)(void);
typedef struct {
char *shlibpath;
}loader_data_t;
typedef struct {
char *fname;
int (*fptr)(void);
}loader_shlibfunc_t;
typedef struct {
char *name;
char *shlib_version; //
char *shlib_buildversion;
char *thisshlib_path;
uint32_t numfunc;
loader_shlibfunc_t *funcarray;
}loader_shlibdesc_t;
typedef struct {
char *mainexec_buildversion;
char *shlibpath;
uint32_t maxshlibs;
uint32_t numshlibs;
loader_shlibdesc_t *shlibs;
}loader_data_t;
/* function type of functions which may be implemented by a module */
/* 1: init function, called when loading, if found in the shared lib */
typedef int(*initfunc_t)(void);
/* 2: version checking function, called when loading, if it returns -1, trigger main exec abort */
typedef int(*checkverfunc_t)(char * mainexec_version, char ** shlib_version);
/* 3: get function array function, called when loading when a module doesn't provide */
/* the function array when calling load_module_shlib (farray param NULL) */
typedef int(*getfarrayfunc_t)(loader_shlibfunc_t **funcarray);
#ifdef LOAD_MODULE_SHLIB_MAIN
#define LOADER_CONFIG_PREFIX "loader"
#define DEFAULT_PATH ""
#define DEFAULT_PATH ""
#define DEFAULT_MAXSHLIBS 10
loader_data_t loader_data;
/*--------------------------------------------------------------------------------------------------------------------------------------*/
/* LOADER parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*--------------------------------------------------------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------------------------------------------------------------------*/
/* LOADER parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*------------------------------------------------------------------------------------------------------------------------------------------------*/
#define LOADER_PARAMS_DESC { \
{"shlibpath", NULL, 0, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0} \
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0}, \
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0}, \
}
/*-------------------------------------------------------------------------------------------------------------*/
#else
#else /* LOAD_MODULE_SHLIB_MAIN */
extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf);
#endif
extern void * get_shlibmodule_fptr(char *modname, char *fname);
extern loader_data_t loader_data;
#endif /* LOAD_MODULE_SHLIB_MAIN */
#endif

View File

@@ -99,6 +99,7 @@ void *msc_task(void *args_p)
break;
case TERMINATE_MESSAGE: {
fprintf(stderr, " *** Exiting MSC thread\n");
timer_remove(timer_id);
msc_end();
itti_exit_task();

View File

@@ -1,59 +0,0 @@
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
IF(DEFINED ENV{OPENAIR_DIR})
message("...using oai source files in $ENV{OPENAIR_DIR}")
ELSE()
message("OPENAIR_DIR is not defined. You must run \"source oaienv\" from the oai root dir")
# exit early
return()
ENDIF()
set(OPENAIR_DIR $ENV{OPENAIR_DIR})
set(APPROOT ${OPENAIR_DIR}/common/utils/telnetsrv )
set(OPENAIR_BUILD_DIR $ENV{OPENAIR_DIR}/cmake_targets)
set(OPENAIR1_DIR $ENV{OPENAIR1_DIR})
set(OPENAIR2_DIR $ENV{OPENAIR2_DIR})
set(OPENAIR3_DIR $ENV{OPENAIR3_DIR})
set(OPENAIR_PHY_DIR $ENV{OPENAIR1_DIR}/PHY)
set(OPENAIR_TARGET_DIR $ENV{OPENAIR_DIR}/targets)
set(OPENAIR_COMMONUTILS_DIR $ENV{OPENAIR_DIR}/common/utils)
set(OPENAIR2_COMMON_DIR $ENV{OPENAIR_DIR}/openair2/COMMON)
set(OPENAIR_ASN1INC ${OPENAIR_BUILD_DIR}/lte_build_oai/build/CMakeFiles/Rel14)
set(OPENAIR_NFAPIINC $ENV{NFAPI_DIR} )
set(CMAKE_INSTALL_PREFIX $ENV{OPENAIR_TARGETS})
add_definitions (-DRel14 -DCMAKER -DENABLE_FXP -DENABLE_ITTI -DENABLE_NAS_UE_LOGGING -DENABLE_SECURITY -DENABLE_USE_CPU_EXECUTION_TIME -DENABLE_USE_MME -DENABLE_VCD -DENB_AGENT -DENB_MODE -DETHERNET=1 -DEXMIMO_IOT -DJUMBO_FRAME -DLINK_ENB_PDCP_TO_GTPV1U -DLOG_NO_THREAD -DMAC_CONTEXT -DMAX_NUM_CCs=1 -DNAS_BUILT_IN_UE -DNAS_UE -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TX=2 -DNB_ANTENNAS_TXRX=2 -DNEW_FFT -DNO_RRM -DNone=1 -DOAI_NW_DRIVER_USE_NETLINK -DOPENAIR1 -DOPENAIR2 -DOPENAIR_LTE -DPC_DSP -DPC_TARGET -DPHYSIM -DPHY_CONTEXT -DPUCCH -DRel10=1 -DS1AP_VERSION=R10 -DTRACE_RLC_MUTEX -DUSER_MODE -DX2AP_VERSION=R11 -DXFORMS -mavx2 -msse4.1 -mssse3)
add_compile_options( -fPIC -march=native -Ofast)
include_directories( ./ ${OPENAIR_COMMON_DIR} ${OPENAIR_DIR} ${OPENAIR1_DIR} ${OPENAIR2_DIR} ${OPENAIR2_COMMON_DIR} ${OPENAIR2_DIR}/UTIL/LOG
${OPENAIR_COMMONUTILS_DIR}/msc ${OPENAIR_COMMONUTILS_DIR}/itti ${OPENAIR_COMMONUTILS_DIR}/hashtable ${OPENAIR_COMMONUTILS_DIR} ${OPENAIR_ASN1INC}
${OPENAIR2_DIR}/LAYER2/RLC/AM_v9.3.0 ${OPENAIR_COMMONUTILS_DIR}/msc ${OPENAIR_COMMONUTILS_DIR}/itti ${OPENAIR_COMMONUTILS_DIR}/hashtable ${OPENAIR_COMMONUTILS_DIR} ${OPENAIR_ASN1INC}
${OPENAIR2_DIR}/LAYER2/RLC ${OPENAIR2_DIR}/UTIL/LISTS ${OPENAIR2_DIR}/UTIL/MEM ${OPENAIR2_DIR}/LAYER2/RLC/UM_v9.3.0
${OPENAIR2_DIR}/LAYER2/RLC/TM_v9.3.0 ${OPENAIR2_DIR}/RRC/LITE ${OPENAIR_TARGET_DIR}/COMMON ${OPENAIR_TARGET_DIR}/ARCH/COMMON
${OPENAIR3_DIR}/NAS/COMMON/API/NETWORK ${OPENAIR3_DIR}/NAS/COMMON/EMM/MSG/ ${OPENAIR3_DIR}/NAS/COMMON/IES/ ${OPENAIR3_DIR}/NAS/COMMON/UTIL
${OPENAIR3_DIR}/NAS/COMMON/ESM/MSG/ ${OPENAIR3_DIR}/GTPV1-U ${OPENAIR3_DIR}/GTPV1-U/nw-gtpv1u/shared ${OPENAIR3_DIR}/GTPV1-U/nw-gtpv1u/include
${OPENAIR3_DIR}/UTILS ${OPENAIR_NFAPIINC})
set(TELNETSRV_SOURCE
${APPROOT}/telnetsrv.c
${APPROOT}/telnetsrv_phycmd.c
${APPROOT}/telnetsrv_proccmd.c
)
#set(TELNETSRV_ETHDEVCMD_SOURCE
# ${APPROOT}/telnetsrv/telnetsrv_ethdevcmd.c
# )
add_library(telnetsrv MODULE ${TELNETSRV_SOURCE} )
#add_library(telnetsrv_ethdevcmd MODULE ${TELNETSRV_ETHDEVCMD_SOURCE} )
install(TARGETS telnetsrv DESTINATION bin)
if (EXISTS "${OPENAIR_BUILD_DIR}/lte_build_oai/build" AND IS_DIRECTORY "${OPENAIR_BUILD_DIR}/lte_build_oai/build")
install(TARGETS telnetsrv DESTINATION ${OPENAIR_BUILD_DIR}/lte_build_oai/build)
endif (EXISTS "${OPENAIR_BUILD_DIR}/lte_build_oai/build" AND IS_DIRECTORY "${OPENAIR_BUILD_DIR}/lte_build_oai/build")

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -43,7 +43,7 @@
#include <string.h>
#include <signal.h>
#include <pthread.h>
#include <telnetsrv.h>
#include "telnetsrv.h"
#include <string.h>
#include <stdarg.h>
#include <unistd.h>
@@ -51,20 +51,27 @@
#include <dlfcn.h>
#include <sys/time.h>
#include <sys/resource.h>
#include "common/utils/load_module_shlib.h"
#include "common/config/config_userapi.h"
#include <readline/history.h>
#include "telnetsrv_phycmd.h"
#include "telnetsrv_proccmd.h"
static char* telnet_defstatmod[] = {"softmodem","phy"};
static char* telnet_defstatmod[] = {"softmodem","phy","loader"};
static telnetsrv_params_t telnetparams;
#define TELNETSRV_LISTENADDR 0
#define TELNETSRV_LISTENPORT 1
#define TELNETSRV_PRIORITY 2
#define TELNETSRV_DEBUG 3
#define TELNETSRV_STATICMOD 7
#define TELNETSRV_SHRMOD 8
#define TELNETSRV_LOOPC 4
#define TELNETSRV_LOOPD 5
#define TELNETSRV_HISFILE 6
#define TELNETSRV_HISSIZE 7
#define TELNETSRV_PHYBSIZE 8
#define TELNETSRV_STATICMOD 9
#define TELNETSRV_SHRMOD 10
paramdef_t telnetoptions[] = {
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* configuration parameters for telnet utility */
@@ -72,19 +79,22 @@ paramdef_t telnetoptions[] = {
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
{"listenaddr", "<listen ip address>", 0, uptr:&telnetparams.listenaddr, defstrval:"0.0.0.0", TYPE_IPV4ADDR, 0 },
{"listenport", "<local port>", 0, uptr:&(telnetparams.listenport), defuintval:9090, TYPE_UINT, 0 },
{"priority", "<scheduling policy (0-99)", 0, uptr:&telnetparams.priority, defuintval:0, TYPE_INT, 0 },
{"priority", "<scheduling policy (0-99)", 0, iptr:&telnetparams.priority, defuintval:0, TYPE_INT, 0 },
{"debug", "<debug level>", 0, uptr:NULL, defuintval:0, TYPE_UINT, 0 },
{"loopcount", "<loop command iterations>", 0, uptr:&(telnetparams.loopcount), defuintval:10, TYPE_UINT, 0 },
{"loopdelay", "<loop command delay (ms)>", 0, uptr:&(telnetparams.loopdelay), defuintval:5000, TYPE_UINT, 0 },
{"histfile", "<history file name>", PARAMFLAG_NOFREE, strptr:&(telnetparams.histfile), defstrval:"oaitelnet.history", TYPE_STRING, 0 },
{"histsize", "<history sizes>", 0, iptr:&(telnetparams.histsize), defuintval:50, TYPE_INT, 0 },
{"phypbsize", "<phy dump buff size (bytes)>",0, uptr:&(telnetparams.phyprntbuff_size),defuintval:65000, TYPE_UINT, 0 },
{"staticmod", "<static modules selection>", 0, NULL, defstrlistval:telnet_defstatmod,TYPE_STRINGLIST,1},
{"shrmod", "<static modules selection>", 0, NULL, NULL,TYPE_STRINGLIST,0 },
{"staticmod", "<static modules selection>", 0, strlistptr:NULL, defstrlistval:telnet_defstatmod,TYPE_STRINGLIST,(sizeof(telnet_defstatmod)/sizeof(char *))},
{"shrmod", "<dynamic modules selection>", 0, strlistptr:NULL, defstrlistval:NULL,TYPE_STRINGLIST,0 }
};
int get_phybsize() {return telnetparams.phyprntbuff_size; };
int get_phybsize(void) {return telnetparams.phyprntbuff_size; };
int add_telnetcmd(char *modulename,telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd );
int setoutput(char *buff, int debug, telnet_printfunc_t prnt);
int setparam(char *buff, int debug, telnet_printfunc_t prnt);
int history_cmd(char *buff, int debug, telnet_printfunc_t prnt);
telnetshell_vardef_t telnet_vardef[] = {
{"debug",TELNET_VARTYPE_INT32,&telnetparams.telnetdbg},
@@ -92,12 +102,15 @@ telnetshell_vardef_t telnet_vardef[] = {
{"loopc",TELNET_VARTYPE_INT32,&telnetparams.loopcount},
{"loopd",TELNET_VARTYPE_INT32,&telnetparams.loopdelay},
{"phypb",TELNET_VARTYPE_INT32,&telnetparams.phyprntbuff_size},
{"hsize",TELNET_VARTYPE_INT32,&telnetparams.histsize},
{"hfile",TELNET_VARTYPE_STRING,&telnetparams.histfile},
{"",0,NULL}
};
telnetshell_cmddef_t telnet_cmdarray[] = {
{"redirlog","[here,file,off]",setoutput},
{"param","[prio]",setparam},
{"history","[list,reset]",history_cmd},
{"","",NULL},
};
@@ -131,41 +144,54 @@ char strpolicy[10];
//sched_get_priority_max(SCHED_FIFO)
if (priority < NICE_MIN)
{
if (priority < NICE_MIN) {
policy=SCHED_FIFO;
sprintf(strpolicy,"%s","fifo");
schedp.sched_priority= NICE_MIN - priority ;
schedp.sched_priority= NICE_MIN - priority ;
if ( (schedp.sched_priority < sched_get_priority_min(SCHED_FIFO)) ||
(schedp.sched_priority > sched_get_priority_max(SCHED_FIFO)) ) {
client_printf("Error: %i invalid prio, should be %i to %i, \n",
priority, NICE_MIN -sched_get_priority_min(SCHED_FIFO),
NICE_MIN - sched_get_priority_max(SCHED_FIFO) );
}
else if (priority > NICE_MAX)
{
} else if (priority > NICE_MAX) {
policy=SCHED_IDLE;
sprintf(strpolicy,"%s","idle");
schedp.sched_priority=0;
}
else
{
} else {
policy=SCHED_OTHER;
sprintf(strpolicy,"%s","other");
schedp.sched_priority=0;
}
if( tid != 0)
{
}
if( tid != 0) {
rt = pthread_setschedparam(tid, policy, &schedp);
}
else if(pid > 0)
{
} else if(pid > 0) {
rt = sched_setscheduler( pid, policy,&schedp);
}
if (rt != 0)
{
} else {
rt= -1;
client_printf("Error: no pid or tid specified\n");
}
if (rt != 0) {
client_printf("Error %i: %s modifying sched param to %s:%i, \n",
errno,strerror(errno),strpolicy,schedp.sched_priority);
}
else
{
} else {
client_printf("policy set to %s, priority %i\n",strpolicy,schedp.sched_priority);
if ( policy==SCHED_OTHER) {
rt = getpriority(PRIO_PROCESS,tid);
if (rt != -1) {
rt = setpriority(PRIO_PROCESS,tid,priority);
if (rt < 0) {
client_printf("Error %i: %s trying to set nice value of thread %u to %i\n",
errno,strerror(errno),tid,priority);
}
} else {
client_printf("Error %i: %s trying to get nice value of thread %u \n",
errno,strerror(errno),tid);
}
}
}
@@ -198,14 +224,13 @@ int rt;
CPU_ZERO(&cpuset);
CPU_SET(coreid, &cpuset);
if (tid > 0)
{
if (tid > 0) {
rt = pthread_setaffinity_np((pthread_t)tid, sizeof(cpu_set_t), &cpuset);
}
else if (pid > 0)
{
} else if (pid > 0){
rt = sched_setaffinity((pid_t)pid, sizeof(cpu_set_t), &cpuset);
}
} else {
rt= -1;
}
if (rt != 0)
{
client_printf("Error %i: %s calling , xxx_setaffinity...\n",errno,strerror(errno));
@@ -284,7 +309,6 @@ memset(cmds,0,sizeof(cmds));
sscanf(buff,"%9s %9s %9s %9s %9s", cmds[0],cmds[1],cmds[2],cmds[3],cmds[4] );
if (strncasecmp(cmds[0],"prio",4) == 0)
{
pthread_attr_t attr;
int prio;
prio=(int)strtol(cmds[1],NULL,0);
if (errno == ERANGE)
@@ -305,6 +329,35 @@ if (strncasecmp(cmds[0],"aff",3) == 0)
return CMDSTATUS_NOTFOUND;
} /* setparam */
int history_cmd(char *buff, int debug, telnet_printfunc_t prnt)
{
char cmds[TELNET_MAX_MSGLENGTH/TELNET_CMD_MAXSIZE][TELNET_CMD_MAXSIZE];
memset(cmds,0,sizeof(cmds));
sscanf(buff,"%9s %9s %9s %9s %9s", cmds[0],cmds[1],cmds[2],cmds[3],cmds[4] );
if (cmds[0] == NULL)
return CMDSTATUS_VARNOTFOUND;
if (strncasecmp(cmds[0],"list",4) == 0)
{
HIST_ENTRY **hist = history_list();
if (hist) {
for (int i = 0; hist[i]; i++) {
prnt ("%d: %s\n", i + history_base, hist[i]->line);
}
}
return CMDSTATUS_FOUND;
}
if (strncasecmp(cmds[0],"reset",5) == 0)
{
clear_history();
write_history(telnetparams.histfile);
return CMDSTATUS_FOUND;
}
return CMDSTATUS_NOTFOUND;
} /* history_cmd */
/*-------------------------------------------------------------------------------------------------------*/
/*
generic commands available for all modules loaded by the server
@@ -314,11 +367,11 @@ int setgetvar(int moduleindex,char getorset,char *params)
{
int n,i;
char varname[TELNET_CMD_MAXSIZE];
char varval[TELNET_CMD_MAXSIZE];
char *varval=NULL;
memset(varname,0,sizeof(varname));
memset(varval,0,sizeof(varval));
n = sscanf(params,"%s %s",varname,varval);
n = sscanf(params,"%s %ms",varname,&varval);
for ( i=0 ; telnetparams.CmdParsers[moduleindex].var[i].varvalptr != NULL ; i++)
{
if ( strncasecmp(telnetparams.CmdParsers[moduleindex].var[i].varname,varname,strlen(telnetparams.CmdParsers[moduleindex].var[i].varname)) == 0)
@@ -330,7 +383,10 @@ char varval[TELNET_CMD_MAXSIZE];
switch(telnetparams.CmdParsers[moduleindex].var[i].vartype)
{
case TELNET_VARTYPE_INT32:
client_printf("%i\n",*(int *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
client_printf("%i\n",*(int32_t *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
break;
case TELNET_VARTYPE_INT64:
client_printf("%lli\n",*(int64_t *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
break;
case TELNET_VARTYPE_INT16:
client_printf("%hi\n",*(short *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
@@ -338,8 +394,8 @@ char varval[TELNET_CMD_MAXSIZE];
case TELNET_VARTYPE_DOUBLE:
client_printf("%g\n",*(double *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
break;
case TELNET_VARTYPE_PTR:
client_printf("0x%08x\n",*((unsigned int *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr)));
case TELNET_VARTYPE_STRING:
client_printf("\"%s\"\n",*(char **)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
break;
default:
client_printf("unknown type\n");
@@ -364,6 +420,10 @@ char varval[TELNET_CMD_MAXSIZE];
case TELNET_VARTYPE_DOUBLE:
*(double *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr) = strtod(varval,NULL);
client_printf("%g\n",*(double *)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
break;
case TELNET_VARTYPE_STRING:
sprintf(*(char **)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr),"%s", varval);
client_printf("\"%s\"\n",*(char **)(telnetparams.CmdParsers[moduleindex].var[i].varvalptr));
break;
default:
client_printf("unknown type\n");
@@ -372,6 +432,9 @@ char varval[TELNET_CMD_MAXSIZE];
}
}
}
if (n>1 && varval != NULL) {
free(varval);
}
return CMDSTATUS_VARNOTFOUND;
}
/*----------------------------------------------------------------------------------------------------*/
@@ -515,13 +578,14 @@ if(listen(sock, 1) == -1)
fprintf(stderr,"[TELNETSRV] Error %s on listen call\n",strerror(errno));
using_history();
printf("\nInitializing telnet server...\n");
while( (telnetparams.new_socket = accept(sock, &cli_addr, &cli_len)) )
{
printf("[TELNETSRV] Telnet client connected....\n");
read_history(telnetparams.histfile);
stifle_history(telnetparams.histsize);
if(telnetparams.new_socket < 0)
fprintf(stderr,"[TELNETSRV] Error %s on accept call\n",strerror(errno));
@@ -548,31 +612,43 @@ while( (telnetparams.new_socket = accept(sock, &cli_addr, &cli_len)) )
break;
}
if (telnetparams.telnetdbg > 0)
printf("[TELNETSRV] Command received: readc %i filled %i %s\n", readc, filled ,buf);
if (strlen(buf) >= 2 )
printf("[TELNETSRV] Command received: readc %i filled %i \"%s\"\n", readc, filled ,buf);
if (buf[0] == '!') {
if (buf[1] == '!') {
sprintf(buf,"%s","telnet history list");
} else {
HIST_ENTRY *hisentry = history_get(strtol(buf+1,NULL,0));
if (hisentry) {
char msg[TELNET_MAX_MSGLENGTH + sizeof(TELNET_PROMPT) +10];
sprintf(buf,"%s",hisentry->line);
sprintf(msg,"%s %s\n",TELNET_PROMPT, hisentry->line);
send(telnetparams.new_socket, msg, strlen(msg), MSG_NOSIGNAL);
}
}
}
if (strlen(buf) > 2 )
{
status=process_command(buf);
}
else
status=CMDSTATUS_NOCMD;
if (status != CMDSTATUS_EXIT)
{
if (status == CMDSTATUS_NOTFOUND)
{
if (status != CMDSTATUS_EXIT) {
if (status == CMDSTATUS_NOTFOUND) {
char msg[TELNET_MAX_MSGLENGTH + 50];
sprintf(msg,"Error: \n %s\n is not a softmodem command\n",buf);
send(telnetparams.new_socket, msg, strlen(msg), MSG_NOSIGNAL);
}
} else if (status == CMDSTATUS_FOUND) {
add_history(buf);
}
send(telnetparams.new_socket, TELNET_PROMPT, sizeof(TELNET_PROMPT), MSG_NOSIGNAL);
}
else
{
} else {
printf ("[TELNETSRV] Closing telnet connection...\n");
break;
}
}
}
write_history(telnetparams.histfile);
clear_history();
close(telnetparams.new_socket);
printf ("[TELNETSRV] Telnet server waitting for connection...\n");
}
@@ -588,7 +664,7 @@ return;
*/
void exec_moduleinit(char *modname)
{
void (*fptr)();
void (*fptr)(void);
char initfunc[TELNET_CMD_MAXSIZE+9];
if (strlen(modname) > TELNET_CMD_MAXSIZE)
@@ -609,23 +685,26 @@ char initfunc[TELNET_CMD_MAXSIZE+9];
}
}
int add_embeddedmodules()
int add_embeddedmodules(void)
{
int ret=0;
for(int i=0; i<telnetoptions[TELNETSRV_STATICMOD].numelt;i++)
{
ret++;
exec_moduleinit(telnetoptions[TELNETSRV_STATICMOD].strlistptr[i]);
}
return ret;
}
int add_sharedmodules()
int add_sharedmodules(void)
{
char initfunc[TELNET_CMD_MAXSIZE+9];
void (*fptr)();
void (*fptr)(void);
int ret=0;
for(int i=0; i<telnetoptions[TELNETSRV_SHRMOD].numelt;i++)
{
@@ -634,22 +713,23 @@ void (*fptr)();
if ( fptr != NULL)
{
fptr();
ret++;
}
else
{
fprintf(stderr,"[TELNETSRV] couldn't find %s for module %s \n",initfunc,telnetoptions[TELNETSRV_STATICMOD].strlistptr[i]);
}
}
return ret;
}
int init_telnetsrv(char *cfgfile)
int telnetsrv_autoinit(void)
{
void *lib_handle;
char** moduleslist;
memset(&telnetparams,0,sizeof(telnetparams));
config_get( telnetoptions,sizeof(telnetoptions)/sizeof(paramdef_t),NULL);
config_get( telnetoptions,sizeof(telnetoptions)/sizeof(paramdef_t),"telnetsrv");
if(pthread_create(&telnetparams.telnet_pthread,NULL, (void *(*)(void *))run_telnetsrv, NULL) != 0)
@@ -691,6 +771,26 @@ int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmdde
}
/* function which will be called by the shared lib loader, to check shared lib version
against main exec version. version mismatch no considered as fatal (interfaces not supposed to change)
*/
int telnetsrv_checkbuildver(char * mainexec_buildversion, char ** shlib_buildversion)
{
#ifndef PACKAGE_VERSION
#define PACKAGE_VERSION "standalone built: " __DATE__ __TIME__
#endif
*shlib_buildversion = PACKAGE_VERSION;
if (strcmp(mainexec_buildversion, *shlib_buildversion) != 0) {
fprintf(stderr,"[TELNETSRV] shared lib version %s, doesn't match main version %s, compatibility should be checked\n",
mainexec_buildversion,*shlib_buildversion);
}
return 0;
}
int telnetsrv_getfarray(loader_shlibfunc_t **farray)
{
*farray=malloc(sizeof(loader_shlibfunc_t));
(*farray)[0].fname=TELNET_ADDCMD_FNAME;
(*farray)[0].fptr=(int (*)(void) )add_telnetcmd;
return 1;
}

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -18,7 +18,6 @@
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file common/utils/telnetsrv/telnetsrv.h
* \brief: include file for telnet server implementation
* \author Francois TABURET
@@ -38,7 +37,7 @@
#define TELNET_MAX_MSGLENGTH 2048
#define TELNET_PROMPT "softmodem> "
#define TELNET_MAXCMD 20
#define TELNET_CMD_MAXSIZE 10
#define TELNET_CMD_MAXSIZE 20
#define TELNET_HELPSTR_SIZE 80
/* status return by the command parser after it analysed user input */
@@ -70,7 +69,7 @@ typedef struct cmddef {
#define TELNET_VARTYPE_INT64 3
#define TELNET_VARTYPE_STRING 4
#define TELNET_VARTYPE_DOUBLE 5
#define TELNET_VARTYPE_PTR 6
//#define TELNET_VARTYPE_PTR 6
typedef struct variabledef {
char varname[TELNET_CMD_MAXSIZE];
char vartype;
@@ -96,6 +95,8 @@ typedef struct {
pthread_t telnet_pthread; // thread id of the telnet server
int telnetdbg; // debug level of the server
int priority; // server running priority
char *histfile; // command history
int histsize; // command history length
int new_socket; // socket of the client connection
int logfilefd; // file id of the log file when log output is redirected to a file
int saved_stdout; // file id of the previous stdout, used to be able to restore original stdout
@@ -130,10 +131,12 @@ VT escape sequence definition, for smarter display....
#define STDFMT "\x1b[0m"
/*---------------------------------------------------------------------------------------------*/
#define TELNET_ADDCMD_FNAME "add_telnetcmd"
typedef int(*add_telnetcmd_func_t)(char *, telnetshell_vardef_t *, telnetshell_cmddef_t *);
#ifdef TELNETSERVERCODE
int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd);
void set_sched(pthread_t tid, int pid,int priority);
void set_affinity(pthread_t tid, int pid, int coreid);
extern int get_phybsize();
extern int get_phybsize(void);
#endif
#endif

View File

@@ -0,0 +1,28 @@
set(TELNETROOT ${OPENAIR_DIR}/common/utils/telnetsrv )
set(TELNETSRV_SOURCE
${TELNETROOT}/telnetsrv.c
${TELNETROOT}/telnetsrv_phycmd.c
${TELNETROOT}/telnetsrv_proccmd.c
${TELNETROOT}/telnetsrv_loader.c
)
#set(TELNETSRV_ETHDEVCMD_SOURCE
# ${APPROOT}/telnetsrv/telnetsrv_ethdevcmd.c
# )
add_library(telnetsrv MODULE ${TELNETSRV_SOURCE} )
#add_library(telnetsrv_ethdevcmd MODULE ${TELNETSRV_ETHDEVCMD_SOURCE} )
target_link_libraries(telnetsrv PRIVATE history)
install(TARGETS telnetsrv DESTINATION bin)
if (EXISTS "${OPENAIR_BUILD_DIR}/lte_build_oai/build" AND IS_DIRECTORY "${OPENAIR_BUILD_DIR}/lte_build_oai/build")
install(TARGETS telnetsrv DESTINATION ${OPENAIR_BUILD_DIR}/lte_build_oai/build)
endif (EXISTS "${OPENAIR_BUILD_DIR}/lte_build_oai/build" AND IS_DIRECTORY "${OPENAIR_BUILD_DIR}/lte_build_oai/build")

View File

@@ -0,0 +1,84 @@
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file common/utils/telnetsrv/telnetsrv_loader.c
* \brief: implementation of telnet commands related to softmodem linux process
* \author Francois TABURET
* \date 2018
* \version 0.1
* \company NOKIA BellLabs France
* \email: francois.taburet@nokia-bell-labs.com
* \note
* \warning
*/
#define _GNU_SOURCE
#include <string.h>
#include <pthread.h>
#define TELNETSERVERCODE
#include "telnetsrv.h"
#define TELNETSRV_LOADER_MAIN
#include "telnetsrv_loader.h"
int loader_show_cmd(char *buff, int debug, telnet_printfunc_t prnt);
telnetshell_cmddef_t loader_cmdarray[] = {
{"show","[params,modules]",loader_show_cmd},
{"","",NULL},
};
/*-------------------------------------------------------------------------------------*/
int loader_show_cmd(char *buff, int debug, telnet_printfunc_t prnt)
{
if (debug > 0)
prnt( "loader_show_cmd received %s\n",buff);
if (strcasestr(buff,"params") != NULL) {
prnt( "loader parameters:\n");
prnt( " Main executable build version: \"%s\"\n", loader_data.mainexec_buildversion);
prnt( " Default shared lib path: \"%s\"\n", loader_data.shlibpath);
prnt( " Max number of shared lib : %i\n", loader_data.maxshlibs);
}
else if (strcasestr(buff,"modules") != NULL) {
prnt( "%i shared lib have been dynamicaly loaded by the oai loader\n", loader_data.numshlibs);
for (int i=0 ; i<loader_data.numshlibs ; i++) {
prnt( " Module %i: %s\n", i,loader_data.shlibs[i].name);
prnt( " Shared library build version: \"%s\"\n",((loader_data.shlibs[i].shlib_buildversion == NULL )?"":loader_data.shlibs[i].shlib_buildversion));
prnt( " Shared library path: \"%s\"\n", loader_data.shlibs[i].thisshlib_path);
prnt( " %i function pointers registered:\n", loader_data.shlibs[i].numfunc);
for(int j=0 ; j<loader_data.shlibs[i].numfunc;j++) {
prnt( " function %i %s at %p\n",j,
loader_data.shlibs[i].funcarray[j].fname, loader_data.shlibs[i].funcarray[j].fptr);
}
}
} else {
prnt("%s: wrong loader command...\n",buff);
}
return 0;
}
void add_loader_cmds(void)
{
add_telnetcmd("loader", loader_globalvardef, loader_cmdarray);
}

View File

@@ -19,30 +19,37 @@
* contact@openairinterface.org
*/
/*! \file rrh_gw_extern.h
* \brief rrh gatewy external vars
* \author Navid Nikaein, Katerina Trilyraki, Raymond Knopp
* \date 2015
/*! \file common/utils/telnetsrv_proccmd.h
* \brief: Include file defining telnet commands related to softmodem linux process
* \author Francois TABURET
* \date 2018
* \version 0.1
* \company Eurecom
* \maintainer: navid.nikaein@eurecom.fr
* \company NOKIA BellLabs France
* \email: francois.taburet@nokia-bell-labs.com
* \note
* \warning very experimental
* \warning
*/
#ifndef RRH_GW_EXTERNS_H_
#define RRH_GW_EXTERNS_H_
extern char rf_config_file[1024];
#ifdef TELNETSRV_LOADER_MAIN
extern openair0_timestamp timestamp_UE_tx[4] ,timestamp_UE_rx[4] ,timestamp_eNB_rx[4],timestamp_eNB_tx[4];
extern openair0_vtimestamp hw_counter;
extern int32_t UE_tx_started,UE_rx_started,eNB_rx_started ,eNB_tx_started;
extern int32_t nsamps_UE[4],nsamps_eNB[4];
extern int32_t overflow_rx_buffer_eNB[4],overflow_rx_buffer_UE[4];
extern uint8_t rrh_exit;
extern int32_t **rx_buffer_eNB, **rx_buffer_UE;
extern unsigned int rt_period;
extern pthread_mutex_t timer_mutex;
#include "UTIL/LOG/log.h"
#endif
#include "common/utils/load_module_shlib.h"
telnetshell_vardef_t loader_globalvardef[] = {
{"mainversion",TELNET_VARTYPE_STRING,&(loader_data.mainexec_buildversion)},
{"defpath",TELNET_VARTYPE_STRING,&(loader_data.shlibpath)},
{"maxshlibs",TELNET_VARTYPE_INT32,&(loader_data.maxshlibs)},
{"numshlibs",TELNET_VARTYPE_INT32,&(loader_data.numshlibs)},
{"",0,NULL}
};
telnetshell_vardef_t *loader_modulesvardef;
extern void add_loader_cmds(void);
#endif
/*-------------------------------------------------------------------------------------*/

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -41,7 +41,7 @@
char *prnbuff;
extern int dump_eNB_stats(PHY_VARS_eNB *eNB, char* buffer, int length);
void init_phytelnet()
void init_phytelnet(void)
{
prnbuff=malloc(get_phybsize() );
if (prnbuff == NULL)
@@ -134,7 +134,7 @@ telnetshell_cmddef_t phy_cmdarray[] = {
/*-------------------------------------------------------------------------------------*/
void add_phy_cmds()
void add_phy_cmds(void)
{
init_phytelnet();

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -42,8 +42,6 @@
#define TELNETVAR_PHYCC1 1
telnetshell_vardef_t phy_vardef[] = {
{"phycc1",TELNET_VARTYPE_PTR,NULL},
{"phycc2",TELNET_VARTYPE_PTR,NULL},
//{"iqmax",TELNET_VARTYPE_INT16,NULL},
//{"iqmin",TELNET_VARTYPE_INT16,NULL},
//{"loglvl",TELNET_VARTYPE_INT32,NULL},
@@ -57,7 +55,7 @@ telnetshell_vardef_t phy_vardef[] = {
#else
extern void add_phy_cmds();
extern void add_phy_cmds(void);
#endif

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -54,6 +54,8 @@
#define TELNETSRV_PROCCMD_MAIN
#include "log.h"
#include "log_extern.h"
#include "common/config/config_userapi.h"
#include "openair1/PHY/extern.h"
#include "telnetsrv_proccmd.h"
void decode_procstat(char *record, int debug, telnet_printfunc_t prnt)
@@ -70,14 +72,13 @@ char toksep[2];
lptr= prntline;
/*http://man7.org/linux/man-pages/man5/proc.5.html gives the structure of the stat file */
while( procfile_fiels != NULL && fieldcnt < 42)
{
while( procfile_fiels != NULL && fieldcnt < 42) {
long int policy;
if (strlen(procfile_fiels) == 0)
continue;
fieldcnt++;
sprintf(toksep," ");
switch(fieldcnt)
{
switch(fieldcnt) {
case 1: /* id */
lptr+=sprintf(lptr,"%9.9s ",procfile_fiels);
sprintf(toksep,")");
@@ -104,12 +105,36 @@ char toksep[2];
break;
case 41: //policy
lptr+=sprintf(lptr,"%3.3s ",procfile_fiels);
policy=strtol(procfile_fiels,NULL,0);
switch(policy) {
case SCHED_FIFO:
lptr+=sprintf(lptr,"%s ","rt: fifo");
break;
case SCHED_OTHER:
lptr+=sprintf(lptr,"%s ","other");
break;
case SCHED_IDLE:
lptr+=sprintf(lptr,"%s ","idle");
break;
case SCHED_BATCH:
lptr+=sprintf(lptr,"%s ","batch");
break;
case SCHED_RR:
lptr+=sprintf(lptr,"%s ","rt: rr");
break;
case SCHED_DEADLINE:
lptr+=sprintf(lptr,"%s ","rt: deadline");
break;
default:
lptr+=sprintf(lptr,"%s ","????");
break;
}
break;
default:
break;
}/* switch on fieldcnr */
}/* switch on fieldcnr */
procfile_fiels =strtok_r(NULL,toksep,&strtokptr);
} /* while on proc_fields != NULL */
} /* while on proc_fields != NULL */
prnt("%s\n",prntline);
} /*decode_procstat */
@@ -141,7 +166,7 @@ char aname[256];
DIR *proc_dir;
struct dirent *entry;
int rt;
prnt(" id name state USRmod KRNmod prio nice vsize proc pol \n\n");
snprintf(aname, sizeof(aname), "/proc/%d/stat", getpid());
@@ -172,14 +197,51 @@ extern log_t *g_log;
if (debug > 0)
prnt(" proccmd_show received %s\n",buf);
if (strcasestr(buf,"thread") != NULL)
{
if (strcasestr(buf,"thread") != NULL) {
print_threads(buf,debug,prnt);
}
}
if (strcasestr(buf,"loglvl") != NULL) {
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++){
prnt("\t%s:\t%s\t%s\n",g_log->log_component[i].name, map_int_to_str(log_verbosity_names,g_log->log_component[i].flag),
map_int_to_str(log_level_names,g_log->log_component[i].level));
prnt("component verbosity level enabled\n");
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
prnt("%02i %17.17s:%10.10s%10.10s %s\n",i ,g_log->log_component[i].name,
map_int_to_str(log_verbosity_names,g_log->log_component[i].flag),
map_int_to_str(log_level_names,g_log->log_component[i].level),
((g_log->log_component[i].interval>0)?"Y":"N") );
}
}
if (strcasestr(buf,"config") != NULL) {
prnt("Command line arguments:\n");
for (int i=0; i < config_get_if()->argc; i++) {
prnt(" %02i %s\n",i ,config_get_if()->argv[i]);
}
prnt("Config module flags ( -O <cfg source>:<xxx>:dbgl<flags>): 0x%08x\n", config_get_if()->rtflags);
prnt(" Print config debug msg, params values (flag %u): %s\n",CONFIG_PRINTPARAMS,
((config_get_if()->rtflags & CONFIG_PRINTPARAMS) ? "Y" : "N") );
prnt(" Print config debug msg, memory management(flag %u): %s\n",CONFIG_DEBUGPTR,
((config_get_if()->rtflags & CONFIG_DEBUGPTR) ? "Y" : "N") );
prnt(" Print config debug msg, command line processing (flag %u): %s\n",CONFIG_DEBUGCMDLINE,
((config_get_if()->rtflags & CONFIG_DEBUGCMDLINE) ? "Y" : "N") );
prnt(" Don't exit if param check fails (flag %u): %s\n",CONFIG_NOABORTONCHKF,
((config_get_if()->rtflags & CONFIG_NOABORTONCHKF) ? "Y" : "N") );
prnt("Config source: %s, parameters:\n",CONFIG_GETSOURCE );
for (int i=0; i < config_get_if()->num_cfgP; i++) {
prnt(" %02i %s\n",i ,config_get_if()->cfgP[i]);
}
prnt("Softmodem components:\n");
prnt(" %02i Ru(s)\n", RC.nb_RU);
prnt(" %02i lte RRc(s), %02i NbIoT RRC(s)\n", RC.nb_inst, RC.nb_nb_iot_rrc_inst);
prnt(" %02i lte MACRLC(s), %02i NbIoT MACRLC(s)\n", RC.nb_macrlc_inst, RC.nb_nb_iot_macrlc_inst);
prnt(" %02i lte L1, %02i NbIoT L1\n", RC.nb_L1_inst, RC.nb_nb_iot_L1_inst);
for(int i=0; i<RC.nb_inst; i++) {
prnt(" lte RRC %i: %02i CC(s) \n",i,((RC.nb_CC == NULL)?0:RC.nb_CC[i]));
}
for(int i=0; i<RC.nb_L1_inst; i++) {
prnt(" lte L1 %i: %02i CC(s)\n",i,((RC.nb_L1_CC == NULL)?0:RC.nb_L1_CC[i]));
}
for(int i=0; i<RC.nb_macrlc_inst; i++) {
prnt(" lte macrlc %i: %02i CC(s)\n",i,((RC.nb_mac_CC == NULL)?0:RC.nb_mac_CC[i]));
}
}
return 0;
@@ -190,12 +252,16 @@ int proccmd_thread(char *buf, int debug, telnet_printfunc_t prnt)
int bv1,bv2;
int res;
char sv1[64];
char tname[32];
bv1=0;
bv2=0;
sv1[0]=0;
if (debug > 0)
prnt("proccmd_thread received %s\n",buf);
if (strcasestr(buf,"help") != NULL) {
prnt(PROCCMD_THREAD_HELP_STRING);
return 0;
}
res=sscanf(buf,"%i %9s %i",&bv1,sv1,&bv2);
if (debug > 0)
prnt(" proccmd_thread: %i params = %i,%s,%i\n",res,bv1,sv1,bv2);
@@ -231,32 +297,95 @@ extern void exit_fun(const char* s);
return 0;
}
int proccmd_log(char *buf, int debug, telnet_printfunc_t prnt)
{
int idx1=0;
int idx2=NUM_LOG_LEVEL-1;
int s = sscanf(buf,"%*s %i-%i",&idx1,&idx2);
char *logsubcmd=NULL;
int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
if (debug > 0)
prnt("process module received %s\n",buf);
prnt( "proccmd_log received %s\n s=%i sub command %s\n",buf,s,((logsubcmd==NULL)?"":logsubcmd));
if (s == 1 && logsubcmd != NULL) {
if (strcasestr(logsubcmd,"online") != NULL) {
if (strcasestr(buf,"noonline") != NULL) {
set_glog_onlinelog(0);
prnt("online logging disabled\n",buf);
} else {
set_glog_onlinelog(1);
prnt("online logging enabled\n",buf);
}
}
else if (strcasestr(logsubcmd,"show") != NULL) {
prnt("Available log levels: \n ");
for (int i=0; log_level_names[i].name != NULL; i++)
prnt("%s ",log_level_names[i].name);
prnt("\nAvailable verbosity: \n ");
for (int i=0; log_verbosity_names[i].name != NULL; i++)
prnt("%s ",log_verbosity_names[i].name);
prnt("\n");
proccmd_show("loglvl",debug,prnt);
}
else if (strcasestr(logsubcmd,"help") != NULL) {
prnt(PROCCMD_LOG_HELP_STRING);
} else {
prnt("%s: wrong log command...\n",logsubcmd);
}
} else if ( s == 3 && logsubcmd != NULL) {
int level, verbosity, interval;
char *tmpstr=NULL;
char *logparam=NULL;
int l;
level = verbosity = interval = -1;
l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr);
if (debug > 0)
prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr));
if (l ==2 ) {
if (strcmp(logparam,"level") == 0) {
level=map_str_to_int(log_level_names,tmpstr);
if (level < 0) prnt("level %s unknown\n",tmpstr);
} else if (strcmp(logparam,"verbos") == 0) {
verbosity=map_str_to_int(log_verbosity_names,tmpstr);
if (verbosity < 0) prnt("verbosity %s unknown\n",tmpstr);
} else {
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
}
} else if (l ==1 ) {
if (strcmp(logparam,"enable") == 0) {
interval = 1;
} else if (strcmp(logparam,"disable") == 0) {
interval = 0;
} else {
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
}
} else {
prnt("%s unknown log sub command \n",logsubcmd);
}
if (logparam != NULL) free(logparam);
if (tmpstr != NULL) free(tmpstr);
for (int i=idx1; i<=idx2 ; i++) {
set_comp_log(i, level, verbosity, interval);
prnt("log level/verbosity comp %i %s set to %s / %s (%s)\n",
i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name),
map_int_to_str(log_level_names,g_log->log_component[i].level),
map_int_to_str(log_verbosity_names,g_log->log_component[i].flag),
((g_log->log_component[i].interval>0)?"enabled":"disabled"));
}
} else {
prnt("%s: wrong log command...\n",buf);
}
if (strcasestr(buf,"enable") != NULL)
{
set_glog_onlinelog(1);
}
if (strcasestr(buf,"disable") != NULL)
{
set_glog_onlinelog(0);
}
if (strcasestr(buf,"show") != NULL)
{
proccmd_show("loglvl",debug,prnt);
}
return 0;
}
/*-------------------------------------------------------------------------------------*/
void add_softmodem_cmds()
void add_softmodem_cmds(void)
{
add_telnetcmd("softmodem",proc_vardef,proc_cmdarray);
}

View File

@@ -3,7 +3,7 @@
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -19,6 +19,7 @@
* contact@openairinterface.org
*/
/*! \file common/utils/telnetsrv/telnetsrv_proccmd.h
* \brief: Include file defining telnet commands related to this linux process
* \author Francois TABURET
@@ -43,15 +44,33 @@ extern int proccmd_log(char *buf, int debug, telnet_printfunc_t prnt);
telnetshell_vardef_t proc_vardef[] = {
{"",0,NULL}
};
#define PROCCMD_LOG_HELP_STRING " log sub commands: \n\
show: display current log configuration \n\
online, noonline: enable or disable console logs \n\
enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\
level_<level> id1-id2: set log level to <level> for components index id1 to id2 \n\
level_<verbosity> id1-id2: set log verbosity to <verbosity> for components index id1 to id2 \n\
use the show command to get the values for <level>, <verbosity> and the list of component indexes \
that can be used for id1 and id2 \n"
#define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\
<thread id> aff <core> : set affinity of thread <thread id> to core <core> \n\
<thread id> prio <prio> : set scheduling parameters for thread <thread id> \n\
if prio < -20: linux scheduling policy set to FIFO, \n\
with priority = -20 - prio \n\
if prio > 19: linux scheduling policy set to OTHER, \n\
with priority (nice value) = prio \n\
use \"softmodem show thread\" to get <thread id> \n"
telnetshell_cmddef_t proc_cmdarray[] = {
{"show","loglvl|thread", proccmd_show},
{"log","[enable,disable]", proccmd_log},
{"thread","<id> aff|prio <aff|prio>", proccmd_thread},
{"show","loglvl|thread|config", proccmd_show},
{"log","(enter help for details)", proccmd_log},
{"thread","(enter help for details)", proccmd_thread},
{"exit","", proccmd_exit},
{"","",NULL},
};
#else
extern void add_proccmd_cmds();
extern void add_proccmd_cmds(void);
#endif /* TELNETSRV_PROCCMD_MAIN */

107
d2d_emulator_setup.txt Normal file
View File

@@ -0,0 +1,107 @@
Scenario 1 : Off-network UE2UE link
SynchREF UE (UE1)
UE1(eth0 - 10.10.10.1)--------UE2(eno1 - 10.10.10.2)
Here's an example of /etc/network/interfaces configuration for UE1
auto eth0
iface eth0 inet static
address 10.10.10.1
netmask 255.255.255.0
gateway 10.10.10.1
Prepare the environment:
- git clone https://gitlab.eurecom.fr/matzakos/LTE-D2D.git #branch: master
This branch contains all the current development for DDPS
- UE MAC<-> UE MAC for Scenario 1
- eNB MAC<->UE MAC (NFAPI Transport)
- RRC Extensions for “on-network” cases
NFAPI configuration (required even for Scenario 1 target)
- git clone https://github.com/cisco/open-nFAPI.git
- cd open-nfapi
- patch -p1 --dry-run < $OPENAIR_HOME/open-nfapi.oai.patch
Validate that there are no errors
- patch -p1 < $OPENAIR_HOME/open-nfapi.oai.patch
OAI build/execute
- export NFAPI_DIR=XXX (place where NFAPI was installed)
- cd cmake_targets
- ./build_oai --UE
(if necessary, use ./build_oai -I --UE to install required packages)
- cd lte_build_oai/build/
- cp ../../../targets/bin/.ue* .
- cp ../../../targets/bin/.usim* .
- sudo insmod ../../../targets/bin/ue_ip.ko
UE1:
- sudo ifconfig oip0 10.0.0.1
- sudo iptables -A POSTROUTING -t mangle -o oip0 -d 224.0.0.3 -j MARK --set-mark 3
- (if necessary) sudo route add default gw 10.10.10.1 eth0
UE2:
- sudo ifconfig oip0 10.0.0.2
- sudo iptables -A POSTROUTING -t mangle -o oip0 -d 224.0.0.3 -j MARK --set-mark 3
- (if necessary) sudo route add default gw 10.10.10.1 eno1
UE1 and UE2: Get and build vencore_app from d2d-l3-stub (branch: l3_stub)
- gcc -I . vencore_app.c -o vencore_app -lpthread
--------------------------------
TEST ONE-TO-MANY
Run UE1 then UE2, for example:
UE1: sudo ./lte-softmodem-stub -U --emul-iface eth0
UE2: sudo ./lte-softmodem-stub -U --emul-iface eno1
Test with Ping
- Sender - UE1: ping -I oip0 224.0.0.3
- Receiver - UE2: using wireshark
Test with Iperf
- Sender - UE1: iperf -c 224.0.0.3 -u -b 0.1M --bind 10.0.0.1 -t 100
- Receiver - UE2: sudo ./mcreceive 224.0.0.3 5001
Filter the incomming packets according to GroupL2Id: receiver (one-to-many) can discard the packets if it doesn't belong to this group.
For the moment, both sender and receiver use the same set of Ids (hardcoded)
UE1 (sender)
- sudo ./lte-softmodem-stub -U --emul-iface eth0
- ./vencore_app #send the sourceL2Id, groupL2Id to OAI
- ping -I oip0 224.0.0.3
UE2(receiver)
- sudo ./lte-softmodem-stub -U --emul-iface eno1
#we can see the incomming packets from OAI log, however, cannot see from Wireshark -> they are discarded at MAC layer
- ./vencore_app #we can see the packets appearing in Wireshark
--------------------------------------
TEST PC5-S (UE1 -sender, UE2 - receiver) and PC5-U for ONE-TO-ONE scenario
Configure UE1/UE2
UE1:
- sudo ifconfig oip0 10.0.0.1
- sudo iptables -A POSTROUTING -t mangle -o oip0 -d 10.0.0.2 -j MARK --set-mark 3
- sudo route add default gw 10.10.10.1 eth0
UE2:
- sudo ifconfig oip0 10.0.0.2
- sudo iptables -A POSTROUTING -t mangle -o oip0 -d 10.0.0.1 -j MARK --set-mark 3
- sudo route add default gw 10.10.10.1 eno1
step 1:
- UE1: sudo ./lte-softmodem-stub -U --emul-iface eth0
step 2:
- UE2: sudo ./lte-softmodem-stub -U --emul-iface eno1
- UE2: ./vencore_app -r #listen to incomming message from PC5-S
step 3:
- UE1: ./vencore_app -s #send a message via PC5-S (e.g., DirectCommunicationRequest)
Generate unicast traffic
UE1: ping -I oip0 10.0.0.2
--------------------------------------
TEST PC5-D
step 1:
- UE1: sudo ./lte-softmodem-stub -U --emul-iface eth0
- UE1: ./vencore_app -d #send a PC5-Discovery-Announcement via PC5D
step 2:
- UE2: sudo ./lte-softmodem-stub -U --emul-iface eno1
- UE2: ./vencore_app -d #send a PC5-Discovery-Announcement via PC5D

15
nfapi/README Normal file
View File

@@ -0,0 +1,15 @@
This directory contains the NFAPI code.
It comes in two parts:
1 - open-nFAPI
This is a clone of the github repository
(https://github.com/cisco/open-nFAPI,
commit b3bc579b1697eab829d5d8a2de59c93a61b88fa4).
The patch open-nfapi.oai.patch has then been applied.
2 - oai_integration
This is code written by David Price from Cisco to integrate
open-nFAPI into OpenAirInterface.

View File

@@ -19,31 +19,33 @@
* contact@openairinterface.org
*/
#ifndef _IOCTL_H
#define _IOCTL_H
#include <sys/ioctl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <net/if.h>
#include <linux/ipv6.h>
#include <linux/in.h>
#include <linux/in6.h>
//#include <linux/netdevice.h>
#include <pthread.h>
//#include <graal_constant.h>
//#define GRAAL_STATE_IDLE 0
//#define GRAAL_STATE_CONNECTED 1
//#define GRAAL_STATE_ESTABLISHMENT_REQUEST 2
//#define GRAAL_STATE_ESTABLISHMENT_FAILURE 3
//#define GRAAL_STATE_RELEASE_FAILURE 4
void set_thread_priority(int priority)
{
//printf("%s(priority:%d)\n", __FUNCTION__, priority);
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
pthread_attr_t ptAttr;
extern int inet_pton(int af, const char *src, void *dst);
extern char *inet_ntop(int af, const void *src, char *dst, size_t sise);
struct sched_param schedParam;
schedParam.__sched_priority = priority; //79;
if(sched_setscheduler(0, SCHED_RR, &schedParam) != 0)
{
printf("Failed to set scheduler to SCHED_RR\n");
}
#endif //_IOCTL_H
if(pthread_attr_setschedpolicy(&ptAttr, SCHED_RR) != 0)
{
printf("Failed to set pthread sched policy SCHED_RR\n");
}
pthread_attr_setinheritsched(&ptAttr, PTHREAD_EXPLICIT_SCHED);
struct sched_param thread_params;
thread_params.sched_priority = 20;
if(pthread_attr_setschedparam(&ptAttr, &thread_params) != 0)
{
printf("failed to set sched param\n");
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -19,13 +19,9 @@
* contact@openairinterface.org
*/
mod_sym_t qpsk_table[4];
mod_sym_t qam16_table[16];
mod_sym_t qam64_table[64];
#if !defined(NFAPI_PNF_H__)
#define NFAPI_PNF_H__
int oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind);
void configure_nfapi_pnf(char *vnf_ip_addr, int vnf_p5_port, char *pnf_ip_addr, int pnf_p7_port, int vnf_p7_port);
int16_t kHz75_25PRB[1024] = {};
int16_t kHz75_6PRB = {};
int16_t kHz75_15PRB = {};
int16_t kHz75_50PRB = {};
int16_t kHz75_75PRB = {};
int16_t kHz75_100PRB = {};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -19,6 +19,9 @@
* contact@openairinterface.org
*/
extern unsigned short f1f2mat_old[2*188];
#if !defined(NFAPI_VNF_H__)
#define NFAPI_VNF_H__
void configure_nfapi_vnf(char *vnf_addr, int vnf_p5_port);
#endif

View File

@@ -0,0 +1,67 @@
/*
* Copyright 2017 Cisco Systems, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _VENDOR_EXT_H_
#define _VENDOR_EXT_H_
#include "nfapi_interface.h"
typedef enum {
P5_VENDOR_EXT_REQ = NFAPI_VENDOR_EXT_MSG_MIN,
P5_VENDOR_EXT_RSP,
P7_VENDOR_EXT_REQ,
P7_VENDOR_EXT_IND
} vendor_ext_message_id_e;
typedef struct {
nfapi_p4_p5_message_header_t header;
uint16_t dummy1;
uint16_t dummy2;
} vendor_ext_p5_req;
typedef struct {
nfapi_p4_p5_message_header_t header;
uint16_t error_code;
} vendor_ext_p5_rsp;
typedef struct {
nfapi_p7_message_header_t header;
uint16_t dummy1;
uint16_t dummy2;
} vendor_ext_p7_req;
typedef struct {
nfapi_p7_message_header_t header;
uint16_t error_code;
} vendor_ext_p7_ind;
typedef struct {
nfapi_tl_t tl;
uint32_t dummy;
} vendor_ext_tlv_1;
#define VENDOR_EXT_TLV_1_TAG 0xF001
typedef struct {
nfapi_tl_t tl;
uint32_t dummy;
} vendor_ext_tlv_2;
#define VENDOR_EXT_TLV_2_TAG 0xF002
#endif // _VENDOR_EXT_

View File

@@ -0,0 +1,36 @@
env:
global:
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
# via the "travis encrypt" command using the project repo's public key
- secure: "oNj8JhGBN/zjzrAU7y2Nn/wxSxA/MDp2Y8fVLLp6fhx+y2mWdlMZhgCjeKSpdbGtroUnxErX1P8t+8EPz2+mMoq+G809Q9t7eJjd1+6nkVhEEfDXN83BmJkvIylC0/IKJiT2wCa8LzbdhpQUFyZ1Gk1WKZozAW5HotfFjm6/NFi/GX4uA7S0tU5E4yC3r4yqH9cLZ+arWMOEY/X0lrx0n6tLjDe921kFwkZQGFzAzrbXN2fZXKQ3xFcpREWEgEWsY7H2n4T7oJI3nEPY4P/4kvCjeQMjnlATEwtcciBiUbHRew4WWSTndF54crRlqFlzFcEf/Ouz27U/d2xYHJWcWNi88l+/qsb+V0uobwhiGUJGbVhf9IkgEO3tr/zbwkPDFrXpa/1xuSoc6jDm8i61gKQkcBhQsRFXlciPvwLhiL07gzeAfZD1Yke3tE+0geHPbEA0czzwtHe35jorAKYWsFXOXmcoK9t9SpnvBRFz6JuEsHPooafze43sTJg3qkgBszkU+U38CneeAVwo/uTA3Zw1ZrtOQv56v0UvAHze/VAF5z3rFJPl1oJl60OI8V5UBg4yIa2bySKhO//zwd4MGmsBpcWwDuu2BHUVasfk0vaetVxVVtdXG/2BuBP+IXinpJtI48NSFs6PT82dHz4cDF/iLDs0hPC6sbV258PY8F0="
language: cpp
dist: trusty
sudo: required
compiler:
- g++
before_install:
- sudo apt-get install doxygen
- sudo apt-get install libcunit1-dev
- sudo apt-get install libz-dev
- sudo apt-get install libsctp-dev
- sudo apt-get install libboost-all-dev
- autoreconf -i
addons:
coverity_scan:
project:
name: cisco-open-nFAPI
version: 1.0
description: Build submitted via Travis CI
notification_email: xxx@cisco.com
build_command_prepend: ./configure
build_command: make
branch_pattern: coverity_scan
script:
- ./configure && make && make check

View File

201
nfapi/open-nFAPI/LICENSE.md Normal file
View File

@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -0,0 +1,15 @@
ACLOCAL_AMFLAGS = -I m4
SUBDIRS =common/ \
sim_common/ \
nfapi/ \
pnf/ \
vnf/ \
nfapi/tests \
pnf/tests \
vnf/tests \
pnf_sim/ \
vnf_sim/ \
integration_tests/ \
docs/ \
$(NULL)

138
nfapi/open-nFAPI/README.md Normal file
View File

@@ -0,0 +1,138 @@
[![Build Status](https://travis-ci.org/cisco/open-nFAPI.svg?branch=master)](https://travis-ci.org/cisco/open-nFAPI)
[![Coverity Status](https://scan.coverity.com/projects/11791/badge.svg)](https://scan.coverity.com/projects/cisco-open-nfapi)
# open-nFAPI
Open-nFAPI is implementation of the Small Cell Forum's network functional API or nFAPI for short.
nFAPI defines a network protocol that is used to connect a Physical Network Function (PNF)
running LTE Layer 1 to a Virtual Network Function (VNF) running LTE layer 2 and above. The specification
can be found at http://scf.io/documents/082.
The aim of open-nFAPI is to provide an open interface between LTE layer 1 and layer 2 to allow for
interoperability between the PNF and VNF & also to facilitate the sharing of PNF's between
different VNF's
Open-nFAPI implements the P4, P5 and P7 interfaces as defined by the nFAPI specification.
* The P5 interface allows the VNF to query and configure the 'resources' of the PNF; i.e slice it into
1 or more PHY instances.
* The P7 interface is used to send the subframe information between the PNF and VNF for a PHY instance
* The P4 interface allows the VNF to request the PNF PHY instance to perform measurements of the surrounding network
The remaining interfaces are currently outside of the scope of this project.
Supports release 082.09.05 of the nFAPI specification
**The Small Cell Forum cordially requests that any derivative work that looks to
extend the nFAPI libraries use the specified vendor extension techniques,
so ensuring the widest interoperability of the baseline nFAPI specification
in those derivative works.**
## Awards
The Open-nFAPI project has won the Small Cell Forum Judges Choice award 2017. (http://www.smallcellforum.org/awards-2/winners-2017/)
## Licensing
The open-nFAPI libraries are release by CISCO under an Apache 2 license. See `LICENSE.md` file for details
## Downloading
The open-nFAPI project can be pulled from git hub
```
git clone https://github.com/cisco/open-nFAPI.git nfapi
```
The following dependencies are required. These are based on a fresh ubuntu installation.
```
sudo apt-get install autoconf
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install libtool
sudo apt-get install make
sudo apt-get install doxygen
sudo apt-get install libcunit1-dev
sudo apt-get install libz-dev
sudo apt-get install libsctp-dev
sudo apt-get install libboost-all-dev
```
## Building
To build the open-nFAPI project
```
autoreconf -i
./configure
make
```
To run the unit and integration tests
```
make check
```
You may notice in the console output of the final integration tests the following
```
*** Missing subframe 123 125
```
Out of the box the machine on which you are running has not be configured for real time operation as a result
the vnf may not be scheduled at the correct times and hence it may risk 'missing' subframe opportunities. This
warning indicates this has happened.
## Running the simulator
The vnf and pnf simulator can be run using the following commands. The pnf and vnf simulator support sourcing and sinking
data over udp. Review the xml configuration files for the details of the port and address to configure. Console logging will show
which address:port is being used
Note : Pinning the simulators to unused cores will produce more consistent behaviour.
Note : You may have to run the processes with sudo to be able to set the real time scheduling and priority
### vnf simulator
To run the vnf simulator you need to specify the port the vnf will listen for p5 connection request upon and also the xml configuration file
```
vnfsim <port> <xml config file>
```
### pnf simulator
To run the vnf simulator you need to specify the addrss & port the pnf will connect to the vnf on and also the xml configuration file
```
pnfsim <address> <port> <xml config file>
```
## Directory structure
```
docs doxgen documentation
common common code used by the nfapi libraries
nfapi the nfapi library including message definitions & encode/decode functions
pnf the pnf library for p4, p5, & p7 interfaces
vnf the vnf library for p4, p5, & p7 interfaces
sim_common common simulation for used by the vnf and pnf sim
vnf_sim a vnf simulator including a stub mac implementation
pnf_sim a pnf simualtor including a fapi interface defintion and stub implementation
xml xml configuration files for the vnf and pnf simulator
wireshark code for a wireshark dissector for the nFAPI protocol
```
## Coverity
Coverity runs on the coverity-scan branch. Changes must be merged to the coverity-scan branch to be checked.
## eNB Integration - Open Air Interface
The open-nFAPI implementation has been integrated with the Open Air Interface solution here (https://gitlab.eurecom.fr/oai/openairinterface5g) and is (at the time of writing) here (https://gitlab.eurecom.fr/daveprice/openairinterface5g/tree/nfapi-ru-rau-split). The open-nFAPI implementation is integrated with the source eNB implementation with any changes required applied as a patch on top of the baseline open-nFAPI library. Any extensions required must be implemented through the vendor extensions as specified by the Small Cell Forum documentation. Any integration wrapping of functionality must be done within the target environment as shown in the Open Air Interface implementation nfapi directory which is defined by the $NFAPI_DIR location at the top level.

View File

@@ -0,0 +1,31 @@
#
# Copyright 2017 Cisco Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
AM_CPPFLAGS = -I$(top_srcdir)/common/public_inc -g -Wall -Werror
noinst_LIBRARIES =libnfapi_common.a
libnfapi_common_a_SOURCES = src/debug.c
libnfapi_common_a_CFLAGS =$(AM_CFLAGS)
lib_LTLIBRARIES =libnfapi_common.la
libnfapi_common_la_SOURCES = src/debug.c

View File

@@ -0,0 +1,51 @@
/*
* Copyright 2017 Cisco Systems, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _DEBUG_H_
#define _DEBUG_H_
/*! The trace levels used by the nfapi libraries */
typedef enum nfapi_trace_level
{
NFAPI_TRACE_ERROR = 1,
NFAPI_TRACE_WARN,
NFAPI_TRACE_NOTE,
NFAPI_TRACE_INFO,
NFAPI_TRACE_LEVEL_MAX
} nfapi_trace_level_t;
/*! The trace function pointer */
typedef void (*nfapi_trace_fn_t)(nfapi_trace_level_t level, const char* format, ...);
/*! Global trace function */
extern nfapi_trace_fn_t nfapi_trace_g;
/*! Global trace level */
extern nfapi_trace_level_t nfapi_trace_level_g;
/*! NFAPI trace macro */
//#define NFAPI_TRACE(level, format, ...) { if(nfapi_trace_g && ((nfapi_trace_level_t)level <= nfapi_trace_level_g)) (*nfapi_trace_g)(level, format, ##__VA_ARGS__); }
#define NFAPI_TRACE(level, format, ...) { if (nfapi_trace_g) (*nfapi_trace_g)(level, format, ##__VA_ARGS__); }
/*! Function to change the trace level
* \param new_level The modified trace level
*/
void nfapi_set_trace_level(nfapi_trace_level_t new_level);
#endif /* _DEBUG_H_ */

View File

@@ -0,0 +1,76 @@
/*
* Copyright 2017 Cisco Systems, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/types.h>
#include <pthread.h>
#include <syslog.h>
#include <debug.h>
#define MAX_MSG_LENGTH 2096
#define TRACE_HEADER_LENGTH 44
void nfapi_trace_dbg(nfapi_trace_level_t level, const char *format, ...);
// initialize the trace function to 0
void (*nfapi_trace_g)(nfapi_trace_level_t level, const char* format, ...) = &nfapi_trace_dbg;
nfapi_trace_level_t nfapi_trace_level_g = NFAPI_TRACE_INFO;
//nfapi_trace_level_t nfapi_trace_level_g = NFAPI_TRACE_WARN;
void nfapi_set_trace_level(nfapi_trace_level_t new_level)
{
nfapi_trace_level_g = new_level;
}
void nfapi_trace_dbg(nfapi_trace_level_t level, const char *format, ...)
{
char trace_buff[MAX_MSG_LENGTH + TRACE_HEADER_LENGTH];
uint32_t num_chars;
va_list p_args;
struct timeval tv;
pthread_t tid = pthread_self();
(void)gettimeofday(&tv, NULL);
num_chars = (uint32_t)snprintf(trace_buff, TRACE_HEADER_LENGTH, "%04u.%06u: 0x%02x: %10u: ", ((uint32_t)tv.tv_sec) & 0x1FFF, (uint32_t)tv.tv_usec, (uint32_t)level, (uint32_t)tid);
if (num_chars > TRACE_HEADER_LENGTH)
{
printf("trace_dbg: Error, num_chars is too large: %d", num_chars);
return;
}
va_start(p_args, format);
if ((num_chars = (uint32_t)vsnprintf(&trace_buff[num_chars], MAX_MSG_LENGTH, format, p_args)))
{
if (level <= NFAPI_TRACE_WARN)
{
printf("%s", trace_buff);
}
printf("%s", trace_buff);
}
va_end(p_args);
}

View File

@@ -0,0 +1,45 @@
AC_INIT([open-nFAPI], [1.0])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign serial-tests])
AM_PROG_AR
LT_INIT([shared static])
# Dependencies
AC_PROG_CC
AC_PROG_CXX
AC_PROG_AWK
AC_CONFIG_HEADERS([config.h])
AC_PROG_LIBTOOL
AC_CHECK_FILE([/usr/include/CUnit/CUnit.h],
[CFLAGS_CUNIT=-I/usr/include/CUnit AC_SUBST(CFLAGS_CUNIT)],
[AC_MSG_NOTICE([Have cunit *************])])
# Need doxygen
AC_CHECK_PROGS([DOXYGEN], [doxygen])
if test -z "$DOXYGEN";
then AC_MSG_WARN([Doxygen not found - continuing without Doxygen support])
fi
AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([docs/Doxyfile])])
AC_REQUIRE_AUX_FILE([tap-driver.sh])
AC_CONFIG_FILES([Makefile
sim_common/Makefile
common/Makefile
nfapi/Makefile
pnf/Makefile
vnf/Makefile
nfapi/tests/Makefile
pnf/tests/Makefile
vnf/tests/Makefile
pnf_sim/Makefile
vnf_sim/Makefile
integration_tests/Makefile
docs/Makefile
])
AC_OUTPUT

Some files were not shown because too many files have changed in this diff Show More