merge again with develop, compiles only
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# RELEASE NOTES: #
|
||||
|
||||
## [v1.2.1](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.2.1) -> February 2020. ##
|
||||
|
||||
* Bug fix for mutex lock for wake-up signal
|
||||
|
||||
## [v1.2.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.2.0) -> January 2020. ##
|
||||
|
||||
This version adds the following implemented features:
|
||||
|
||||
* LTE-M : eNB support for Mode A repetitions
|
||||
- PUSCH CE - 8 Repetitions
|
||||
* Improved CDRX implementation for monolithic eNB
|
||||
* Experimental eMBMS support (now also on eNB side)
|
||||
* Experimental MCE - Multicast Coordination Entity
|
||||
* Bug fixes
|
||||
|
||||
This version also has an improved code quality:
|
||||
|
||||
* Better Test Coverage in Continuous Integration:
|
||||
- Initial framework to do long-run testing at R2LAB
|
||||
|
||||
## [v1.1.1](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.1.1) -> November 2019. ##
|
||||
|
||||
- Bug fix in the TDD Fair Round-Robin scheduler
|
||||
|
||||
## [v1.1.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.1.0) -> July 2019. ##
|
||||
|
||||
This version adds the following implemented features:
|
||||
|
||||
* Experimental support of LTE-M
|
||||
- Single LTE-M UE attachment, legacy-LTE UE attachment is disabled
|
||||
* X2 interface and handover (also X2-U interface)
|
||||
- In FDD and TDD
|
||||
* CU/DU split (F1 interface)
|
||||
- Tested only in FDD
|
||||
* CDRX
|
||||
- Tested only in FDD
|
||||
* Experimental eMBMS support (only on UE side)
|
||||
* Experimental multi-RRU support
|
||||
- Tested only in TDD
|
||||
|
||||
This version has an improved code quality:
|
||||
|
||||
* Simplification of the Build System
|
||||
- A single build includes all full-stack simulators, S1/noS1 modes and one HW platform (such as USRP, BladeRF, ...)
|
||||
* TUN interface is now used as default for the data plane
|
||||
- for UE, eNB-noS1 and UE-noS1
|
||||
* Code Cleanup
|
||||
* Better Static Code Analysis:
|
||||
- Limited number of errors in cppcheck
|
||||
- Important Decrease on high Impact errors in CoverityScan
|
||||
* Better Test Coverage in Continuous Integration:
|
||||
- TM2, CDRX, IF4.5, F1
|
||||
- OAI UE is tested in S1 and noS1 modes with USRP board
|
||||
- Multi-RRU TDD mode
|
||||
- X2 Handover in FDD mode
|
||||
|
||||
## [v1.0.3](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.3) -> June 2019. ##
|
||||
|
||||
- Bug fix for LimeSuite v19.04.0 API
|
||||
|
||||
## [v1.0.2](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.2) -> February 2019. ##
|
||||
|
||||
- Full OAI support for 3.13.1 UHD
|
||||
|
||||
## [v1.0.1](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.1) -> February 2019. ##
|
||||
|
||||
- Bug fix for the UE L1 simulator.
|
||||
|
||||
## [v1.0.0](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tags/v1.0.0) -> January 2019. ##
|
||||
|
||||
This version first implements the architectural split described in the following picture.
|
||||
|
||||

|
||||
|
||||
* Only FAPI, nFAPI and IF4.5 interfaces are implemented.
|
||||
* Repository tree structure prepares future integrations of features such as LTE-M, nbIOT or 5G-NR.
|
||||
* Preliminary X2 support has been implemented.
|
||||
* S1-flex has been introduced.
|
||||
* New tools: config library, telnet server, ...
|
||||
* A lot of bugfixes and a proper automated Continuous Integration process validates contributions.
|
||||
|
||||
Old Releases:
|
||||
|
||||
* v0.6.1 -> Mostly bugfixes. This is the last version without NFAPI.
|
||||
* v0.6 -> RRH functionality, UE greatly improved, better TDD support, a lot of bugs fixed.
|
||||
- WARNING: oaisim in PHY abstraction mode does not work, you need to use v0.5.2 for that.
|
||||
* v0.5.2 -> Last version with old code for oaisim (abstraction mode works)
|
||||
* v0.5.1 -> Merge of bugfix-137-uplink-fixes. It includes stablity fixes for eNB
|
||||
* v0.5 -> Merge of enhancement-10-harmony-lts. It includes fixes for Ubuntu 16.04 support
|
||||
* v0.4 -> Merge of feature-131-new-license. It closes issue#131 and changes the license to OAI Public License V1.0
|
||||
* v0.3 -> Last stable commit on develop branch before the merge of feature-131-new-license. This is the last commit with GPL License
|
||||
* v0.2 -> Merge of enhancement-10-harmony to include NGFI RRH + New Interface for RF/BBU
|
||||
* v0.1 -> Last stable commit on develop branch before enhancement-10-harmony
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Contributing to OpenAirInterface #
|
||||
|
||||
We want to make contributing to this project as easy and transparent as possible.
|
||||
|
||||
Please refer to the steps described on our website: [How to contribute to OAI](https://www.openairinterface.org/?page_id=112)
|
||||
|
||||
1. Sign and return a Contributor License Agreement to OAI team.
|
||||
2. Create an account on [Eurecom GitLab Server](https://gitlab.eurecom.fr).
|
||||
3. Provide the identifiant of this account to the OAI team (mailto:contact@openairinterface.org) so you have developer rights on this repository.
|
||||
4. The policies are described in these wiki pages: [OAI Policies](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/oai-policies-home)
|
||||
- PLEASE DO NOT FORK the OAI repository on your own Eurecom GitLab account. It just eats up space on our servers.
|
||||
- You can fork onto another hosting system. But we will NOT accept a merge request from a forked repository.
|
||||
* This decision was made for the license reasons.
|
||||
* The Continuous Integration will reject your merge request.
|
||||
- All merge requests SHALL have `develop` branch as target branch.
|
||||
|
||||
## Coding Styles ##
|
||||
|
||||
There are described [here](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/guidelines/guidelines-home)
|
||||
|
||||
## License ##
|
||||
|
||||
By contributing to OpenAirInterface, you agree that your contributions will be licensed under the LICENSE file in the root directory of this source tree.
|
||||
@@ -0,0 +1,23 @@
|
||||
The source code of openairinterface5g is distributed under **OAI Public License V1.1**.
|
||||
|
||||
For more details of the license, refer to [LICENSE](LICENSE) file in the same directory.
|
||||
|
||||
However, the source code also contains third party software that is acknowledged here for reference.
|
||||
|
||||
## Credits for LFDS user space source code located in folder openair2/UTILS/LFDS/liblfds6.1.1/ ##
|
||||
|
||||
See on [liblfds website](https://liblfds.org/) the license section.
|
||||
|
||||
<pre>
|
||||
"There is no license. You are free to use this software in any way, for any purpose. Go forth and create wealth!
|
||||
If however for legal reasons a licence is required, the license of your choice will be granted."
|
||||
</pre>
|
||||
|
||||
## Credits for source code common/utils/collection/queue.h: ##
|
||||
|
||||
The Regents of the University of California: BSD 3-Clause Licence.
|
||||
|
||||
## Credits for source code common/utils/collection/tree.h: ##
|
||||
|
||||
Niels Provos <provos@citi.umich.edu>: BSD 2-Clause Licence.
|
||||
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
The source code of openairinterface5g is distributed under OAI Public License V1.0.
|
||||
For more details of the license, refer to LICENSE file in the same directory.
|
||||
|
||||
However, the source code also contains third party software that is acknowledged here for reference.
|
||||
|
||||
Credits for LFDS user space source code located in folder openair2/UTILS/LFDS/liblfds6.1.1/
|
||||
http://liblfds.org/.
|
||||
Extract from http://liblfds.org/pages/downloads_and_license.html:
|
||||
"There is no license. You are free to use this software in any way, for any purpose. Go forth and create wealth!
|
||||
If however for legal reasons a licence is required, the license of your choice will be granted."
|
||||
|
||||
|
||||
Credits for source code common/utils/collection/queue.h:
|
||||
The Regents of the University of California: BSD 3-Clause Licence.
|
||||
|
||||
|
||||
Credits for source code common/utils/collection/tree.h:
|
||||
Niels Provos <provos@citi.umich.edu>: BSD 2-Clause Licence.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
# OpenAirInterface License #
|
||||
|
||||
OpenAirInterface is under OpenAirInterface Software Alliance license.
|
||||
|
||||
* [OAI License Model](http://www.openairinterface.org/?page_id=101)
|
||||
* [OAI License v1.1 on our website](http://www.openairinterface.org/?page_id=698)
|
||||
|
||||
It is distributed under **OAI Public License V1.1**.
|
||||
|
||||
The license information is distributed under [LICENSE](LICENSE) file in the same directory.
|
||||
|
||||
Please see [NOTICE](NOTICE.md) file for third party software that is included in the sources.
|
||||
|
||||
# Where to Start #
|
||||
|
||||
* [The implemented features](./doc/FEATURE_SET.md)
|
||||
* [How to build](./doc/BUILD.md)
|
||||
* [How to run the modems](./doc/RUNMODEM.md)
|
||||
|
||||
# RAN repository structure #
|
||||
|
||||
The OpenAirInterface (OAI) software is composed of the following parts:
|
||||
|
||||
<pre>
|
||||
openairinterface5g
|
||||
├── ci-scripts : Meta-scripts used by the OSA CI process. Contains also configuration files used day-to-day by CI.
|
||||
├── cmake_targets : Build utilities to compile (simulation, emulation and real-time platforms), and generated build files.
|
||||
├── common : Some common OAI utilities, other tools can be found at openair2/UTILS.
|
||||
├── doc : Contains an up-to-date feature set list and starting tutorials.
|
||||
├── executables : Top-level executable source files.
|
||||
├── LICENSE : License file.
|
||||
├── maketags : Script to generate emacs tags.
|
||||
├── nfapi : Contains the NFAPI code. A local Readme file provides more details.
|
||||
├── openair1 : 3GPP LTE Rel-10/12 PHY layer / 3GPP NR Rel-15 layer. A local Readme file provides more details.
|
||||
│ ├── PHY
|
||||
│ ├── SCHED
|
||||
│ ├── SCHED_NBIOT
|
||||
│ ├── SCHED_NR
|
||||
│ ├── SCHED_NR_UE
|
||||
│ ├── SCHED_UE
|
||||
│ └── SIMULATION : PHY RF simulation.
|
||||
├── openair2 : 3GPP LTE Rel-10 RLC/MAC/PDCP/RRC/X2AP + LTE Rel-14 M2AP implementation. Also 3GPP NR Rel-15 RLC/MAC/PDCP/RRC/X2AP.
|
||||
│ ├── COMMON
|
||||
│ ├── DOCS
|
||||
│ ├── ENB_APP
|
||||
│ ├── F1AP
|
||||
│ ├── GNB_APP
|
||||
│ ├── LAYER2/RLC/ : with the following subdirectories: UM_v9.3.0, TM_v9.3.0, and AM_v9.3.0.
|
||||
│ ├── LAYER2/PDCP/PDCP_v10.1.0
|
||||
│ ├── M2AP
|
||||
│ ├── MCE_APP
|
||||
│ ├── NETWORK_DRIVER
|
||||
│ ├── NR_PHY_INTERFACE
|
||||
│ ├── NR_UE_PHY_INTERFACE
|
||||
│ ├── PHY_INTERFACE
|
||||
│ ├── RRC
|
||||
│ ├── UTIL
|
||||
│ └── X2AP
|
||||
├── openair3 : 3GPP LTE Rel10 for S1AP, NAS GTPV1-U for both ENB and UE.
|
||||
│ ├── COMMON
|
||||
│ ├── DOCS
|
||||
│ ├── GTPV1-U
|
||||
│ ├── M3AP
|
||||
│ ├── MME_APP
|
||||
│ ├── NAS
|
||||
│ ├── S1AP
|
||||
│ ├── SCTP
|
||||
│ ├── SECU
|
||||
│ ├── TEST
|
||||
│ ├── UDP
|
||||
│ └── UTILS
|
||||
└── targets : Top-level wrappers for unitary simulation for PHY channels, system-level emulation (eNB-UE with and without S1), and realtime eNB and UE and RRH GW.
|
||||
</pre>
|
||||
-110
@@ -1,110 +0,0 @@
|
||||
OpenAirInterface is under OpenAirInterface Software Alliance license.
|
||||
├── http://www.openairinterface.org/?page_id=101
|
||||
├── http://www.openairinterface.org/?page_id=698
|
||||
|
||||
It is distributed under OAI Public License V1.1.
|
||||
The license information is distributed under LICENSE file in the same directory.
|
||||
Please see NOTICE.txt for third party software that is included in the sources.
|
||||
|
||||
The OpenAirInterface (OAI) software is composed of the following parts:
|
||||
|
||||
openairinterface5g
|
||||
├── ci-scripts: Meta-scripts used by the OSA CI process. Contains also configuration files used day-to-day by CI.
|
||||
├── cmake_targets: Build utilities to compile (simulation, emulation and real-time platforms), and generated build files
|
||||
├── common : Some common OAI utilities, other tools can be found at openair2/UTILS
|
||||
├── doc : Contains an up-to-date feature set list
|
||||
├── LICENSE
|
||||
├── maketags : Script to generate emacs tags
|
||||
├── nfapi : Contains the NFAPI code. A local Readme file provides more details.
|
||||
├── openair1 : 3GPP LTE Rel-10/12 PHY layer + PHY RF simulation. A local Readme file provides more details.
|
||||
├── openair2 : 3GPP LTE Rel-10 RLC/MAC/PDCP/RRC/X2AP + LTE Rel-14 M2AP implementation.
|
||||
├── COMMON
|
||||
├── DOCS
|
||||
├── ENB_APP
|
||||
├── LAYER2/RLC/ with the following subdirectories: UM_v9.3.0, TM_v9.3.0, and AM_v9.3.0.
|
||||
├── LAYER2/PDCP/PDCP_v10.1.0.
|
||||
├── NETWORK_DRIVER
|
||||
├── PHY_INTERFACE
|
||||
├── RRC/LITE
|
||||
├── UTIL
|
||||
├── X2AP
|
||||
├── M2AP
|
||||
├── MCE_APP
|
||||
├── openair3: 3GPP LTE Rel10 for S1AP, NAS GTPV1-U for both ENB and UE.
|
||||
├── COMMON
|
||||
├── DOCS
|
||||
├── GTPV1-U
|
||||
├── NAS
|
||||
├── S1AP
|
||||
├── M3AP
|
||||
├── SCTP
|
||||
├── SECU
|
||||
├── UDP
|
||||
├── UTILS
|
||||
└── targets: Top-level wrappers for unitary simulation for PHY channels, system-level emulation (eNB-UE with and without S1), and realtime eNB and UE and RRH GW.
|
||||
|
||||
|
||||
RELEASE NOTES:
|
||||
|
||||
v1.2.0 -> January 2020. This version adds the following implemented features:
|
||||
* LTE-M : eNB support for Mode A repetitions
|
||||
- PUSCH CE - 8 Repetitions
|
||||
* Improved CDRX implementation for monolithic eNB
|
||||
* Experimental eMBMS support (now also on eNB side)
|
||||
* Experimental MCE - Multicast Coordination Entity
|
||||
* Bug fixes
|
||||
This version also has an improved code quality:
|
||||
* Better Test Coverage in Continuous Integration:
|
||||
- Initial framework to do long-run testing at R2LAB
|
||||
|
||||
v1.1.1 -> November 2019. Bug fix in the TDD Fair Round-Robin scheduler
|
||||
v1.1.0 -> July 2019. This version adds the following implemented features:
|
||||
* Experimental support of LTE-M
|
||||
- Single LTE-M UE attachment, legacy-LTE UE attachment is disabled
|
||||
* X2 interface and handover (also X2-U interface)
|
||||
- In FDD and TDD
|
||||
* CU/DU split (F1 interface)
|
||||
- Tested only in FDD
|
||||
* CDRX
|
||||
- Tested only in FDD
|
||||
* Experimental eMBMS support (only on UE side)
|
||||
* Experimental multi-RRU support
|
||||
- Tested only in TDD
|
||||
This version has an improved code quality:
|
||||
* Simplification of the Build System
|
||||
- A single build includes all full-stack simulators, S1/noS1 modes and one HW platform (such as USRP, BladeRF, ...)
|
||||
* TUN interface is now used as default for the data plane
|
||||
- for UE, eNB-noS1 and UE-noS1
|
||||
* Code Cleanup
|
||||
* Better Static Code Analysis:
|
||||
- Limited number of errors in cppcheck
|
||||
- Important Decrease on high Impact errors in CoverityScan
|
||||
* Better Test Coverage in Continuous Integration:
|
||||
- TM2, CDRX, IF4.5, F1
|
||||
- OAI UE is tested in S1 and noS1 modes with USRP board
|
||||
- Multi-RRU TDD mode
|
||||
- X2 Handover in FDD mode
|
||||
|
||||
v1.0.3 -> June 2019: Bug fix for LimeSuite v19.04.0 API
|
||||
v1.0.2 -> February 2019: Full OAI support for 3.13.1 UHD
|
||||
v1.0.1 -> February 2019: Bug fix for the UE L1 simulator.
|
||||
v1.0.0 -> January 2019. This version first implements the architectural split described in doc/oai_lte_enb_func_split_arch.png picture.
|
||||
Only FAPI, nFAPI and IF4.5 interfaces are implemented.
|
||||
Repository tree structure prepares future integrations of features such as LTE-M, nbIOT or 5G-NR.
|
||||
Preliminary X2 support has been implemented.
|
||||
S1-flex has been introduced.
|
||||
New tools: config library, telnet server, ...
|
||||
A lot of bugfixes and a proper automated Continuous Integration process validates contributions.
|
||||
|
||||
v0.6.1 -> Mostly bugfixes. This is the last version without NFAPI.
|
||||
v0.6 -> RRH functionality, UE greatly improved, better TDD support,
|
||||
a lot of bugs fixed. WARNING: oaisim in PHY abstraction mode does not
|
||||
work, you need to use v0.5.2 for that.
|
||||
v0.5.2 -> Last version with old code for oaisim (abstraction mode works)
|
||||
v0.5.1 -> Merge of bugfix-137-uplink-fixes. It includes stablity fixes for eNB
|
||||
v0.5 -> Merge of enhancement-10-harmony-lts. It includes fixes for Ubuntu 16.04 support
|
||||
v0.4 -> Merge of feature-131-new-license. It closes issue#131 and changes the license to OAI Public License V1.0
|
||||
v0.3 -> Last stable commit on develop branch before the merge of feature-131-new-license. This is the last commit with GPL License
|
||||
v0.2 -> Merge of enhancement-10-harmony to include NGFI RRH + New Interface for RF/BBU
|
||||
v0.1 -> Last stable commit on develop branch before enhancement-10-harmony
|
||||
|
||||
+9
-1
@@ -248,6 +248,7 @@ class SSHConnection():
|
||||
elif self.sshresponse == 1:
|
||||
logging.debug('\u001B[1;37;41m Unexpected EOF \u001B[0m')
|
||||
logging.debug('Expected Line : ' + expectedline)
|
||||
logging.debug(str(self.ssh.before))
|
||||
sys.exit(self.sshresponse)
|
||||
elif self.sshresponse == 2:
|
||||
logging.debug('\u001B[1;37;41m Unexpected TIMEOUT \u001B[0m')
|
||||
@@ -1213,6 +1214,11 @@ class SSHConnection():
|
||||
# Calling twice AT to clear all buffers
|
||||
self.command('AT', 'OK|ERROR', 5)
|
||||
self.command('AT', 'OK', 5)
|
||||
# Doing a power cycle
|
||||
self.command('AT^RESET', 'SIMSTORE,READY', 15)
|
||||
self.command('AT', 'OK|ERROR', 5)
|
||||
self.command('AT', 'OK', 5)
|
||||
self.command('ATE1', 'OK', 5)
|
||||
# Disabling the Radio
|
||||
self.command('AT+CFUN=0', 'OK', 5)
|
||||
logging.debug('\u001B[1m Cellular Functionality disabled\u001B[0m')
|
||||
@@ -2763,7 +2769,9 @@ class SSHConnection():
|
||||
self.copyin(self.UEIPAddress, self.UEUserName, self.UEPassword, self.UESourceCodePath + '/cmake_targets/iperf_server_' + self.testCase_id + '_' + device_id + '.log', '.')
|
||||
else:
|
||||
self.copyin(self.ADBIPAddress, self.ADBUserName, self.ADBPassword, self.EPCSourceCodePath + '/scripts/iperf_server_' + self.testCase_id + '_' + device_id + '.log', '.')
|
||||
self.command('fromdos -o iperf_server_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
|
||||
# fromdos has to be called on the python executor not on ADB server
|
||||
cmd = 'fromdos -o iperf_server_' + self.testCase_id + '_' + device_id + '.log'
|
||||
subprocess.run(cmd, shell=True)
|
||||
self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, modified_options)
|
||||
|
||||
# in case of OAI UE:
|
||||
|
||||
@@ -2448,8 +2448,8 @@ add_executable(lte-softmodem
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR_TARGETS}/RT/USER/ru_control.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c
|
||||
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks.c
|
||||
@@ -2488,10 +2488,10 @@ add_executable(ocp-softmodem
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_DIR}/executables/main-ocp.c
|
||||
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||
${OPENAIR_DIR}/executables/main-fs6.c
|
||||
${OPENAIR_DIR}/executables/transport_split.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c
|
||||
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks.c
|
||||
@@ -2557,7 +2557,7 @@ add_executable(lte-uesoftmodem
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c
|
||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR_TARGETS}/RT/USER/ru_control.c
|
||||
${OPENAIR_TARGETS}/RT/USER/rfsim.c
|
||||
@@ -2606,7 +2606,7 @@ add_executable(nr-softmodem
|
||||
${OPENAIR_DIR}/executables/nr-gnb.c
|
||||
${OPENAIR_DIR}/executables/nr-ru.c
|
||||
${OPENAIR_DIR}/executables/nr-softmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c
|
||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
@@ -2645,7 +2645,7 @@ add_executable(nr-uesoftmodem
|
||||
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||
${OPENAIR_DIR}/executables/nr-uesoftmodem.c
|
||||
${OPENAIR_DIR}/executables/nr-ue.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c
|
||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
|
||||
#include "enb_config.h"
|
||||
#include <executables/nr-softmodem.h>
|
||||
#include <executables/softmodem-common.h>
|
||||
|
||||
#ifdef SMBV
|
||||
#include "PHY/TOOLS/smbv.h"
|
||||
|
||||
@@ -130,7 +130,6 @@ extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
||||
extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
||||
|
||||
extern int rx_input_level_dBm;
|
||||
extern uint8_t exit_missed_slots;
|
||||
extern uint64_t num_missed_slots; // counter for the number of missed slots
|
||||
|
||||
extern int oaisim_flag;
|
||||
|
||||
@@ -148,11 +148,9 @@ double bw = 10.0e6;
|
||||
|
||||
static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/;
|
||||
|
||||
char rf_config_file[1024]="/usr/local/etc/syriq/ue.band7.tm1.PRB100.NR40.dat";
|
||||
|
||||
int chain_offset=0;
|
||||
int phy_test = 0;
|
||||
uint8_t usim_test = 0;
|
||||
|
||||
|
||||
uint8_t dci_Format = 0;
|
||||
uint8_t agregation_Level =0xFF;
|
||||
@@ -176,7 +174,6 @@ int otg_enabled;
|
||||
uint32_t target_dl_mcs = 28; //maximum allowed mcs
|
||||
uint32_t target_ul_mcs = 20;
|
||||
uint32_t timing_advance = 0;
|
||||
uint8_t exit_missed_slots=1;
|
||||
uint64_t num_missed_slots=0; // counter for the number of missed slots
|
||||
|
||||
|
||||
@@ -189,7 +186,6 @@ int transmission_mode=1;
|
||||
int emulate_rf = 0;
|
||||
int numerology = 0;
|
||||
|
||||
static softmodem_params_t softmodem_params;
|
||||
|
||||
static char *parallel_config = NULL;
|
||||
static char *worker_config = NULL;
|
||||
@@ -270,39 +266,13 @@ unsigned int build_rfdc(int dcoff_i_rxfe, int dcoff_q_rxfe) {
|
||||
return (dcoff_i_rxfe + (dcoff_q_rxfe<<8));
|
||||
}
|
||||
|
||||
#if !defined(ENABLE_ITTI)
|
||||
void signal_handler(int sig) {
|
||||
void *array[10];
|
||||
size_t size;
|
||||
|
||||
if (sig==SIGSEGV) {
|
||||
// get void*'s for all entries on the stack
|
||||
size = backtrace(array, 10);
|
||||
// print out all the frames to stderr
|
||||
fprintf(stderr, "Error: signal %d:\n", sig);
|
||||
backtrace_symbols_fd(array, size, 2);
|
||||
exit(-1);
|
||||
} else {
|
||||
printf("trying to exit gracefully...\n");
|
||||
oai_exit = 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#define KNRM "\x1B[0m"
|
||||
#define KRED "\x1B[31m"
|
||||
#define KGRN "\x1B[32m"
|
||||
#define KBLU "\x1B[34m"
|
||||
#define RESET "\033[0m"
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
void signal_handler_itti(int sig) {
|
||||
// Call exit function
|
||||
char msg[256];
|
||||
memset(msg, 0, 256);
|
||||
sprintf(msg, "caught signal %s\n", strsignal(sig));
|
||||
exit_function(__FILE__, __FUNCTION__, __LINE__, msg);
|
||||
}
|
||||
#endif
|
||||
|
||||
void exit_function(const char *file, const char *function, const int line, const char *s) {
|
||||
int ru_id;
|
||||
@@ -329,9 +299,6 @@ void exit_function(const char *file, const char *function, const int line, const
|
||||
}
|
||||
|
||||
sleep(1); //allow lte-softmodem threads to exit first
|
||||
#if defined(ENABLE_ITTI)
|
||||
itti_terminate_tasks (TASK_UNKNOWN);
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -469,37 +436,14 @@ int create_gNB_tasks(uint32_t gnb_nb) {
|
||||
|
||||
|
||||
static void get_options(void) {
|
||||
int tddflag, nonbiotflag;
|
||||
uint32_t online_log_messages;
|
||||
uint32_t glog_level, glog_verbosity;
|
||||
uint32_t start_telnetsrv = 0;
|
||||
uint32_t noS1;
|
||||
uint32_t nokrnmod;
|
||||
|
||||
|
||||
paramdef_t cmdline_params[] = CMDLINE_PARAMS_DESC_GNB ;
|
||||
paramdef_t cmdline_logparams[] = CMDLINE_LOGPARAMS_DESC_NR ;
|
||||
|
||||
config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
|
||||
|
||||
|
||||
|
||||
config_process_cmdline( cmdline_logparams,sizeof(cmdline_logparams)/sizeof(paramdef_t),NULL);
|
||||
|
||||
if(config_isparamset(cmdline_logparams,CMDLINE_ONLINELOG_IDX)) {
|
||||
set_glog_onlinelog(online_log_messages);
|
||||
}
|
||||
|
||||
if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) {
|
||||
set_glog(glog_level);
|
||||
}
|
||||
|
||||
if (start_telnetsrv) {
|
||||
load_module_shlib("telnetsrv",NULL,0,NULL);
|
||||
}
|
||||
|
||||
#if T_TRACER
|
||||
paramdef_t cmdline_ttraceparams[] =CMDLINE_TTRACEPARAMS_DESC ;
|
||||
config_process_cmdline( cmdline_ttraceparams,sizeof(cmdline_ttraceparams)/sizeof(paramdef_t),NULL);
|
||||
#endif
|
||||
|
||||
if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) ) {
|
||||
memset((void *)&RC,0,sizeof(RC));
|
||||
/* Read RC configuration file */
|
||||
@@ -516,14 +460,6 @@ static void get_options(void) {
|
||||
}
|
||||
|
||||
|
||||
#if T_TRACER
|
||||
int T_nowait = 0; /* by default we wait for the tracer */
|
||||
int T_port = 2021; /* default port to listen to to wait for the tracer */
|
||||
int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
void set_default_frame_parms(nfapi_nr_config_request_t *config[MAX_NUM_CCs],
|
||||
NR_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs])
|
||||
{
|
||||
@@ -653,7 +589,7 @@ void init_openair0(void) {
|
||||
openair0_cfg[card].rx_gain[i] = RC.gNB[0][0]->rx_total_gain_dB;
|
||||
|
||||
|
||||
openair0_cfg[card].configFilename = rf_config_file;
|
||||
openair0_cfg[card].configFilename = get_softmodem_params()->rf_config_file;
|
||||
printf("Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n",
|
||||
card,i, openair0_cfg[card].tx_gain[i],
|
||||
openair0_cfg[card].rx_gain[i],
|
||||
@@ -866,7 +802,7 @@ int main( int argc, char **argv )
|
||||
if ( load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) == NULL) {
|
||||
exit_fun("[SOFTMODEM] Error, configuration module init failed\n");
|
||||
}
|
||||
|
||||
set_softmodem_sighandler();
|
||||
#ifdef DEBUG_CONSOLE
|
||||
setvbuf(stdout, NULL, _IONBF, 0);
|
||||
setvbuf(stderr, NULL, _IONBF, 0);
|
||||
@@ -914,11 +850,7 @@ init_opt();
|
||||
pdcp_netlink_init();
|
||||
#endif
|
||||
#endif
|
||||
#if !defined(ENABLE_ITTI)
|
||||
// to make a graceful exit when ctrl-c is pressed
|
||||
signal(SIGSEGV, signal_handler);
|
||||
signal(SIGINT, signal_handler);
|
||||
#endif
|
||||
|
||||
#ifndef PACKAGE_VERSION
|
||||
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
#endif
|
||||
@@ -1031,7 +963,7 @@ init_opt();
|
||||
|
||||
if (RC.nb_RU >0) {
|
||||
printf("Initializing RU threads\n");
|
||||
init_NR_RU(rf_config_file);
|
||||
init_NR_RU(get_softmodem_params()->rf_config_file);
|
||||
|
||||
for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
|
||||
RC.ru[ru_id]->rf_map.card=0;
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define CMDLINE_PARAMS_DESC_GNB { \
|
||||
{"rf-config-file", CONFIG_HLP_RFCFGF, 0, strptr:(char **)&rf_config_file, defstrval:NULL, TYPE_STRING, sizeof(rf_config_file)},\
|
||||
{"ulsch-max-errors", CONFIG_HLP_ULMAXE, 0, uptr:&ULSCH_max_consecutive_errors, defuintval:0, TYPE_UINT, 0}, \
|
||||
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&phy_test, defintval:0, TYPE_INT, 0}, \
|
||||
{"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&usim_test, defintval:0, TYPE_UINT8, 0}, \
|
||||
{"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, uptr:&mmapped_dma, defintval:0, TYPE_INT, 0}, \
|
||||
{"wait-for-sync", NULL, PARAMFLAG_BOOL, iptr:&wait_for_sync, defintval:0, TYPE_INT, 0}, \
|
||||
{"single-thread-disable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:1, TYPE_INT, 0}, \
|
||||
@@ -34,34 +30,13 @@
|
||||
{"m" , CONFIG_HLP_DLMCS, 0, uptr:&target_dl_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||
{"t" , CONFIG_HLP_ULMCS, 0, uptr:&target_ul_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
|
||||
{"S" , CONFIG_HLP_MSLOTS, PARAMFLAG_BOOL, u8ptr:&exit_missed_slots, defintval:1, TYPE_UINT8, 0}, \
|
||||
{"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, iptr:&tddflag, defintval:0, TYPE_INT, 0}, \
|
||||
{"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \
|
||||
{"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \
|
||||
{"parallel-config", CONFIG_HLP_PARALLEL_CMD,0, strptr:(char **)¶llel_config, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
{"worker-config", CONFIG_HLP_WORKER_CMD, 0, strptr:(char **)&worker_config, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
{"s" , CONFIG_HLP_SNR, 0, dblptr:&snr_dB, defdblval:25, TYPE_DOUBLE, 0}, \
|
||||
{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, iptr:&nonbiotflag, defintval:0, TYPE_INT, 0}, \
|
||||
{"noS1", CONFIG_HLP_NOS1, PARAMFLAG_BOOL, uptr:&noS1, defintval:0, TYPE_INT, 0}, \
|
||||
{"nokrnmod", CONFIG_HLP_NOKRNMOD, PARAMFLAG_BOOL, uptr:&nokrnmod, defintval:0, TYPE_INT, 0} \
|
||||
}
|
||||
|
||||
#define SOFTMODEM_NOS1_BIT (1<<0)
|
||||
#define SOFTMODEM_NOKRNMOD_BIT (1<<1)
|
||||
#define SOFTMODEM_RFSIM_BIT (1<<10)
|
||||
|
||||
#define IS_SOFTMODEM_NOS1 ( get_softmodem_optmask() & SOFTMODEM_NOS1_BIT)
|
||||
#define IS_SOFTMODEM_NOKRNMOD ( get_softmodem_optmask() & SOFTMODEM_NOKRNMOD_BIT)
|
||||
|
||||
#define IS_SOFTMODEM_RFSIM ( get_softmodem_optmask() & SOFTMODEM_RFSIM_BIT)
|
||||
extern uint64_t get_softmodem_optmask(void);
|
||||
extern void get_common_options(void);
|
||||
|
||||
extern int T_port;
|
||||
extern int T_nowait;
|
||||
extern int T_dont_fork;
|
||||
|
||||
|
||||
#include "threads_t.h"
|
||||
extern threads_t threads;
|
||||
|
||||
|
||||
@@ -163,11 +163,9 @@ double bw = 10.0e6;
|
||||
|
||||
static int tx_max_power[MAX_NUM_CCs] = {0};
|
||||
|
||||
char rf_config_file[1024];
|
||||
|
||||
int chain_offset=0;
|
||||
int phy_test = 0;
|
||||
uint8_t usim_test = 0;
|
||||
|
||||
|
||||
uint8_t dci_Format = 0;
|
||||
uint8_t agregation_Level =0xFF;
|
||||
@@ -178,7 +176,6 @@ uint8_t nb_antenna_rx = 1;
|
||||
char ref[128] = "internal";
|
||||
char channels[128] = "0";
|
||||
|
||||
static softmodem_params_t softmodem_params;
|
||||
|
||||
static char *parallel_config = NULL;
|
||||
static char *worker_config = NULL;
|
||||
@@ -197,7 +194,6 @@ int16_t node_synch_ref[MAX_NUM_CCs];
|
||||
uint32_t target_dl_mcs = 28; //maximum allowed mcs
|
||||
uint32_t target_ul_mcs = 20;
|
||||
uint32_t timing_advance = 0;
|
||||
uint8_t exit_missed_slots=1;
|
||||
uint64_t num_missed_slots=0; // counter for the number of missed slots
|
||||
|
||||
|
||||
@@ -273,7 +269,7 @@ void exit_function(const char *file, const char *function, const int line, const
|
||||
}
|
||||
|
||||
sleep(1); //allow lte-softmodem threads to exit first
|
||||
itti_terminate_tasks (TASK_UNKNOWN);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -386,28 +382,12 @@ static void get_options(void) {
|
||||
int tddflag=0, nonbiotflag, vcdflag=0;
|
||||
char *loopfile=NULL;
|
||||
int dumpframe=0;
|
||||
uint32_t online_log_messages;
|
||||
uint32_t glog_level, glog_verbosity;
|
||||
uint32_t start_telnetsrv=0;
|
||||
|
||||
//uint32_t noS1;
|
||||
//uint32_t nokrnmod;
|
||||
paramdef_t cmdline_params[] =CMDLINE_PARAMS_DESC_UE ;
|
||||
paramdef_t cmdline_logparams[] =CMDLINE_LOGPARAMS_DESC_NR ;
|
||||
config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
|
||||
|
||||
config_process_cmdline( cmdline_logparams,sizeof(cmdline_logparams)/sizeof(paramdef_t),NULL);
|
||||
|
||||
if(config_isparamset(cmdline_logparams,CMDLINE_ONLINELOG_IDX)) {
|
||||
set_glog_onlinelog(online_log_messages);
|
||||
}
|
||||
|
||||
if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) {
|
||||
set_glog(glog_level);
|
||||
}
|
||||
|
||||
if (start_telnetsrv) {
|
||||
load_module_shlib("telnetsrv",NULL,0,NULL);
|
||||
}
|
||||
|
||||
paramdef_t cmdline_uemodeparams[] = CMDLINE_UEMODEPARAMS_DESC;
|
||||
paramdef_t cmdline_ueparams[] = CMDLINE_NRUEPARAMS_DESC;
|
||||
@@ -476,10 +456,6 @@ static void get_options(void) {
|
||||
tx_gain[0][CC_id] = tx_gain[0][0];
|
||||
}
|
||||
|
||||
#if T_TRACER
|
||||
paramdef_t cmdline_ttraceparams[] =CMDLINE_TTRACEPARAMS_DESC ;
|
||||
config_process_cmdline( cmdline_ttraceparams,sizeof(cmdline_ttraceparams)/sizeof(paramdef_t),NULL);
|
||||
#endif
|
||||
|
||||
if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) && (!(CONFIG_ISFLAGSET(CONFIG_NOOOPT))) ) {
|
||||
// Here the configuration file is the XER encoded UE capabilities
|
||||
@@ -490,11 +466,6 @@ static void get_options(void) {
|
||||
} /* UE with config file */
|
||||
}
|
||||
|
||||
#if T_TRACER
|
||||
int T_nowait = 0; /* by default we wait for the tracer */
|
||||
int T_port = 2021; /* default port to listen to to wait for the tracer */
|
||||
int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */
|
||||
#endif
|
||||
|
||||
void set_default_frame_parms(NR_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
|
||||
int CC_id;
|
||||
@@ -626,7 +597,7 @@ void init_openair0(void) {
|
||||
openair0_cfg[card].autocal[i] = 1;
|
||||
openair0_cfg[card].tx_gain[i] = tx_gain[0][i];
|
||||
openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB - rx_gain_off;
|
||||
openair0_cfg[card].configFilename = rf_config_file;
|
||||
openair0_cfg[card].configFilename = get_softmodem_params()->rf_config_file;
|
||||
printf("Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n",
|
||||
card,i, openair0_cfg[card].tx_gain[i],
|
||||
openair0_cfg[card].rx_gain[i],
|
||||
@@ -674,7 +645,7 @@ int main( int argc, char **argv ) {
|
||||
if ( load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) == NULL) {
|
||||
exit_fun("[SOFTMODEM] Error, configuration module init failed\n");
|
||||
}
|
||||
|
||||
set_softmodem_sighandler();
|
||||
CONFIG_SETRTFLAG(CONFIG_NOEXITONHELP);
|
||||
set_default_frame_parms(frame_parms);
|
||||
mode = normal_txrx;
|
||||
@@ -746,7 +717,7 @@ int main( int argc, char **argv ) {
|
||||
UE[CC_id] = PHY_vars_UE_g[0][CC_id];
|
||||
|
||||
|
||||
if (phy_test==1)
|
||||
if (get_softmodem_params()->phy_test==1)
|
||||
UE[CC_id]->mac_enabled = 0;
|
||||
else
|
||||
UE[CC_id]->mac_enabled = 1;
|
||||
|
||||
@@ -61,10 +61,6 @@
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define CMDLINE_PARAMS_DESC_UE { \
|
||||
{"rf-config-file", CONFIG_HLP_RFCFGF, 0, strptr:(char **)&rf_config_file, defstrval:NULL, TYPE_STRING, sizeof(rf_config_file)},\
|
||||
{"ulsch-max-errors", CONFIG_HLP_ULMAXE, 0, uptr:&ULSCH_max_consecutive_errors, defuintval:0, TYPE_UINT, 0}, \
|
||||
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&phy_test, defintval:0, TYPE_INT, 0}, \
|
||||
{"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&usim_test, defintval:0, TYPE_UINT8, 0}, \
|
||||
{"clock-source", CONFIG_HLP_EXCCLK, 0, iptr:&clock_source, defintval:0, TYPE_INT, 0}, \
|
||||
{"single-thread-disable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:1, TYPE_INT, 0}, \
|
||||
{"nr-dlsch-demod-shift", CONFIG_HLP_DLSHIFT, 0, iptr:(int32_t *)&nr_dlsch_demod_shift, defintval:0, TYPE_INT, 0}, \
|
||||
@@ -76,7 +72,6 @@
|
||||
{"m" , CONFIG_HLP_DLMCS, 0, uptr:&target_dl_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||
{"t" , CONFIG_HLP_ULMCS, 0, uptr:&target_ul_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
|
||||
{"S" , CONFIG_HLP_MSLOTS, PARAMFLAG_BOOL, u8ptr:&exit_missed_slots, defintval:1, TYPE_UINT8, 0}, \
|
||||
{"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, iptr:&tddflag, defintval:0, TYPE_INT, 0}, \
|
||||
{"V" , CONFIG_HLP_VCD, PARAMFLAG_BOOL, iptr:&vcdflag, defintval:0, TYPE_INT, 0}, \
|
||||
{"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \
|
||||
|
||||
@@ -20,26 +20,33 @@
|
||||
*/
|
||||
|
||||
/*! \file lte-softmodem-common.c
|
||||
* \brief Top-level threads for eNodeB
|
||||
* \brief common code for 5G and LTE softmodem main xNB and UEs source (nr-softmodem.c, lte-softmodem.c...)
|
||||
* \author Nokia BellLabs France, francois Taburet
|
||||
* \date 2012
|
||||
* \date 2020
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \company Nokia BellLabs France
|
||||
* \email: francois.taburet@nokia-bell-labs.com
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include "lte-softmodem.h"
|
||||
#include <time.h>
|
||||
#include <dlfcn.h>
|
||||
#include <sys/resource.h>
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "common/config/config_userapi.h"
|
||||
#include "common/utils/load_module_shlib.h"
|
||||
#include "common/utils/telnetsrv/telnetsrv.h"
|
||||
#include "executables/thread-common.h"
|
||||
#include <dlfcn.h>
|
||||
#include "softmodem-common.h"
|
||||
|
||||
static softmodem_params_t softmodem_params;
|
||||
char *parallel_config=NULL;
|
||||
char *worker_config=NULL;
|
||||
|
||||
|
||||
|
||||
static struct timespec start;
|
||||
|
||||
uint64_t get_softmodem_optmask(void) {
|
||||
return softmodem_params.optmask;
|
||||
}
|
||||
@@ -92,7 +99,7 @@ void get_common_options(void) {
|
||||
}
|
||||
|
||||
if (nokrnmod) {
|
||||
printf("nokrnmod bit enabled \n");
|
||||
printf("nokrnmod bit enabled \n");
|
||||
set_softmodem_optmask(SOFTMODEM_NOKRNMOD_BIT);
|
||||
}
|
||||
|
||||
@@ -112,21 +119,67 @@ void get_common_options(void) {
|
||||
set_softmodem_optmask(SOFTMODEM_DOFORMS_BIT);
|
||||
}
|
||||
|
||||
#if BASIC_SIMULATOR
|
||||
set_softmodem_optmask(SOFTMODEM_BASICSIM_BIT);
|
||||
#endif
|
||||
|
||||
if(parallel_config != NULL) set_parallel_conf(parallel_config);
|
||||
|
||||
if(worker_config != NULL) set_worker_conf(worker_config);
|
||||
}
|
||||
|
||||
unsigned int is_nos1exec(char *exepath) {
|
||||
if ( strcmp( basename(exepath), "lte-softmodem-nos1") == 0)
|
||||
return 1;
|
||||
void softmodem_printresources(int sig, telnet_printfunc_t pf) {
|
||||
struct rusage usage;
|
||||
struct timespec stop;
|
||||
|
||||
if ( strcmp( basename(exepath), "lte-uesoftmodem-nos1") == 0)
|
||||
return 1;
|
||||
clock_gettime(CLOCK_BOOTTIME, &stop);
|
||||
|
||||
return 0;
|
||||
uint64_t elapse = (stop.tv_sec - start.tv_sec) ; // in seconds
|
||||
|
||||
|
||||
int st = getrusage(RUSAGE_SELF,&usage);
|
||||
if (!st) {
|
||||
pf("\nRun time: %lluh %llus\n",(unsigned long long)elapse/3600,(unsigned long long)(elapse - (elapse/3600)));
|
||||
pf("\tTime executing user inst.: %lds %ldus\n",(long)usage.ru_utime.tv_sec,(long)usage.ru_utime.tv_usec);
|
||||
pf("\tTime executing system inst.: %lds %ldus\n",(long)usage.ru_stime.tv_sec,(long)usage.ru_stime.tv_usec);
|
||||
pf("\tMax. Phy. memory usage: %ldkB\n",(long)usage.ru_maxrss);
|
||||
pf("\tPage fault number (no io): %ld\n",(long)usage.ru_minflt);
|
||||
pf("\tPage fault number (requiring io): %ld\n",(long)usage.ru_majflt);
|
||||
pf("\tNumber of file system read: %ld\n",(long)usage.ru_inblock);
|
||||
pf("\tNumber of filesystem write: %ld\n",(long)usage.ru_oublock);
|
||||
pf("\tNumber of context switch (process origin, io...): %ld\n",(long)usage.ru_nvcsw);
|
||||
pf("\tNumber of context switch (os origin, priority...): %ld\n",(long)usage.ru_nivcsw);
|
||||
}
|
||||
}
|
||||
|
||||
void signal_handler(int sig) {
|
||||
void *array[10];
|
||||
size_t size;
|
||||
|
||||
if (sig==SIGSEGV) {
|
||||
// get void*'s for all entries on the stack
|
||||
size = backtrace(array, 10);
|
||||
// print out all the frames to stderr
|
||||
fprintf(stderr, "Error: signal %d:\n", sig);
|
||||
backtrace_symbols_fd(array, size, 2);
|
||||
exit(-1);
|
||||
} else {
|
||||
if(sig==SIGINT ||sig==SOFTMODEM_RTSIGNAL)
|
||||
softmodem_printresources(sig,(telnet_printfunc_t)printf);
|
||||
if (sig != SOFTMODEM_RTSIGNAL) {
|
||||
printf("Linux signal %s...\n",strsignal(sig));
|
||||
exit_function(__FILE__, __FUNCTION__, __LINE__,"softmodem starting exit procedure\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void set_softmodem_sighandler(void) {
|
||||
struct sigaction act,oldact;
|
||||
clock_gettime(CLOCK_BOOTTIME, &start);
|
||||
memset(&act,0,sizeof(act));
|
||||
act.sa_handler=signal_handler;
|
||||
sigaction(SOFTMODEM_RTSIGNAL,&act,&oldact);
|
||||
printf("Send signal %d to display resource usage...\n",SIGRTMIN+1);
|
||||
signal(SIGSEGV, signal_handler);
|
||||
signal(SIGINT, signal_handler);
|
||||
signal(SIGTERM, signal_handler);
|
||||
signal(SIGABRT, signal_handler);
|
||||
}
|
||||
@@ -1,4 +1,207 @@
|
||||
/*
|
||||
* 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 lte-softmodem-common.h
|
||||
* \brief Top-level threads for eNodeB
|
||||
* \author
|
||||
* \date 2012
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email:
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
#ifndef SOFTMODEM_COMMON_H
|
||||
#define SOFTMODEM_COMMON_H
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
/* help strings definition for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */
|
||||
#define CONFIG_HLP_RFCFGF "Configuration file for front-end (e.g. LMS7002M)\n"
|
||||
#define CONFIG_HLP_ULMAXE "set the eNodeB max ULSCH erros\n"
|
||||
#define CONFIG_HLP_CALUER "set UE RX calibration\n"
|
||||
#define CONFIG_HLP_CALUERM ""
|
||||
#define CONFIG_HLP_CALUERB ""
|
||||
#define CONFIG_HLP_DBGUEPR "UE run normal prach power ramping, but don't continue random-access\n"
|
||||
#define CONFIG_HLP_CALPRACH "UE run normal prach with maximum power, but don't continue random-access\n"
|
||||
#define CONFIG_HLP_NOL2CN "bypass L2 and upper layers\n"
|
||||
|
||||
|
||||
#define CONFIG_HLP_DUMPFRAME "dump UE received frame to rxsig_frame0.dat and exit\n"
|
||||
#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n"
|
||||
#define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n"
|
||||
#define CONFIG_HLP_EXTS "tells hardware to use an external timing reference\n"
|
||||
#define CONFIG_HLP_DMRSSYNC "tells RU to insert DMRS in subframe 1 slot 0"
|
||||
#define CONFIG_HLP_CLK "tells hardware to use a clock reference (0:internal, 1:external, 2:gpsdo)\n"
|
||||
#define CONFIG_HLP_USIM "use XOR autentication algo in case of test usim mode\n"
|
||||
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
|
||||
#define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n"
|
||||
#define CONFIG_HLP_CHOFF "Channel id offset\n"
|
||||
#define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n"
|
||||
#define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"
|
||||
#define CONFIG_HLP_ITTIL "Generate ITTI analyzser logs (similar to wireshark logs but with more details)\n"
|
||||
#define CONFIG_HLP_DLMCS "Set the maximum downlink MCS\n"
|
||||
#define CONFIG_HLP_STMON "Enable processing timing measurement of lte softmodem on per subframe basis \n"
|
||||
|
||||
|
||||
//#define CONFIG_HLP_NUMUES "Set the number of UEs for the emulation"
|
||||
#define CONFIG_HLP_MSLOTS "Skip the missed slots/subframes \n"
|
||||
#define CONFIG_HLP_ULMCS "Set the maximum uplink MCS\n"
|
||||
|
||||
#define CONFIG_HLP_UE "Set the lte softmodem as a UE\n"
|
||||
#define CONFIG_HLP_TQFS "Apply three-quarter of sampling frequency, 23.04 Msps to reduce the data rate on USB/PCIe transfers (only valid for 20 MHz)\n"
|
||||
#define CONFIG_HLP_TPORT "tracer port\n"
|
||||
#define CONFIG_HLP_NOTWAIT "don't wait for tracer, start immediately\n"
|
||||
#define CONFIG_HLP_TNOFORK "to ease debugging with gdb\n"
|
||||
|
||||
#define CONFIG_HLP_NUMEROLOGY "adding numerology for 5G\n"
|
||||
#define CONFIG_HLP_EMULATE_RF "Emulated RF enabled(disable by defult)\n"
|
||||
#define CONFIG_HLP_PARALLEL_CMD "three config for level of parallelism 'PARALLEL_SINGLE_THREAD', 'PARALLEL_RU_L1_SPLIT', or 'PARALLEL_RU_L1_TRX_SPLIT'\n"
|
||||
#define CONFIG_HLP_WORKER_CMD "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n"
|
||||
#define CONFIG_HLP_NOS1 "Disable s1 interface\n"
|
||||
#define CONFIG_HLP_RFSIM "Run in rf simulator mode (also known as basic simulator)\n"
|
||||
#define CONFIG_HLP_NOKRNMOD "(noS1 only): Use tun instead of namesh module \n"
|
||||
#define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n"
|
||||
|
||||
/*-----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* command line parameters common to eNodeB and UE */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*-----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define RF_CONFIG_FILE softmodem_params.rf_config_file
|
||||
#define TP_CONFIG softmodem_params.threadPoolConfig
|
||||
#define PHY_TEST softmodem_params.phy_test
|
||||
#define WAIT_FOR_SYNC softmodem_params.wait_for_sync
|
||||
#define SINGLE_THREAD_FLAG softmodem_params.single_thread_flag
|
||||
#define CHAIN_OFFSET softmodem_params.chain_offset
|
||||
#define NUMEROLOGY softmodem_params.numerology
|
||||
#define EMULATE_RF softmodem_params.emulate_rf
|
||||
#define CLOCK_SOURCE softmodem_params.clock_source
|
||||
#define TIMING_SOURCE softmodem_params.timing_source
|
||||
#define SEND_DMRSSYNC softmodem_params.send_dmrs_sync
|
||||
#define USIM_TEST softmodem_params.usim_test
|
||||
|
||||
#define DEFAULT_RFCONFIG_FILE "/usr/local/etc/syriq/ue.band7.tm1.PRB100.NR40.dat";
|
||||
|
||||
#define CMDLINE_PARAMS_DESC { \
|
||||
{"rf-config-file", CONFIG_HLP_RFCFGF, 0, strptr:(char **)&RF_CONFIG_FILE, defstrval:NULL, TYPE_STRING, sizeof(RF_CONFIG_FILE)},\
|
||||
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&PHY_TEST, defintval:0, TYPE_INT, 0}, \
|
||||
{"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&USIM_TEST, defintval:0, TYPE_UINT8, 0}, \
|
||||
{"clock", CONFIG_HLP_CLK, 0, uptr:&CLOCK_SOURCE, defintval:0, TYPE_UINT, 0}, \
|
||||
{"wait-for-sync", NULL, PARAMFLAG_BOOL, iptr:&WAIT_FOR_SYNC, defintval:0, TYPE_INT, 0}, \
|
||||
{"single-thread-enable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&SINGLE_THREAD_FLAG, defintval:0, TYPE_INT, 0}, \
|
||||
{"C" , CONFIG_HLP_DLF, 0, uptr:&(downlink_frequency[0][0]), defuintval:2680000000, TYPE_UINT, 0}, \
|
||||
{"a" , CONFIG_HLP_CHOFF, 0, iptr:&CHAIN_OFFSET, defintval:0, TYPE_INT, 0}, \
|
||||
{"d" , CONFIG_HLP_SOFTS, PARAMFLAG_BOOL, uptr:(uint32_t *)&do_forms, defintval:0, TYPE_INT8, 0}, \
|
||||
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
|
||||
{"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&NUMEROLOGY, defintval:0, TYPE_INT, 0}, \
|
||||
{"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&EMULATE_RF, defintval:0, TYPE_INT, 0}, \
|
||||
{"parallel-config", CONFIG_HLP_PARALLEL_CMD, 0, strptr:(char **)¶llel_config, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
{"worker-config", CONFIG_HLP_WORKER_CMD, 0, strptr:(char **)&worker_config, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
{"noS1", CONFIG_HLP_NOS1, PARAMFLAG_BOOL, uptr:&noS1, defintval:0, TYPE_INT, 0}, \
|
||||
{"rfsim", CONFIG_HLP_RFSIM, PARAMFLAG_BOOL, uptr:&rfsim, defintval:0, TYPE_INT, 0}, \
|
||||
{"basicsim", CONFIG_HLP_RFSIM, PARAMFLAG_BOOL, uptr:&basicsim, defintval:0, TYPE_INT, 0}, \
|
||||
{"nokrnmod", CONFIG_HLP_NOKRNMOD, PARAMFLAG_BOOL, uptr:&nokrnmod, defintval:0, TYPE_INT, 0}, \
|
||||
{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, uptr:&nonbiot, defuintval:0, TYPE_INT, 0}, \
|
||||
}
|
||||
|
||||
|
||||
#define CONFIG_HLP_FLOG "Enable online log \n"
|
||||
#define CONFIG_HLP_LOGL "Set the global log level, valid options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))\n"
|
||||
#define CONFIG_HLP_LOGV "Set the global log verbosity \n"
|
||||
#define CONFIG_HLP_TELN "Start embedded telnet server \n"
|
||||
#define CONFIG_HLP_MSC "Enable the MSC tracing utility \n"
|
||||
/*----------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* command line parameters for LOG utility */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define START_MSC softmodem_params.start_msc
|
||||
#define CMDLINE_LOGPARAMS_DESC { \
|
||||
{"R" , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \
|
||||
{"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \
|
||||
{"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \
|
||||
{"msc", CONFIG_HLP_MSC, PARAMFLAG_BOOL, uptr:&START_MSC, defintval:0, TYPE_UINT, 0}, \
|
||||
{"log-mem", NULL, 0, strptr:(char **)&logmem_filename, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
}
|
||||
|
||||
#define CMDLINE_ONLINELOG_IDX 0
|
||||
#define CMDLINE_GLOGLEVEL_IDX 1
|
||||
#define CMDLINE_GLOGVERBO_IDX 2
|
||||
#define CMDLINE_STARTTELN_IDX 3
|
||||
|
||||
/* check function for global log level */
|
||||
#define CMDLINE_LOGPARAMS_CHECK_DESC { \
|
||||
{ .s5= {NULL} } , \
|
||||
{ .s2= {config_check_intrange, {0,4}}}, \
|
||||
{ .s5= {NULL} } , \
|
||||
{ .s5= {NULL} } , \
|
||||
{ .s5= {NULL} } , \
|
||||
}
|
||||
|
||||
/***************************************************************************************************************************************/
|
||||
|
||||
#define SOFTMODEM_NOS1_BIT (1<<0)
|
||||
#define SOFTMODEM_NOKRNMOD_BIT (1<<1)
|
||||
#define SOFTMODEM_NONBIOT_BIT (1<<2)
|
||||
#define SOFTMODEM_RFSIM_BIT (1<<10)
|
||||
#define SOFTMODEM_BASICSIM_BIT (1<<11)
|
||||
#define SOFTMODEM_SIML1_BIT (1<<12)
|
||||
#define SOFTMODEM_DOFORMS_BIT (1<<15)
|
||||
|
||||
#define IS_SOFTMODEM_NOS1 ( get_softmodem_optmask() & SOFTMODEM_NOS1_BIT)
|
||||
#define IS_SOFTMODEM_NOKRNMOD ( get_softmodem_optmask() & SOFTMODEM_NOKRNMOD_BIT)
|
||||
#define IS_SOFTMODEM_NONBIOT ( get_softmodem_optmask() & SOFTMODEM_NONBIOT_BIT)
|
||||
#define IS_SOFTMODEM_RFSIM ( get_softmodem_optmask() & SOFTMODEM_RFSIM_BIT)
|
||||
#define IS_SOFTMODEM_BASICSIM ( get_softmodem_optmask() & SOFTMODEM_BASICSIM_BIT)
|
||||
#define IS_SOFTMODEM_SIML1 ( get_softmodem_optmask() & SOFTMODEM_SIML1_BIT)
|
||||
#define IS_SOFTMODEM_DOFORMS ( get_softmodem_optmask() & SOFTMODEM_DOFORMS_BIT)
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint64_t optmask;
|
||||
THREAD_STRUCT thread_struct;
|
||||
char rf_config_file[1024];
|
||||
char threadPoolConfig[1024];
|
||||
int phy_test;
|
||||
uint8_t usim_test;
|
||||
int emulate_rf;
|
||||
int wait_for_sync; //eNodeB only
|
||||
int single_thread_flag; //eNodeB only
|
||||
int chain_offset;
|
||||
int numerology;
|
||||
unsigned int start_msc;
|
||||
uint32_t clock_source;
|
||||
uint32_t timing_source;
|
||||
int hw_timing_advance;
|
||||
uint32_t send_dmrs_sync;
|
||||
} softmodem_params_t;
|
||||
|
||||
extern uint64_t get_softmodem_optmask(void);
|
||||
extern uint64_t set_softmodem_optmask(uint64_t bitmask);
|
||||
extern softmodem_params_t *get_softmodem_params(void);
|
||||
extern void get_common_options(void);
|
||||
#define SOFTMODEM_RTSIGNAL (SIGRTMIN+1)
|
||||
extern void set_softmodem_sighandler(void);
|
||||
extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -698,6 +698,8 @@ int pnf_phy_hi_dci0_req(L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, nfa
|
||||
|
||||
//phy_info* phy = (phy_info*)(pnf_p7->user_data);
|
||||
struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
|
||||
if (proc ==NULL)
|
||||
proc = &eNB->proc.L1_proc;
|
||||
|
||||
for (int i=0; i<req->hi_dci0_request_body.number_of_dci + req->hi_dci0_request_body.number_of_hi; i++) {
|
||||
//LOG_D(PHY,"[PNF] HI_DCI0_REQ sfn_sf:%d PDU[%d]\n", NFAPI_SFNSF2DEC(req->sfn_sf), i);
|
||||
@@ -739,6 +741,8 @@ int pnf_phy_dl_config_req(L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, n
|
||||
int sfn = NFAPI_SFNSF2SFN(req->sfn_sf);
|
||||
int sf = NFAPI_SFNSF2SF(req->sfn_sf);
|
||||
struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
|
||||
if (proc==NULL)
|
||||
proc = &eNB->proc.L1_proc;
|
||||
nfapi_dl_config_request_pdu_t *dl_config_pdu_list = req->dl_config_request_body.dl_config_pdu_list;
|
||||
LTE_eNB_PDCCH *pdcch_vars = &eNB->pdcch_vars[sf&1];
|
||||
pdcch_vars->num_pdcch_symbols = req->dl_config_request_body.number_pdcch_ofdm_symbols;
|
||||
@@ -864,6 +868,8 @@ int pnf_phy_ul_config_req(L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, n
|
||||
uint16_t curr_sfn = NFAPI_SFNSF2SFN(req->sfn_sf);
|
||||
uint16_t curr_sf = NFAPI_SFNSF2SF(req->sfn_sf);
|
||||
struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
|
||||
if (proc==NULL)
|
||||
proc = &eNB->proc.L1_proc;
|
||||
nfapi_ul_config_request_pdu_t *ul_config_pdu_list = req->ul_config_request_body.ul_config_pdu_list;
|
||||
|
||||
for (int i=0; i<req->ul_config_request_body.number_of_pdus; i++) {
|
||||
|
||||
@@ -321,8 +321,9 @@ int pnf_config_resp_cb(nfapi_vnf_config_t *config, int p5_idx, nfapi_pnf_config_
|
||||
return 0;
|
||||
}
|
||||
|
||||
int wake_eNB_rxtx(PHY_VARS_eNB *eNB, L1_rxtx_proc_t *proc, uint16_t sfn, uint16_t sf) {
|
||||
L1_rxtx_proc_t *L1_proc= proc;
|
||||
int wake_eNB_rxtx(PHY_VARS_eNB *eNB, uint16_t sfn, uint16_t sf) {
|
||||
L1_proc_t *proc=&eNB->proc;
|
||||
L1_rxtx_proc_t *L1_proc= (sf&1)? &proc->L1_proc : &proc->L1_proc_tx;
|
||||
LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
|
||||
//printf("%s(eNB:%p, sfn:%d, sf:%d)\n", __FUNCTION__, eNB, sfn, sf);
|
||||
//int i;
|
||||
@@ -409,7 +410,7 @@ int phy_subframe_indication(L1_rxtx_proc_t * proc, struct nfapi_vnf_p7_config *c
|
||||
uint16_t sfn = NFAPI_SFNSF2SFN(sfn_sf);
|
||||
uint16_t sf = NFAPI_SFNSF2SF(sfn_sf);
|
||||
//LOG_D(PHY,"[VNF] subframe indication sfn_sf:%d sfn:%d sf:%d\n", sfn_sf, sfn, sf);
|
||||
wake_eNB_rxtx(RC.eNB[0][0], proc, sfn, sf);
|
||||
wake_eNB_rxtx(RC.eNB[0][0], sfn, sf);
|
||||
} else {
|
||||
printf("[VNF] %s() RC.eNB:%p\n", __FUNCTION__, RC.eNB);
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ extern "C" {
|
||||
|
||||
#include "nfapi_interface.h"
|
||||
#include "debug.h"
|
||||
#include <openair2/PHY_INTERFACE/IF_Module.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -619,21 +620,21 @@ typedef struct nfapi_pnf_p7_config
|
||||
* \param req A pointer to the dl config request message structure
|
||||
* \return not currently used
|
||||
*/
|
||||
int (*dl_config_req)(nfapi_pnf_p7_config_t* config, nfapi_dl_config_request_t* req);
|
||||
int (*dl_config_req)(L1_rxtx_proc_t *proc,nfapi_pnf_p7_config_t* config, nfapi_dl_config_request_t* req);
|
||||
|
||||
/*! A callback for the UL_CONFIG.request
|
||||
* \param config A poiner to the PNF P7 config
|
||||
* \param req A pointer to the ul config request message structure
|
||||
* \return not currently used
|
||||
*/
|
||||
int (*ul_config_req)(nfapi_pnf_p7_config_t* config, nfapi_ul_config_request_t* req);
|
||||
int (*ul_config_req)(L1_rxtx_proc_t *proc,nfapi_pnf_p7_config_t* config, nfapi_ul_config_request_t* req);
|
||||
|
||||
/*! A callback for the HI_DCI0.request
|
||||
* \param config A poiner to the PNF P7 config
|
||||
* \param req A pointer to the hi dci0 request message structure
|
||||
* \return not currently used
|
||||
*/
|
||||
int (*hi_dci0_req)(nfapi_pnf_p7_config_t* config, nfapi_hi_dci0_request_t* req);
|
||||
int (*hi_dci0_req)(L1_rxtx_proc_t *proc,nfapi_pnf_p7_config_t* config, nfapi_hi_dci0_request_t* req);
|
||||
|
||||
/*! A callback for the TX_REQ.request
|
||||
* \param config A poiner to the PNF P7 config
|
||||
|
||||
@@ -576,20 +576,20 @@ void send_dummy_subframe(pnf_p7_t* pnf_p7, uint16_t sfn_sf)
|
||||
{
|
||||
pnf_p7->_public.dummy_subframe.dl_config_req->sfn_sf = sfn_sf;
|
||||
//NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy dl_config_req - enter\n");
|
||||
(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.dl_config_req);
|
||||
(pnf_p7->_public.dl_config_req)(NULL, &(pnf_p7->_public), pnf_p7->_public.dummy_subframe.dl_config_req);
|
||||
//NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy dl_config_req - exit\n");
|
||||
}
|
||||
if(pnf_p7->_public.ul_config_req && pnf_p7->_public.dummy_subframe.ul_config_req)
|
||||
{
|
||||
pnf_p7->_public.dummy_subframe.ul_config_req->sfn_sf = sfn_sf;
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy ul_config_req - enter\n");
|
||||
(pnf_p7->_public.ul_config_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.ul_config_req);
|
||||
(pnf_p7->_public.ul_config_req)(NULL, &pnf_p7->_public, pnf_p7->_public.dummy_subframe.ul_config_req);
|
||||
}
|
||||
if(pnf_p7->_public.hi_dci0_req && pnf_p7->_public.dummy_subframe.hi_dci0_req)
|
||||
{
|
||||
pnf_p7->_public.dummy_subframe.hi_dci0_req->sfn_sf = sfn_sf;
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy hi_dci0 - enter\n");
|
||||
(pnf_p7->_public.hi_dci0_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.hi_dci0_req);
|
||||
(pnf_p7->_public.hi_dci0_req)(NULL, &pnf_p7->_public, pnf_p7->_public.dummy_subframe.hi_dci0_req);
|
||||
}
|
||||
if(pnf_p7->_public.lbt_dl_config_req && pnf_p7->_public.dummy_subframe.lbt_dl_config_req)
|
||||
{
|
||||
@@ -699,7 +699,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
|
||||
if(tx_subframe_buffer->dl_config_req != 0)
|
||||
{
|
||||
if(pnf_p7->_public.dl_config_req)
|
||||
(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), tx_subframe_buffer->dl_config_req);
|
||||
(pnf_p7->_public.dl_config_req)(NULL, &(pnf_p7->_public), tx_subframe_buffer->dl_config_req);
|
||||
|
||||
//deallocate_nfapi_dl_config_request(subframe_buffer->dl_config_req, pnf_p7);
|
||||
}
|
||||
@@ -709,14 +709,14 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
|
||||
if(pnf_p7->_public.dl_config_req && pnf_p7->_public.dummy_subframe.dl_config_req)
|
||||
{
|
||||
pnf_p7->_public.dummy_subframe.dl_config_req->sfn_sf = sfn_sf_tx;
|
||||
(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.dl_config_req);
|
||||
(pnf_p7->_public.dl_config_req)(NULL, &(pnf_p7->_public), pnf_p7->_public.dummy_subframe.dl_config_req);
|
||||
}
|
||||
}
|
||||
|
||||
if(tx_subframe_buffer->hi_dci0_req != 0)
|
||||
{
|
||||
if(pnf_p7->_public.hi_dci0_req)
|
||||
(pnf_p7->_public.hi_dci0_req)(&(pnf_p7->_public), tx_subframe_buffer->hi_dci0_req);
|
||||
(pnf_p7->_public.hi_dci0_req)(NULL, &(pnf_p7->_public), tx_subframe_buffer->hi_dci0_req);
|
||||
|
||||
//deallocate_nfapi_hi_dci0_request(subframe_buffer->hi_dci0_req, pnf_p7);
|
||||
}
|
||||
@@ -726,7 +726,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
|
||||
if(pnf_p7->_public.hi_dci0_req && pnf_p7->_public.dummy_subframe.hi_dci0_req)
|
||||
{
|
||||
pnf_p7->_public.dummy_subframe.hi_dci0_req->sfn_sf = sfn_sf_tx;
|
||||
(pnf_p7->_public.hi_dci0_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.hi_dci0_req);
|
||||
(pnf_p7->_public.hi_dci0_req)(NULL, &(pnf_p7->_public), pnf_p7->_public.dummy_subframe.hi_dci0_req);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -777,7 +777,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
|
||||
if(subframe_buffer->ul_config_req != 0)
|
||||
{
|
||||
if(pnf_p7->_public.ul_config_req)
|
||||
(pnf_p7->_public.ul_config_req)(&(pnf_p7->_public), subframe_buffer->ul_config_req);
|
||||
(pnf_p7->_public.ul_config_req)(NULL, &(pnf_p7->_public), subframe_buffer->ul_config_req);
|
||||
|
||||
//deallocate_nfapi_ul_config_request(subframe_buffer->ul_config_req, pnf_p7);
|
||||
}
|
||||
@@ -787,7 +787,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
|
||||
if(pnf_p7->_public.ul_config_req && pnf_p7->_public.dummy_subframe.ul_config_req)
|
||||
{
|
||||
pnf_p7->_public.dummy_subframe.ul_config_req->sfn_sf = sfn_sf;
|
||||
(pnf_p7->_public.ul_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.ul_config_req);
|
||||
(pnf_p7->_public.ul_config_req)(NULL, &(pnf_p7->_public), pnf_p7->_public.dummy_subframe.ul_config_req);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <string.h>
|
||||
#include <types.h>
|
||||
#include "assertions.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "PHY/TOOLS/time_meas.h"
|
||||
#include "defs.h"
|
||||
|
||||
@@ -482,11 +483,12 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
//Table of possible lifting sizes
|
||||
char temp;
|
||||
int simd_size;
|
||||
int macro_segment, macro_segment_end;
|
||||
|
||||
unsigned int macro_segment, macro_segment_end;
|
||||
|
||||
|
||||
macro_segment = 8*macro_num;
|
||||
macro_segment_end = (n_segments > 8*(macro_num+1)) ? 8*(macro_num+1) : n_segments;
|
||||
// macro_segment_end = (n_segments > 8*(macro_num+1)) ? 8*(macro_num+1) : n_segments;
|
||||
macro_segment_end = macro_segment + (n_segments > 8 ? 8 : n_segments);
|
||||
///printf("macro_segment: %d\n", macro_segment);
|
||||
///printf("macro_segment_end: %d\n", macro_segment_end );
|
||||
|
||||
@@ -506,7 +508,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
masks[7] = _mm256_set1_epi8(0x80);
|
||||
#endif
|
||||
|
||||
///AssertFatal(n_segments>0&&n_segments<=8,"0 < n_segments %d <= 8\n",n_segments);
|
||||
|
||||
|
||||
//determine number of bits in codeword
|
||||
if (BG==1)
|
||||
@@ -562,7 +564,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
||||
for (i=0; i<block_length>>5; i++) {
|
||||
c256 = _mm256_and_si256(_mm256_cmpeq_epi8(_mm256_andnot_si256(_mm256_shuffle_epi8(_mm256_set1_epi32(((uint32_t*)test_input[macro_segment])[i]), shufmask),andmask),zero256),masks[0]);
|
||||
//for (j=1; j<n_segments; j++) {
|
||||
for (j=macro_segment+1; j < macro_segment_end; j++) {
|
||||
for (j=macro_segment+1; j < macro_segment_end; j++) {
|
||||
c256 = _mm256_or_si256(_mm256_and_si256(_mm256_cmpeq_epi8(_mm256_andnot_si256(_mm256_shuffle_epi8(_mm256_set1_epi32(((uint32_t*)test_input[j])[i]), shufmask),andmask),zero256),masks[j-macro_segment]),c256);
|
||||
}
|
||||
((__m256i *)c)[i] = c256;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -69,7 +69,6 @@ extern uint16_t NB_UE_INST;
|
||||
extern unsigned char NB_RN_INST;
|
||||
#endif
|
||||
|
||||
extern unsigned int ULSCH_max_consecutive_errors;
|
||||
extern int flag_LA;
|
||||
extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
|
||||
extern double sinr_bler_map_up[MCS_COUNT][2][16];
|
||||
|
||||
@@ -66,7 +66,6 @@ extern uint16_t NB_UE_INST;
|
||||
extern unsigned char NB_RN_INST;
|
||||
#endif
|
||||
|
||||
extern unsigned int ULSCH_max_consecutive_errors;
|
||||
extern int flag_LA;
|
||||
extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
|
||||
extern double sinr_bler_map_up[MCS_COUNT][2][16];
|
||||
|
||||
@@ -66,7 +66,6 @@ extern uint16_t NB_UE_INST;
|
||||
extern unsigned char NB_RN_INST;
|
||||
#endif
|
||||
|
||||
extern unsigned int ULSCH_max_consecutive_errors;
|
||||
extern int flag_LA;
|
||||
extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
|
||||
extern double sinr_bler_map_up[MCS_COUNT][2][16];
|
||||
|
||||
@@ -65,8 +65,6 @@ unsigned char NB_RN_INST=0;
|
||||
unsigned char NB_INST=0;
|
||||
#endif
|
||||
|
||||
unsigned int ULSCH_max_consecutive_errors = 20;
|
||||
|
||||
int number_of_cards;
|
||||
|
||||
|
||||
|
||||
@@ -64,7 +64,6 @@ unsigned char NB_RN_INST=0;
|
||||
unsigned char NB_INST=0;
|
||||
#endif
|
||||
|
||||
unsigned int ULSCH_max_consecutive_errors = 20;
|
||||
|
||||
int number_of_cards;
|
||||
|
||||
|
||||
@@ -57,7 +57,6 @@ short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||
unsigned char NB_INST=0;
|
||||
#endif
|
||||
|
||||
unsigned int ULSCH_max_consecutive_errors = 20;
|
||||
|
||||
int number_of_cards;
|
||||
|
||||
|
||||
@@ -1019,11 +1019,11 @@ void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
|
||||
|
||||
/*Dummy functions*/
|
||||
|
||||
int memcpy_dl_config_req (nfapi_pnf_p7_config_t *pnf_p7, nfapi_dl_config_request_t *req) {
|
||||
int memcpy_dl_config_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, nfapi_dl_config_request_t *req) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int memcpy_ul_config_req (nfapi_pnf_p7_config_t *pnf_p7, nfapi_ul_config_request_t *req) {
|
||||
int memcpy_ul_config_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, nfapi_ul_config_request_t *req) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_SCHED_MODE "scheduler_mode"
|
||||
#define CONFIG_STRING_MACRLC_PHY_TEST_MODE "phy_test_mode"
|
||||
#define CONFIG_MACRLC_PUSCH10xSNR "puSch10xSnr"
|
||||
#define CONFIG_MACRLC_PUCCH10xSNR "puCch10xSnr"
|
||||
|
||||
@@ -81,7 +80,6 @@
|
||||
{CONFIG_STRING_MACRLC_LOCAL_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_REMOTE_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_MACRLC_SCHED_MODE, NULL, 0, strptr:NULL, defstrval:"default", TYPE_STRING, 0}, \
|
||||
{CONFIG_STRING_MACRLC_PHY_TEST_MODE, NULL, 0, uptr:NULL, defintval:1, TYPE_UINT, 0}, \
|
||||
{CONFIG_MACRLC_PUSCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \
|
||||
{CONFIG_MACRLC_PUCCH10xSNR, NULL, 0, iptr:NULL, defintval:200, TYPE_INT, 0}, \
|
||||
}
|
||||
@@ -103,7 +101,6 @@
|
||||
#define MACRLC_LOCAL_S_PORTD_IDX 15
|
||||
#define MACRLC_REMOTE_S_PORTD_IDX 16
|
||||
#define MACRLC_SCHED_MODE_IDX 17
|
||||
#define MACRLC_PHY_TEST_IDX 18
|
||||
#define MACRLC_PUSCH10xSNR_IDX 19
|
||||
#define MACRLC_PUCCH10xSNR_IDX 20
|
||||
#define MACRLC_PUSCH10xSNR_IDX 18
|
||||
#define MACRLC_PUCCH10xSNR_IDX 19
|
||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
@@ -214,8 +214,6 @@ void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]) {
|
||||
RC.mac[j]->puSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr);
|
||||
RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr);
|
||||
RC.nb_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr);
|
||||
//RC.mac[j]->phy_test = *(MacRLC_ParamList.paramarray[j][MACRLC_PHY_TEST_IDX].iptr);
|
||||
//printf("PHY_TEST = %d,%d\n", RC.mac[j]->phy_test, j);
|
||||
|
||||
if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
|
||||
// check number of instances is same as RRC/PDCP
|
||||
|
||||
@@ -1172,7 +1172,6 @@ typedef struct srb1_params_s {
|
||||
#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_SCHED_MODE "scheduler_mode"
|
||||
#define CONFIG_STRING_MACRLC_PHY_TEST_MODE "phy_test_mode"
|
||||
|
||||
#define MACRLC_CC_IDX 0
|
||||
#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1
|
||||
@@ -1192,7 +1191,6 @@ typedef struct srb1_params_s {
|
||||
#define MACRLC_LOCAL_S_PORTD_IDX 15
|
||||
#define MACRLC_REMOTE_S_PORTD_IDX 16
|
||||
#define MACRLC_SCHED_MODE_IDX 17
|
||||
#define MACRLC_PHY_TEST_IDX 18
|
||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* thread configuration parameters section name */
|
||||
|
||||
@@ -374,8 +374,6 @@ void RCconfig_nr_macrlc() {
|
||||
|
||||
for (j=0;j<RC.nb_nr_macrlc_inst;j++) {
|
||||
RC.nb_nr_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr);
|
||||
//RC.nrmac[j]->phy_test = *(MacRLC_ParamList.paramarray[j][MACRLC_PHY_TEST_IDX].iptr);
|
||||
//printf("PHY_TEST = %d,%d\n", RC.nrmac[j]->phy_test, j);
|
||||
|
||||
if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
|
||||
// check number of instances is same as RRC/PDCP
|
||||
|
||||
@@ -1008,7 +1008,6 @@ typedef enum {
|
||||
#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC "remote_s_portc"
|
||||
#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd"
|
||||
#define CONFIG_STRING_MACRLC_PHY_TEST_MODE "phy_test_mode"
|
||||
|
||||
|
||||
#define MACRLC_CC_IDX 0
|
||||
@@ -1029,7 +1028,6 @@ typedef enum {
|
||||
#define MACRLC_LOCAL_S_PORTD_IDX 15
|
||||
#define MACRLC_REMOTE_S_PORTD_IDX 16
|
||||
#define MACRLC_SCHED_MODE_IDX 17
|
||||
#define MACRLC_PHY_TEST_IDX 18
|
||||
|
||||
|
||||
/* thread configuration parameters section name */
|
||||
|
||||
@@ -1962,7 +1962,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
|
||||
uint8_t first_ue_total[MAX_NUM_CCs][20];
|
||||
uint8_t first_ue_id[MAX_NUM_CCs][20];
|
||||
uint8_t ul_inactivity_num[MAX_NUM_CCs];
|
||||
uint8_t ul_inactivity_id[MAX_NUM_CCs][20];
|
||||
uint8_t ul_inactivity_id[MAX_NUM_CCs][20]={0};
|
||||
// LTE_DL_FRAME_PARMS *frame_parms;
|
||||
uint8_t ulsch_ue_max_num[MAX_NUM_CCs];
|
||||
uint16_t saved_ulsch_dci[MAX_NUM_CCs];
|
||||
|
||||
@@ -59,7 +59,6 @@ extern unsigned short NODE_ID[1];
|
||||
|
||||
/* Scheduler */
|
||||
extern RAN_CONTEXT_t RC;
|
||||
extern int phy_test;
|
||||
extern uint8_t nfapi_mode;
|
||||
|
||||
/*#if defined(PRE_SCD_THREAD)
|
||||
|
||||
@@ -32,7 +32,14 @@
|
||||
|
||||
//#include "defs.h"
|
||||
#include "mac_proto.h"
|
||||
#include "executables/nr-softmodem.h"
|
||||
#include "../../ARCH/COMMON/common_lib.h"
|
||||
//#undef MALLOC
|
||||
#include "assertions.h"
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs_UE.h"
|
||||
#include "openair2/LAYER2/RLC/rlc.h"
|
||||
#include "openair2/LAYER2/PDCP_v10.1.0/pdcp.h"
|
||||
#include "executables/softmodem-common.h"
|
||||
|
||||
static NR_UE_MAC_INST_t *nr_ue_mac_inst;
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include "executables/nr-softmodem.h"
|
||||
|
||||
/* MAC related headers */
|
||||
#include "mac_proto.h"
|
||||
@@ -49,7 +48,7 @@
|
||||
/*Openair Packet Tracer */
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
|
||||
#include "executables/softmodem-common.h"
|
||||
/* log utils */
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#include "mac_proto.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
||||
#include "executables/nr-softmodem.h"
|
||||
#include "executables/softmodem-common.h"
|
||||
extern RAN_CONTEXT_t RC;
|
||||
//#define ENABLE_MAC_PAYLOAD_DEBUG 1
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
//#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
|
||||
#include "common/ran_context.h"
|
||||
#include "executables/nr-softmodem.h"
|
||||
#include "executables/softmodem-common.h"
|
||||
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
|
||||
@@ -471,7 +471,7 @@ rb_found:
|
||||
#endif
|
||||
}
|
||||
|
||||
static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
|
||||
__attribute__ ((unused)) static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
|
||||
{
|
||||
nr_rlc_entity_t *nr_rlc_am;
|
||||
nr_rlc_ue_t *ue;
|
||||
@@ -739,7 +739,7 @@ static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s)
|
||||
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
||||
}
|
||||
|
||||
static void add_drb(int rnti, struct LTE_DRB_ToAddMod *s)
|
||||
__attribute__ ((unused)) static void add_drb(int rnti, struct LTE_DRB_ToAddMod *s)
|
||||
{
|
||||
switch (s->rlc_Config->present) {
|
||||
case LTE_RLC_Config_PR_am:
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "assertions.h"
|
||||
#include "LAYER2/NR_MAC_UE/mac_extern.h"
|
||||
#include "SCHED_NR_UE/fapi_nr_ue_l1.h"
|
||||
#include "executables/nr-softmodem.h"
|
||||
#include "executables/softmodem-common.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
@@ -840,7 +840,7 @@ int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req, module_id_t Mod_id)
|
||||
|
||||
// The following set of memcpy functions should be getting called as callback functions from
|
||||
// pnf_p7_subframe_ind.
|
||||
int memcpy_dl_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req)
|
||||
int memcpy_dl_config_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req)
|
||||
{
|
||||
|
||||
//for (Mod_id=0; Mod_id<NB_UE_INST; Mod_id++){
|
||||
@@ -871,7 +871,7 @@ int memcpy_dl_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request
|
||||
|
||||
}
|
||||
|
||||
int memcpy_ul_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req)
|
||||
int memcpy_ul_config_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req)
|
||||
{
|
||||
|
||||
//for (Mod_id=0; Mod_id<NB_UE_INST; Mod_id++){
|
||||
@@ -925,7 +925,7 @@ int memcpy_tx_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_tx_request_t* req)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int memcpy_hi_dci0_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* req)
|
||||
int memcpy_hi_dci0_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* req)
|
||||
{
|
||||
|
||||
//if(req!=0){
|
||||
@@ -1032,7 +1032,7 @@ void handle_nfapi_bch_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,
|
||||
}
|
||||
|
||||
|
||||
void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t *proc,
|
||||
void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,
|
||||
nfapi_dl_config_request_pdu_t *dl_config_pdu,
|
||||
uint8_t codeword_index,
|
||||
uint8_t *sdu)
|
||||
|
||||
@@ -104,16 +104,16 @@ int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req, module_id_t Mod_id);
|
||||
// The following set of memcpy functions should be getting called as callback functions from
|
||||
// pnf_p7_subframe_ind.
|
||||
|
||||
int memcpy_dl_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req);
|
||||
int memcpy_dl_config_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req);
|
||||
|
||||
|
||||
int memcpy_ul_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req);
|
||||
int memcpy_ul_config_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req);
|
||||
|
||||
|
||||
int memcpy_tx_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_tx_request_t* req);
|
||||
|
||||
|
||||
int memcpy_hi_dci0_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* req);
|
||||
int memcpy_hi_dci0_req (L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* req);
|
||||
|
||||
void UE_config_stub_pnf(void);
|
||||
|
||||
|
||||
@@ -128,7 +128,6 @@ typedef struct xer_sprint_string_s {
|
||||
//replace LTE
|
||||
//extern unsigned char NB_eNB_INST;
|
||||
extern unsigned char NB_gNB_INST;
|
||||
extern uint8_t usim_test;
|
||||
|
||||
extern RAN_CONTEXT_t RC;
|
||||
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
This file describes briefly the steps that were carried out to migrate from *PUBLIC* OAI SVN repo (http://svn.eurecom.fr/openair4G/trunk) to the gitlab repo (git@gitlab.eurecom.fr:oai/openairinterface5G.git). In order to reduce the size of repository, we have only included SVN commits from r4000 up till now. None of branches/tags are migrated from SVN Repository to Git.
|
||||
|
||||
1. The steps to migrate from SVN to Git were carried out using the instructions/script here, https://www.atlassian.com/git/tutorials/migrating-overview
|
||||
|
||||
2. Currently, the repository is public during the "transition period" for everyone to get used to the repository. During the "transition period", we will check in changes only to SVN and synchronize SVN to Git repository once everyday. At the end of "transition period", we will mark SVN repo as read-only and Git repository will be the default working repository. Currently, the "transition period" is set to 1 month until 15 July. However, this date might be changed based on the feedback from the community.There are brief instructions to explain this workflow here, https://www.atlassian.com/git/tutorials/migrating-overview/.
|
||||
|
||||
3. The author list file is located in authors.txt in the main working directory. This file was extracted from SVN logs, but is modified for name and email addresses.
|
||||
|
||||
4. Add a certificate from gitlab.eurecom.fr to your Ubuntu 14.04 installation (you need to be root user)
|
||||
a) echo -n | openssl s_client -showcerts -connect gitlab.eurecom.fr:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/gitlab_eurecom_fr.crt
|
||||
b)update-ca-certificates
|
||||
|
||||
5. Git one time configuration with your name/email address.
|
||||
git config --global user.name "Your Name"
|
||||
git config --global user.email "Your email address"
|
||||
|
||||
6. In order to checkout the Git repository (for OAI Users without login to gitlab server)
|
||||
a) export GIT_SSL_NO_VERIFY=1; git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git (without certificate installation in step 4)
|
||||
b) git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git (If certificate is installed in step 4)
|
||||
|
||||
6. In order to checkout the Git repository (for OAI Developers/admins with login to gitlab server). Please send email to openair_tech@eurecom.fr to be added to the repository as a developer). If you do not have account on gitlab.eurecom.fr, please register yourself to gitlab.eurecom.fr.
|
||||
|
||||
a) Checkout with using ssh keys:
|
||||
You will need to put your ssh keys in https://gitlab.eurecom.fr/profile/keys to access to the git repo (only important for users who want to commit to the repository). Once that is done, checkout the git repository using:
|
||||
git clone git@gitlab.eurecom.fr:oai/openairinterface5g.git
|
||||
|
||||
b) Checkout with user name/password prompt:
|
||||
|
||||
git clone https://YOUR_USERNAME@gitlab.eurecom.fr/oai/openairinterface5g.git
|
||||
|
||||
|
||||
|
||||
Migration Instructions from SVN->Git in Detail (Not important for OAI Developer Community):
|
||||
Assuming you are in svn2git directory.
|
||||
|
||||
wget https://bitbucket.org/atlassian/svn-migration-scripts/downloads/svn-migration-scripts.jar
|
||||
java -jar ./svn-migration-scripts.jar verify
|
||||
java -jar ./svn-migration-scripts.jar authors http://svn.eurecom.fr/openair4G > authors.txt
|
||||
git svn clone -r4000:HEAD --authors-file=./svn2git/authors.txt http://svn.eurecom.fr/openair4G/trunk oaiRepoData1 >& log_svn_clone1.out
|
||||
|
||||
(Assuming you have added your ssh keys in https://gitlab.eurecom.fr/profile/keys)
|
||||
//One time git configuration of user name/email address
|
||||
git config --global user.name "Replace_With_Your_Name"
|
||||
git config --global user.email "Replace_With_Your_Email_address"
|
||||
|
||||
git remote add origin git@gitlab.eurecom.fr:oai/openairinterface5g.git
|
||||
|
||||
git push -u origin --all
|
||||
git push --tags
|
||||
|
||||
Steps to synchronize on calisson (to be carried out periodically)
|
||||
cd ~rohit/GitMigration/GitRepoNew/oaiRepoData1/svn2git
|
||||
git config -l
|
||||
git config --global user.name "Replace_With_Your_Name"
|
||||
git config --global user.email "Replace_With_Your_Email_address"
|
||||
./check_diff_author.sh #There should be no difference in author list file
|
||||
git remote set-url origin https://kaltenbe@gitlab.eurecom.fr/oai/openairinterface5g.git
|
||||
git svn fetch #--authors-file=./authors.txt (Make sure that there are no new authors since the last migration, else this will result in errors)
|
||||
git svn rebase
|
||||
git push -u origin --all
|
||||
git push --tags
|
||||
|
||||
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
agostini = agostini <philippe.agostini@thalesgroup.com>
|
||||
alexandr = alexandr <alexandr@eurecom.fr>
|
||||
ambe = Anne Ambe <anne.ambe@air-lynx.com>
|
||||
anouar = Hicham Anouar <hicham.anouar@thalesgroup.com>
|
||||
antonb = antonb <antonb@eurecom.fr>
|
||||
apostolaras = Apostolos Apostolaras <apaposto@gmail.com>
|
||||
arvanita = Arvanita <arvanita@eurecom.fr>
|
||||
atsan = Emre Atsan <emre.atsan@epfl.ch>
|
||||
auberts = auberts <auberts@eurecom.fr>
|
||||
benromdh = benromdh <benromdh@eurecom.fr>
|
||||
besnier = Joelle Besnier <joelle.besnier@ifsttar.fr>
|
||||
bhamri = Bhamri <bhamri@eurecom.fr>
|
||||
bohge = Mathias Bohge <bohge@tkn.tu-berlin.de>
|
||||
brizzola = brizzola <brizzola@eurecom.fr>
|
||||
byiringi = Byiringi <byiringi@eurecom.fr>
|
||||
cerdan = Cerdan <cerdan@eurecom.fr>
|
||||
cirkic = Cirkic <cirkic@eurecom.fr>
|
||||
demiray = demiray <demiray@eurecom.fr>
|
||||
ferreira = Ferreira <ferreira@eurecom.fr>
|
||||
fkalten = fkalten <fkalten@eurecom.fr>
|
||||
fotimeli = Fotimeli <fotimeli@eurecom.fr>
|
||||
foubert = Philippe Foubert <foubert@eurecom.fr>
|
||||
gangakhe = Gangakhe <gangakhe@eurecom.fr>
|
||||
gangula = gangula <gangula@eurecom.fr>
|
||||
garcial = garcial <garcial@eurecom.fr>
|
||||
gauthier = Lionel Gauthier <lionel.gauthier@eurecom.fr>
|
||||
ghaddab = ghaddab <ghaddab@eurecom.fr>
|
||||
ghaffar = ghaffar <ghaffar@eurecom.fr>
|
||||
guibene = guibene <guibene@eurecom.fr>
|
||||
guptar = Rohit Gupta <rohit.gupta@eurecom.fr>
|
||||
haerri = Haerri <haerri@eurecom.fr>
|
||||
hafsaoui = Hafsaoui <hafsaoui@eurecom.fr>
|
||||
hao = hao <hao@eurecom.fr>
|
||||
hashmat = hashmat <hashmat@eurecom.fr>
|
||||
hrizi = hrizi <hrizi@eurecom.fr>
|
||||
hu = hu <hu@eurecom.fr>
|
||||
huang = Huang <huang@eurecom.fr>
|
||||
iacobelli = Lorenzo Iacobelli <LORENZO.IACOBELLI@fr.thalesgroup.com>
|
||||
ihmig = ihmig <ihmig@eurecom.fr>
|
||||
jdagres = jdagres <jdagres@eurecom.fr>
|
||||
jiangx = jiangx <jiangx@eurecom.fr>
|
||||
kaltenbe = Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
|
||||
knopp = Raymond Knopp <raymond.knopp@eurecom.fr>
|
||||
kortke = kortke <kortke@eurecom.fr>
|
||||
kouassi = kouassi <kouassi@eurecom.fr>
|
||||
laklii = laklii <laklii@eurecom.fr>
|
||||
latif = latif <latif@eurecom.fr>
|
||||
libchaber = libchaber <libchaber@eurecom.fr>
|
||||
linhuang = linhuang <linhuang@eurecom.fr>
|
||||
lukashov = lukashov <lukashov@eurecom.fr>
|
||||
maatalla = maatalla <maatalla@eurecom.fr>
|
||||
maurel = maurel <maurel@eurecom.fr>
|
||||
mayani = mayani <mayani@eurecom.fr>
|
||||
merz = Ruben Merz <ruben.merz@ieee.org>
|
||||
mlaner = mlaner <mlaner@eurecom.fr>
|
||||
mosli = mosli <mosli@eurecom.fr>
|
||||
navid = Navid Nikaein <navid.nikaein@eurecom.fr>
|
||||
nguyenhn = nguyenhn <nguyenhn@eurecom.fr>
|
||||
nguyennd = nguyennd <nguyennd@eurecom.fr>
|
||||
nikaeinn = Navid Nikaein <<navid.nikaein@eurecom.fr>
|
||||
oai_user1 = oai_user1 <oai_user1@eurecom.fr>
|
||||
ouni = ouni <ouni@eurecom.fr>
|
||||
paranche = paranche <paranche@eurecom.fr>
|
||||
pburlot = pburlot <pburlot@eurecom.fr>
|
||||
qi = qi <qi@eurecom.fr>
|
||||
renwanz = renwanz <renwanz@eurecom.fr>
|
||||
roux = Cedric Roux <cedric.roux@eurecom.fr>
|
||||
sait = sait <sait@eurecom.fr>
|
||||
sorby = sorby <sorby@eurecom.fr>
|
||||
steinicke = steinicke <steinicke@eurecom.fr>
|
||||
thomas = thomas <thomas@eurecom.fr>
|
||||
thomasl = thomasl <thomasl@eurecom.fr>
|
||||
tonelli = tonelli <tonelli@eurecom.fr>
|
||||
unlu = unlu <unlu@eurecom.fr>
|
||||
ustun = ustun <ustun@eurecom.fr>
|
||||
villa = villa <villa@eurecom.fr>
|
||||
wagner = wagner <wagner@eurecom.fr>
|
||||
wangl = wangl <wangl@eurecom.fr>
|
||||
wetterwa = wetterwa <wetterwa@eurecom.fr>
|
||||
wewior = wewior <wewior@eurecom.fr>
|
||||
winckel = winckel <winckel@eurecom.fr>
|
||||
xuhl = xuhl <xuhl@eurecom.fr>
|
||||
yannan = yannan <yannan@eurecom.fr>
|
||||
yilmaz = yilmaz <yilmaz@eurecom.fr>
|
||||
zayen = zayen <zayen@eurecom.fr>
|
||||
zhou = zhou <zhou@eurecom.fr>
|
||||
@@ -1,45 +0,0 @@
|
||||
agostini = Agostini <philippe.agostini@thalesgroup.com>
|
||||
alexandr = Alexandr <alexandr@eurecom.fr>
|
||||
ambe = Anne Ambe <anne.ambe@air-lynx.com>
|
||||
anouar = Hicham Anouar <hicham.anouar@thalesgroup.com>
|
||||
apostolaras = Apostolos Apostolaras <apaposto@gmail.com>
|
||||
arvanita = Arvanita <arvanita@eurecom.fr>
|
||||
atsan = Emre Atsan <emre.atsan@epfl.ch>
|
||||
besnier = Joelle Besnier <joelle.besnier@ifsttar.fr>
|
||||
bhamri = Bhamri <bhamri@eurecom.fr>
|
||||
bohge = Mathias Bohge <bohge@tkn.tu-berlin.de>
|
||||
byiringi = Byiringi <byiringi@eurecom.fr>
|
||||
cerdan = Cerdan <cerdan@eurecom.fr>
|
||||
cirkic = Cirkic <cirkic@eurecom.fr>
|
||||
ferreira = Ferreira <ferreira@eurecom.fr>
|
||||
fotimeli = Fotimeli <fotimeli@eurecom.fr>
|
||||
foubert = Philippe Foubert <foubert@eurecom.fr>
|
||||
gangakhe = Gangakhe <gangakhe@eurecom.fr>
|
||||
gangula = gangula <gangula@eurecom.fr>
|
||||
gauthier = Lionel Gauthier <lionel.gauthier@eurecom.fr>
|
||||
haerri = Haerri <haerri@eurecom.fr>
|
||||
hafsaoui = Hafsaoui <hafsaoui@eurecom.fr>
|
||||
huang = Huang <huang@eurecom.fr>
|
||||
iacobelli = Lorenzo Iacobelli <LORENZO.IACOBELLI@fr.thalesgroup.com>
|
||||
ihmig = Ihmig <ihmig@eurecom.fr>
|
||||
jiangx = Jiangx <jiangx@eurecom.fr>
|
||||
kaltenbe = Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
|
||||
knopp = Raymond Knopp <raymond.knopp@eurecom.fr>
|
||||
lukashov = Lukashov <lukashov@eurecom.fr>
|
||||
navid = Navid Nikaein <navid@eurecom.fr>
|
||||
nguyenhn = Nguyenhn <nguyenhn@eurecom.fr>
|
||||
nguyennd = Nguyennd <nguyennd@eurecom.fr>
|
||||
nikaeinn = nikaeinn <Navid.Nikaein@eurecom.fr>
|
||||
oai_user1 = oai_user1 <oai_user1@eurecom.fr>
|
||||
ouni = Ouni <ouni@eurecom.fr>
|
||||
paranche = paranche <paranche@eurecom.fr>
|
||||
qi = qi <qi@eurecom.fr>
|
||||
roux = Cedric Roux <roux@eurecom.fr>
|
||||
sait = sait <sait@eurecom.fr>
|
||||
sorby = sorby <sorby@eurecom.fr>
|
||||
thomas = thomas <thomas@eurecom.fr>
|
||||
unlu = unlu <unlu@eurecom.fr>
|
||||
wagner = wagner <wagner@eurecom.fr>
|
||||
yilmaz = yilmaz <yilmaz@eurecom.fr>
|
||||
zayen = zayen <zayen@eurecom.fr>
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
agostini = agostini <agostini@mycompany.com>
|
||||
alexandr = alexandr <alexandr@mycompany.com>
|
||||
ambe = ambe <ambe@mycompany.com>
|
||||
anouar = anouar <anouar@mycompany.com>
|
||||
antonb = antonb <antonb@mycompany.com>
|
||||
apostolaras = apostolaras <apostolaras@mycompany.com>
|
||||
arvanita = arvanita <arvanita@mycompany.com>
|
||||
atsan = atsan <atsan@mycompany.com>
|
||||
auberts = auberts <auberts@mycompany.com>
|
||||
benromdh = benromdh <benromdh@mycompany.com>
|
||||
besnier = besnier <besnier@mycompany.com>
|
||||
bhamri = bhamri <bhamri@mycompany.com>
|
||||
bohge = bohge <bohge@mycompany.com>
|
||||
brizzola = brizzola <brizzola@mycompany.com>
|
||||
byiringi = byiringi <byiringi@mycompany.com>
|
||||
cerdan = cerdan <cerdan@mycompany.com>
|
||||
cirkic = cirkic <cirkic@mycompany.com>
|
||||
demiray = demiray <demiray@mycompany.com>
|
||||
ferreira = ferreira <ferreira@mycompany.com>
|
||||
fkalten = fkalten <fkalten@mycompany.com>
|
||||
fotimeli = fotimeli <fotimeli@mycompany.com>
|
||||
foubert = foubert <foubert@mycompany.com>
|
||||
gangakhe = gangakhe <gangakhe@mycompany.com>
|
||||
gangula = gangula <gangula@mycompany.com>
|
||||
garcial = garcial <garcial@mycompany.com>
|
||||
gauthier = gauthier <gauthier@mycompany.com>
|
||||
ghaddab = ghaddab <ghaddab@mycompany.com>
|
||||
ghaffar = ghaffar <ghaffar@mycompany.com>
|
||||
guibene = guibene <guibene@mycompany.com>
|
||||
guptar = guptar <guptar@mycompany.com>
|
||||
haerri = haerri <haerri@mycompany.com>
|
||||
hafsaoui = hafsaoui <hafsaoui@mycompany.com>
|
||||
hao = hao <hao@mycompany.com>
|
||||
hashmat = hashmat <hashmat@mycompany.com>
|
||||
hrizi = hrizi <hrizi@mycompany.com>
|
||||
hu = hu <hu@mycompany.com>
|
||||
huang = huang <huang@mycompany.com>
|
||||
iacobelli = iacobelli <iacobelli@mycompany.com>
|
||||
ihmig = ihmig <ihmig@mycompany.com>
|
||||
jdagres = jdagres <jdagres@mycompany.com>
|
||||
jiangx = jiangx <jiangx@mycompany.com>
|
||||
kaltenbe = kaltenbe <kaltenbe@mycompany.com>
|
||||
knopp = knopp <knopp@mycompany.com>
|
||||
kortke = kortke <kortke@mycompany.com>
|
||||
kouassi = kouassi <kouassi@mycompany.com>
|
||||
laklii = laklii <laklii@mycompany.com>
|
||||
latif = latif <latif@mycompany.com>
|
||||
libchaber = libchaber <libchaber@mycompany.com>
|
||||
linhuang = linhuang <linhuang@mycompany.com>
|
||||
lukashov = lukashov <lukashov@mycompany.com>
|
||||
maatalla = maatalla <maatalla@mycompany.com>
|
||||
maurel = maurel <maurel@mycompany.com>
|
||||
mayani = mayani <mayani@mycompany.com>
|
||||
merz = merz <merz@mycompany.com>
|
||||
mlaner = mlaner <mlaner@mycompany.com>
|
||||
mosli = mosli <mosli@mycompany.com>
|
||||
navid = navid <navid@mycompany.com>
|
||||
nguyenhn = nguyenhn <nguyenhn@mycompany.com>
|
||||
nguyennd = nguyennd <nguyennd@mycompany.com>
|
||||
nikaeinn = nikaeinn <nikaeinn@mycompany.com>
|
||||
oai_user1 = oai_user1 <oai_user1@mycompany.com>
|
||||
ouni = ouni <ouni@mycompany.com>
|
||||
paranche = paranche <paranche@mycompany.com>
|
||||
pburlot = pburlot <pburlot@mycompany.com>
|
||||
qi = qi <qi@mycompany.com>
|
||||
renwanz = renwanz <renwanz@mycompany.com>
|
||||
roux = roux <roux@mycompany.com>
|
||||
sait = sait <sait@mycompany.com>
|
||||
sorby = sorby <sorby@mycompany.com>
|
||||
steinicke = steinicke <steinicke@mycompany.com>
|
||||
thomas = thomas <thomas@mycompany.com>
|
||||
thomasl = thomasl <thomasl@mycompany.com>
|
||||
tonelli = tonelli <tonelli@mycompany.com>
|
||||
unlu = unlu <unlu@mycompany.com>
|
||||
ustun = ustun <ustun@mycompany.com>
|
||||
villa = villa <villa@mycompany.com>
|
||||
wagner = wagner <wagner@mycompany.com>
|
||||
wangl = wangl <wangl@mycompany.com>
|
||||
wetterwa = wetterwa <wetterwa@mycompany.com>
|
||||
wewior = wewior <wewior@mycompany.com>
|
||||
winckel = winckel <winckel@mycompany.com>
|
||||
xuhl = xuhl <xuhl@mycompany.com>
|
||||
yannan = yannan <yannan@mycompany.com>
|
||||
yilmaz = yilmaz <yilmaz@mycompany.com>
|
||||
zayen = zayen <zayen@mycompany.com>
|
||||
zhou = zhou <zhou@mycompany.com>
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
#The following script checks if the author list changed since the last commits in svn. If it finds difference in author names, then we need to add the author names manually in authors.txt
|
||||
|
||||
wget https://bitbucket.org/atlassian/svn-migration-scripts/downloads/svn-migration-scripts.jar
|
||||
java -jar ./svn-migration-scripts.jar verify
|
||||
java -jar ./svn-migration-scripts.jar authors http://svn.eurecom.fr/openair4G > /tmp/authors.txt
|
||||
diff /tmp/authors.txt ./authors_original_java_output.txt
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
#Script to change author name/email address in git. It throws errors/warnings during the migration
|
||||
#Copied from, https://help.github.com/articles/changing-author-info/
|
||||
|
||||
git filter-branch --env-filter '
|
||||
|
||||
OLD_EMAIL="your-old-email@example.com"
|
||||
CORRECT_NAME="Your Correct Name"
|
||||
CORRECT_EMAIL="your-correct-email@example.com"
|
||||
|
||||
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
|
||||
then
|
||||
export GIT_COMMITTER_NAME="$CORRECT_NAME"
|
||||
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
|
||||
fi
|
||||
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
|
||||
then
|
||||
export GIT_AUTHOR_NAME="$CORRECT_NAME"
|
||||
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
|
||||
fi
|
||||
' --tag-name-filter cat -- --branches --tags
|
||||
|
||||
@@ -277,6 +277,7 @@ int trx_lms_stop(openair0_device *device) {
|
||||
LMS_DestroyStream(lms_device,&rx_stream);
|
||||
LMS_DestroyStream(lms_device,&tx_stream);
|
||||
LMS_Close(lms_device);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*! \brief Set frequencies (TX/RX)
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
\documentclass[a4paper]{book}
|
||||
\usepackage{a4wide}
|
||||
\usepackage{makeidx}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{multicol}
|
||||
\usepackage{float}
|
||||
\usepackage{textcomp}
|
||||
\usepackage{alltt}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amssymb}
|
||||
\ifx\pdfoutput\undefined
|
||||
\usepackage[ps2pdf,
|
||||
pagebackref=true,
|
||||
colorlinks=true,
|
||||
linkcolor=blue
|
||||
]{hyperref}
|
||||
\usepackage{pspicture}
|
||||
\else
|
||||
\usepackage[pdftex,
|
||||
pagebackref=true,
|
||||
colorlinks=true,
|
||||
linkcolor=blue
|
||||
]{hyperref}
|
||||
\fi
|
||||
\usepackage{doxygen}
|
||||
\usepackage{times}
|
||||
\makeindex
|
||||
\setcounter{tocdepth}{1}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
\begin{document}
|
||||
\begin{titlepage}
|
||||
\vspace*{7cm}
|
||||
\begin{center}
|
||||
{\Large openair Specifications }\\
|
||||
Phyiscal, Medium-Access, Radio-link Control, Packet Data Convergence Protocol and Radio Resource Control Layers\\
|
||||
\vspace*{1cm}
|
||||
{\large Generated by Doxygen 1.3.8}\\
|
||||
\vspace*{0.5cm}
|
||||
{\small Sun Oct 31 19:27:37 2004}\\
|
||||
\end{center}
|
||||
\end{titlepage}
|
||||
\clearemptydoublepage
|
||||
\pagenumbering{roman}
|
||||
\tableofcontents
|
||||
\clearemptydoublepage
|
||||
\pagenumbering{arabic}
|
||||
@@ -150,7 +150,6 @@ char channels[128] = "0";
|
||||
int rx_input_level_dBm;
|
||||
int otg_enabled;
|
||||
|
||||
uint8_t exit_missed_slots=1;
|
||||
uint64_t num_missed_slots=0; // counter for the number of missed slots
|
||||
|
||||
|
||||
@@ -235,24 +234,6 @@ unsigned int build_rfdc(int dcoff_i_rxfe, int dcoff_q_rxfe) {
|
||||
}
|
||||
|
||||
|
||||
void signal_handler(int sig) {
|
||||
void *array[10];
|
||||
size_t size;
|
||||
|
||||
if (sig==SIGSEGV) {
|
||||
// get void*'s for all entries on the stack
|
||||
size = backtrace(array, 10);
|
||||
// print out all the frames to stderr
|
||||
fprintf(stderr, "Error: signal %d:\n", sig);
|
||||
backtrace_symbols_fd(array, size, 2);
|
||||
exit(-1);
|
||||
} else {
|
||||
printf("Linux signal %s...\n",strsignal(sig));
|
||||
exit_function(__FILE__, __FUNCTION__, __LINE__,"softmodem starting exit procedure\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void exit_function(const char *file, const char *function, const int line, const char *s) {
|
||||
int ru_id;
|
||||
|
||||
@@ -496,7 +477,8 @@ void init_pdcp(void) {
|
||||
|
||||
pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_W_MBMS_BIT;
|
||||
|
||||
pdcp_module_init(pdcp_initmask);
|
||||
if ( getenv("fs6") != NULL && strncasecmp( getenv("fs6"), "du", 2) == 0 )
|
||||
pdcp_module_init(pdcp_initmask);
|
||||
|
||||
if (NODE_IS_CU(RC.rrc[0]->node_type)) {
|
||||
pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t)proto_agent_send_rlc_data_req);
|
||||
@@ -536,9 +518,6 @@ int main ( int argc, char **argv )
|
||||
logInit();
|
||||
printf("Reading in command-line options\n");
|
||||
get_options ();
|
||||
|
||||
if (is_nos1exec(argv[0]) )
|
||||
set_softmodem_optmask(SOFTMODEM_NOS1_BIT);
|
||||
|
||||
EPC_MODE_ENABLED = !IS_SOFTMODEM_NOS1;
|
||||
|
||||
@@ -569,11 +548,6 @@ int main ( int argc, char **argv )
|
||||
|
||||
MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX);
|
||||
init_opt();
|
||||
|
||||
signal(SIGSEGV, signal_handler);
|
||||
signal(SIGINT, signal_handler);
|
||||
signal(SIGTERM, signal_handler);
|
||||
signal(SIGABRT, signal_handler);
|
||||
check_clock();
|
||||
#ifndef PACKAGE_VERSION
|
||||
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
|
||||
+25
-170
@@ -35,63 +35,7 @@
|
||||
#include "proto_agent.h"
|
||||
#include "executables/softmodem-common.h"
|
||||
|
||||
/* help strings definition for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */
|
||||
#define CONFIG_HLP_RFCFGF "Configuration file for front-end (e.g. LMS7002M)\n"
|
||||
#define CONFIG_HLP_ULMAXE "set the eNodeB max ULSCH erros\n"
|
||||
#define CONFIG_HLP_CALUER "set UE RX calibration\n"
|
||||
#define CONFIG_HLP_CALUERM ""
|
||||
#define CONFIG_HLP_CALUERB ""
|
||||
#define CONFIG_HLP_DBGUEPR "UE run normal prach power ramping, but don't continue random-access\n"
|
||||
#define CONFIG_HLP_CALPRACH "UE run normal prach with maximum power, but don't continue random-access\n"
|
||||
#define CONFIG_HLP_NOL2CN "bypass L2 and upper layers\n"
|
||||
#define CONFIG_HLP_SIML1 "activate RF simulator instead of HW\n"
|
||||
#define CONFIG_HLP_NUMUE "number of UE instances\n"
|
||||
#define CONFIG_HLP_UERXG "set UE RX gain\n"
|
||||
#define CONFIG_HLP_UERXGOFF "external UE amplifier offset\n"
|
||||
#define CONFIG_HLP_UETXG "set UE TX gain\n"
|
||||
#define CONFIG_HLP_UENANTR "set UE number of rx antennas\n"
|
||||
#define CONFIG_HLP_UENANTT "set UE number of tx antennas\n"
|
||||
#define CONFIG_HLP_UESCAN "set UE to scan around carrier\n"
|
||||
#define CONFIG_HLP_DUMPFRAME "dump UE received frame to rxsig_frame0.dat and exit\n"
|
||||
#define CONFIG_HLP_DLSHIFT "dynamic shift for LLR compuation for TM3/4 (default 0)\n"
|
||||
#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n"
|
||||
#define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n"
|
||||
#define CONFIG_HLP_DMAMAP "sets flag for improved EXMIMO UE performance\n"
|
||||
#define CONFIG_HLP_EXTS "tells hardware to use an external timing reference\n"
|
||||
#define CONFIG_HLP_DMRSSYNC "tells RU to insert DMRS in subframe 1 slot 0"
|
||||
#define CONFIG_HLP_CLK "tells hardware to use a clock reference (0:internal, 1:external, 2:gpsdo)\n"
|
||||
#define CONFIG_HLP_USIM "use XOR autentication algo in case of test usim mode\n"
|
||||
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
|
||||
#define CONFIG_HLP_TADV "Set timing_advance\n"
|
||||
#define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n"
|
||||
#define CONFIG_HLP_CHOFF "Channel id offset\n"
|
||||
#define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n"
|
||||
#define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"
|
||||
#define CONFIG_HLP_ITTIL "Generate ITTI analyzser logs (similar to wireshark logs but with more details)\n"
|
||||
#define CONFIG_HLP_DLMCS "Set the maximum downlink MCS\n"
|
||||
#define CONFIG_HLP_STMON "Enable processing timing measurement of lte softmodem on per subframe basis \n"
|
||||
#define CONFIG_HLP_PRB "Set the PRB, valid values: 6, 25, 50, 100 \n"
|
||||
#define CONFIG_HLP_EMULIFACE "Set the interface name for the multicast transport for emulation mode (e.g. eth0, lo, etc.) \n"
|
||||
//#define CONFIG_HLP_NUMUES "Set the number of UEs for the emulation"
|
||||
#define CONFIG_HLP_MSLOTS "Skip the missed slots/subframes \n"
|
||||
#define CONFIG_HLP_ULMCS "Set the maximum uplink MCS\n"
|
||||
#define CONFIG_HLP_TDD "Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n"
|
||||
#define CONFIG_HLP_UE "Set the lte softmodem as a UE\n"
|
||||
#define CONFIG_HLP_TQFS "Apply three-quarter of sampling frequency, 23.04 Msps to reduce the data rate on USB/PCIe transfers (only valid for 20 MHz)\n"
|
||||
#define CONFIG_HLP_TPORT "tracer port\n"
|
||||
#define CONFIG_HLP_NOTWAIT "don't wait for tracer, start immediately\n"
|
||||
#define CONFIG_HLP_TNOFORK "to ease debugging with gdb\n"
|
||||
|
||||
#define CONFIG_HLP_NUMEROLOGY "adding numerology for 5G\n"
|
||||
#define CONFIG_HLP_EMULATE_RF "Emulated RF enabled(disable by defult)\n"
|
||||
#define CONFIG_HLP_PARALLEL_CMD "three config for level of parallelism 'PARALLEL_SINGLE_THREAD', 'PARALLEL_RU_L1_SPLIT', or 'PARALLEL_RU_L1_TRX_SPLIT'\n"
|
||||
#define CONFIG_HLP_WORKER_CMD "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n"
|
||||
#define CONFIG_HLP_NOS1 "Disable s1 interface\n"
|
||||
#define CONFIG_HLP_RFSIM "Run in rf simulator mode (also known as basic simulator)\n"
|
||||
#define CONFIG_HLP_NOKRNMOD "(noS1 only): Use tun instead of namesh module \n"
|
||||
#define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n"
|
||||
|
||||
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
|
||||
|
||||
/***************************************************************************************************************************************/
|
||||
/* command line options definitions, CMDLINE_XXXX_DESC macros are used to initialize paramdef_t arrays which are then used as argument
|
||||
@@ -121,6 +65,31 @@
|
||||
#define CMDLINE_MEMLOOP_IDX 6
|
||||
#define CMDLINE_DUMPMEMORY_IDX 7
|
||||
/*------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* help strings definition for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */
|
||||
|
||||
|
||||
#define CONFIG_HLP_SIML1 "activate RF simulator instead of HW\n"
|
||||
#define CONFIG_HLP_NUMUE "number of UE instances\n"
|
||||
#define CONFIG_HLP_UERXG "set UE RX gain\n"
|
||||
#define CONFIG_HLP_UERXGOFF "external UE amplifier offset\n"
|
||||
#define CONFIG_HLP_UETXG "set UE TX gain\n"
|
||||
#define CONFIG_HLP_UENANTR "set UE number of rx antennas\n"
|
||||
#define CONFIG_HLP_UENANTT "set UE number of tx antennas\n"
|
||||
#define CONFIG_HLP_UESCAN "set UE to scan around carrier\n"
|
||||
#define CONFIG_HLP_EMULIFACE "Set the interface name for the multicast transport for emulation mode (e.g. eth0, lo, etc.) \n"
|
||||
#define CONFIG_HLP_PRB "Set the PRB, valid values: 6, 25, 50, 100 \n"
|
||||
#define CONFIG_HLP_DLSHIFT "dynamic shift for LLR compuation for TM3/4 (default 0)\n"
|
||||
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
|
||||
#define CONFIG_HLP_DMAMAP "sets flag for improved EXMIMO UE performance\n"
|
||||
#define CONFIG_HLP_CLK "tells hardware to use a clock reference (0:internal, 1:external, 2:gpsdo)\n"
|
||||
#define CONFIG_HLP_TDD "Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n"
|
||||
#define CONFIG_HLP_TADV "Set timing_advance\n"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
@@ -166,119 +135,6 @@
|
||||
|
||||
#define DEFAULT_DLF 2680000000
|
||||
|
||||
/*-----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* command line parameters common to eNodeB and UE */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*-----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define RF_CONFIG_FILE softmodem_params.rf_config_file
|
||||
#define TP_CONFIG softmodem_params.threadPoolConfig
|
||||
#define PHY_TEST softmodem_params.phy_test
|
||||
#define WAIT_FOR_SYNC softmodem_params.wait_for_sync
|
||||
#define SINGLE_THREAD_FLAG softmodem_params.single_thread_flag
|
||||
#define CHAIN_OFFSET softmodem_params.chain_offset
|
||||
#define NUMEROLOGY softmodem_params.numerology
|
||||
#define EMULATE_RF softmodem_params.emulate_rf
|
||||
#define CLOCK_SOURCE softmodem_params.clock_source
|
||||
#define TIMING_SOURCE softmodem_params.timing_source
|
||||
#define SEND_DMRSSYNC softmodem_params.send_dmrs_sync
|
||||
#define USIM_TEST softmodem_params.usim_test
|
||||
#define CMDLINE_PARAMS_DESC { \
|
||||
{"rf-config-file", CONFIG_HLP_RFCFGF, 0, strptr:(char **)&RF_CONFIG_FILE, defstrval:NULL, TYPE_STRING, sizeof(RF_CONFIG_FILE)},\
|
||||
{"ulsch-max-errors", CONFIG_HLP_ULMAXE, 0, uptr:&ULSCH_max_consecutive_errors, defuintval:0, TYPE_UINT, 0}, \
|
||||
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&PHY_TEST, defintval:0, TYPE_INT, 0}, \
|
||||
{"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&USIM_TEST, defintval:0, TYPE_UINT8, 0}, \
|
||||
{"clock", CONFIG_HLP_CLK, 0, uptr:&CLOCK_SOURCE, defintval:0, TYPE_UINT, 0}, \
|
||||
{"wait-for-sync", NULL, PARAMFLAG_BOOL, iptr:&WAIT_FOR_SYNC, defintval:0, TYPE_INT, 0}, \
|
||||
{"single-thread-enable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&SINGLE_THREAD_FLAG, defintval:0, TYPE_INT, 0}, \
|
||||
{"C" , CONFIG_HLP_DLF, 0, uptr:&(downlink_frequency[0][0]), defuintval:2680000000, TYPE_UINT, 0}, \
|
||||
{"a" , CONFIG_HLP_CHOFF, 0, iptr:&CHAIN_OFFSET, defintval:0, TYPE_INT, 0}, \
|
||||
{"d" , CONFIG_HLP_SOFTS, PARAMFLAG_BOOL, uptr:(uint32_t *)&do_forms, defintval:0, TYPE_INT8, 0}, \
|
||||
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
|
||||
{"S" , CONFIG_HLP_MSLOTS, PARAMFLAG_BOOL, u8ptr:&exit_missed_slots, defintval:1, TYPE_UINT8, 0}, \
|
||||
{"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&NUMEROLOGY, defintval:0, TYPE_INT, 0}, \
|
||||
{"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&EMULATE_RF, defintval:0, TYPE_INT, 0}, \
|
||||
{"parallel-config", CONFIG_HLP_PARALLEL_CMD, 0, strptr:(char **)¶llel_config, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
{"worker-config", CONFIG_HLP_WORKER_CMD, 0, strptr:(char **)&worker_config, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
{"noS1", CONFIG_HLP_NOS1, PARAMFLAG_BOOL, uptr:&noS1, defintval:0, TYPE_INT, 0}, \
|
||||
{"rfsim", CONFIG_HLP_RFSIM, PARAMFLAG_BOOL, uptr:&rfsim, defintval:0, TYPE_INT, 0}, \
|
||||
{"basicsim", CONFIG_HLP_RFSIM, PARAMFLAG_BOOL, uptr:&basicsim, defintval:0, TYPE_INT, 0}, \
|
||||
{"nokrnmod", CONFIG_HLP_NOKRNMOD, PARAMFLAG_BOOL, uptr:&nokrnmod, defintval:0, TYPE_INT, 0}, \
|
||||
{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, uptr:&nonbiot, defuintval:0, TYPE_INT, 0}, \
|
||||
}
|
||||
|
||||
#define CONFIG_HLP_FLOG "Enable online log \n"
|
||||
#define CONFIG_HLP_LOGL "Set the global log level, valid options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))\n"
|
||||
#define CONFIG_HLP_LOGV "Set the global log verbosity \n"
|
||||
#define CONFIG_HLP_TELN "Start embedded telnet server \n"
|
||||
#define CONFIG_HLP_MSC "Enable the MSC tracing utility \n"
|
||||
/*----------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* command line parameters for LOG utility */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define START_MSC softmodem_params.start_msc
|
||||
#define CMDLINE_LOGPARAMS_DESC { \
|
||||
{"R" , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \
|
||||
{"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \
|
||||
{"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \
|
||||
{"msc", CONFIG_HLP_MSC, PARAMFLAG_BOOL, uptr:&START_MSC, defintval:0, TYPE_UINT, 0}, \
|
||||
{"log-mem", NULL, 0, strptr:(char **)&logmem_filename, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
}
|
||||
|
||||
#define CMDLINE_ONLINELOG_IDX 0
|
||||
#define CMDLINE_GLOGLEVEL_IDX 1
|
||||
#define CMDLINE_GLOGVERBO_IDX 2
|
||||
#define CMDLINE_STARTTELN_IDX 3
|
||||
|
||||
/* check function for global log level */
|
||||
#define CMDLINE_LOGPARAMS_CHECK_DESC { \
|
||||
{ .s5= {NULL} } , \
|
||||
{ .s2= {config_check_intrange, {0,4}}}, \
|
||||
{ .s5= {NULL} } , \
|
||||
{ .s5= {NULL} } , \
|
||||
{ .s5= {NULL} } , \
|
||||
}
|
||||
|
||||
/***************************************************************************************************************************************/
|
||||
|
||||
#define SOFTMODEM_NOS1_BIT (1<<0)
|
||||
#define SOFTMODEM_NOKRNMOD_BIT (1<<1)
|
||||
#define SOFTMODEM_NONBIOT_BIT (1<<2)
|
||||
#define SOFTMODEM_RFSIM_BIT (1<<10)
|
||||
#define SOFTMODEM_BASICSIM_BIT (1<<11)
|
||||
#define SOFTMODEM_SIML1_BIT (1<<12)
|
||||
#define SOFTMODEM_DOFORMS_BIT (1<<15)
|
||||
typedef struct {
|
||||
uint64_t optmask;
|
||||
THREAD_STRUCT thread_struct;
|
||||
char rf_config_file[1024];
|
||||
char threadPoolConfig[1024];
|
||||
int phy_test;
|
||||
uint8_t usim_test;
|
||||
int emulate_rf;
|
||||
int wait_for_sync; //eNodeB only
|
||||
int single_thread_flag; //eNodeB only
|
||||
int chain_offset;
|
||||
int numerology;
|
||||
unsigned int start_msc;
|
||||
uint32_t clock_source;
|
||||
uint32_t timing_source;
|
||||
int hw_timing_advance;
|
||||
uint32_t send_dmrs_sync;
|
||||
} softmodem_params_t;
|
||||
|
||||
|
||||
#define IS_SOFTMODEM_NOS1 ( get_softmodem_optmask() & SOFTMODEM_NOS1_BIT)
|
||||
#define IS_SOFTMODEM_NOKRNMOD ( get_softmodem_optmask() & SOFTMODEM_NOKRNMOD_BIT)
|
||||
#define IS_SOFTMODEM_NONBIOT ( get_softmodem_optmask() & SOFTMODEM_NONBIOT_BIT)
|
||||
#define IS_SOFTMODEM_RFSIM ( get_softmodem_optmask() & SOFTMODEM_RFSIM_BIT)
|
||||
#define IS_SOFTMODEM_BASICSIM ( get_softmodem_optmask() & SOFTMODEM_BASICSIM_BIT)
|
||||
#define IS_SOFTMODEM_SIML1 ( get_softmodem_optmask() & SOFTMODEM_SIML1_BIT)
|
||||
#define IS_SOFTMODEM_DOFORMS ( get_softmodem_optmask() & SOFTMODEM_DOFORMS_BIT)
|
||||
extern uint64_t get_softmodem_optmask(void);
|
||||
extern uint64_t set_softmodem_optmask(uint64_t bitmask);
|
||||
extern void get_common_options(void);
|
||||
extern softmodem_params_t *get_softmodem_params(void);
|
||||
extern unsigned int is_nos1exec(char *exepath) ;
|
||||
uint64_t get_pdcp_optmask(void);
|
||||
extern pthread_cond_t sync_cond;
|
||||
extern pthread_mutex_t sync_mutex;
|
||||
@@ -288,7 +144,6 @@ extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
||||
extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
||||
|
||||
extern int rx_input_level_dBm;
|
||||
extern uint8_t exit_missed_slots;
|
||||
extern uint64_t num_missed_slots; // counter for the number of missed slots
|
||||
|
||||
extern int oaisim_flag;
|
||||
|
||||
@@ -169,7 +169,6 @@ int rx_input_level_dBm;
|
||||
|
||||
static LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
|
||||
|
||||
uint8_t exit_missed_slots=1;
|
||||
uint64_t num_missed_slots=0; // counter for the number of missed slots
|
||||
|
||||
// prototypes from function implemented in lte-ue.c, probably should be elsewhere in a include file.
|
||||
@@ -264,26 +263,6 @@ unsigned int build_rfdc(int dcoff_i_rxfe, int dcoff_q_rxfe) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
void signal_handler(int sig) {
|
||||
void *array[10];
|
||||
size_t size;
|
||||
|
||||
if (sig==SIGSEGV) {
|
||||
// get void*'s for all entries on the stack
|
||||
size = backtrace(array, 10);
|
||||
// print out all the frames to stderr
|
||||
fprintf(stderr, "Error: signal %d:\n", sig);
|
||||
backtrace_symbols_fd(array, size, 2);
|
||||
exit(-1);
|
||||
} else {
|
||||
char msg[64];
|
||||
sprintf(msg,"Received linux signal %s...\n",strsignal(sig));
|
||||
exit_function(__FILE__, __FUNCTION__, __LINE__,msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void exit_function(const char *file, const char *function, const int line, const char *s) {
|
||||
int CC_id;
|
||||
logClean();
|
||||
@@ -601,9 +580,6 @@ int main( int argc, char **argv ) {
|
||||
|
||||
get_options ();
|
||||
|
||||
if (is_nos1exec(argv[0]) )
|
||||
set_softmodem_optmask(SOFTMODEM_NOS1_BIT);
|
||||
|
||||
EPC_MODE_ENABLED = !IS_SOFTMODEM_NOS1;
|
||||
printf("Running with %d UE instances\n",NB_UE_INST);
|
||||
|
||||
@@ -651,10 +627,7 @@ int main( int argc, char **argv ) {
|
||||
printf ("PDCP PC5S socket\n");
|
||||
pdcp_pc5_socket_init();
|
||||
// to make a graceful exit when ctrl-c is pressed
|
||||
signal(SIGSEGV, signal_handler);
|
||||
signal(SIGINT, signal_handler);
|
||||
signal(SIGTERM, signal_handler);
|
||||
signal(SIGABRT, signal_handler);
|
||||
set_softmodem_sighandler();
|
||||
check_clock();
|
||||
#ifndef PACKAGE_VERSION
|
||||
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
|
||||
@@ -1,575 +0,0 @@
|
||||
[1mdiff --git a/cmake_targets/build_oai b/cmake_targets/build_oai[m
|
||||
[1mindex 227e8d8..6cd7151 100755[m
|
||||
[1m--- a/cmake_targets/build_oai[m
|
||||
[1m+++ b/cmake_targets/build_oai[m
|
||||
[36m@@ -661,7 +661,8 @@[m [mfunction main() {[m
|
||||
if [ "$SIMUS_PHY" = "1" ] ; then[m
|
||||
echo_info "Compiling physical unitary tests simulators"[m
|
||||
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim[m
|
||||
[31m- simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim"[m
|
||||
[32m+[m[32m #simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim"[m
|
||||
[32m+[m[32m simlist="nr_ulsim nr_dlsim"[m
|
||||
for f in $simlist ; do[m
|
||||
compilations \[m
|
||||
phy_simulators $f \[m
|
||||
[1mdiff --git a/executables/nr-ru.c b/executables/nr-ru.c[m
|
||||
[1mindex b96fc9e..4ab9fce 100644[m
|
||||
[1m--- a/executables/nr-ru.c[m
|
||||
[1m+++ b/executables/nr-ru.c[m
|
||||
[36m@@ -2330,7 +2330,7 @@[m [mvoid RCconfig_RU(void)[m
|
||||
RC.ru[j]->nb_tx = *(RUParamList.paramarray[j][RU_NB_TX_IDX].uptr);[m
|
||||
RC.ru[j]->nb_rx = *(RUParamList.paramarray[j][RU_NB_RX_IDX].uptr);[m
|
||||
RC.ru[j]->att_tx = *(RUParamList.paramarray[j][RU_ATT_TX_IDX].uptr);[m
|
||||
[31m- RC.ru[j]->att_rx = *(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);[m
|
||||
[32m+[m[32m RC.ru[j]->att_rx = 4;//*(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);[m
|
||||
}// j=0..num_rus[m
|
||||
} else {[m
|
||||
RC.nb_RU = 0;[m
|
||||
[1mdiff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c[m
|
||||
[1mindex fff1245..66d6e09 100644[m
|
||||
[1m--- a/openair1/PHY/INIT/nr_init.c[m
|
||||
[1m+++ b/openair1/PHY/INIT/nr_init.c[m
|
||||
[36m@@ -403,12 +403,47 @@[m [mvoid nr_phy_config_request_sim(PHY_VARS_gNB *gNB,[m
|
||||
gNB->mac_enabled = 1;[m
|
||||
fp->dl_CarrierFreq = 3500000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value);[m
|
||||
fp->ul_CarrierFreq = 3500000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);[m
|
||||
[31m- fp->threequarter_fs= 0;[m
|
||||
[32m+[m[32m fp->threequarter_fs= 1;[m
|
||||
nr_init_frame_parms(gNB_config, fp);[m
|
||||
gNB->configured = 1;[m
|
||||
LOG_I(PHY,"gNB configured\n");[m
|
||||
}[m
|
||||
[m
|
||||
[32m+[m[32mvoid nr_phy_config_request_sim_ulsim(PHY_VARS_gNB *gNB,[m
|
||||
[32m+[m[32m int N_RB_DL,[m
|
||||
[32m+[m[32m int N_RB_UL,[m
|
||||
[32m+[m[32m int mu,[m
|
||||
[32m+[m[32m int Nid_cell,[m
|
||||
[32m+[m[32m uint64_t position_in_burst,[m
|
||||
[32m+[m[32m uint8_t threequarter_fs)[m
|
||||
[32m+[m[32m{[m
|
||||
[32m+[m[32m NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;[m
|
||||
[32m+[m[32m nfapi_nr_config_request_t *gNB_config = &gNB->gNB_config;[m
|
||||
[32m+[m[32m //overwrite for new NR parameters[m
|
||||
[32m+[m[32m gNB_config->nfapi_config.rf_bands.rf_band[0] = 78;[m
|
||||
[32m+[m[32m gNB_config->nfapi_config.nrarfcn.value = 620000;[m
|
||||
[32m+[m[32m gNB_config->subframe_config.numerology_index_mu.value = mu;[m
|
||||
[32m+[m[32m gNB_config->subframe_config.duplex_mode.value = TDD;[m
|
||||
[32m+[m[32m gNB_config->rf_config.dl_carrier_bandwidth.value = N_RB_DL;[m
|
||||
[32m+[m[32m gNB_config->rf_config.ul_carrier_bandwidth.value = N_RB_UL;[m
|
||||
[32m+[m[32m gNB_config->sch_config.half_frame_index.value = 0;[m
|
||||
[32m+[m[32m gNB_config->sch_config.ssb_subcarrier_offset.value = 0;[m
|
||||
[32m+[m[32m gNB_config->sch_config.n_ssb_crb.value = (N_RB_DL-20);[m
|
||||
[32m+[m[32m gNB_config->sch_config.ssb_subcarrier_offset.value = 0;[m
|
||||
[32m+[m[32m gNB_config->sch_config.physical_cell_id.value = Nid_cell;[m
|
||||
[32m+[m[32m gNB_config->sch_config.ssb_scg_position_in_burst.value = position_in_burst;[m
|
||||
[32m+[m[32m gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED;[m
|
||||
[32m+[m
|
||||
[32m+[m[32m gNB->mac_enabled = 1;[m
|
||||
[32m+[m[32m fp->dl_CarrierFreq = 3500000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value);[m
|
||||
[32m+[m[32m fp->ul_CarrierFreq = 3500000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);[m
|
||||
[32m+[m[32m fp->threequarter_fs= threequarter_fs;[m
|
||||
[32m+[m[32m nr_init_frame_parms(gNB_config, fp);[m
|
||||
[32m+[m[32m nr_dump_frame_parms(fp);[m
|
||||
[32m+[m[32m gNB->configured = 1;[m
|
||||
[32m+[m[32m LOG_I(PHY,"gNB configured\n");[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[m
|
||||
void nr_phy_config_request(NR_PHY_Config_t *phy_config)[m
|
||||
{[m
|
||||
[1mdiff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h[m
|
||||
[1mindex 7e0500b..4209413 100644[m
|
||||
[1m--- a/openair1/PHY/INIT/phy_init.h[m
|
||||
[1m+++ b/openair1/PHY/INIT/phy_init.h[m
|
||||
[36m@@ -387,6 +387,7 @@[m [mvoid nr_dump_frame_parms(NR_DL_FRAME_PARMS *frame_parms);[m
|
||||
int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char abstraction_flag);[m
|
||||
void nr_phy_config_request(NR_PHY_Config_t *gNB);[m
|
||||
void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,int Nid_cell,uint64_t position_in_burst);[m
|
||||
[32m+[m[32mvoid nr_phy_config_request_sim_ulsim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,int Nid_cell,uint64_t position_in_burst, uint8_t threequarter_fs);[m
|
||||
void phy_free_nr_gNB(PHY_VARS_gNB *gNB);[m
|
||||
int l1_north_init_gNB(void);[m
|
||||
void init_nr_transport(PHY_VARS_gNB *gNB);[m
|
||||
[1mdiff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c[m
|
||||
[1mindex 0656091..9e5fcb1 100644[m
|
||||
[1m--- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c[m
|
||||
[1m+++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c[m
|
||||
[36m@@ -140,7 +140,7 @@[m [mint nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,[m
|
||||
ul_ch,[m
|
||||
8);[m
|
||||
pil+=2;[m
|
||||
[31m- re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
[32m+[m[32m re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];[m
|
||||
//for (int i= 0; i<8; i++)[m
|
||||
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));[m
|
||||
[36m@@ -156,7 +156,7 @@[m [mint nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,[m
|
||||
ul_ch,[m
|
||||
8);[m
|
||||
pil+=2;[m
|
||||
[31m- re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
[32m+[m[32m re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];[m
|
||||
//printf("ul_ch addr %p\n",ul_ch);[m
|
||||
[m
|
||||
[36m@@ -175,7 +175,7 @@[m [mint nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,[m
|
||||
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));[m
|
||||
[m
|
||||
pil+=2;[m
|
||||
[31m- re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
[32m+[m[32m re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];[m
|
||||
ul_ch+=8;[m
|
||||
[m
|
||||
[36m@@ -193,7 +193,7 @@[m [mint nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,[m
|
||||
8);[m
|
||||
[m
|
||||
pil+=2;[m
|
||||
[31m- re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
[32m+[m[32m re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];[m
|
||||
[m
|
||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);[m
|
||||
[36m@@ -206,7 +206,7 @@[m [mint nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,[m
|
||||
ul_ch,[m
|
||||
8);[m
|
||||
pil+=2;[m
|
||||
[31m- re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
[32m+[m[32m re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];[m
|
||||
ul_ch+=8;[m
|
||||
[m
|
||||
[36m@@ -227,7 +227,7 @@[m [mint nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,[m
|
||||
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));[m
|
||||
[m
|
||||
pil+=2;[m
|
||||
[31m- re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
[32m+[m[32m re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];[m
|
||||
[m
|
||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);[m
|
||||
[36m@@ -242,7 +242,7 @@[m [mint nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,[m
|
||||
8);[m
|
||||
[m
|
||||
pil+=2;[m
|
||||
[31m- re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
[32m+[m[32m re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);[m
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];[m
|
||||
ul_ch+=8;[m
|
||||
[m
|
||||
[1mdiff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c[m
|
||||
[1mindex 2bc623a..e78842d 100644[m
|
||||
[1m--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c[m
|
||||
[1m+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c[m
|
||||
[36m@@ -54,5 +54,8 @@[m [mvoid nr_ulsch_unscrambling(int16_t* llr,[m
|
||||
}[m
|
||||
if (((s>>(i&0x1f))&1)==1)[m
|
||||
llr[i] = -llr[i];[m
|
||||
[32m+[m
|
||||
[32m+[m[32m //if (i<10)[m
|
||||
[32m+[m[32m //printf("llr[%d] = %d\n", i, llr[i]);[m
|
||||
}[m
|
||||
}[m
|
||||
[1mdiff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c[m
|
||||
[1mindex 19ca123..68a54b3 100644[m
|
||||
[1m--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c[m
|
||||
[1m+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c[m
|
||||
[36m@@ -346,7 +346,7 @@[m [muint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,[m
|
||||
[m
|
||||
G = nr_get_G(nb_rb, number_symbols, nb_re_dmrs, length_dmrs, Qm, n_layers);[m
|
||||
[m
|
||||
[31m- LOG_D(PHY,"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d\n",harq_pid,A,G, mcs, n_layers, nb_symb_sch,nb_rb);[m
|
||||
[32m+[m[32m LOG_I(PHY,"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d\n",harq_pid,A,G, mcs, n_layers, nb_symb_sch,nb_rb);[m
|
||||
[m
|
||||
if (harq_process->round == 0) {[m
|
||||
[m
|
||||
[1mdiff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c[m
|
||||
[1mindex e1b3c5c..0369e73 100644[m
|
||||
[1m--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c[m
|
||||
[1m+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c[m
|
||||
[36m@@ -365,9 +365,9 @@[m [mvoid nr_ulsch_channel_level(int **ul_ch_estimates_ext,[m
|
||||
ul_ch128=(__m128i *)&ul_ch_estimates_ext[(aatx<<1)+aarx][symbol*nb_rb*12];[m
|
||||
[m
|
||||
for (rb = 0; rb < nb_rb; rb++) {[m
|
||||
[31m- avg128U = _mm_add_epi32(avg128U, _mm_srai_epi32(_mm_madd_epi16(ul_ch128[0], ul_ch128[0]), x));[m
|
||||
[31m- avg128U = _mm_add_epi32(avg128U, _mm_srai_epi32(_mm_madd_epi16(ul_ch128[1], ul_ch128[1]), x));[m
|
||||
[31m- avg128U = _mm_add_epi32(avg128U, _mm_srai_epi32(_mm_madd_epi16(ul_ch128[2], ul_ch128[2]), x));[m
|
||||
[32m+[m[32m avg128U = _mm_add_epi32(avg128U, _mm_srai_epi16(_mm_madd_epi16(ul_ch128[0], ul_ch128[0]), x));[m
|
||||
[32m+[m[32m avg128U = _mm_add_epi32(avg128U, _mm_srai_epi16(_mm_madd_epi16(ul_ch128[1], ul_ch128[1]), x));[m
|
||||
[32m+[m[32m avg128U = _mm_add_epi32(avg128U, _mm_srai_epi16(_mm_madd_epi16(ul_ch128[2], ul_ch128[2]), x));[m
|
||||
ul_ch128+=3;[m
|
||||
}[m
|
||||
[m
|
||||
[36m@@ -977,6 +977,7 @@[m [mvoid nr_rx_pusch(PHY_VARS_gNB *gNB,[m
|
||||
uint32_t nb_re_pusch, bwp_start_subcarrier;[m
|
||||
int avgs;[m
|
||||
int avg[4];[m
|
||||
[32m+[m[32m char filename[40];[m
|
||||
[m
|
||||
pilots = 0;[m
|
||||
first_symbol_flag = 0;[m
|
||||
[36m@@ -1062,6 +1063,16 @@[m [mvoid nr_rx_pusch(PHY_VARS_gNB *gNB,[m
|
||||
rel15_ul->number_rbs,[m
|
||||
gNB->pusch_vars[UE_id]->log2_maxh);[m
|
||||
[m
|
||||
[32m+[m[32m if (symbol == 3){[m
|
||||
[32m+[m[32m printf("log2_maxh = %d\n", gNB->pusch_vars[UE_id]->log2_maxh);[m
|
||||
[32m+[m[32m sprintf(filename,"rxdataF_gnb_ext.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdataF_gnb_v",&gNB->pusch_vars[UE_id]->rxdataF_ext[0][symbol*NR_NB_SC_PER_RB*rel15_ul->number_rbs],NR_NB_SC_PER_RB*rel15_ul->number_rbs, 1, 1);[m
|
||||
[32m+[m[32m sprintf(filename,"rxdataF_comp_gnb.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdataF_comp_gnb_v",&gNB->pusch_vars[UE_id]->rxdataF_comp[0][symbol*NR_NB_SC_PER_RB*rel15_ul->number_rbs],NR_NB_SC_PER_RB*rel15_ul->number_rbs, 1, 1);[m
|
||||
[32m+[m[32m sprintf(filename,"ul_ch_est_ext_gnb.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"ul_ch_est_ext_gnb_v",&gNB->pusch_vars[UE_id]->ul_ch_estimates_ext[0][symbol*NR_NB_SC_PER_RB*rel15_ul->number_rbs], NR_NB_SC_PER_RB*rel15_ul->number_rbs, 1, 1);[m
|
||||
[32m+[m[32m }[m
|
||||
[32m+[m
|
||||
#ifdef NR_SC_FDMA[m
|
||||
nr_idft(&((uint32_t*)gNB->pusch_vars[UE_id]->rxdataF_ext[0])[symbol * rel15_ul->number_rbs * NR_NB_SC_PER_RB], nb_re_pusch);[m
|
||||
#endif[m
|
||||
[1mdiff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c[m
|
||||
[1mindex 79b5c8d..c96a9a6 100644[m
|
||||
[1m--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c[m
|
||||
[1m+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c[m
|
||||
[36m@@ -155,6 +155,7 @@[m [mint nr_rx_pdsch(PHY_VARS_NR_UE *ue,[m
|
||||
uint16_t n_tx=1, n_rx=1;[m
|
||||
int32_t median[16];[m
|
||||
uint32_t len;[m
|
||||
[32m+[m[32m char filename[40];[m
|
||||
[m
|
||||
switch (type) {[m
|
||||
case SI_PDSCH:[m
|
||||
[36m@@ -592,6 +593,17 @@[m [mint nr_rx_pdsch(PHY_VARS_NR_UE *ue,[m
|
||||
[m
|
||||
}[m
|
||||
[m
|
||||
[32m+[m[32m if (symbol == 3){[m
|
||||
[32m+[m[32m printf("log2_maxh = %d\n", pdsch_vars[eNB_id]->log2_maxh);[m
|
||||
[32m+[m[32m sprintf(filename,"rxdataF_ue_ext.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdataF_ue_ext_v",&pdsch_vars[eNB_id]->rxdataF_ext[0][symbol*NR_NB_SC_PER_RB*nb_rb],NR_NB_SC_PER_RB*nb_rb, 1, 1);[m
|
||||
[32m+[m[32m sprintf(filename,"rxdataF_comp_ue.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdataF_comp_ue_v",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*NR_NB_SC_PER_RB*nb_rb],NR_NB_SC_PER_RB*nb_rb, 1, 1);[m
|
||||
[32m+[m[32m sprintf(filename,"dl_ch_est_ext_ue.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"dl_ch_est_ext_ue",&pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][symbol*NR_NB_SC_PER_RB*nb_rb], NR_NB_SC_PER_RB*nb_rb, 1, 1);[m
|
||||
[32m+[m[32m }[m
|
||||
[32m+[m
|
||||
[32m+[m
|
||||
#if UE_TIMING_TRACE[m
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[nr_tti_rx]][slot]);[m
|
||||
#if DISABLE_LOG_X[m
|
||||
[36m@@ -636,6 +648,15 @@[m [mint nr_rx_pdsch(PHY_VARS_NR_UE *ue,[m
|
||||
dl_ch_mag_ptr = pdsch_vars[eNB_id_i]->dl_ch_mag0;[m
|
||||
//i_mod should have been passed as a parameter[m
|
||||
}[m
|
||||
[32m+[m
|
||||
[32m+[m
|
||||
[32m+[m[32m if (symbol == 3){[m
|
||||
[32m+[m[32m printf("log2_maxh = %d\n", pdsch_vars[eNB_id]->log2_maxh);[m
|
||||
[32m+[m[32m sprintf(filename,"rxdataF_comp_ue.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdataF_comp_ue_v",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*NR_NB_SC_PER_RB*nb_rb],NR_NB_SC_PER_RB*nb_rb, 1, 1);[m
|
||||
[32m+[m[32m sprintf(filename,"dl_ch_est_ext_ue.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"dl_ch_est_ext_ue",&pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][symbol*NR_NB_SC_PER_RB*nb_rb], NR_NB_SC_PER_RB*nb_rb, 1, 1);[m
|
||||
[32m+[m[32m }[m
|
||||
[m
|
||||
#if UE_TIMING_TRACE[m
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[nr_tti_rx]][slot]);[m
|
||||
[1mdiff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c[m
|
||||
[1mindex 3ac808f..9ab539a 100644[m
|
||||
[1m--- a/openair1/SCHED_NR/nr_ru_procedures.c[m
|
||||
[1m+++ b/openair1/SCHED_NR/nr_ru_procedures.c[m
|
||||
[36m@@ -395,6 +395,7 @@[m [mvoid nr_fep_full(RU_t *ru, int slot) {[m
|
||||
RU_proc_t *proc = &ru->proc;[m
|
||||
int l, aa;[m
|
||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;[m
|
||||
[32m+[m[32m char filename[40];[m
|
||||
[m
|
||||
// if ((fp->frame_type == TDD) && [m
|
||||
// (subframe_select(fp,proc->tti_rx) != SF_UL)) return;[m
|
||||
[36m@@ -405,6 +406,9 @@[m [mvoid nr_fep_full(RU_t *ru, int slot) {[m
|
||||
// remove_7_5_kHz(ru,proc->tti_rx<<1);[m
|
||||
// remove_7_5_kHz(ru,1+(proc->tti_rx<<1));[m
|
||||
[m
|
||||
[32m+[m[32m //sprintf(filename,"rxdata_gnb.m");[m
|
||||
[32m+[m[32m //LOG_M(filename,"rxdata_gnb_v",&ru->common.rxdata[0][proc->tti_rx*fp->samples_per_slot], 2*fp->samples_per_slot, 1, 0);[m
|
||||
[32m+[m
|
||||
for (l = 0; l < fp->symbols_per_slot; l++) {[m
|
||||
for (aa = 0; aa < fp->nb_antennas_rx; aa++) {[m
|
||||
nr_slot_fep_ul(fp,[m
|
||||
[1mdiff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c[m
|
||||
[1mindex ccf5343..bbd0c65 100644[m
|
||||
[1m--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c[m
|
||||
[1m+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c[m
|
||||
[36m@@ -4143,6 +4143,8 @@[m [mint phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,[m
|
||||
uint8_t ssb_periodicity = 10;// ue->ssb_periodicity; // initialized to 5ms in nr_init_ue for scenarios where UE is not configured (otherwise acquired by cell configuration from gNB or LTE)[m
|
||||
uint8_t dci_cnt = 0;[m
|
||||
fapi_nr_pbch_config_t *pbch_config = &ue->nrUE_config.pbch_config;[m
|
||||
[32m+[m
|
||||
[32m+[m[32m char filename[40];[m
|
||||
[m
|
||||
LOG_D(PHY," ****** start RX-Chain for Frame.Slot %d.%d ****** \n", frame_rx%1024, nr_tti_rx);[m
|
||||
[m
|
||||
[36m@@ -4200,6 +4202,7 @@[m [mint phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,[m
|
||||
}[m
|
||||
[m
|
||||
dci_cnt = nr_ue_pdcch_procedures(eNB_id, ue, proc);[m
|
||||
[32m+[m[32m dci_cnt = 1;[m
|
||||
[m
|
||||
if (dci_cnt > 0) {[m
|
||||
[m
|
||||
[36m@@ -4215,17 +4218,32 @@[m [mint phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,[m
|
||||
16384);[m
|
||||
}[m
|
||||
} else {[m
|
||||
[31m- LOG_D(PHY,"[UE %d] Frame %d, nr_tti_rx %d: No DCIs found\n",ue->Mod_id,frame_rx,nr_tti_rx);[m
|
||||
[32m+[m[32m LOG_I(PHY,"[UE %d] Frame %d, nr_tti_rx %d: No DCIs found\n",ue->Mod_id,frame_rx,nr_tti_rx);[m
|
||||
}[m
|
||||
#endif //NR_PDCCH_SCHED[m
|
||||
[m
|
||||
[m
|
||||
if (dci_cnt > 0){[m
|
||||
[31m- LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------ \n", frame_rx%1024, nr_tti_rx);[m
|
||||
[32m+[m
|
||||
[32m+[m[32m ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 1;[m
|
||||
[32m+[m[32m dlsch0_harq->nb_rb = 50;[m
|
||||
[32m+[m[32m dlsch0_harq->start_rb = 0;[m
|
||||
[32m+[m[32m dlsch0_harq->nb_symbols = 12;//dlsch_config_pdu->number_symbols;[m
|
||||
[32m+[m[32m dlsch0_harq->start_symbol = 2;//dlsch_config_pdu->start_symbol;[m
|
||||
[32m+[m[32m dlsch0_harq->mcs = 9;[m
|
||||
[32m+[m[32m dlsch0_harq->DCINdi = 1;[m
|
||||
[32m+[m[32m dlsch0_harq->rvidx = 0;[m
|
||||
[32m+[m[32m dlsch0_harq->Nl=1;[m
|
||||
[32m+[m[32m dlsch0_harq->status = ACTIVE;[m
|
||||
[32m+[m
|
||||
[32m+[m[32m LOG_I(PHY," ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------ \n", frame_rx%1024, nr_tti_rx);[m
|
||||
//to update from pdsch config[m
|
||||
nr_gold_pdsch(ue,nb_symb_pdcch,0, 1);[m
|
||||
[m
|
||||
nb_symb_sch = dlsch0_harq->nb_symbols;[m
|
||||
[32m+[m
|
||||
[32m+[m[32m sprintf(filename,"rxdata_ue_test.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdata_ue_test_v",&ue->common_vars.rxdata[0][nr_tti_rx*ue->frame_parms.samples_per_slot],ue->frame_parms.samples_per_slot, 1, 1);[m
|
||||
[m
|
||||
for (uint16_t m=nb_symb_pdcch;m<=(nb_symb_sch+nb_symb_pdcch-1) ; m++){[m
|
||||
nr_slot_fep(ue,[m
|
||||
[36m@@ -4237,7 +4255,7 @@[m [mint phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,[m
|
||||
[m
|
||||
}[m
|
||||
//set active for testing, to be removed[m
|
||||
[31m- ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 1;[m
|
||||
[32m+[m[41m [m
|
||||
}[m
|
||||
else[m
|
||||
ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 0;[m
|
||||
[1mdiff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c[m
|
||||
[1mindex a471062..cd64e53 100644[m
|
||||
[1m--- a/openair1/SIMULATION/NR_PHY/dlsim.c[m
|
||||
[1m+++ b/openair1/SIMULATION/NR_PHY/dlsim.c[m
|
||||
[36m@@ -173,7 +173,7 @@[m [mint main(int argc, char **argv)[m
|
||||
//unsigned char frame_type = 0;[m
|
||||
unsigned char pbch_phase = 0;[m
|
||||
[m
|
||||
[31m- int frame=0,slot=1;[m
|
||||
[32m+[m[32m int frame=0,slot=2;[m
|
||||
int frame_length_complex_samples;[m
|
||||
int frame_length_complex_samples_no_prefix;[m
|
||||
int slot_length_complex_samples_no_prefix;[m
|
||||
[36m@@ -188,7 +188,7 @@[m [mint main(int argc, char **argv)[m
|
||||
int run_initial_sync=0;[m
|
||||
int do_pdcch_flag=1;[m
|
||||
[m
|
||||
[31m- int loglvl=OAILOG_WARNING;[m
|
||||
[32m+[m[32m int loglvl=OAILOG_INFO;[m
|
||||
[m
|
||||
float target_error_rate = 0.01;[m
|
||||
[m
|
||||
[36m@@ -398,6 +398,7 @@[m [mint main(int argc, char **argv)[m
|
||||
logInit();[m
|
||||
set_glog(loglvl);[m
|
||||
T_stdout = 1;[m
|
||||
[32m+[m[32m FILE *in_file;[m
|
||||
[m
|
||||
if (snr1set==0)[m
|
||||
snr1 = snr0+10;[m
|
||||
[36m@@ -695,8 +696,13 @@[m [mint main(int argc, char **argv)[m
|
||||
[m
|
||||
nr_ue_phy_config_request(&UE_mac->phy_config);[m
|
||||
[m
|
||||
[32m+[m[32m int16_t *rxdata_ue;[m
|
||||
[32m+[m[32m rxdata_ue = &((short*) UE->common_vars.rxdata[0])[2*slot*frame_parms->samples_per_slot];[m
|
||||
[32m+[m
|
||||
for (SNR = snr0; SNR < snr1; SNR += .2) {[m
|
||||
[m
|
||||
[32m+[m[32m in_file = fopen("rxdata_gnb.m", "r");[m
|
||||
[32m+[m
|
||||
n_errors = 0;[m
|
||||
//n_errors2 = 0;[m
|
||||
//n_alamouti = 0;[m
|
||||
[36m@@ -710,14 +716,22 @@[m [mint main(int argc, char **argv)[m
|
||||
sigma2_dB = 10 * log10((double)txlev) - SNR;[m
|
||||
sigma2 = pow(10, sigma2_dB/10);[m
|
||||
// printf("sigma2 %f (%f dB)\n",sigma2,sigma2_dB);[m
|
||||
[31m-[m
|
||||
[32m+[m[32m/*[m
|
||||
for (i=0; i<frame_length_complex_samples; i++) {[m
|
||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {[m
|
||||
((short*) UE->common_vars.rxdata[aa])[2*i] = (short) ((r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));[m
|
||||
((short*) UE->common_vars.rxdata[aa])[2*i+1] = (short) ((r_im[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));[m
|
||||
}[m
|
||||
}[m
|
||||
[31m-[m
|
||||
[32m+[m[32m*/[m
|
||||
[32m+[m[32m for (i = 0; i < 2*frame_parms->samples_per_slot; i++){[m
|
||||
[32m+[m[32m fscanf(in_file, "%d", &rxdata_ue[i]);[m
|
||||
[32m+[m[32m }[m
|
||||
[32m+[m[32m/*[m
|
||||
[32m+[m[32m char filename[40];[m
|
||||
[32m+[m[32m sprintf(filename,"rxdata_ue_test.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdata_ue_test_v",&UE->common_vars.rxdata[0][slot*frame_parms->samples_per_slot],frame_parms->samples_per_slot, 1, 1);[m
|
||||
[32m+[m[32m*/[m
|
||||
if (n_trials == 1) {[m
|
||||
[m
|
||||
LOG_M("rxsig0.m","rxs0", UE->common_vars.rxdata[0], frame_length_complex_samples, 1, 1);[m
|
||||
[1mdiff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c[m
|
||||
[1mindex 00ba0bb..3e31fa0 100644[m
|
||||
[1m--- a/openair1/SIMULATION/NR_PHY/ulsim.c[m
|
||||
[1m+++ b/openair1/SIMULATION/NR_PHY/ulsim.c[m
|
||||
[36m@@ -99,7 +99,7 @@[m [mint main(int argc, char **argv)[m
|
||||
double sigma, sigma_dB;[m
|
||||
double snr_step = 0.1;[m
|
||||
uint8_t snr1set = 0;[m
|
||||
[31m- int slot = 0;[m
|
||||
[32m+[m[32m int slot = 1;[m
|
||||
FILE *output_fd = NULL;[m
|
||||
//uint8_t write_output_file = 0;[m
|
||||
int trial, n_trials = 1, n_errors = 0, n_false_positive = 0, delay = 0;[m
|
||||
[36m@@ -116,10 +116,10 @@[m [mint main(int argc, char **argv)[m
|
||||
int number_of_frames = 1;[m
|
||||
int frame_length_complex_samples;[m
|
||||
NR_DL_FRAME_PARMS *frame_parms;[m
|
||||
[31m- int loglvl = OAILOG_WARNING;[m
|
||||
[32m+[m[32m int loglvl = OAILOG_INFO;[m
|
||||
uint64_t SSB_positions=0x01;[m
|
||||
[31m- uint16_t nb_symb_sch = 12;[m
|
||||
[31m- int start_symbol = NR_SYMBOLS_PER_SLOT - nb_symb_sch;[m
|
||||
[32m+[m[32m uint16_t nb_symb_sch = 9;[m
|
||||
[32m+[m[32m int start_symbol = 2;[m
|
||||
uint16_t nb_rb = 50;[m
|
||||
uint8_t Imcs = 9;[m
|
||||
uint8_t precod_nbr_layers = 1;[m
|
||||
[36m@@ -130,6 +130,7 @@[m [mint main(int argc, char **argv)[m
|
||||
int32_t txlev;[m
|
||||
int start_rb = 0;[m
|
||||
int UE_id =0; // [hna] only works for UE_id = 0 because NUMBER_OF_NR_UE_MAX is set to 1 (phy_init_nr_gNB causes segmentation fault)[m
|
||||
[32m+[m[32m uint8_t threequarter_fs = 0;[m
|
||||
[m
|
||||
cpuf = get_cpu_freq_GHz();[m
|
||||
[m
|
||||
[36m@@ -144,7 +145,7 @@[m [mint main(int argc, char **argv)[m
|
||||
//logInit();[m
|
||||
randominit(0);[m
|
||||
[m
|
||||
[31m- while ((c = getopt(argc, argv, "d:f:g:h:i:j:l:m:n:p:r:s:y:z:F:M:N:P:R:S:")) != -1) {[m
|
||||
[32m+[m[32m while ((c = getopt(argc, argv, "d:f:g:h:i:j:l:m:n:pr:s:y:z:F:M:N:P:R:S:E")) != -1) {[m
|
||||
switch (c) {[m
|
||||
[m
|
||||
/*case 'd':[m
|
||||
[36m@@ -303,6 +304,10 @@[m [mint main(int argc, char **argv)[m
|
||||
printf("Setting SNR1 to %f\n", snr1);[m
|
||||
break;[m
|
||||
[m
|
||||
[32m+[m[32m case 'E':[m
|
||||
[32m+[m[32m threequarter_fs = 1;[m
|
||||
[32m+[m[32m break;[m
|
||||
[32m+[m
|
||||
default:[m
|
||||
case 'h':[m
|
||||
printf("%s -h(elp) -p(extended_prefix) -N cell_id -f output_filename -F input_filename -g channel_model -n n_frames -t Delayspread -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant -i Intefrence0 -j Interference1 -A interpolation_file -C(alibration offset dB) -N CellId\n", argv[0]);[m
|
||||
[36m@@ -330,6 +335,7 @@[m [mint main(int argc, char **argv)[m
|
||||
printf("-O oversampling factor (1,2,4,8,16)\n");[m
|
||||
printf("-R N_RB_DL\n");[m
|
||||
printf("-S Ending SNR, runs from SNR0 to SNR1\n");[m
|
||||
[32m+[m[32m printf("-E enable threequarter sampling\n");[m
|
||||
exit(-1);[m
|
||||
break;[m
|
||||
}[m
|
||||
[36m@@ -338,6 +344,7 @@[m [mint main(int argc, char **argv)[m
|
||||
logInit();[m
|
||||
set_glog(loglvl);[m
|
||||
T_stdout = 1;[m
|
||||
[32m+[m[32m FILE *in_file;[m
|
||||
[m
|
||||
if (snr1set == 0)[m
|
||||
snr1 = snr0 + 10;[m
|
||||
[36m@@ -367,7 +374,7 @@[m [mint main(int argc, char **argv)[m
|
||||
[m
|
||||
crcTableInit();[m
|
||||
[m
|
||||
[31m- nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_UL, mu, Nid_cell, SSB_positions);[m
|
||||
[32m+[m[32m nr_phy_config_request_sim_ulsim(gNB, N_RB_DL, N_RB_UL, mu, Nid_cell, SSB_positions, threequarter_fs);[m
|
||||
[m
|
||||
phy_init_nr_gNB(gNB, 0, 0);[m
|
||||
//init_eNB_afterRU();[m
|
||||
[36m@@ -511,20 +518,42 @@[m [mint main(int argc, char **argv)[m
|
||||
sigma_dB = 10*log10(txlev_float)-SNR;[m
|
||||
sigma = pow(10,sigma_dB/10);[m
|
||||
[m
|
||||
[32m+[m[32m int16_t *rxdata_gnb;[m
|
||||
[32m+[m[32m rxdata_gnb = &((short*) gNB->common_vars.rxdata[0])[2*slot*frame_parms->samples_per_slot];[m
|
||||
[32m+[m
|
||||
for (trial = 0; trial < n_trials; trial++) {[m
|
||||
[m
|
||||
errors_scrambling = 0;[m
|
||||
errors_decoding = 0;[m
|
||||
[m
|
||||
[32m+[m[32m in_file = fopen("rxdata_ue.m", "r");[m
|
||||
[32m+[m
|
||||
[32m+[m[32m if (in_file == NULL)[m
|
||||
[32m+[m[32m {[m
|
||||
[32m+[m[32m printf("Can't open file for reading.\n");[m
|
||||
[32m+[m[32m return -1;[m
|
||||
[32m+[m[32m }[m
|
||||
[32m+[m
|
||||
//----------------------------------------------------------[m
|
||||
//------------------------ add noise -----------------------[m
|
||||
//----------------------------------------------------------[m
|
||||
[32m+[m[32m /*[m
|
||||
for (i=0; i<frame_length_complex_samples; i++) {[m
|
||||
for (ap=0; ap<frame_parms->nb_antennas_rx; ap++) {[m
|
||||
[31m- ((short*) gNB->common_vars.rxdata[ap])[(2*i) + (delay*2)] = (((int16_t *)UE->common_vars.txdata[ap])[(i<<1)]) + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP); // convert to fixed point[m
|
||||
[31m- ((short*) gNB->common_vars.rxdata[ap])[2*i+1 + (delay*2)] = (((int16_t *)UE->common_vars.txdata[ap])[(i<<1)+1]) + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP);[m
|
||||
[32m+[m[32m ((short*) gNB->common_vars.rxdata[ap])[(2*i) + (delay*2)] = 0.5*((((int16_t *)UE->common_vars.txdata[ap])[(i<<1)]) + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP)); // convert to fixed point[m
|
||||
[32m+[m[32m ((short*) gNB->common_vars.rxdata[ap])[2*i+1 + (delay*2)] = 0.5*((((int16_t *)UE->common_vars.txdata[ap])[(i<<1)+1]) + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP));[m
|
||||
}[m
|
||||
}[m
|
||||
[32m+[m[32m */[m
|
||||
[32m+[m
|
||||
[32m+[m[32m for (i = 0; i < 2*frame_parms->samples_per_slot; i++){[m
|
||||
[32m+[m[32m fscanf(in_file, "%d", &rxdata_gnb[i]);[m
|
||||
[32m+[m[32m }[m
|
||||
[32m+[m
|
||||
[32m+[m[32m char filename[40];[m
|
||||
[32m+[m[32m sprintf(filename,"rxdata_ue_ulsim.m");[m
|
||||
[32m+[m[32m LOG_M(filename,"rxdata_ue_v",&gNB->common_vars.rxdata[0][slot*frame_parms->samples_per_slot], frame_parms->samples_per_slot, 1, 1);[m
|
||||
[32m+[m[41m [m
|
||||
////////////////////////////////////////////////////////////[m
|
||||
[m
|
||||
//----------------------------------------------------------[m
|
||||
[36m@@ -628,5 +657,8 @@[m [mint main(int argc, char **argv)[m
|
||||
if (input_fd)[m
|
||||
fclose(input_fd);[m
|
||||
[m
|
||||
[32m+[m[32m if (in_file)[m
|
||||
[32m+[m[32m fclose(in_file);[m
|
||||
[32m+[m
|
||||
return (n_errors);[m
|
||||
}[m
|
||||
[1mdiff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf[m
|
||||
[1mindex a11bf9d..86dc080 100644[m
|
||||
[1m--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf[m
|
||||
[1m+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf[m
|
||||
[36m@@ -255,7 +255,6 @@[m [mRUs = ([m
|
||||
max_rxgain = 114;[m
|
||||
eNB_instances = [0];[m
|
||||
sdr_addrs = "type=x300";[m
|
||||
[31m-[m
|
||||
}[m
|
||||
); [m
|
||||
[m
|
||||
Reference in New Issue
Block a user