Merge branch 'integration_2024_w32' into 'develop'
Integration: `2024.w32` See merge request oai/openairinterface5g!2900 * !2810 add harqid in wireshark traces, refactor the trace_pdu parameters * !2897 nr rlc: add a lock to protect access to time variables * !2903 remove some openair1 headers included in opeinair2 files * !2876 Enable 32 HARQ Processes in DL, UL * !2849 Fix UE SRS crash * !2898 Fix memory leaks in OAI gNB and OAI UE
This commit is contained in:
@@ -206,14 +206,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator: {
|
||||
serveraddr = "server";
|
||||
|
||||
@@ -202,14 +202,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
log_config : {
|
||||
global_log_level = "info";
|
||||
|
||||
@@ -206,14 +206,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
rfsimulator: {
|
||||
serveraddr = "server";
|
||||
serverport = 4043;
|
||||
|
||||
@@ -207,14 +207,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
log_config : {
|
||||
global_log_level = "info";
|
||||
|
||||
@@ -209,14 +209,6 @@ rfsimulator: {
|
||||
serveraddr = "server";
|
||||
};
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -217,14 +217,6 @@ rfsimulator: {
|
||||
serveraddr = "server";
|
||||
};
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -213,14 +213,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -197,12 +197,6 @@ RUs = ({
|
||||
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
|
||||
});
|
||||
|
||||
THREAD_STRUCT = ({
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
});
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -199,12 +199,6 @@ RUs = ({
|
||||
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
|
||||
});
|
||||
|
||||
THREAD_STRUCT = ({
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
});
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -215,14 +215,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -220,14 +220,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -211,14 +211,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
|
||||
@@ -220,14 +220,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_DISABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
|
||||
@@ -212,14 +212,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
|
||||
@@ -220,14 +220,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator: {
|
||||
serveraddr = "server";
|
||||
|
||||
@@ -273,14 +273,6 @@ RUs = ({
|
||||
clock_src = "internal";
|
||||
});
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator: {
|
||||
serveraddr = "server";
|
||||
|
||||
@@ -219,14 +219,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -233,14 +233,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -233,14 +233,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -215,14 +215,6 @@ rfsimulator: {
|
||||
serveraddr = "server";
|
||||
};
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -232,14 +232,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -207,14 +207,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -236,14 +236,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -214,14 +214,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -218,15 +218,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
//parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -211,14 +211,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
|
||||
@@ -209,14 +209,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
|
||||
@@ -38,9 +38,10 @@
|
||||
#include "assertions.h"
|
||||
#include "PHY/defs_common.h"
|
||||
|
||||
#define NR_MAX_PDSCH_TBS 3824
|
||||
#define MAX_BWP_SIZE 275
|
||||
#define NR_MAX_NUM_BWP 4
|
||||
#define NR_MAX_HARQ_PROCESSES 16
|
||||
#define NR_MAX_HARQ_PROCESSES 32
|
||||
#define NR_NB_REG_PER_CCE 6
|
||||
#define NR_NB_SC_PER_RB 12
|
||||
#define NR_MAX_NUM_LCID 32
|
||||
|
||||
+10
-2
@@ -205,6 +205,14 @@ cd cmake_targets
|
||||
sudo ./ran_build/build/nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf --sa --rfsim --rfsimulator.prop_delay 238.74
|
||||
```
|
||||
|
||||
To configure NTN gNB with 32 HARQ processes in downlink and uplink, add these settings in conf files under section `gNBs.[0]`
|
||||
```
|
||||
...
|
||||
num_dlharq = 32;
|
||||
num_ulharq = 32;
|
||||
...
|
||||
```
|
||||
|
||||
### NR UE
|
||||
|
||||
At UE side, there are two main parameters to cope with the large NTN propagation delay, cellSpecificKoffset and ta-Common.
|
||||
@@ -285,8 +293,8 @@ In do-ra mode it is possible to mimic the reception of UE Capabilities at gNB by
|
||||
To run using the RFsimulator:
|
||||
|
||||
```bash
|
||||
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --do-ra --rfsim --parallel-config PARALLEL_SINGLE_THREAD
|
||||
sudo ./nr-uesoftmodem --do-ra --rfsim --rfsimulator.serveraddr 127.0.0.1 --parallel-config PARALLEL_SINGLE_THREAD
|
||||
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --do-ra --rfsim
|
||||
sudo ./nr-uesoftmodem --do-ra --rfsim --rfsimulator.serveraddr 127.0.0.1
|
||||
```
|
||||
|
||||
Using USRPs:
|
||||
|
||||
+2
-2
@@ -71,7 +71,7 @@ If **N310 USRPs** are used, then run above command `without -E option` i.e witho
|
||||
|
||||
To run using **rfsimulator**, execute following command:
|
||||
|
||||
```sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band78.fr1.106PRB.usrpx310.conf --parallel-config PARALLEL_SINGLE_THREAD --noS1 --rfsim --phy-test```
|
||||
```sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band78.fr1.106PRB.usrpx310.conf --noS1 --rfsim --phy-test```
|
||||
|
||||
## FR2 test
|
||||
In FR2 mode, we need RF beamforming module to transmit signal in mmWave frequency range. **X310 USRPs** can be used with BasicTx daughtercard to transmit baseband signal at **Intermediate Frequncy(IF)** and then RF beamforming module would perform beamforming and the upconversion to FR2 frequencies. IF can be specified using `if_freq` in the RU section of gNB config.
|
||||
@@ -83,7 +83,7 @@ If RF beamforming module is NOT present, gNB can still be launched with USRP alo
|
||||
|
||||
To run using **rfsimulator**, execute following command:
|
||||
|
||||
```sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band261.fr2.64PRB.usrpx310.conf --parallel-config PARALLEL_SINGLE_THREAD --noS1 --rfsim --phy-test```
|
||||
```sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band261.fr2.64PRB.usrpx310.conf --noS1 --rfsim --phy-test```
|
||||
|
||||
## Multiple gNB scenario
|
||||
PRS is primarily used for positioning and localization of the UE with multiple gNBs transmitting simultaneously. OAI PRS implementation supports multiple gNB transmission provided all the gNBs are tightely synchronized using GPSDO clock. Therefore before running this scenario, make sure the USRPs has built-in GPSDO and the GPS antennas are connected with good satellite visibility. Also every time a gNB is launched, wait until `GPS LOCKED` is printed on the terminal during gNB startup. If USRP fails to lock with GPSDO, try again until its locked.
|
||||
|
||||
@@ -133,7 +133,7 @@ Usage with RFsimulator:
|
||||
**gNB**
|
||||
|
||||
```bash
|
||||
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --parallel-config PARALLEL\_SINGLE\_THREAD
|
||||
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
|
||||
```
|
||||
|
||||
**nrUE**
|
||||
|
||||
@@ -214,15 +214,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
//parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -87,8 +87,6 @@
|
||||
|
||||
#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_USRP_THREAD "having extra thead for usrp tx\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"
|
||||
|
||||
@@ -150,9 +150,6 @@ int emulate_rf = 0;
|
||||
int numerology = 0;
|
||||
|
||||
|
||||
static char *parallel_config = NULL;
|
||||
static char *worker_config = NULL;
|
||||
|
||||
/* struct for ethernet specific parameters given in eNB conf file */
|
||||
eth_params_t *eth_params;
|
||||
|
||||
@@ -423,10 +420,6 @@ static void get_options(configmodule_interface_t *cfg)
|
||||
NB_RU = RC.nb_RU;
|
||||
printf("Configuration: nb_rrc_inst %d, nb_nr_L1_inst %d, nb_ru %hhu\n",NB_gNB_INST,RC.nb_nr_L1_inst,NB_RU);
|
||||
}
|
||||
|
||||
if(parallel_config != NULL) set_parallel_conf(parallel_config);
|
||||
|
||||
if(worker_config != NULL) set_worker_conf(worker_config);
|
||||
}
|
||||
|
||||
void set_default_frame_parms(nfapi_nr_config_request_scf_t *config[MAX_NUM_CCs],
|
||||
@@ -655,7 +648,8 @@ int main( int argc, char **argv ) {
|
||||
#define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
#endif
|
||||
// strdup to put the sring in the core file for post mortem identification
|
||||
LOG_I(HW, "Version: %s\n", strdup(PACKAGE_VERSION));
|
||||
char *pckg = strdup(PACKAGE_VERSION);
|
||||
LOG_I(HW, "Version: %s\n", pckg);
|
||||
|
||||
// don't create if node doesn't connect to RRC/S1/GTP
|
||||
const ngran_node_t node_type = get_node_type();
|
||||
@@ -810,6 +804,7 @@ int main( int argc, char **argv ) {
|
||||
RC.ru[ru_id]->ifdevice.trx_end_func(&RC.ru[ru_id]->ifdevice);
|
||||
}
|
||||
|
||||
free(pckg);
|
||||
logClean();
|
||||
printf("Bye.\n");
|
||||
return 0;
|
||||
|
||||
@@ -461,7 +461,8 @@ int main(int argc, char **argv)
|
||||
#define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
#endif
|
||||
// strdup to put the sring in the core file for post mortem identification
|
||||
LOG_I(HW, "Version: %s\n", strdup(PACKAGE_VERSION));
|
||||
char *pckg = strdup(PACKAGE_VERSION);
|
||||
LOG_I(HW, "Version: %s\n", pckg);
|
||||
|
||||
PHY_vars_UE_g = malloc(sizeof(*PHY_vars_UE_g) * NB_UE_INST);
|
||||
for (int inst = 0; inst < NB_UE_INST; inst++) {
|
||||
@@ -597,6 +598,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
free(pckg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -276,8 +276,21 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING, VCD_FUNCTION_IN);
|
||||
uint32_t A = rel15->TBSize[0]<<3;
|
||||
unsigned char *a=harq->pdu;
|
||||
if (rel15->rnti != SI_RNTI)
|
||||
trace_NRpdu(DIRECTION_DOWNLINK, a, rel15->TBSize[0], WS_C_RNTI, rel15->rnti, frame, slot,0, 0);
|
||||
if (rel15->rnti != SI_RNTI) {
|
||||
ws_trace_t tmp = {.nr = true,
|
||||
.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = a,
|
||||
.pdu_buffer_size = rel15->TBSize[0],
|
||||
.ueid = 0,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = rel15->rnti,
|
||||
.sysFrame = frame,
|
||||
.subframe = slot,
|
||||
.harq_pid = 0, // difficult to find the harq pid here
|
||||
.oob_event = 0,
|
||||
.oob_event_value = 0};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
NR_gNB_PHY_STATS_t *phy_stats = NULL;
|
||||
if (rel15->rnti != 0xFFFF)
|
||||
|
||||
@@ -183,8 +183,19 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
||||
unav_res,
|
||||
mod_order,
|
||||
Nl);
|
||||
|
||||
trace_NRpdu(DIRECTION_UPLINK, harq_process_ul_ue->payload_AB, tb_size, WS_C_RNTI, rnti, frame, slot, 0, 0);
|
||||
ws_trace_t tmp = {.nr = true,
|
||||
.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = harq_process_ul_ue->payload_AB,
|
||||
.pdu_buffer_size = tb_size,
|
||||
.ueid = 0,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = rnti,
|
||||
.sysFrame = frame,
|
||||
.subframe = slot,
|
||||
.harq_pid = harq_pid,
|
||||
.oob_event = 0,
|
||||
.oob_event_value = 0};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (nr_ulsch_encoding(UE, ulsch_ue, frame_parms, harq_pid, tb_size, G) == -1)
|
||||
return;
|
||||
|
||||
@@ -81,8 +81,6 @@
|
||||
|
||||
#define NR_MAX_NB_PORTS 32
|
||||
|
||||
#define NR_MAX_PDSCH_TBS 3824
|
||||
|
||||
#define MAX_NUM_NR_DLSCH_SEGMENTS_PER_LAYER 36
|
||||
|
||||
#define MAX_NUM_NR_ULSCH_SEGMENTS_PER_LAYER 34
|
||||
|
||||
@@ -146,7 +146,17 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
|
||||
t = WS_RA_RNTI;
|
||||
if (pdu_type == FAPI_NR_RX_PDU_TYPE_SIB)
|
||||
t = WS_SI_RNTI;
|
||||
trace_NRpdu(DIRECTION_DOWNLINK, b, rx->pdsch_pdu.pdu_length, t, dlsch0->rnti, proc->frame_rx, proc->nr_slot_rx, 0, 0);
|
||||
ws_trace_t tmp = {.nr = true,
|
||||
.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = b,
|
||||
.pdu_buffer_size = rx->pdsch_pdu.pdu_length,
|
||||
.ueid = 0,
|
||||
.rntiType = t,
|
||||
.rnti = dlsch0->rnti,
|
||||
.sysFrame = proc->frame_rx,
|
||||
.subframe = proc->nr_slot_rx,
|
||||
.harq_pid = dlsch0->dlsch_config.harq_process_nbr};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
}
|
||||
if(dlsch1) {
|
||||
@@ -276,11 +286,10 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, n
|
||||
LOG_D(PHY,"****** start TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, slot_tx);
|
||||
|
||||
start_meas_nr_ue_phy(ue, PHY_PROC_TX);
|
||||
for (uint8_t harq_pid = 0; harq_pid < NR_MAX_ULSCH_HARQ_PROCESSES; harq_pid++) {
|
||||
if (ue->ul_harq_processes[harq_pid].ULstatus == ACTIVE) {
|
||||
nr_ue_ulsch_procedures(ue, harq_pid, frame_tx, slot_tx, gNB_id, phy_data, (c16_t **)&txdataF);
|
||||
}
|
||||
}
|
||||
|
||||
int harq_pid = phy_data->ulsch.pusch_pdu.pusch_data.harq_process_id;
|
||||
if (ue->ul_harq_processes[harq_pid].ULstatus == ACTIVE)
|
||||
nr_ue_ulsch_procedures(ue, harq_pid, frame_tx, slot_tx, gNB_id, phy_data, (c16_t **)&txdataF);
|
||||
|
||||
ue_srs_procedures_nr(ue, proc, (c16_t **)&txdataF);
|
||||
|
||||
|
||||
@@ -2336,8 +2336,15 @@ if((ue->frame_parms.FeMBMS_active == 0)|| is_fembms_cas_subframe(frame_rx,subfra
|
||||
dummy[0] = ue->pbch_vars[eNB_id]->decoded_output[2];
|
||||
dummy[1] = ue->pbch_vars[eNB_id]->decoded_output[1];
|
||||
dummy[2] = ue->pbch_vars[eNB_id]->decoded_output[0];
|
||||
trace_pdu( DIRECTION_DOWNLINK, dummy, WS_C_RNTI, ue->Mod_id, 0, 0,
|
||||
frame_rx, subframe_rx, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = dummy,
|
||||
.pdu_buffer_size = sizeof(dummy),
|
||||
.ueid = ue->Mod_id,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = ue->Mod_id,
|
||||
.sysFrame = frame_rx,
|
||||
.subframe = subframe_rx};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
if (pbch_tx_ant>2) {
|
||||
|
||||
@@ -58,8 +58,6 @@
|
||||
#define PRACH_WRITE_OUTPUT_DEBUG 1
|
||||
|
||||
THREAD_STRUCT thread_struct;
|
||||
char *parallel_config = NULL;
|
||||
char *worker_config = NULL;
|
||||
|
||||
char *uecap_file;
|
||||
PHY_VARS_gNB *gNB;
|
||||
|
||||
@@ -675,6 +675,9 @@ void RCconfig_verify(configmodule_interface_t *cfg, ngran_node_t node_type)
|
||||
verify_gnb_param_notset(gnbp, GNB_DO_SRS_IDX, GNB_CONFIG_STRING_DOSRS);
|
||||
verify_gnb_param_notset(gnbp, GNB_FORCE256QAMOFF_IDX, GNB_CONFIG_STRING_FORCE256QAMOFF);
|
||||
verify_gnb_param_notset(gnbp, GNB_MAXMIMOLAYERS_IDX, GNB_CONFIG_STRING_MAXMIMOLAYERS);
|
||||
verify_gnb_param_notset(gnbp, GNB_DISABLE_HARQ_IDX, GNB_CONFIG_STRING_DISABLE_HARQ);
|
||||
verify_gnb_param_notset(gnbp, GNB_NUM_DL_HARQ_IDX, GNB_CONFIG_STRING_NUM_DL_HARQPROCESSES);
|
||||
verify_gnb_param_notset(gnbp, GNB_NUM_UL_HARQ_IDX, GNB_CONFIG_STRING_NUM_UL_HARQPROCESSES);
|
||||
|
||||
// check for some general sections
|
||||
verify_section_notset(cfg, NULL, CONFIG_STRING_L1_LIST);
|
||||
@@ -1213,6 +1216,10 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
||||
GNB_CONFIG_STRING_ACTIVE_GNBS,
|
||||
num_gnbs);
|
||||
paramdef_t GNBParams[] = GNBPARAMS_DESC;
|
||||
/* map parameter checking array instances to parameter definition array instances */
|
||||
checkedparam_t config_check_GNBParams[] = GNBPARAMS_CHECK;
|
||||
for (int i = 0; i < sizeofArray(GNBParams); ++i)
|
||||
GNBParams[i].chkPptr = &(config_check_GNBParams[i]);
|
||||
config_getlist(cfg, &GNBParamList, GNBParams, sizeofArray(GNBParams), NULL);
|
||||
|
||||
if (NFAPI_MODE != NFAPI_MODE_PNF) {
|
||||
@@ -1261,16 +1268,20 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
||||
config.use_deltaMCS = *GNBParamList.paramarray[0][GNB_USE_DELTA_MCS_IDX].iptr != 0;
|
||||
config.maxMIMO_layers = *GNBParamList.paramarray[0][GNB_MAXMIMOLAYERS_IDX].iptr;
|
||||
config.disable_harq = *GNBParamList.paramarray[0][GNB_DISABLE_HARQ_IDX].iptr;
|
||||
config.num_dlharq = *GNBParamList.paramarray[0][GNB_NUM_DL_HARQ_IDX].iptr;
|
||||
config.num_ulharq = *GNBParamList.paramarray[0][GNB_NUM_UL_HARQ_IDX].iptr;
|
||||
if (config.disable_harq)
|
||||
LOG_W(GNB_APP, "\"disable_harq\" is a REL17 feature and is incompatible with REL15 and REL16 UEs!\n");
|
||||
LOG_I(GNB_APP,
|
||||
"CSI-RS %d, SRS %d, 256 QAM %s, delta_MCS %s, maxMIMO_Layers %d, HARQ feedback %s\n",
|
||||
"CSI-RS %d, SRS %d, 256 QAM %s, delta_MCS %s, maxMIMO_Layers %d, HARQ feedback %s, num DLHARQ:%d, num ULHARQ:%d\n",
|
||||
config.do_CSIRS,
|
||||
config.do_SRS,
|
||||
config.force_256qam_off ? "force off" : "may be on",
|
||||
config.use_deltaMCS ? "on" : "off",
|
||||
config.maxMIMO_layers,
|
||||
config.disable_harq ? "disabled" : "enabled");
|
||||
config.disable_harq ? "disabled" : "enabled",
|
||||
config.num_dlharq,
|
||||
config.num_ulharq);
|
||||
int tot_ant = config.pdsch_AntennaPorts.N1 * config.pdsch_AntennaPorts.N2 * config.pdsch_AntennaPorts.XP;
|
||||
AssertFatal(config.maxMIMO_layers != 0 && config.maxMIMO_layers <= tot_ant, "Invalid maxMIMO_layers %d\n", config.maxMIMO_layers);
|
||||
|
||||
@@ -2040,35 +2051,6 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RCconfig_nr_parallel(void) {
|
||||
char *parallel_conf = NULL;
|
||||
char *worker_conf = NULL;
|
||||
extern char *parallel_config;
|
||||
extern char *worker_config;
|
||||
paramdef_t ThreadParams[] = THREAD_CONF_DESC;
|
||||
paramlist_def_t THREADParamList = {THREAD_CONFIG_STRING_THREAD_STRUCT,NULL,0};
|
||||
config_getlist(config_get_if(), &THREADParamList, NULL, 0, NULL);
|
||||
|
||||
if(THREADParamList.numelt>0) {
|
||||
config_getlist(config_get_if(), &THREADParamList, ThreadParams, sizeofArray(ThreadParams), NULL);
|
||||
parallel_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr));
|
||||
} else {
|
||||
parallel_conf = strdup("PARALLEL_RU_L1_TRX_SPLIT");
|
||||
}
|
||||
|
||||
if(THREADParamList.numelt>0) {
|
||||
config_getlist(config_get_if(), &THREADParamList, ThreadParams, sizeofArray(ThreadParams), NULL);
|
||||
worker_conf = strdup(*(THREADParamList.paramarray[0][THREAD_WORKER_IDX].strptr));
|
||||
} else {
|
||||
worker_conf = strdup("WORKER_ENABLE");
|
||||
}
|
||||
|
||||
if(parallel_config == NULL) set_parallel_conf(parallel_conf);
|
||||
if(worker_config == NULL) set_worker_conf(worker_conf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void NRRCConfig(void) {
|
||||
|
||||
paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
|
||||
@@ -2093,10 +2075,6 @@ void NRRCConfig(void) {
|
||||
// Get num RU instances
|
||||
config_getlist(config_get_if(), &RUParamList, NULL, 0, NULL);
|
||||
RC.nb_RU = RUParamList.numelt;
|
||||
|
||||
RCconfig_nr_parallel();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -135,6 +135,8 @@ typedef enum {
|
||||
#define GNB_CONFIG_STRING_FORCEUL256QAMOFF "force_UL256qam_off"
|
||||
#define GNB_CONFIG_STRING_GNB_DU_ID "gNB_DU_ID"
|
||||
#define GNB_CONFIG_STRING_GNB_CU_UP_ID "gNB_CU_UP_ID"
|
||||
#define GNB_CONFIG_STRING_NUM_DL_HARQPROCESSES "num_dlharq"
|
||||
#define GNB_CONFIG_STRING_NUM_UL_HARQPROCESSES "num_ulharq"
|
||||
|
||||
#define GNB_CONFIG_HLP_STRING_ENABLE_SDAP "enable the SDAP layer\n"
|
||||
#define GNB_CONFIG_HLP_FORCE256QAMOFF "suppress activation of 256 QAM despite UE support"
|
||||
@@ -143,6 +145,8 @@ typedef enum {
|
||||
#define GNB_CONFIG_HLP_STRING_DRBS "Number of total DRBs to establish, including the mandatory for PDU SEssion (default=1)\n"
|
||||
#define GNB_CONFIG_HLP_GNB_DU_ID "defines the gNB-DU ID (only applicable for DU)"
|
||||
#define GNB_CONFIG_HLP_GNB_CU_UP_ID "defines the gNB-CU-UP ID (only applicable for CU-UP)"
|
||||
#define GNB_CONFIG_HLP_NUM_DL_HARQ "Set Num DL harq processes. Valid values 2,4,6,8,10,12,16,32. Default 16"
|
||||
#define GNB_CONFIG_HLP_NUM_UL_HARQ "Set Num UL harq processes. Valid values 16,32. Default 16"
|
||||
|
||||
/*-----------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* cell configuration parameters */
|
||||
@@ -183,6 +187,8 @@ typedef enum {
|
||||
{GNB_CONFIG_STRING_FORCEUL256QAMOFF, GNB_CONFIG_HLP_FORCEUL256QAMOFF, 0,.iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||
{GNB_CONFIG_STRING_MAXMIMOLAYERS, GNB_CONFIG_HLP_MAXMIMOLAYERS, 0, .iptr=NULL, .defintval=-1, TYPE_INT, 0}, \
|
||||
{GNB_CONFIG_STRING_DISABLE_HARQ, GNB_CONFIG_HLP_DISABLE_HARQ, PARAMFLAG_BOOL, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||
{GNB_CONFIG_STRING_NUM_DL_HARQPROCESSES, GNB_CONFIG_HLP_NUM_DL_HARQ, 0, .iptr=NULL, .defintval=16, TYPE_INT, 0}, \
|
||||
{GNB_CONFIG_STRING_NUM_UL_HARQPROCESSES, GNB_CONFIG_HLP_NUM_UL_HARQ, 0, .iptr=NULL, .defintval=16, TYPE_INT, 0}, \
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
@@ -220,8 +226,13 @@ typedef enum {
|
||||
#define GNB_FORCEUL256QAMOFF_IDX 30
|
||||
#define GNB_MAXMIMOLAYERS_IDX 31
|
||||
#define GNB_DISABLE_HARQ_IDX 32
|
||||
#define GNB_NUM_DL_HARQ_IDX 33
|
||||
#define GNB_NUM_UL_HARQ_IDX 34
|
||||
|
||||
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
|
||||
#define NUM_DL_HARQ_OKVALUES {2,4,6,8,10,12,16,32}
|
||||
#define NUM_UL_HARQ_OKVALUES {16,32}
|
||||
|
||||
#define GNBPARAMS_CHECK { \
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s5 = { NULL } }, \
|
||||
@@ -256,6 +267,8 @@ typedef enum {
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s1 = { config_check_intval, NUM_DL_HARQ_OKVALUES,8 } }, \
|
||||
{ .s1 = { config_check_intval, NUM_UL_HARQ_OKVALUES,2 } }, \
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
@@ -591,33 +604,6 @@ typedef enum {
|
||||
#define MACRLC_REMOTE_S_PORTD_IDX 14
|
||||
#define MACRLC_SCHED_MODE_IDX 15
|
||||
|
||||
|
||||
/* thread configuration parameters section name */
|
||||
#define THREAD_CONFIG_STRING_THREAD_STRUCT "THREAD_STRUCT"
|
||||
|
||||
/* thread configuration parameters names */
|
||||
#define THREAD_CONFIG_STRING_PARALLEL "parallel_config"
|
||||
#define THREAD_CONFIG_STRING_WORKER "worker_config"
|
||||
|
||||
|
||||
#define THREAD_PARALLEL_IDX 0
|
||||
#define THREAD_WORKER_IDX 1
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* thread configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define THREAD_CONF_DESC { \
|
||||
{THREAD_CONFIG_STRING_PARALLEL, CONFIG_HLP_PARALLEL, 0, .strptr=NULL, .defstrval="PARALLEL_RU_L1_TRX_SPLIT", TYPE_STRING, 0}, \
|
||||
{THREAD_CONFIG_STRING_WORKER, CONFIG_HLP_WORKER, 0, .strptr=NULL, .defstrval="WORKER_ENABLE", TYPE_STRING, 0} \
|
||||
}
|
||||
|
||||
|
||||
#define CONFIG_HLP_WORKER "coding and FEP worker thread WORKER_DISABLE or WORKER_ENABLE\n"
|
||||
#define CONFIG_HLP_PARALLEL "PARALLEL_SINGLE_THREAD, PARALLEL_RU_L1_SPLIT, or PARALLEL_RU_L1_TRX_SPLIT(RU_L1_TRX_SPLIT by defult)\n"
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* security configuration */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
@@ -893,10 +893,15 @@ generate_Msg4(module_id_t module_idP,
|
||||
ul_req_body->number_of_pdus++;
|
||||
T (T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT (module_idP), T_INT (CC_idP), T_INT (ra->rnti), T_INT (frameP), T_INT (subframeP),
|
||||
T_INT (0 /*harq_pid always 0? */ ), T_BUFFER (&mac->UE_info.DLSCH_pdu[CC_idP][0][UE_id].payload[0], ra->msg4_TBsize));
|
||||
trace_pdu (DIRECTION_DOWNLINK, (uint8_t *) mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0],
|
||||
ra->msg4_rrc_sdu_length,
|
||||
UE_id, 3, UE_RNTI (module_idP, UE_id),
|
||||
mac->frame, mac->subframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
|
||||
.pdu_buffer_size = ra->msg4_rrc_sdu_length,
|
||||
.ueid = UE_id,
|
||||
.rntiType = 3,
|
||||
.rnti = UE_RNTI(module_idP, UE_id),
|
||||
.sysFrame = mac->frame,
|
||||
.subframe = mac->subframe};
|
||||
trace_pdu(&tmp);
|
||||
} // Msg4 frame/subframe
|
||||
} // rach_resource_type > 0
|
||||
else {
|
||||
@@ -1074,12 +1079,15 @@ generate_Msg4(module_id_t module_idP,
|
||||
T_INT(subframeP), T_INT(0 /*harq_pid always 0? */ ),
|
||||
T_BUFFER(&mac->UE_info.DLSCH_pdu[CC_idP][0][UE_id].
|
||||
payload[0], ra->msg4_TBsize));
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
(uint8_t *) mac->
|
||||
UE_info.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
|
||||
rrc_sdu_length, UE_id, WS_C_RNTI,
|
||||
UE_RNTI(module_idP, UE_id), mac->frame,
|
||||
mac->subframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
|
||||
.pdu_buffer_size = rrc_sdu_length,
|
||||
.ueid = UE_id,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = UE_RNTI(module_idP, UE_id),
|
||||
.sysFrame = mac->frame,
|
||||
.subframe = mac->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR) {
|
||||
set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti);
|
||||
|
||||
@@ -274,10 +274,15 @@ schedule_SIB1_MBMS(module_id_t module_idP,
|
||||
eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
|
||||
eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
||||
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
&cc->BCCH_BR_pdu[0].payload[0],
|
||||
bcch_sdu_length,
|
||||
0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = cc->BCCH_BR_pdu[0].payload,
|
||||
.pdu_buffer_size = bcch_sdu_length,
|
||||
.ueid = 0xffff,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = 0xffff,
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (cc->tdd_Config != NULL) { //TDD
|
||||
LOG_D(MAC,
|
||||
@@ -498,10 +503,15 @@ schedule_SIB1_BR(module_id_t module_idP,
|
||||
eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
|
||||
eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
||||
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
&cc->BCCH_BR_pdu[0].payload[0],
|
||||
bcch_sdu_length,
|
||||
0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = cc->BCCH_BR_pdu[0].payload,
|
||||
.pdu_buffer_size = bcch_sdu_length,
|
||||
.ueid = 0xffff,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = 0xffff,
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (cc->tdd_Config != NULL) { //TDD
|
||||
LOG_D(MAC,
|
||||
@@ -679,13 +689,15 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
|
||||
TX_req->segments[0].segment_length = bcch_sdu_length;
|
||||
TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[i+1].payload;
|
||||
eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
&cc->BCCH_BR_pdu[i + 1].payload[0],
|
||||
bcch_sdu_length,
|
||||
0xffff,
|
||||
WS_SI_RNTI,
|
||||
0xffff, eNB->frame, eNB->subframe, 0,
|
||||
0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = cc->BCCH_BR_pdu[i + 1].payload,
|
||||
.pdu_buffer_size = bcch_sdu_length,
|
||||
.ueid = 0xffff,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = 0xffff,
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (cc->tdd_Config != NULL) { //TDD
|
||||
LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n",
|
||||
@@ -880,11 +892,15 @@ schedule_SI_MBMS(module_id_t module_idP, frame_t frameP,
|
||||
|
||||
T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
|
||||
T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_MBMS_pdu.payload, bcch_sdu_length));
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
&cc->BCCH_MBMS_pdu.payload[0],
|
||||
bcch_sdu_length,
|
||||
0xffff,
|
||||
WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = cc->BCCH_MBMS_pdu.payload,
|
||||
.pdu_buffer_size = bcch_sdu_length,
|
||||
.ueid = 0xffff,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = 0xffff,
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (0/*cc->tdd_Config != NULL*/) { //TDD not for FeMBMS
|
||||
LOG_D(MAC,
|
||||
@@ -1207,11 +1223,15 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||
|
||||
T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
|
||||
T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_pdu.payload, bcch_sdu_length));
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
&cc->BCCH_pdu.payload[0],
|
||||
bcch_sdu_length,
|
||||
0xffff,
|
||||
WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = cc->BCCH_pdu.payload,
|
||||
.pdu_buffer_size = bcch_sdu_length,
|
||||
.ueid = 0xffff,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = 0xffff,
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (cc->tdd_Config != NULL) { //TDD
|
||||
LOG_D(MAC,
|
||||
|
||||
@@ -983,18 +983,16 @@ schedule_ue_spec(module_id_t module_idP,
|
||||
for (int j = 0; j < TBS - sdu_length_total - offset; j++) {
|
||||
dlsch_pdu->payload[0][offset + sdu_length_total + j] = 0;
|
||||
}
|
||||
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
(uint8_t *) dlsch_pdu->payload[0],
|
||||
TBS,
|
||||
module_idP,
|
||||
WS_C_RNTI,
|
||||
UE_RNTI(module_idP,
|
||||
UE_id),
|
||||
eNB->frame,
|
||||
eNB->subframe,
|
||||
0,
|
||||
0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = (uint8_t *)dlsch_pdu->payload,
|
||||
.pdu_buffer_size = TBS,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = UE_RNTI(module_idP, UE_id),
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe,
|
||||
.harq_pid = harq_pid};
|
||||
trace_pdu(&tmp);
|
||||
T(T_ENB_MAC_UE_DL_PDU_WITH_DATA,
|
||||
T_INT(module_idP),
|
||||
T_INT(CC_id),
|
||||
@@ -1648,16 +1646,16 @@ schedule_ue_spec_br(module_id_t module_idP,
|
||||
UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + sdu_length_total + j] = (char)(taus()&0xff);
|
||||
}
|
||||
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
(uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
||||
TBS,
|
||||
module_idP,
|
||||
3,
|
||||
UE_RNTI(module_idP,UE_id),
|
||||
mac->frame,
|
||||
mac->subframe,
|
||||
0,
|
||||
0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
||||
.pdu_buffer_size = TBS,
|
||||
.ueid = module_idP,
|
||||
.rntiType = 3,
|
||||
.rnti = UE_RNTI(module_idP, UE_id),
|
||||
.sysFrame = mac->frame,
|
||||
.subframe = mac->subframe,
|
||||
.harq_pid = harq_pid};
|
||||
trace_pdu(&tmp);
|
||||
T(T_ENB_MAC_UE_DL_PDU_WITH_DATA,
|
||||
T_INT(module_idP),
|
||||
T_INT(CC_id),
|
||||
@@ -1850,16 +1848,15 @@ schedule_ue_spec_br(module_id_t module_idP,
|
||||
T_INT (subframeP),
|
||||
T_INT (0 /* harq_pid always 0? */ ),
|
||||
T_BUFFER (&mac->UE_info.DLSCH_pdu[CC_id][0][UE_id].payload[0], TX_req->pdu_length));
|
||||
trace_pdu(1,
|
||||
(uint8_t *) mac->UE_info.DLSCH_pdu[CC_id][0][(unsigned char) UE_id].payload[0],
|
||||
TX_req->pdu_length,
|
||||
UE_id,
|
||||
3,
|
||||
rnti,
|
||||
frameP,
|
||||
subframeP,
|
||||
0,
|
||||
0);
|
||||
ws_trace_t tmp = {.direction = 1,
|
||||
.pdu_buffer = mac->UE_info.DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
||||
.pdu_buffer_size = TX_req->pdu_length,
|
||||
.ueid = UE_id,
|
||||
.rntiType = 3,
|
||||
.rnti = rnti,
|
||||
.sysFrame = frameP,
|
||||
.subframe = subframeP};
|
||||
trace_pdu(&tmp);
|
||||
} // end else if ((subframeP == 7) && (round_DL < 8))
|
||||
} // end loop on UE_id
|
||||
}
|
||||
@@ -2360,17 +2357,15 @@ schedule_PCH(module_id_t module_idP,
|
||||
subframeP);
|
||||
continue;
|
||||
}
|
||||
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
&eNB->common_channels[CC_id].PCCH_pdu.payload[0],
|
||||
pcch_sdu_length,
|
||||
0xffff,
|
||||
PCCH,
|
||||
P_RNTI,
|
||||
eNB->frame,
|
||||
eNB->subframe,
|
||||
0,
|
||||
0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = eNB->common_channels[CC_id].PCCH_pdu.payload,
|
||||
.pdu_buffer_size = pcch_sdu_length,
|
||||
.ueid = 0xffff,
|
||||
.rntiType = PCCH,
|
||||
.rnti = P_RNTI,
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe};
|
||||
trace_pdu(&tmp);
|
||||
eNB->eNB_stats[CC_id].total_num_pcch_pdu++;
|
||||
eNB->eNB_stats[CC_id].pcch_buffer = pcch_sdu_length;
|
||||
eNB->eNB_stats[CC_id].total_pcch_buffer += pcch_sdu_length;
|
||||
|
||||
@@ -1910,10 +1910,16 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
||||
for (j=0; j<(TBS-sdu_length_total-offset); j++) {
|
||||
UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset+sdu_length_total+j] = (char)(taus()&0xff);
|
||||
}
|
||||
|
||||
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
||||
TBS, module_idP, WS_C_RNTI, UE_RNTI(module_idP, UE_id),
|
||||
eNB->frame, eNB->subframe,0,0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
||||
.pdu_buffer_size = TBS,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = UE_RNTI(module_idP, UE_id),
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe,
|
||||
.harq_pid = harq_pid};
|
||||
trace_pdu(&tmp);
|
||||
T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP),
|
||||
T_INT(harq_pid), T_BUFFER(UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], TBS));
|
||||
UE_info->UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb;
|
||||
|
||||
@@ -1055,16 +1055,22 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
|
||||
|
||||
/* Tracing of PDU is done on UE side */
|
||||
//if (opt_enabled == 1) {
|
||||
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xfffd, // M_RNTI = 6 in wirehsark
|
||||
RC.mac[module_idP]->frame,
|
||||
RC.mac[module_idP]->subframe, 0, 0);
|
||||
LOG_D(OPT, "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
|
||||
module_idP, CC_id, frameP, TBS);
|
||||
//}
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = (uint8_t *)cc->MCH_pdu.payload,
|
||||
.pdu_buffer_size = TBS,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_M_RNTI,
|
||||
.rnti = 0xfffd, // M_RNTI = 6 in wireshark
|
||||
.sysFrame = RC.mac[module_idP]->frame,
|
||||
.subframe = RC.mac[module_idP]->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
||||
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
LOG_D(OPT, "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", module_idP, CC_id, frameP, TBS);
|
||||
//}
|
||||
|
||||
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
||||
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
fill_nfapi_mch_config(
|
||||
dl_req,
|
||||
TBS,
|
||||
@@ -1830,19 +1836,23 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
|
||||
|
||||
/* Tracing of PDU is done on UE side */
|
||||
//if (opt_enabled == 1) {
|
||||
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff, // M_RNTI = 6 in wirehsark
|
||||
RC.mac[module_idP]->frame,
|
||||
RC.mac[module_idP]->subframe, 0, 0);
|
||||
LOG_D(OPT,
|
||||
"[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
|
||||
module_idP, CC_id, frameP, TBS);
|
||||
//}
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = (uint8_t *)cc->MCH_pdu.payload,
|
||||
.pdu_buffer_size = TBS,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_M_RNTI,
|
||||
.rnti = 0xffff, // M_RNTI = 6 in wireshark
|
||||
.sysFrame = RC.mac[module_idP]->frame,
|
||||
.subframe = RC.mac[module_idP]->subframe};
|
||||
trace_pdu(&tmp);
|
||||
LOG_D(OPT, "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", module_idP, CC_id, frameP, TBS);
|
||||
//}
|
||||
|
||||
/*
|
||||
for (j=0;j<sdu_length_total;j++)
|
||||
printf("%2x.",RC.mac[module_idP]->MCH_pdu.payload[j+offset]);
|
||||
printf(" \n"); */
|
||||
return 1;
|
||||
/*
|
||||
for (j=0;j<sdu_length_total;j++)
|
||||
printf("%2x.",RC.mac[module_idP]->MCH_pdu.payload[j+offset]);
|
||||
printf(" \n"); */
|
||||
return 1;
|
||||
} else {
|
||||
cc->MCH_pdu.Pdu_size = 0;
|
||||
cc->MCH_pdu.sync_area = 0;
|
||||
|
||||
@@ -134,7 +134,15 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
memset(rx_lengths, 0, NB_RB_MAX * sizeof(unsigned short));
|
||||
start_meas(&mac->rx_ulsch_sdu);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1);
|
||||
trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = sduP,
|
||||
.pdu_buffer_size = sdu_lenP,
|
||||
.ueid = 0,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = current_rnti,
|
||||
.sysFrame = frameP,
|
||||
.subframe = subframeP};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (UE_id != -1) {
|
||||
UE_scheduling_control = &UE_info->UE_sched_ctrl[UE_id];
|
||||
|
||||
@@ -253,11 +253,17 @@ Msg1_transmitted(module_id_t module_idP, uint8_t CC_id,
|
||||
"Transmission on secondary CCs is not supported yet\n");
|
||||
// start contention resolution timer
|
||||
UE_mac_inst[module_idP].RA_attempt_number++;
|
||||
trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI,
|
||||
UE_mac_inst[module_idP].RA_prach_resources.
|
||||
ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
|
||||
UE_mac_inst[module_idP].txSubframe, 0,
|
||||
UE_mac_inst[module_idP].RA_attempt_number);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = NULL,
|
||||
.pdu_buffer_size = 0,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_NO_RNTI,
|
||||
.rnti = UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex,
|
||||
.sysFrame = UE_mac_inst[module_idP].txFrame,
|
||||
.subframe = UE_mac_inst[module_idP].txSubframe,
|
||||
.oob_event = 0,
|
||||
.oob_event_value = UE_mac_inst[module_idP].RA_attempt_number};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
|
||||
@@ -272,11 +278,15 @@ Msg3_transmitted(module_id_t module_idP, uint8_t CC_id,
|
||||
module_idP, frameP);
|
||||
UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0;
|
||||
UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
|
||||
trace_pdu(DIRECTION_UPLINK, &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
|
||||
UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI,
|
||||
UE_mac_inst[module_idP].crnti,
|
||||
UE_mac_inst[module_idP].txFrame,
|
||||
UE_mac_inst[module_idP].txSubframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = UE_mac_inst[module_idP].CCCH_pdu.payload,
|
||||
.pdu_buffer_size = UE_mac_inst[module_idP].RA_Msg3_size,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = UE_mac_inst[module_idP].crnti,
|
||||
.sysFrame = UE_mac_inst[module_idP].txFrame,
|
||||
.subframe = UE_mac_inst[module_idP].txSubframe};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -93,9 +93,15 @@ fill_rar(const module_id_t module_idP,
|
||||
rar[3] =
|
||||
(((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) |
|
||||
((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
|
||||
trace_pdu(DIRECTION_DOWNLINK, dlsch_buffer, input_buffer_length, module_idP, WS_RA_RNTI, 1,
|
||||
RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
|
||||
0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = dlsch_buffer,
|
||||
.pdu_buffer_size = input_buffer_length,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_RA_RNTI,
|
||||
.rnti = 1,
|
||||
.sysFrame = RC.mac[module_idP]->frame,
|
||||
.subframe = RC.mac[module_idP]->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
return (ra->rnti);
|
||||
}
|
||||
@@ -186,17 +192,15 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
|
||||
rarh->RAPID,
|
||||
ra->preamble_index,
|
||||
ra->timing_offset);
|
||||
|
||||
trace_pdu(DIRECTION_DOWNLINK,
|
||||
dlsch_buffer,
|
||||
input_buffer_length,
|
||||
eNB->Mod_id,
|
||||
WS_RA_RNTI,
|
||||
1,
|
||||
eNB->frame,
|
||||
eNB->subframe,
|
||||
0,
|
||||
0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = dlsch_buffer,
|
||||
.pdu_buffer_size = input_buffer_length,
|
||||
.ueid = eNB->Mod_id,
|
||||
.rntiType = WS_RA_RNTI,
|
||||
.rnti = 1,
|
||||
.sysFrame = eNB->frame,
|
||||
.subframe = eNB->subframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
return (ra->rnti);
|
||||
}
|
||||
|
||||
@@ -115,9 +115,15 @@ uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const fra
|
||||
LOG_D(MAC, "[UE %d][RAPROC] rar->t_crnti %x\n", module_idP,
|
||||
(uint16_t) rar[5] + (rar[4] << 8));
|
||||
#endif
|
||||
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
|
||||
module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame,
|
||||
UE_mac_inst[module_idP].rxSubframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = dlsch_buffer,
|
||||
.pdu_buffer_size = n_rarh + n_rarpy * 6,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_RA_RNTI,
|
||||
.rnti = ra_rnti,
|
||||
.sysFrame = UE_mac_inst[module_idP].rxFrame,
|
||||
.subframe = UE_mac_inst[module_idP].rxSubframe};
|
||||
trace_pdu(&tmp);
|
||||
|
||||
if (preamble_index == rarh->RAPID) {
|
||||
*t_crnti = (uint16_t) rar[5] + (rar[4] << 8); //rar->t_crnti;
|
||||
|
||||
@@ -378,8 +378,15 @@ ue_send_sdu(module_id_t module_idP,
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
|
||||
(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN);
|
||||
//LOG_D(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]);
|
||||
trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI,
|
||||
UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK,
|
||||
.pdu_buffer = sdu,
|
||||
.pdu_buffer_size = sdu_len,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = UE_mac_inst[module_idP].crnti,
|
||||
.sysFrame = frameP,
|
||||
.subframe = subframeP};
|
||||
trace_pdu(&tmp);
|
||||
payload_ptr =
|
||||
parse_header(sdu, &num_ce, &num_sdu, rx_ces, rx_lcids, rx_lengths,
|
||||
sdu_len);
|
||||
@@ -576,16 +583,15 @@ void ue_decode_si_mbms(module_id_t module_idP, int CC_id, frame_t frameP,
|
||||
(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT);
|
||||
stop_UE_TIMING(UE_mac_inst[module_idP].rx_si);
|
||||
|
||||
trace_pdu(DIRECTION_UPLINK,
|
||||
(uint8_t *) pdu,
|
||||
len,
|
||||
module_idP,
|
||||
WS_SI_RNTI,
|
||||
0xffff,
|
||||
UE_mac_inst[module_idP].rxFrame,
|
||||
UE_mac_inst[module_idP].rxSubframe,
|
||||
0,
|
||||
0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = pdu,
|
||||
.pdu_buffer_size = len,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = 0xffff,
|
||||
.sysFrame = UE_mac_inst[module_idP].rxFrame,
|
||||
.subframe = UE_mac_inst[module_idP].rxSubframe};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
|
||||
@@ -604,14 +610,15 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP,
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
|
||||
(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT);
|
||||
stop_UE_TIMING(UE_mac_inst[module_idP].rx_si);
|
||||
trace_pdu(DIRECTION_UPLINK,
|
||||
(uint8_t *) pdu,
|
||||
len,
|
||||
module_idP,
|
||||
WS_SI_RNTI,
|
||||
0xffff,
|
||||
UE_mac_inst[module_idP].rxFrame,
|
||||
UE_mac_inst[module_idP].rxSubframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = pdu,
|
||||
.pdu_buffer_size = len,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = 0xffff,
|
||||
.sysFrame = UE_mac_inst[module_idP].rxFrame,
|
||||
.subframe = UE_mac_inst[module_idP].rxSubframe};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -630,14 +637,15 @@ ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP,
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
|
||||
(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_OUT);
|
||||
stop_UE_TIMING(UE_mac_inst[module_idP].rx_p);
|
||||
trace_pdu(DIRECTION_UPLINK,
|
||||
(uint8_t *) pdu,
|
||||
len,
|
||||
module_idP,
|
||||
WS_SI_RNTI,
|
||||
P_RNTI,
|
||||
UE_mac_inst[module_idP].rxFrame,
|
||||
UE_mac_inst[module_idP].rxSubframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = pdu,
|
||||
.pdu_buffer_size = len,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_SI_RNTI,
|
||||
.rnti = P_RNTI,
|
||||
.sysFrame = UE_mac_inst[module_idP].rxFrame,
|
||||
.subframe = UE_mac_inst[module_idP].rxSubframe};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
unsigned char *parse_mch_header(unsigned char *mac_header,
|
||||
@@ -2864,10 +2872,15 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
|
||||
(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT);
|
||||
stop_UE_TIMING(UE_mac_inst[module_idP].tx_ulsch_sdu);
|
||||
trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI,
|
||||
UE_mac_inst[module_idP].crnti,
|
||||
UE_mac_inst[module_idP].txFrame,
|
||||
UE_mac_inst[module_idP].txSubframe, 0, 0);
|
||||
ws_trace_t tmp = {.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = ulsch_buffer,
|
||||
.pdu_buffer_size = buflen,
|
||||
.ueid = module_idP,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = UE_mac_inst[module_idP].crnti,
|
||||
.sysFrame = UE_mac_inst[module_idP].txFrame,
|
||||
.subframe = UE_mac_inst[module_idP].txSubframe};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#define INDEX_MAX_TBS_TABLE (93)
|
||||
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
#include "openair1/PHY/defs_nr_common.h"
|
||||
#include <math.h>
|
||||
|
||||
//Table 5.1.2.2-2
|
||||
|
||||
@@ -308,7 +308,7 @@ typedef struct {
|
||||
uint8_t mcs; //5 bits
|
||||
uint8_t ndi; //1 bit
|
||||
uint8_t rv; //2 bits
|
||||
uint8_t harq_pid; //4 bits
|
||||
dci_field_t harq_pid; // 4/5 bits
|
||||
uint8_t tpc; //2 bits
|
||||
uint8_t short_messages_indicator; //2 bits
|
||||
uint8_t short_messages; //8 bits
|
||||
@@ -604,6 +604,8 @@ typedef struct {
|
||||
int ul_bw_tbslbrm;
|
||||
NR_NTN_Config_r17_t *ntn_Config_r17;
|
||||
NR_DownlinkHARQ_FeedbackDisabled_r17_t *downlinkHARQ_FeedbackDisabled_r17;
|
||||
long *nrofHARQ_ProcessesForPDSCH_v1700;
|
||||
long *nrofHARQ_ProcessesForPUSCH_r17;
|
||||
} NR_UE_ServingCell_Info_t;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
|
||||
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
#include "openair1/PHY/defs_nr_common.h"
|
||||
#include <limits.h>
|
||||
#include <executables/softmodem-common.h>
|
||||
|
||||
@@ -3113,6 +3112,58 @@ uint16_t get_rb_bwp_dci(nr_dci_format_t format,
|
||||
return N_RB;
|
||||
}
|
||||
|
||||
// 32 HARQ processes supported in rel17, default is 8
|
||||
int get_nrofHARQ_ProcessesForPDSCH(const NR_UE_ServingCell_Info_t *sc_info)
|
||||
{
|
||||
if (sc_info && sc_info->nrofHARQ_ProcessesForPDSCH_v1700)
|
||||
return 32;
|
||||
|
||||
if (!sc_info || !sc_info->nrofHARQ_ProcessesForPDSCH)
|
||||
return 8;
|
||||
|
||||
int IEvalues[] = {2, 4, 6, 10, 12, 16};
|
||||
return IEvalues[*sc_info->nrofHARQ_ProcessesForPDSCH];
|
||||
}
|
||||
|
||||
// 32 HARQ processes supported in rel17, default is 16
|
||||
int get_nrofHARQ_ProcessesForPUSCH(const NR_UE_ServingCell_Info_t *sc_info)
|
||||
{
|
||||
if (sc_info && sc_info->nrofHARQ_ProcessesForPUSCH_r17)
|
||||
return 32;
|
||||
|
||||
return 16;
|
||||
}
|
||||
|
||||
static int get_nrofHARQ_bits_PDSCH(int dci_format, int num_dl_harq, NR_PDSCH_Config_t *dl_cfg)
|
||||
{
|
||||
// IF DCI Format 1_0 - then use 4 bits. Refer to Spec 38.212 section 7.3.1.2.1
|
||||
int harqbits = 4;
|
||||
if (dl_cfg && dl_cfg->ext3) {
|
||||
// 5 bits if higher layer parameter harq-ProcessNumberSizeDCI-1-1 is configured, otherwise 4 bits
|
||||
// Refer to Spec 38.212 section 7.3.1.2.2
|
||||
if (dci_format == NR_DL_DCI_FORMAT_1_1 && dl_cfg->ext3->harq_ProcessNumberSizeDCI_1_1_r17) {
|
||||
harqbits = 5;
|
||||
AssertFatal(num_dl_harq == 32, "Incorrect configuration of DL HARQ processes %d\n",num_dl_harq);
|
||||
}
|
||||
}
|
||||
return harqbits;
|
||||
}
|
||||
|
||||
static int get_nrofHARQ_bits_PUSCH(int dci_format, int num_ul_harq, NR_PUSCH_Config_t *ul_cfg)
|
||||
{
|
||||
// IF DCI Format 0_0 - then use 4 bits. Refer to Spec 38.212 section 7.3.1.1.1
|
||||
int harqbits = 4;
|
||||
if (ul_cfg && ul_cfg->ext2) {
|
||||
// 5 bits if higher layer parameter harq-ProcessNumberSizeDCI-0-1 is configured, otherwise 4 bits
|
||||
// Refer to Spec 38.212 section 7.3.1.1.2
|
||||
if (dci_format == NR_UL_DCI_FORMAT_0_1 && ul_cfg->ext2->harq_ProcessNumberSizeDCI_0_1_r17) {
|
||||
harqbits = 5;
|
||||
AssertFatal(num_ul_harq == 32, "Incorrect configuration of UL HARQ processes %d\n",num_ul_harq);
|
||||
}
|
||||
}
|
||||
return harqbits;
|
||||
}
|
||||
|
||||
uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
const NR_UE_UL_BWP_t *UL_BWP,
|
||||
const NR_UE_ServingCell_Info_t *sc_info,
|
||||
@@ -3146,10 +3197,17 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
sc_info->initial_ul_BWPSize,
|
||||
sc_info->initial_dl_BWPSize);
|
||||
|
||||
const int num_dl_harq = get_nrofHARQ_ProcessesForPDSCH(sc_info);
|
||||
const int num_ul_harq = get_nrofHARQ_ProcessesForPUSCH(sc_info);
|
||||
const int num_dlharqbits = get_nrofHARQ_bits_PDSCH(format, num_dl_harq, pdsch_Config);
|
||||
const int num_ulharqbits = get_nrofHARQ_bits_PUSCH(format, num_ul_harq, pusch_Config);
|
||||
|
||||
switch(format) {
|
||||
case NR_UL_DCI_FORMAT_0_0:
|
||||
/// fixed: Format identifier 1, Hop flag 1, MCS 5, NDI 1, RV 2, HARQ PID 4, PUSCH TPC 2 Time Domain assgnmt 4 --20
|
||||
size += 20;
|
||||
// HARQ pid - 4bits , Spec 38.212 section 7.3.1.1.1
|
||||
dci_pdu->harq_pid.nbits = 4;
|
||||
dci_pdu->frequency_domain_assignment.nbits = (uint8_t)ceil(log2((N_RB * (N_RB + 1)) >>1)); // Freq domain assignment -- hopping scenario to be updated
|
||||
size += dci_pdu->frequency_domain_assignment.nbits;
|
||||
if(alt_size >= size)
|
||||
@@ -3166,8 +3224,12 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
LOG_E(NR_MAC, "Error! Not possible to configure DCI format 01 without UL BWP.\n");
|
||||
return 0;
|
||||
}
|
||||
/// fixed: Format identifier 1, MCS 5, NDI 1, RV 2, HARQ PID 4, PUSCH TPC 2, ULSCH indicator 1 --16
|
||||
size += 16;
|
||||
/// fixed: Format identifier 1, MCS 5, NDI 1, RV 2, PUSCH TPC 2, ULSCH indicator 1 --12
|
||||
size += 12;
|
||||
// HARQ PID - 4/5 bits Spec 38.212 section 7.3.1.1.2
|
||||
// 5 bits if higher layer parameter harq-ProcessNumberSizeDCI-0-1 is configured;otherwise 4 bits
|
||||
dci_pdu->harq_pid.nbits = num_ulharqbits;
|
||||
size += dci_pdu->harq_pid.nbits;
|
||||
// Carrier indicator
|
||||
if (sc_info->crossCarrierSchedulingConfig) {
|
||||
dci_pdu->carrier_indicator.nbits = 3;
|
||||
@@ -3309,6 +3371,8 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
// Size of DCI format 1_0 is given by the size of CORESET 0 if CORESET 0 is configured for the cell and the size
|
||||
// of initial DL bandwidth part if CORESET 0 is not configured for the cell
|
||||
size = 28;
|
||||
// HARQ pid - 4 bits. Spec 38.212 section 7.3.1.2.1
|
||||
dci_pdu->harq_pid.nbits = 4;
|
||||
dci_pdu->frequency_domain_assignment.nbits = (uint8_t)ceil(log2((N_RB * (N_RB + 1)) >> 1)); // Freq domain assignment
|
||||
size += dci_pdu->frequency_domain_assignment.nbits;
|
||||
if(ss_type == NR_SearchSpace__searchSpaceType_PR_ue_Specific && alt_size >= size)
|
||||
@@ -3391,8 +3455,10 @@ uint16_t nr_dci_size(const NR_UE_DL_BWP_t *DL_BWP,
|
||||
if ((maxCWperDCI != NULL) && (*maxCWperDCI == 2)) {
|
||||
size += 8;
|
||||
}
|
||||
// HARQ PID
|
||||
size += 4;
|
||||
// HARQ process number – 5 bits if higher layer parameter harq-ProcessNumberSizeDCI-1-1 is configured;
|
||||
// otherwise 4 bits. Spec 38.212 Section 7.3.1.2.2
|
||||
dci_pdu->harq_pid.nbits = num_dlharqbits;
|
||||
size += dci_pdu->harq_pid.nbits;
|
||||
// DAI
|
||||
if (pdsch_HARQ_ACK_Codebook == NR_PhysicalCellGroupConfig__pdsch_HARQ_ACK_Codebook_dynamic) { // FIXME in case of more than one serving cell
|
||||
dci_pdu->dai[0].nbits = 2;
|
||||
|
||||
@@ -319,4 +319,8 @@ bool supported_bw_comparison(int bw_mhz, NR_SupportedBandwidth_t *supported_BW,
|
||||
|
||||
int get_FeedbackDisabled(NR_DownlinkHARQ_FeedbackDisabled_r17_t *downlinkHARQ_FeedbackDisabled_r17, int harq_pid);
|
||||
|
||||
int get_nrofHARQ_ProcessesForPDSCH(const NR_UE_ServingCell_Info_t *sc_info);
|
||||
|
||||
int get_nrofHARQ_ProcessesForPUSCH(const NR_UE_ServingCell_Info_t *sc_info);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -984,6 +984,13 @@ static void setup_puschconfig(NR_UE_MAC_INST_t *mac, NR_PUSCH_Config_t *source,
|
||||
struct NR_UCI_OnPUSCH__betaOffsets);
|
||||
}
|
||||
}
|
||||
if (source->ext2) {
|
||||
if (!target->ext2)
|
||||
target->ext2 = calloc(1, sizeof(*target->ext2));
|
||||
UPDATE_IE(target->ext2->harq_ProcessNumberSizeDCI_0_1_r17, source->ext2->harq_ProcessNumberSizeDCI_0_1_r17, long);
|
||||
} else if (target->ext2) {
|
||||
free_and_zero(target->ext2->harq_ProcessNumberSizeDCI_0_1_r17);
|
||||
}
|
||||
}
|
||||
|
||||
static void configure_csi_resourcemapping(NR_CSI_RS_ResourceMapping_t *target, NR_CSI_RS_ResourceMapping_t *source)
|
||||
@@ -1131,6 +1138,13 @@ static void setup_pdschconfig(NR_PDSCH_Config_t *source, NR_PDSCH_Config_t *targ
|
||||
asn_DEF_NR_ZP_CSI_RS_ResourceSet);
|
||||
AssertFatal(source->aperiodic_ZP_CSI_RS_ResourceSetsToAddModList == NULL, "Not handled\n");
|
||||
AssertFatal(source->sp_ZP_CSI_RS_ResourceSetsToAddModList == NULL, "Not handled\n");
|
||||
if (source->ext3) {
|
||||
if (!target->ext3)
|
||||
target->ext3 = calloc(1, sizeof(*target->ext3));
|
||||
UPDATE_IE(target->ext3->harq_ProcessNumberSizeDCI_1_1_r17, source->ext3->harq_ProcessNumberSizeDCI_1_1_r17, long);
|
||||
} else if (target->ext3) {
|
||||
free_and_zero(target->ext3->harq_ProcessNumberSizeDCI_1_1_r17);
|
||||
}
|
||||
}
|
||||
|
||||
static void setup_sr_resource(NR_SchedulingRequestResourceConfig_t *target, NR_SchedulingRequestResourceConfig_t *source)
|
||||
@@ -1524,10 +1538,8 @@ static void configure_common_BWP_ul(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Up
|
||||
}
|
||||
if (ul_common->pusch_ConfigCommon->present == NR_SetupRelease_PUSCH_ConfigCommon_PR_release) {
|
||||
asn1cFreeStruc(asn_DEF_NR_PUSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
|
||||
free(bwp->msg3_DeltaPreamble);
|
||||
bwp->msg3_DeltaPreamble = NULL;
|
||||
free(bwp->p0_NominalWithGrant);
|
||||
bwp->p0_NominalWithGrant = NULL;
|
||||
free_and_zero(bwp->msg3_DeltaPreamble);
|
||||
free_and_zero(bwp->p0_NominalWithGrant);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2150,18 +2162,12 @@ static void configure_servingcell_info(NR_UE_MAC_INST_t *mac, NR_ServingCellConf
|
||||
break;
|
||||
case NR_SetupRelease_PDSCH_ServingCellConfig_PR_release:
|
||||
// release all configurations
|
||||
if (sc_info->pdsch_CGB_Transmission)
|
||||
asn1cFreeStruc(asn_DEF_NR_PDSCH_CodeBlockGroupTransmission, sc_info->pdsch_CGB_Transmission);
|
||||
if (sc_info->xOverhead_PDSCH) {
|
||||
free(sc_info->xOverhead_PDSCH);
|
||||
sc_info->xOverhead_PDSCH = NULL;
|
||||
}
|
||||
if (sc_info->maxMIMO_Layers_PDSCH) {
|
||||
free(sc_info->maxMIMO_Layers_PDSCH);
|
||||
sc_info->maxMIMO_Layers_PDSCH = NULL;
|
||||
}
|
||||
if (sc_info->downlinkHARQ_FeedbackDisabled_r17)
|
||||
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc_info->downlinkHARQ_FeedbackDisabled_r17);
|
||||
asn1cFreeStruc(asn_DEF_NR_PDSCH_CodeBlockGroupTransmission, sc_info->pdsch_CGB_Transmission);
|
||||
free_and_zero(sc_info->xOverhead_PDSCH);
|
||||
free_and_zero(sc_info->maxMIMO_Layers_PDSCH);
|
||||
free_and_zero(sc_info->nrofHARQ_ProcessesForPDSCH);
|
||||
free_and_zero(sc_info->nrofHARQ_ProcessesForPDSCH_v1700);
|
||||
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc_info->downlinkHARQ_FeedbackDisabled_r17);
|
||||
break;
|
||||
case NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup: {
|
||||
NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig = scd->pdsch_ServingCellConfig->choice.setup;
|
||||
@@ -2173,13 +2179,17 @@ static void configure_servingcell_info(NR_UE_MAC_INST_t *mac, NR_ServingCellConf
|
||||
UPDATE_IE(sc_info->xOverhead_PDSCH, pdsch_servingcellconfig->xOverhead, long);
|
||||
if (pdsch_servingcellconfig->ext1 && pdsch_servingcellconfig->ext1->maxMIMO_Layers)
|
||||
UPDATE_IE(sc_info->maxMIMO_Layers_PDSCH, pdsch_servingcellconfig->ext1->maxMIMO_Layers, long);
|
||||
UPDATE_IE(sc_info->nrofHARQ_ProcessesForPDSCH, pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH, long);
|
||||
if (pdsch_servingcellconfig->ext3)
|
||||
UPDATE_IE(sc_info->nrofHARQ_ProcessesForPDSCH_v1700, pdsch_servingcellconfig->ext3->nrofHARQ_ProcessesForPDSCH_v1700, long);
|
||||
else
|
||||
free_and_zero(sc_info->nrofHARQ_ProcessesForPDSCH_v1700);
|
||||
if (pdsch_servingcellconfig->ext3 && pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17) {
|
||||
switch (pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->present) {
|
||||
case NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_NOTHING:
|
||||
break;
|
||||
case NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_release:
|
||||
if (sc_info->downlinkHARQ_FeedbackDisabled_r17)
|
||||
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc_info->downlinkHARQ_FeedbackDisabled_r17);
|
||||
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc_info->downlinkHARQ_FeedbackDisabled_r17);
|
||||
break;
|
||||
case NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_setup:
|
||||
if (sc_info->downlinkHARQ_FeedbackDisabled_r17 == NULL) {
|
||||
@@ -2207,20 +2217,11 @@ static void configure_servingcell_info(NR_UE_MAC_INST_t *mac, NR_ServingCellConf
|
||||
break;
|
||||
case NR_SetupRelease_PUSCH_ServingCellConfig_PR_release:
|
||||
// release all configurations
|
||||
if (sc_info->pusch_CGB_Transmission)
|
||||
asn1cFreeStruc(asn_DEF_NR_PUSCH_CodeBlockGroupTransmission, sc_info->pusch_CGB_Transmission);
|
||||
if (sc_info->rateMatching_PUSCH) {
|
||||
free(sc_info->rateMatching_PUSCH);
|
||||
sc_info->rateMatching_PUSCH = NULL;
|
||||
}
|
||||
if (sc_info->xOverhead_PUSCH) {
|
||||
free(sc_info->xOverhead_PUSCH);
|
||||
sc_info->xOverhead_PUSCH = NULL;
|
||||
}
|
||||
if (sc_info->maxMIMO_Layers_PUSCH) {
|
||||
free(sc_info->maxMIMO_Layers_PUSCH);
|
||||
sc_info->maxMIMO_Layers_PUSCH = NULL;
|
||||
}
|
||||
asn1cFreeStruc(asn_DEF_NR_PUSCH_CodeBlockGroupTransmission, sc_info->pusch_CGB_Transmission);
|
||||
free_and_zero(sc_info->rateMatching_PUSCH);
|
||||
free_and_zero(sc_info->xOverhead_PUSCH);
|
||||
free_and_zero(sc_info->maxMIMO_Layers_PUSCH);
|
||||
free_and_zero(sc_info->nrofHARQ_ProcessesForPUSCH_r17);
|
||||
break;
|
||||
case NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup: {
|
||||
NR_PUSCH_ServingCellConfig_t *pusch_servingcellconfig = scd->uplinkConfig->pusch_ServingCellConfig->choice.setup;
|
||||
@@ -2233,6 +2234,10 @@ static void configure_servingcell_info(NR_UE_MAC_INST_t *mac, NR_ServingCellConf
|
||||
pusch_servingcellconfig->codeBlockGroupTransmission,
|
||||
NR_PUSCH_CodeBlockGroupTransmission_t,
|
||||
asn_DEF_NR_PUSCH_CodeBlockGroupTransmission);
|
||||
if (pusch_servingcellconfig->ext3)
|
||||
UPDATE_IE(sc_info->nrofHARQ_ProcessesForPUSCH_r17, pusch_servingcellconfig->ext3->nrofHARQ_ProcessesForPUSCH_r17, long);
|
||||
else
|
||||
free_and_zero(sc_info->nrofHARQ_ProcessesForPUSCH_r17);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -2316,10 +2321,8 @@ void release_ul_BWP(NR_UE_MAC_INST_t *mac, int index)
|
||||
asn1cFreeStruc(asn_DEF_NR_PUCCH_Config, bwp->pucch_Config);
|
||||
asn1cFreeStruc(asn_DEF_NR_PUCCH_ConfigCommon, bwp->pucch_ConfigCommon);
|
||||
asn1cFreeStruc(asn_DEF_NR_SRS_Config, bwp->srs_Config);
|
||||
free(bwp->msg3_DeltaPreamble);
|
||||
bwp->msg3_DeltaPreamble = NULL;
|
||||
free(bwp->p0_NominalWithGrant);
|
||||
bwp->p0_NominalWithGrant = NULL;
|
||||
free_and_zero(bwp->msg3_DeltaPreamble);
|
||||
free_and_zero(bwp->p0_NominalWithGrant);
|
||||
free(bwp);
|
||||
}
|
||||
|
||||
|
||||
@@ -276,6 +276,8 @@ void release_mac_configuration(NR_UE_MAC_INST_t *mac, NR_UE_MAC_reset_cause_t ca
|
||||
asn1cFreeStruc(asn_DEF_NR_DownlinkHARQ_FeedbackDisabled_r17, sc->downlinkHARQ_FeedbackDisabled_r17);
|
||||
free(sc->xOverhead_PDSCH);
|
||||
free(sc->nrofHARQ_ProcessesForPDSCH);
|
||||
free(sc->nrofHARQ_ProcessesForPDSCH_v1700);
|
||||
free(sc->nrofHARQ_ProcessesForPUSCH_r17);
|
||||
free(sc->rateMatching_PUSCH);
|
||||
free(sc->xOverhead_PUSCH);
|
||||
free(sc->maxMIMO_Layers_PDSCH);
|
||||
|
||||
@@ -245,7 +245,9 @@ float nr_get_Pcmin(int bandwidth_index) {
|
||||
int get_sum_delta_pucch(NR_UE_MAC_INST_t *mac, int slot, frame_t frame)
|
||||
{
|
||||
int delta_tpc_sum = 0;
|
||||
for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) {
|
||||
const int num_dl_harq = get_nrofHARQ_ProcessesForPDSCH(&mac->sc_info);
|
||||
|
||||
for (int i = 0; i < num_dl_harq; i++) {
|
||||
if (mac->dl_harq_info[i].active && mac->dl_harq_info[i].ul_slot == slot && mac->dl_harq_info[i].ul_frame == frame) {
|
||||
delta_tpc_sum += mac->dl_harq_info[i].delta_pucch;
|
||||
mac->dl_harq_info[i].delta_pucch = 0;
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
|
||||
/* PHY */
|
||||
#include "executables/softmodem-common.h"
|
||||
#include "openair1/PHY/defs_nr_UE.h"
|
||||
|
||||
/* utils */
|
||||
#include "assertions.h"
|
||||
@@ -805,7 +804,7 @@ static int nr_ue_process_dci_dl_10(NR_UE_MAC_INST_t *mac,
|
||||
/* MCS */
|
||||
dlsch_pdu->mcs = dci->mcs;
|
||||
|
||||
NR_UE_HARQ_STATUS_t *current_harq = &mac->dl_harq_info[dci->harq_pid];
|
||||
NR_UE_HARQ_STATUS_t *current_harq = &mac->dl_harq_info[dci->harq_pid.val];
|
||||
/* NDI (only if CRC scrambled by C-RNTI or CS-RNTI or new-RNTI or TC-RNTI)*/
|
||||
if (dl_conf_req->pdu_type == FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH ||
|
||||
dl_conf_req->pdu_type == FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH ||
|
||||
@@ -873,7 +872,7 @@ static int nr_ue_process_dci_dl_10(NR_UE_MAC_INST_t *mac,
|
||||
/* RV (only if CRC scrambled by C-RNTI or CS-RNTI or new-RNTI or TC-RNTI)*/
|
||||
dlsch_pdu->rv = dci->rv;
|
||||
/* HARQ_PROCESS_NUMBER (only if CRC scrambled by C-RNTI or CS-RNTI or new-RNTI or TC-RNTI)*/
|
||||
dlsch_pdu->harq_process_nbr = dci->harq_pid;
|
||||
dlsch_pdu->harq_process_nbr = dci->harq_pid.val;
|
||||
/* TB_SCALING (only if CRC scrambled by P-RNTI or RA-RNTI) */
|
||||
// according to TS 38.214 Table 5.1.3.2-3
|
||||
if (dci->tb_scaling > 3) {
|
||||
@@ -926,7 +925,7 @@ static int nr_ue_process_dci_dl_10(NR_UE_MAC_INST_t *mac,
|
||||
const int tpc[] = {-1, 0, 1, 3};
|
||||
set_harq_status(mac,
|
||||
dci->pucch_resource_indicator,
|
||||
dci->harq_pid,
|
||||
dci->harq_pid.val,
|
||||
tpc[dci->tpc],
|
||||
feedback_ti,
|
||||
dci->dai[0].val,
|
||||
@@ -1125,7 +1124,7 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac,
|
||||
/* MCS (for transport block 1)*/
|
||||
dlsch_pdu->mcs = dci->mcs;
|
||||
/* NDI (for transport block 1)*/
|
||||
NR_UE_HARQ_STATUS_t *current_harq = &mac->dl_harq_info[dci->harq_pid];
|
||||
NR_UE_HARQ_STATUS_t *current_harq = &mac->dl_harq_info[dci->harq_pid.val];
|
||||
if (dci->ndi != current_harq->last_ndi) {
|
||||
// new data
|
||||
dlsch_pdu->new_data_indicator = true;
|
||||
@@ -1145,7 +1144,7 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac,
|
||||
/* RV (for transport block 2)*/
|
||||
dlsch_pdu->tb2_rv = dci->rv2.val;
|
||||
/* HARQ_PROCESS_NUMBER */
|
||||
dlsch_pdu->harq_process_nbr = dci->harq_pid;
|
||||
dlsch_pdu->harq_process_nbr = dci->harq_pid.val;
|
||||
/* TPC_PUCCH */
|
||||
// according to TS 38.213 Table 7.2.1-1
|
||||
if (dci->tpc > 3) {
|
||||
@@ -1266,7 +1265,7 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac,
|
||||
const int tpc[] = {-1, 0, 1, 3};
|
||||
set_harq_status(mac,
|
||||
dci->pucch_resource_indicator,
|
||||
dci->harq_pid,
|
||||
dci->harq_pid.val,
|
||||
tpc[dci->tpc],
|
||||
feedback_ti,
|
||||
dci->dai[0].val,
|
||||
@@ -1480,7 +1479,8 @@ void set_harq_status(NR_UE_MAC_INST_t *mac,
|
||||
// we need to keep track of how many DAI we received in a slot (dai_cumul) despite the modulo operation
|
||||
int highest_dai = -1;
|
||||
int temp_dai = dai;
|
||||
for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) {
|
||||
const int num_dl_harq = get_nrofHARQ_ProcessesForPDSCH(&mac->sc_info);
|
||||
for (int i = 0; i < num_dl_harq; i++) {
|
||||
// looking for other active HARQ processes with feedback in the same frame/slot
|
||||
if (i == harq_id)
|
||||
continue;
|
||||
@@ -2317,12 +2317,13 @@ bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sche
|
||||
number_of_code_word = 2;
|
||||
}
|
||||
|
||||
const int num_dl_harq = get_nrofHARQ_ProcessesForPDSCH(&mac->sc_info);
|
||||
int res_ind = -1;
|
||||
|
||||
/* look for dl acknowledgment which should be done on current uplink slot */
|
||||
for (int code_word = 0; code_word < number_of_code_word; code_word++) {
|
||||
|
||||
for (int dl_harq_pid = 0; dl_harq_pid < NR_MAX_HARQ_PROCESSES; dl_harq_pid++) {
|
||||
for (int dl_harq_pid = 0; dl_harq_pid < num_dl_harq; dl_harq_pid++) {
|
||||
|
||||
NR_UE_HARQ_STATUS_t *current_harq = &mac->dl_harq_info[dl_harq_pid];
|
||||
|
||||
@@ -3058,8 +3059,8 @@ static void extract_10_c_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dci
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->ndi, 1);
|
||||
// Redundancy version 2bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->rv, 2);
|
||||
// HARQ process number 4bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid, 4);
|
||||
// HARQ process number 4/5 bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid.val, dci_pdu_rel15->harq_pid.nbits);
|
||||
// Downlink assignment index 2bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->dai[0].val, 2);
|
||||
// TPC command for scheduled PUCCH 2bit
|
||||
@@ -3088,7 +3089,7 @@ static void extract_00_c_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dci
|
||||
// Redundancy version 2bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->rv, 2);
|
||||
// HARQ process number 4bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid, 4);
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid.val, 4);
|
||||
// TPC command for scheduled PUSCH E2 bits
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->tpc, 2);
|
||||
// UL/SUL indicator E1 bit
|
||||
@@ -3115,7 +3116,7 @@ static void extract_10_tc_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dc
|
||||
// Redundancy version - 2 bits
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->rv, 2);
|
||||
// HARQ process number - 4 bits
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid, 4);
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid.val, 4);
|
||||
// Downlink assignment index - 2 bits
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->dai[0].val, 2);
|
||||
// TPC command for scheduled PUCCH - 2 bits
|
||||
@@ -3128,7 +3129,7 @@ static void extract_10_tc_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dc
|
||||
|
||||
static void extract_00_tc_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dci_pdu, int pos)
|
||||
{
|
||||
LOG_D(NR_MAC_DCI, "Received dci 1_0 TC rnti\n");
|
||||
LOG_D(NR_MAC_DCI, "Received dci 0_0 TC rnti\n");
|
||||
|
||||
// Frequency domain assignment
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->frequency_domain_assignment.val, dci_pdu_rel15->frequency_domain_assignment.nbits);
|
||||
@@ -3143,7 +3144,7 @@ static void extract_00_tc_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dc
|
||||
// Redundancy version 2bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->rv, 2);
|
||||
// HARQ process number 4bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid, 4);
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid.val, 4);
|
||||
// TPC command for scheduled PUSCH E2 bits
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->tpc, 2);
|
||||
}
|
||||
@@ -3182,8 +3183,8 @@ static void extract_11_c_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dci
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->ndi2.val, dci_pdu_rel15->ndi2.nbits);
|
||||
// Redundancy version 2bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->rv2.val, dci_pdu_rel15->rv2.nbits);
|
||||
// HARQ process number 4bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid, 4);
|
||||
// HARQ process number 4/5 bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid.val, dci_pdu_rel15->harq_pid.nbits);
|
||||
// Downlink assignment index
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->dai[0].val, dci_pdu_rel15->dai[0].nbits);
|
||||
// TPC command for scheduled PUCCH 2bit
|
||||
@@ -3231,8 +3232,8 @@ static void extract_01_c_rnti(dci_pdu_rel15_t *dci_pdu_rel15, const uint8_t *dci
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->ndi, 1);
|
||||
// Redundancy version 2bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->rv, 2);
|
||||
// HARQ process number 4bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid, 4);
|
||||
// HARQ process number 4/5 bit
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->harq_pid.val, dci_pdu_rel15->harq_pid.nbits);
|
||||
// 1st Downlink assignment index
|
||||
EXTRACT_DCI_ITEM(dci_pdu_rel15->dai[0].val, dci_pdu_rel15->dai[0].nbits);
|
||||
// 2nd Downlink assignment index
|
||||
|
||||
@@ -35,9 +35,6 @@
|
||||
/* exe */
|
||||
#include <common/utils/nr/nr_common.h>
|
||||
|
||||
/* PHY */
|
||||
#include "openair1/PHY/impl_defs_top.h"
|
||||
|
||||
/* MAC */
|
||||
#include "NR_MAC_COMMON/nr_mac.h"
|
||||
#include "NR_MAC_COMMON/nr_mac_common.h"
|
||||
@@ -814,7 +811,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
pusch_config_pdu->mcs_table = get_pusch_mcs_table(mcs_table_config, tp_enabled, dci_format, rnti_type, ss_type, false);
|
||||
|
||||
/* NDI */
|
||||
NR_UL_HARQ_INFO_t *harq = &mac->ul_harq_info[dci->harq_pid];
|
||||
NR_UL_HARQ_INFO_t *harq = &mac->ul_harq_info[dci->harq_pid.val];
|
||||
pusch_config_pdu->pusch_data.new_data_indicator = false;
|
||||
if (dci->ndi != harq->last_ndi) {
|
||||
pusch_config_pdu->pusch_data.new_data_indicator = true;
|
||||
@@ -825,7 +822,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
/* RV */
|
||||
pusch_config_pdu->pusch_data.rv_index = dci->rv;
|
||||
/* HARQ_PROCESS_NUMBER */
|
||||
pusch_config_pdu->pusch_data.harq_process_id = dci->harq_pid;
|
||||
pusch_config_pdu->pusch_data.harq_process_id = dci->harq_pid.val;
|
||||
|
||||
if (NR_DMRS_ulconfig != NULL)
|
||||
add_pos = (NR_DMRS_ulconfig->dmrs_AdditionalPosition == NULL) ? 2 : *NR_DMRS_ulconfig->dmrs_AdditionalPosition;
|
||||
@@ -1110,7 +1107,7 @@ void nr_ue_aperiodic_srs_scheduling(NR_UE_MAC_INST_t *mac, long resource_trigger
|
||||
NR_UE_UL_BWP_t *current_UL_BWP = mac->current_UL_BWP;
|
||||
NR_SRS_Config_t *srs_config = current_UL_BWP->srs_Config;
|
||||
|
||||
if (!srs_config) {
|
||||
if (!srs_config || !srs_config->srs_ResourceSetToAddModList) {
|
||||
LOG_E(NR_MAC, "DCI is triggering aperiodic SRS but there is no SRS configuration\n");
|
||||
return;
|
||||
}
|
||||
@@ -1171,17 +1168,15 @@ void nr_ue_aperiodic_srs_scheduling(NR_UE_MAC_INST_t *mac, long resource_trigger
|
||||
// Periodic SRS scheduling
|
||||
static bool nr_ue_periodic_srs_scheduling(NR_UE_MAC_INST_t *mac, frame_t frame, slot_t slot)
|
||||
{
|
||||
bool srs_scheduled = false;
|
||||
NR_UE_UL_BWP_t *current_UL_BWP = mac->current_UL_BWP;
|
||||
|
||||
NR_SRS_Config_t *srs_config = current_UL_BWP ? current_UL_BWP->srs_Config : NULL;
|
||||
|
||||
if (!srs_config) {
|
||||
if (!srs_config || !srs_config->srs_ResourceSetToAddModList) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool srs_scheduled = false;
|
||||
for(int rs = 0; rs < srs_config->srs_ResourceSetToAddModList->list.count; rs++) {
|
||||
|
||||
// Find periodic resource set
|
||||
NR_SRS_ResourceSet_t *srs_resource_set = srs_config->srs_ResourceSetToAddModList->list.array[rs];
|
||||
if(srs_resource_set->resourceType.present != NR_SRS_ResourceSet__resourceType_PR_periodic) {
|
||||
|
||||
@@ -43,11 +43,10 @@
|
||||
|
||||
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
|
||||
#include "SCHED_NR/phy_frame_config_nr.h"
|
||||
#include "openair1/PHY/defs_gNB.h"
|
||||
|
||||
#include "NR_MIB.h"
|
||||
#include "LAYER2/NR_MAC_COMMON/nr_mac_common.h"
|
||||
#include "../../../../nfapi/oai_integration/vendor_ext.h"
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
/* Softmodem params */
|
||||
#include "executables/softmodem-common.h"
|
||||
#include <complex.h>
|
||||
|
||||
@@ -1651,7 +1651,7 @@ static void prepare_dl_pdus(gNB_MAC_INST *nr_mac,
|
||||
dci_payload.mcs = pdsch_pdu_rel15->mcsIndex[0];
|
||||
dci_payload.tb_scaling = tb_scaling;
|
||||
dci_payload.rv = pdsch_pdu_rel15->rvIndex[0];
|
||||
dci_payload.harq_pid = current_harq_pid;
|
||||
dci_payload.harq_pid.val = current_harq_pid;
|
||||
dci_payload.ndi = ndi;
|
||||
dci_payload.dai[0].val = pucch ? (pucch->dai_c-1) & 3 : 0;
|
||||
dci_payload.tpc = tpc; // TPC for PUCCH: table 7.2.1-1 in 38.213
|
||||
|
||||
@@ -38,8 +38,6 @@
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
#include "openair1/PHY/defs_nr_common.h"
|
||||
|
||||
|
||||
#define ENABLE_MAC_PAYLOAD_DEBUG
|
||||
|
||||
@@ -100,7 +98,7 @@ static void fill_ssb_vrb_map(NR_COMMON_channels_t *cc, int rbStart, int ssb_subc
|
||||
uint16_t *vrb_map = cc[CC_id].vrb_map;
|
||||
const int extra_prb = ssb_subcarrier_offset > 0;
|
||||
for (int rb = 0; rb < 20 + extra_prb; rb++)
|
||||
vrb_map[rbStart + rb] = SL_to_bitmap(symStart % NR_SYMBOLS_PER_SLOT, 4);
|
||||
vrb_map[rbStart + rb] = SL_to_bitmap(symStart % NR_NUMBER_OF_SYMBOLS_PER_SLOT, 4);
|
||||
}
|
||||
|
||||
static int encode_mib(NR_BCCH_BCH_Message_t *mib, frame_t frame, uint8_t *buffer, int buf_size)
|
||||
@@ -500,7 +498,7 @@ static void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
|
||||
dci_payload.time_domain_assignment.val = gNB_mac->sched_ctrlCommon->sched_pdsch.time_domain_allocation;
|
||||
dci_payload.mcs = pdsch->mcs;
|
||||
dci_payload.rv = pdsch_pdu_rel15->rvIndex[0];
|
||||
dci_payload.harq_pid = 0;
|
||||
dci_payload.harq_pid.val = 0;
|
||||
dci_payload.ndi = 0;
|
||||
dci_payload.dai[0].val = 0;
|
||||
dci_payload.tpc = 0; // table 7.2.1-1 in 38.213
|
||||
|
||||
@@ -1211,7 +1211,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
||||
dci_payload.time_domain_assignment.val = sched_pdsch->time_domain_allocation;
|
||||
dci_payload.mcs = sched_pdsch->mcs;
|
||||
dci_payload.rv = pdsch_pdu->rvIndex[0];
|
||||
dci_payload.harq_pid = current_harq_pid;
|
||||
dci_payload.harq_pid.val = current_harq_pid;
|
||||
dci_payload.ndi = harq->ndi;
|
||||
dci_payload.dai[0].val = pucch ? (pucch->dai_c-1)&3 : 0;
|
||||
dci_payload.tpc = sched_ctrl->tpc1; // TPC for PUCCH: table 7.2.1-1 in 38.213
|
||||
|
||||
@@ -791,7 +791,7 @@ void config_uldci(const NR_UE_ServingCell_Info_t *sc_info,
|
||||
dci_pdu_rel15->mcs = pusch_pdu->mcs_index;
|
||||
dci_pdu_rel15->ndi = ndi;
|
||||
dci_pdu_rel15->rv = pusch_pdu->pusch_data.rv_index;
|
||||
dci_pdu_rel15->harq_pid = pusch_pdu->pusch_data.harq_process_id;
|
||||
dci_pdu_rel15->harq_pid.val = pusch_pdu->pusch_data.harq_process_id;
|
||||
dci_pdu_rel15->tpc = tpc;
|
||||
NR_PUSCH_Config_t *pusch_Config = ul_bwp->pusch_Config;
|
||||
|
||||
@@ -1432,10 +1432,11 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
pos += 2;
|
||||
*dci_pdu |= (dci_pdu_rel15->rv & 0x3) << (dci_size - pos);
|
||||
LOG_D(NR_MAC, "RV %d (%d bits)=> %d (0x%lx)\n", dci_pdu_rel15->rv, 2, dci_size - pos, *dci_pdu);
|
||||
// HARQ process number 4bit
|
||||
pos += 4;
|
||||
*dci_pdu |= ((dci_pdu_rel15->harq_pid & 0xf) << (dci_size - pos));
|
||||
LOG_D(NR_MAC, "HARQ_PID %d (%d bits)=> %d (0x%lx)\n", dci_pdu_rel15->harq_pid, 4, dci_size - pos, *dci_pdu);
|
||||
// HARQ process number 4bit/5bit
|
||||
fsize = dci_pdu_rel15->harq_pid.nbits;
|
||||
pos += fsize;
|
||||
*dci_pdu |= ((dci_pdu_rel15->harq_pid.val & ((1 << fsize) - 1)) << (dci_size - pos));
|
||||
LOG_D(NR_MAC, "HARQ_PID %d (%d bits)=> %d (0x%lx)\n", dci_pdu_rel15->harq_pid.val, fsize, dci_size - pos, *dci_pdu);
|
||||
// Downlink assignment index 2bit
|
||||
pos += 2;
|
||||
*dci_pdu |= ((dci_pdu_rel15->dai[0].val & 3) << (dci_size - pos));
|
||||
@@ -1538,9 +1539,10 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
// Redundancy version 2bit
|
||||
for (int i = 0; i < 2; i++)
|
||||
*dci_pdu |= (((uint64_t)dci_pdu_rel15->rv >> (1 - i)) & 1) << (dci_size - pos++);
|
||||
// HARQ process number 4bit
|
||||
for (int i = 0; i < 4; i++)
|
||||
*dci_pdu |= (((uint64_t)dci_pdu_rel15->harq_pid >> (3 - i)) & 1) << (dci_size - pos++);
|
||||
// HARQ process number 4bit/5bit
|
||||
fsize = dci_pdu_rel15->harq_pid.nbits;
|
||||
for (int i = 0; i < fsize; i++)
|
||||
*dci_pdu |= (((uint64_t)dci_pdu_rel15->harq_pid.val >> (fsize - i - 1)) & 1) << (dci_size - pos++);
|
||||
// Downlink assignment index – 2 bits
|
||||
for (int i = 0; i < 2; i++)
|
||||
*dci_pdu |= (((uint64_t)dci_pdu_rel15->dai[0].val >> (1 - i)) & 1) << (dci_size - pos++);
|
||||
@@ -1563,7 +1565,7 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->vrb_to_prb_mapping.val = %i\n", dci_pdu_rel15->vrb_to_prb_mapping.val);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->mcs = %i\n", dci_pdu_rel15->mcs);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->rv = %i\n", dci_pdu_rel15->rv);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->harq_pid = %i\n", dci_pdu_rel15->harq_pid);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->harq_pid = %i\n", dci_pdu_rel15->harq_pid.val);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->dai[0].val = %i\n", dci_pdu_rel15->dai[0].val);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->tpc = %i\n", dci_pdu_rel15->tpc);
|
||||
LOG_D(NR_MAC,
|
||||
@@ -1603,9 +1605,10 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
// Redundancy version 2bit
|
||||
pos += 2;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->rv & 0x3) << (dci_size - pos);
|
||||
// HARQ process number 4bit
|
||||
pos += 4;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid & 0xf) << (dci_size - pos);
|
||||
// HARQ process number 4bit/5bit
|
||||
fsize = dci_pdu_rel15->harq_pid.nbits;
|
||||
pos += fsize;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid.val & ((1 << fsize) - 1)) << (dci_size - pos);
|
||||
// TPC command for scheduled PUSCH – 2 bits
|
||||
pos += 2;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->tpc & 0x3) << (dci_size - pos);
|
||||
@@ -1628,7 +1631,7 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->mcs = %i\n", dci_pdu_rel15->mcs);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->ndi = %i\n", dci_pdu_rel15->ndi);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->rv = %i\n", dci_pdu_rel15->rv);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->harq_pid = %i\n", dci_pdu_rel15->harq_pid);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->harq_pid = %i\n", dci_pdu_rel15->harq_pid.val);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->tpc = %i\n", dci_pdu_rel15->tpc);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->padding = %i\n", dci_pdu_rel15->padding);
|
||||
break;
|
||||
@@ -1656,9 +1659,10 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
// Redundancy version 2bit
|
||||
pos += 2;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->rv & 0x3) << (dci_size - pos);
|
||||
// HARQ process number 4bit
|
||||
pos += 4;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid & 0xf) << (dci_size - pos);
|
||||
// HARQ process number 4bit/5bit
|
||||
fsize = dci_pdu_rel15->harq_pid.nbits;
|
||||
pos += fsize;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid.val & ((1 << fsize) - 1)) << (dci_size - pos);
|
||||
// Padding bits
|
||||
for (int a = pos; a < dci_size; a++)
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->padding & 1) << (dci_size - pos++);
|
||||
@@ -1677,7 +1681,7 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->mcs = %i\n", dci_pdu_rel15->mcs);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->ndi = %i\n", dci_pdu_rel15->ndi);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->rv = %i\n", dci_pdu_rel15->rv);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->harq_pid = %i\n", dci_pdu_rel15->harq_pid);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->harq_pid = %i\n", dci_pdu_rel15->harq_pid.val);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->tpc = %i\n", dci_pdu_rel15->tpc);
|
||||
LOG_D(NR_MAC, "dci_pdu_rel15->padding = %i\n", dci_pdu_rel15->padding);
|
||||
|
||||
@@ -1726,9 +1730,10 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
// Redundancy version 2bit
|
||||
pos += 2;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->rv & 0x3) << (dci_size - pos);
|
||||
// HARQ process number 4bit
|
||||
pos += 4;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid & 0xf) << (dci_size - pos);
|
||||
// HARQ process number 4bit/5bit
|
||||
fsize = dci_pdu_rel15->harq_pid.nbits;
|
||||
pos += fsize;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid.val & ((1 << fsize) - 1)) << (dci_size - pos);
|
||||
// 1st Downlink assignment index
|
||||
pos += dci_pdu_rel15->dai[0].nbits;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->dai[0].val & ((1 << dci_pdu_rel15->dai[0].nbits) - 1)) << (dci_size - pos);
|
||||
@@ -1858,9 +1863,10 @@ void fill_dci_pdu_rel15(const NR_UE_ServingCell_Info_t *servingCellInfo,
|
||||
// Redundancy version 2bit
|
||||
pos += dci_pdu_rel15->rv2.nbits;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->rv2.val & ((1 << dci_pdu_rel15->rv2.nbits) - 1)) << (dci_size - pos);
|
||||
// HARQ process number 4bit
|
||||
pos += 4;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid & 0xf) << (dci_size - pos);
|
||||
// HARQ process number 4bit/5bit
|
||||
fsize = dci_pdu_rel15->harq_pid.nbits;
|
||||
pos += fsize;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid.val & ((1 << fsize) - 1)) << (dci_size - pos);
|
||||
// Downlink assignment index
|
||||
pos += dci_pdu_rel15->dai[0].nbits;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->dai[0].val & ((1 << dci_pdu_rel15->dai[0].nbits) - 1)) << (dci_size - pos);
|
||||
@@ -2073,26 +2079,6 @@ NR_UE_info_t *find_nr_UE(NR_UEs_t *UEs, rnti_t rntiP)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int get_nrofHARQ_ProcessesForPDSCH(e_NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH n)
|
||||
{
|
||||
switch (n) {
|
||||
case NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n2:
|
||||
return 2;
|
||||
case NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n4:
|
||||
return 4;
|
||||
case NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n6:
|
||||
return 6;
|
||||
case NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n10:
|
||||
return 10;
|
||||
case NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n12:
|
||||
return 12;
|
||||
case NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16:
|
||||
return 16;
|
||||
default:
|
||||
return 8;
|
||||
}
|
||||
}
|
||||
|
||||
void delete_nr_ue_data(NR_UE_info_t *UE, NR_COMMON_channels_t *ccPtr, uid_allocator_t *uia)
|
||||
{
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_CellGroupConfig, UE->CellGroup);
|
||||
@@ -2351,6 +2337,8 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
|
||||
if (pdsch_servingcellconfig->codeBlockGroupTransmission
|
||||
&& pdsch_servingcellconfig->codeBlockGroupTransmission->choice.setup)
|
||||
sc_info->pdsch_CGB_Transmission = pdsch_servingcellconfig->codeBlockGroupTransmission->choice.setup;
|
||||
if (pdsch_servingcellconfig->ext3)
|
||||
sc_info->nrofHARQ_ProcessesForPDSCH_v1700 = pdsch_servingcellconfig->ext3->nrofHARQ_ProcessesForPDSCH_v1700;
|
||||
}
|
||||
sc_info->crossCarrierSchedulingConfig = servingCellConfig->crossCarrierSchedulingConfig;
|
||||
sc_info->supplementaryUplink = servingCellConfig->supplementaryUplink;
|
||||
@@ -2367,6 +2355,8 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
|
||||
if (pusch_servingcellconfig->codeBlockGroupTransmission
|
||||
&& pusch_servingcellconfig->codeBlockGroupTransmission->choice.setup)
|
||||
sc_info->pusch_CGB_Transmission = pusch_servingcellconfig->codeBlockGroupTransmission->choice.setup;
|
||||
if (pusch_servingcellconfig->ext3)
|
||||
sc_info->nrofHARQ_ProcessesForPUSCH_r17 = pusch_servingcellconfig->ext3->nrofHARQ_ProcessesForPUSCH_r17;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2516,13 +2506,7 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf
|
||||
/* get Number of HARQ processes for this UE */
|
||||
// pdsch_servingcellconfig == NULL in SA -> will create default (8) number of HARQ processes
|
||||
create_dl_harq_list(sched_ctrl, &UE->sc_info);
|
||||
// add all available UL HARQ processes for this UE
|
||||
// nb of ul harq processes not configurable
|
||||
create_nr_list(&sched_ctrl->available_ul_harq, 16);
|
||||
for (int harq = 0; harq < 16; harq++)
|
||||
add_tail_nr_list(&sched_ctrl->available_ul_harq, harq);
|
||||
create_nr_list(&sched_ctrl->feedback_ul_harq, 16);
|
||||
create_nr_list(&sched_ctrl->retrans_ul_harq, 16);
|
||||
create_ul_harq_list(sched_ctrl, &UE->sc_info);
|
||||
|
||||
reset_srs_stats(UE);
|
||||
|
||||
@@ -2580,8 +2564,7 @@ void free_sched_pucch_list(NR_UE_sched_ctrl_t *sched_ctrl)
|
||||
|
||||
void create_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl, const NR_UE_ServingCell_Info_t *sc_info)
|
||||
{
|
||||
const int nrofHARQ =
|
||||
sc_info && sc_info->nrofHARQ_ProcessesForPDSCH ? get_nrofHARQ_ProcessesForPDSCH(*sc_info->nrofHARQ_ProcessesForPDSCH) : 8;
|
||||
const int nrofHARQ = get_nrofHARQ_ProcessesForPDSCH(sc_info);
|
||||
// add all available DL HARQ processes for this UE
|
||||
AssertFatal(sched_ctrl->available_dl_harq.len == sched_ctrl->feedback_dl_harq.len
|
||||
&& sched_ctrl->available_dl_harq.len == sched_ctrl->retrans_dl_harq.len,
|
||||
@@ -2610,6 +2593,30 @@ void create_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl, const NR_UE_ServingCell
|
||||
}
|
||||
}
|
||||
|
||||
void create_ul_harq_list(NR_UE_sched_ctrl_t *sched_ctrl, const NR_UE_ServingCell_Info_t *sc_info)
|
||||
{
|
||||
int nrofHARQ = get_nrofHARQ_ProcessesForPUSCH(sc_info);
|
||||
if (sched_ctrl->available_ul_harq.len == 0) {
|
||||
create_nr_list(&sched_ctrl->available_ul_harq, nrofHARQ);
|
||||
for (int harq = 0; harq < nrofHARQ; harq++)
|
||||
add_tail_nr_list(&sched_ctrl->available_ul_harq, harq);
|
||||
create_nr_list(&sched_ctrl->feedback_ul_harq, nrofHARQ);
|
||||
create_nr_list(&sched_ctrl->retrans_ul_harq, nrofHARQ);
|
||||
} else if (sched_ctrl->available_ul_harq.len == nrofHARQ) {
|
||||
LOG_D(NR_MAC, "nrofHARQ %d already configured\n", nrofHARQ);
|
||||
} else {
|
||||
const int old_nrofHARQ = sched_ctrl->available_ul_harq.len;
|
||||
AssertFatal(nrofHARQ > old_nrofHARQ,
|
||||
"cannot resize HARQ list to be smaller (nrofHARQ %d, old_nrofHARQ %d)\n",
|
||||
nrofHARQ, old_nrofHARQ);
|
||||
resize_nr_list(&sched_ctrl->available_ul_harq, nrofHARQ);
|
||||
for (int harq = old_nrofHARQ; harq < nrofHARQ; harq++)
|
||||
add_tail_nr_list(&sched_ctrl->available_ul_harq, harq);
|
||||
resize_nr_list(&sched_ctrl->feedback_ul_harq, nrofHARQ);
|
||||
resize_nr_list(&sched_ctrl->retrans_ul_harq, nrofHARQ);
|
||||
}
|
||||
}
|
||||
|
||||
void reset_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl) {
|
||||
int harq;
|
||||
while ((harq = sched_ctrl->feedback_dl_harq.head) >= 0) {
|
||||
@@ -2980,8 +2987,9 @@ static void nr_mac_apply_cellgroup(gNB_MAC_INST *mac, NR_UE_info_t *UE, frame_t
|
||||
reset_srs_stats(UE);
|
||||
|
||||
if (get_softmodem_params()->sa) {
|
||||
// add all available DL HARQ processes for this UE in SA
|
||||
// add all available DL,UL HARQ processes for this UE in SA
|
||||
create_dl_harq_list(sched_ctrl, &UE->sc_info);
|
||||
create_ul_harq_list(sched_ctrl, &UE->sc_info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -215,8 +215,19 @@ static int nr_process_mac_pdu(instance_t module_idP,
|
||||
NR_UE_UL_BWP_t *ul_bwp = &UE->current_UL_BWP;
|
||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
|
||||
|
||||
if (pduP[0] != UL_SCH_LCID_PADDING)
|
||||
trace_NRpdu(DIRECTION_UPLINK, pduP, pdu_len, WS_C_RNTI, UE->rnti, frameP, 0, 0, 0);
|
||||
if (pduP[0] != UL_SCH_LCID_PADDING) {
|
||||
ws_trace_t tmp = {.nr = true,
|
||||
.direction = DIRECTION_UPLINK,
|
||||
.pdu_buffer = pduP,
|
||||
.pdu_buffer_size = pdu_len,
|
||||
.ueid = 0,
|
||||
.rntiType = WS_C_RNTI,
|
||||
.rnti = UE->rnti,
|
||||
.sysFrame = frameP,
|
||||
.subframe = slot,
|
||||
.harq_pid = harq_pid};
|
||||
trace_pdu(&tmp);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_MAC_PAYLOAD_DEBUG
|
||||
LOG_I(NR_MAC, "In %s: dumping MAC PDU in %d.%d:\n", __func__, frameP, slot);
|
||||
|
||||
@@ -281,8 +281,6 @@ int get_spf(nfapi_nr_config_request_scf_t *cfg);
|
||||
|
||||
int to_absslot(nfapi_nr_config_request_scf_t *cfg,int frame,int slot);
|
||||
|
||||
int get_nrofHARQ_ProcessesForPDSCH(e_NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH n);
|
||||
|
||||
void nr_get_tbs_dl(nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu,
|
||||
int x_overhead,
|
||||
uint8_t numdmrscdmgroupnodata,
|
||||
@@ -351,6 +349,8 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
|
||||
|
||||
void create_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl, const NR_UE_ServingCell_Info_t *sc_info);
|
||||
|
||||
void create_ul_harq_list(NR_UE_sched_ctrl_t *sched_ctrl, const NR_UE_ServingCell_Info_t *sc_info);
|
||||
|
||||
void reset_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl);
|
||||
|
||||
void reset_ul_harq_list(NR_UE_sched_ctrl_t *sched_ctrl);
|
||||
|
||||
@@ -156,6 +156,8 @@ typedef struct nr_mac_config_t {
|
||||
//int pusch_TargetSNRx10;
|
||||
//int pucch_TargetSNRx10;
|
||||
nr_mac_timers_t timer_config;
|
||||
int num_dlharq;
|
||||
int num_ulharq;
|
||||
} nr_mac_config_t;
|
||||
|
||||
typedef struct NR_preamble_ue {
|
||||
|
||||
@@ -50,10 +50,34 @@ extern RAN_CONTEXT_t RC;
|
||||
static nr_rlc_ue_manager_t *nr_rlc_ue_manager;
|
||||
|
||||
/* TODO: handle time a bit more properly */
|
||||
static pthread_mutex_t nr_rlc_current_time_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
static uint64_t nr_rlc_current_time;
|
||||
static int nr_rlc_current_time_last_frame;
|
||||
static int nr_rlc_current_time_last_subframe;
|
||||
|
||||
void lock_nr_rlc_current_time(void)
|
||||
{
|
||||
if (pthread_mutex_lock(&nr_rlc_current_time_mutex))
|
||||
AssertFatal(0, "error locking mutex");
|
||||
}
|
||||
|
||||
void unlock_nr_rlc_current_time(void)
|
||||
{
|
||||
if (pthread_mutex_unlock(&nr_rlc_current_time_mutex))
|
||||
AssertFatal(0, "error locking mutex");
|
||||
}
|
||||
|
||||
static uint64_t get_nr_rlc_current_time(void)
|
||||
{
|
||||
lock_nr_rlc_current_time();
|
||||
|
||||
uint64_t ret = nr_rlc_current_time;
|
||||
|
||||
unlock_nr_rlc_current_time();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void release_rlc_entity_from_lcid(nr_rlc_ue_t *ue, logical_chan_id_t channel_id)
|
||||
{
|
||||
AssertFatal(channel_id != 0, "LCID = 0 shouldn't be handled here\n");
|
||||
@@ -166,7 +190,7 @@ void mac_rlc_data_ind(const module_id_t module_idP,
|
||||
|
||||
if (rb != NULL) {
|
||||
LOG_D(RLC, "RB found! (channel ID %d) \n", channel_idP);
|
||||
rb->set_time(rb, nr_rlc_current_time);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
rb->recv_pdu(rb, buffer_pP, tb_sizeP);
|
||||
} else {
|
||||
LOG_E(RLC, "Fatal: no RB found (channel ID %d UE ID %d)\n", channel_idP, ue_id);
|
||||
@@ -197,7 +221,7 @@ tbs_size_t mac_rlc_data_req(const module_id_t module_idP,
|
||||
|
||||
if (rb != NULL) {
|
||||
LOG_D(RLC, "MAC PDU to get created for channel_idP:%d \n", channel_idP);
|
||||
rb->set_time(rb, nr_rlc_current_time);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
maxsize = tb_sizeP;
|
||||
ret = rb->generate_pdu(rb, buffer_pP, maxsize);
|
||||
} else {
|
||||
@@ -233,7 +257,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind(const module_id_t module_idP,
|
||||
|
||||
if (rb != NULL) {
|
||||
nr_rlc_entity_buffer_status_t buf_stat;
|
||||
rb->set_time(rb, nr_rlc_current_time);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
/* 38.321 deals with BSR values up to 81338368 bytes, after what it
|
||||
* reports '> 81338368' (table 6.1.3.1-2). Passing 100000000 is thus
|
||||
* more than enough.
|
||||
@@ -275,12 +299,14 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module
|
||||
}
|
||||
|
||||
/* TODO: handle time a bit more properly */
|
||||
lock_nr_rlc_current_time();
|
||||
if (nr_rlc_current_time_last_frame != frameP ||
|
||||
nr_rlc_current_time_last_subframe != subframeP) {
|
||||
nr_rlc_current_time++;
|
||||
nr_rlc_current_time_last_frame = frameP;
|
||||
nr_rlc_current_time_last_subframe = subframeP;
|
||||
}
|
||||
unlock_nr_rlc_current_time();
|
||||
|
||||
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
||||
nr_rlc_ue_t *ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, ue_id);
|
||||
@@ -288,7 +314,7 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module
|
||||
|
||||
if (rb != NULL) {
|
||||
nr_rlc_entity_buffer_status_t buf_stat;
|
||||
rb->set_time(rb, nr_rlc_current_time);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
/* 38.321 deals with BSR values up to 81338368 bytes, after what it
|
||||
* reports '> 81338368' (table 6.1.3.1-2). Passing 100000000 is thus
|
||||
* more than enough.
|
||||
@@ -345,7 +371,7 @@ rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
|
||||
}
|
||||
|
||||
if (rb != NULL) {
|
||||
rb->set_time(rb, nr_rlc_current_time);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
rb->recv_sdu(rb, (char *)sdu_pP, sdu_sizeP, muiP);
|
||||
} else {
|
||||
LOG_E(RLC, "%s:%d:%s: fatal: SDU sent to unknown RB\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
@@ -1094,12 +1120,14 @@ void nr_rlc_test_trigger_reestablishment(int ue_id)
|
||||
|
||||
void nr_rlc_tick(int frame, int subframe)
|
||||
{
|
||||
lock_nr_rlc_current_time();
|
||||
if (frame != nr_rlc_current_time_last_frame ||
|
||||
subframe != nr_rlc_current_time_last_subframe) {
|
||||
nr_rlc_current_time_last_frame = frame;
|
||||
nr_rlc_current_time_last_subframe = subframe;
|
||||
nr_rlc_current_time++;
|
||||
}
|
||||
unlock_nr_rlc_current_time();
|
||||
}
|
||||
|
||||
/* This is a hack, to compile the gNB.
|
||||
@@ -1158,7 +1186,7 @@ bool nr_rlc_get_statistics(int ue_id, int srb_flag, int rb_id, nr_rlc_statistics
|
||||
ret = true;
|
||||
|
||||
// Patch buffer status using OAI results (no need to change anything in the RB)
|
||||
// rb->set_time(rb, nr_rlc_current_time);
|
||||
// rb->set_time(rb, get_nr_rlc_current_time());
|
||||
nr_rlc_entity_buffer_status_t oai_stat = rb->buffer_status(rb, 1000*1000);
|
||||
out->rxbuf_occ_bytes = oai_stat.status_size;
|
||||
out->txbuf_occ_bytes = oai_stat.tx_size + oai_stat.retx_size;
|
||||
@@ -1187,7 +1215,7 @@ void nr_rlc_srb_recv_sdu(const int ue_id, const logical_chan_id_t channel_id, un
|
||||
|
||||
AssertFatal(rb != NULL, "SDU sent to unknown RB UE-ID %d SRB %d\n", ue_id, channel_id);
|
||||
|
||||
rb->set_time(rb, nr_rlc_current_time);
|
||||
rb->set_time(rb, get_nr_rlc_current_time());
|
||||
rb->recv_sdu(rb, (char *)buf, size, -1);
|
||||
|
||||
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include "openair1/SCHED_NR/fapi_nr_l1.h"
|
||||
#include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h"
|
||||
#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
|
||||
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
|
||||
@@ -42,7 +41,6 @@
|
||||
#include "openair2/NR_PHY_INTERFACE/nr_sched_response.h"
|
||||
|
||||
#define MAX_IF_MODULES 100
|
||||
//#define UL_HARQ_PRINT
|
||||
|
||||
static NR_IF_Module_t *nr_if_inst[MAX_IF_MODULES];
|
||||
extern int oai_nfapi_harq_indication(nfapi_harq_indication_t *harq_ind);
|
||||
|
||||
@@ -1179,7 +1179,7 @@ static uint32_t nr_ue_dl_processing(nr_downlink_indication_t *dl_info)
|
||||
continue;
|
||||
}
|
||||
dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dl_info->slot][dci_format];
|
||||
g_harq_pid = def_dci_pdu_rel15->harq_pid;
|
||||
g_harq_pid = def_dci_pdu_rel15->harq_pid.val;
|
||||
LOG_T(NR_MAC, "Setting harq_pid = %d and dci_index = %d (based on format)\n", g_harq_pid, dci_format);
|
||||
|
||||
ret_mask |= (1 << FAPI_NR_DCI_IND);
|
||||
|
||||
+128
-19
@@ -2599,6 +2599,107 @@ static NR_MAC_CellGroupConfig_t *configure_mac_cellgroup(const nr_mac_timers_t *
|
||||
return mac_CellGroupConfig;
|
||||
}
|
||||
|
||||
// Set HARQ related IEs according to the number of DL, UL harqprocesses configured
|
||||
static void fill_harq_IEs(NR_ServingCellConfig_t *scc, int num_dlharq, int num_ulharq)
|
||||
{
|
||||
|
||||
AssertFatal(scc && scc->pdsch_ServingCellConfig &&
|
||||
scc->pdsch_ServingCellConfig->present == NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup,
|
||||
"PDSCH_Servingcellconfig IEs NOT present\n");
|
||||
|
||||
NR_PDSCH_ServingCellConfig_t *pdsch_scc = scc->pdsch_ServingCellConfig->choice.setup;
|
||||
|
||||
switch (num_dlharq) {
|
||||
case 2:
|
||||
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n2;
|
||||
break;
|
||||
case 4:
|
||||
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n4;
|
||||
break;
|
||||
case 6:
|
||||
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n6;
|
||||
break;
|
||||
case 8:
|
||||
// 8 if IEs nrofHARQ_ProcessesForPDSCH and nrofHARQ_ProcessesForPDSCH_v1700 are not present
|
||||
free_and_zero(pdsch_scc->nrofHARQ_ProcessesForPDSCH);
|
||||
break;
|
||||
case 10:
|
||||
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n10;
|
||||
break;
|
||||
case 12:
|
||||
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n12;
|
||||
break;
|
||||
case 16:
|
||||
*pdsch_scc->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16;
|
||||
break;
|
||||
case 32:
|
||||
if (!pdsch_scc->ext3)
|
||||
pdsch_scc->ext3 = calloc(1, sizeof(*pdsch_scc->ext3));
|
||||
asn1cCallocOne(pdsch_scc->ext3->nrofHARQ_ProcessesForPDSCH_v1700,
|
||||
NR_PDSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPDSCH_v1700_n32);
|
||||
NR_BWP_DownlinkDedicated_t *dlbwp = scc->initialDownlinkBWP;
|
||||
if (dlbwp && dlbwp->pdsch_Config &&
|
||||
dlbwp->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_setup) {
|
||||
NR_PDSCH_Config_t *dlcfg = scc->initialDownlinkBWP->pdsch_Config->choice.setup;
|
||||
if (!dlcfg->ext3)
|
||||
dlcfg->ext3 = calloc(1, sizeof(*dlcfg->ext3));
|
||||
asn1cCallocOne(dlcfg->ext3->harq_ProcessNumberSizeDCI_1_1_r17, 5);
|
||||
}
|
||||
int num_dl_bwp = 0;
|
||||
if (scc->downlinkBWP_ToAddModList)
|
||||
num_dl_bwp = scc->downlinkBWP_ToAddModList->list.count;
|
||||
for (int i = 0;i < num_dl_bwp; i++) {
|
||||
dlbwp = scc->downlinkBWP_ToAddModList->list.array[i]->bwp_Dedicated;
|
||||
if (dlbwp && dlbwp->pdsch_Config &&
|
||||
dlbwp->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_setup) {
|
||||
NR_PDSCH_Config_t *dlcfg = dlbwp->pdsch_Config->choice.setup;
|
||||
if (!dlcfg->ext3)
|
||||
dlcfg->ext3 = calloc(1, sizeof(*dlcfg->ext3));
|
||||
asn1cCallocOne(dlcfg->ext3->harq_ProcessNumberSizeDCI_1_1_r17, 5);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: // Already IE should have been set to 16 harq processes
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
AssertFatal(scc->uplinkConfig,"uplinkConfig IE NOT present\n");
|
||||
|
||||
if (num_ulharq == 32) {
|
||||
if (!scc->uplinkConfig->pusch_ServingCellConfig)
|
||||
scc->uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*scc->uplinkConfig->pusch_ServingCellConfig));
|
||||
scc->uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
||||
if (!scc->uplinkConfig->pusch_ServingCellConfig->choice.setup)
|
||||
scc->uplinkConfig->pusch_ServingCellConfig->choice.setup = calloc(1, sizeof(NR_PUSCH_ServingCellConfig_t));
|
||||
NR_PUSCH_ServingCellConfig_t *pusch_scc = scc->uplinkConfig->pusch_ServingCellConfig->choice.setup;
|
||||
if (!pusch_scc->ext3)
|
||||
pusch_scc->ext3 = calloc(1, sizeof(*pusch_scc->ext3));
|
||||
asn1cCallocOne(pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17,
|
||||
NR_PUSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPUSCH_r17_n32);
|
||||
NR_BWP_UplinkDedicated_t *ulbwp = scc->uplinkConfig->initialUplinkBWP;
|
||||
if (ulbwp && ulbwp->pusch_Config &&
|
||||
ulbwp->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_setup) {
|
||||
NR_PUSCH_Config_t *ulcfg = ulbwp->pusch_Config->choice.setup;
|
||||
if (!ulcfg->ext2)
|
||||
ulcfg->ext2 = calloc(1, sizeof(*ulcfg->ext2));
|
||||
asn1cCallocOne(ulcfg->ext2->harq_ProcessNumberSizeDCI_0_1_r17, 5);
|
||||
}
|
||||
int num_ul_bwp = 0;
|
||||
if (scc->uplinkConfig->uplinkBWP_ToAddModList)
|
||||
num_ul_bwp = scc->uplinkConfig->uplinkBWP_ToAddModList->list.count;
|
||||
for (int i = 0;i < num_ul_bwp; i++) {
|
||||
ulbwp = scc->uplinkConfig->uplinkBWP_ToAddModList->list.array[i]->bwp_Dedicated;
|
||||
if (ulbwp && ulbwp->pusch_Config &&
|
||||
ulbwp->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_setup) {
|
||||
NR_PUSCH_Config_t *ulcfg = ulbwp->pusch_Config->choice.setup;
|
||||
if (!ulcfg->ext2)
|
||||
ulcfg->ext2 = calloc(1, sizeof(*ulcfg->ext2));
|
||||
asn1cCallocOne(ulcfg->ext2->harq_ProcessNumberSizeDCI_0_1_r17, 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
||||
const NR_ServingCellConfigCommon_t *scc,
|
||||
@@ -2681,12 +2782,12 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
||||
|
||||
pdsch_servingcellconfig->codeBlockGroupTransmission = NULL;
|
||||
pdsch_servingcellconfig->xOverhead = NULL;
|
||||
pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = calloc(1, sizeof(*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH));
|
||||
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16;
|
||||
asn1cCallocOne(pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH, NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16);
|
||||
pdsch_servingcellconfig->pucch_Cell = NULL;
|
||||
set_dl_maxmimolayers(pdsch_servingcellconfig, scc, NULL, configuration->maxMIMO_layers);
|
||||
if (configuration->disable_harq) {
|
||||
pdsch_servingcellconfig->ext3 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3));
|
||||
if (!pdsch_servingcellconfig->ext3)
|
||||
pdsch_servingcellconfig->ext3 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3));
|
||||
pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17));
|
||||
pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->present = NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_setup;
|
||||
pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->choice.setup.buf = calloc(4, sizeof(uint8_t));
|
||||
@@ -2848,6 +2949,8 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
|
||||
config_rsrp_meas_report(csi_MeasConfig, scc, pucchrsrp, configuration->do_CSIRS, bwp_id + 10, uid, pdsch_AntennaPorts);
|
||||
}
|
||||
|
||||
fill_harq_IEs(SpCellConfig->spCellConfigDedicated, configuration->num_dlharq, configuration->num_ulharq);
|
||||
|
||||
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
|
||||
xer_fprint(stdout, &asn_DEF_NR_SpCellConfig, SpCellConfig);
|
||||
}
|
||||
@@ -2936,16 +3039,15 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
|
||||
}
|
||||
*pusch_Config->maxRank = ul_max_layers;
|
||||
}
|
||||
if (uplinkConfig->pusch_ServingCellConfig == NULL) {
|
||||
if (!uplinkConfig->pusch_ServingCellConfig)
|
||||
uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig));
|
||||
uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
||||
uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
||||
if (!uplinkConfig->pusch_ServingCellConfig->choice.setup)
|
||||
uplinkConfig->pusch_ServingCellConfig->choice.setup = calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup));
|
||||
if (!uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1)
|
||||
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1 =
|
||||
calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1));
|
||||
uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers =
|
||||
calloc(1, sizeof(*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers));
|
||||
}
|
||||
*uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers = ul_max_layers;
|
||||
asn1cCallocOne(uplinkConfig->pusch_ServingCellConfig->choice.setup->ext1->maxMIMO_Layers, ul_max_layers);
|
||||
}
|
||||
|
||||
long maxMIMO_Layers = uplinkConfig && uplinkConfig->pusch_ServingCellConfig
|
||||
@@ -3249,18 +3351,23 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToReleaseList = NULL;
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToReleaseList = NULL;
|
||||
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig =
|
||||
calloc(1, sizeof(*secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig));
|
||||
NR_PUSCH_ServingCellConfig_t *pusch_scc = calloc(1, sizeof(*pusch_scc));
|
||||
if (!secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig)
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig =
|
||||
calloc(1, sizeof(*secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig));
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig->present =
|
||||
NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup = pusch_scc;
|
||||
if (!secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup)
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup = calloc(
|
||||
1,
|
||||
sizeof(*secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup));
|
||||
NR_PUSCH_ServingCellConfig_t *pusch_scc =
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->pusch_ServingCellConfig->choice.setup;
|
||||
pusch_scc->codeBlockGroupTransmission = NULL;
|
||||
pusch_scc->rateMatching = NULL;
|
||||
pusch_scc->xOverhead = NULL;
|
||||
pusch_scc->ext1 = calloc(1, sizeof(*pusch_scc->ext1));
|
||||
pusch_scc->ext1->maxMIMO_Layers = calloc(1, sizeof(*pusch_scc->ext1->maxMIMO_Layers));
|
||||
*pusch_scc->ext1->maxMIMO_Layers = 1;
|
||||
if (!pusch_scc->ext1)
|
||||
pusch_scc->ext1 = calloc(1, sizeof(*pusch_scc->ext1));
|
||||
asn1cCallocOne(pusch_scc->ext1->maxMIMO_Layers, 1);
|
||||
pusch_scc->ext1->processingType2Enabled = NULL;
|
||||
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->carrierSwitching = NULL;
|
||||
@@ -3275,13 +3382,13 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->pdsch_ServingCellConfig->choice.setup = pdsch_servingcellconfig;
|
||||
pdsch_servingcellconfig->codeBlockGroupTransmission = NULL;
|
||||
pdsch_servingcellconfig->xOverhead = NULL;
|
||||
pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = calloc(1, sizeof(*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH));
|
||||
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16;
|
||||
asn1cCallocOne(pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH, NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16);
|
||||
pdsch_servingcellconfig->pucch_Cell = NULL;
|
||||
set_dl_maxmimolayers(pdsch_servingcellconfig, servingcellconfigcommon, uecap, configuration->maxMIMO_layers);
|
||||
pdsch_servingcellconfig->ext1->processingType2Enabled = NULL;
|
||||
if (configuration->disable_harq) {
|
||||
pdsch_servingcellconfig->ext3 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3));
|
||||
if (!pdsch_servingcellconfig->ext3)
|
||||
pdsch_servingcellconfig->ext3 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3));
|
||||
pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17));
|
||||
pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->present = NR_SetupRelease_DownlinkHARQ_FeedbackDisabled_r17_PR_setup;
|
||||
pdsch_servingcellconfig->ext3->downlinkHARQ_FeedbackDisabled_r17->choice.setup.buf = calloc(4, sizeof(uint8_t));
|
||||
@@ -3385,6 +3492,8 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->pathlossReferenceLinking = NULL;
|
||||
secondaryCellGroup->spCellConfig->spCellConfigDedicated->servingCellMO = NULL;
|
||||
|
||||
fill_harq_IEs(secondaryCellGroup->spCellConfig->spCellConfigDedicated, configuration->num_dlharq, configuration->num_ulharq);
|
||||
|
||||
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
|
||||
xer_fprint(stdout, &asn_DEF_NR_SpCellConfig, (void *)secondaryCellGroup->spCellConfig);
|
||||
}
|
||||
|
||||
@@ -775,13 +775,13 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc,
|
||||
LOG_I(NR_RRC, "[UE %ld] Decoding SI\n", rrc->ue_id);
|
||||
NR_SystemInformation_t *si = bcch_message->message.choice.c1->choice.systemInformation;
|
||||
nr_decode_SI(SI_info, si);
|
||||
SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, (void *)bcch_message, 1);
|
||||
break;
|
||||
case NR_BCCH_DL_SCH_MessageType__c1_PR_NOTHING:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, bcch_message, ASFM_FREE_EVERYTHING);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT );
|
||||
return 0;
|
||||
}
|
||||
@@ -1693,7 +1693,7 @@ static int nr_rrc_ue_decode_dcch(NR_UE_RRC_INST_t *rrc,
|
||||
break;
|
||||
}
|
||||
// release memory allocation
|
||||
SEQUENCE_free(&asn_DEF_NR_DL_DCCH_Message, (void *)dl_dcch_msg, 1);
|
||||
SEQUENCE_free(&asn_DEF_NR_DL_DCCH_Message, dl_dcch_msg, ASFM_FREE_EVERYTHING);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1798,6 +1798,9 @@ void *rrc_nrue(void *notUsed)
|
||||
NR_RRC_DCCH_DATA_IND(msg_p).sdu_size,
|
||||
NR_RRC_DCCH_DATA_IND(msg_p).gNB_index,
|
||||
&NR_RRC_DCCH_DATA_IND(msg_p).msg_integrity);
|
||||
/* this is allocated by itti_malloc in PDCP task (deliver_sdu_srb)
|
||||
then passed to the RRC task and freed after use */
|
||||
free(NR_RRC_DCCH_DATA_IND(msg_p).sdu_p);
|
||||
break;
|
||||
|
||||
case NAS_KENB_REFRESH_REQ:
|
||||
@@ -1816,7 +1819,7 @@ void *rrc_nrue(void *notUsed)
|
||||
|
||||
case NAS_UPLINK_DATA_REQ: {
|
||||
uint32_t length;
|
||||
uint8_t *buffer;
|
||||
uint8_t *buffer = NULL;
|
||||
NasUlDataReq *req = &NAS_UPLINK_DATA_REQ(msg_p);
|
||||
/* Create message for PDCP (ULInformationTransfer_t) */
|
||||
length = do_NR_ULInformationTransfer(&buffer, req->nasMsg.length, req->nasMsg.data);
|
||||
@@ -1825,6 +1828,7 @@ void *rrc_nrue(void *notUsed)
|
||||
// error: the remote gNB is hardcoded here
|
||||
rb_id_t srb_id = rrc->Srb[2] == RB_ESTABLISHED ? 2 : 1;
|
||||
nr_pdcp_data_req_srb(rrc->ue_id, srb_id, 0, length, buffer, deliver_pdu_srb_rlc, NULL);
|
||||
free(buffer);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1867,8 +1871,6 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
c1->present = NR_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation;
|
||||
asn1cCalloc(c1->choice.ueCapabilityInformation, info);
|
||||
info->rrc_TransactionIdentifier = UECapabilityEnquiry->rrc_TransactionIdentifier;
|
||||
NR_UE_CapabilityRAT_Container_t ue_CapabilityRAT_Container = {.rat_Type = NR_RAT_Type_nr};
|
||||
|
||||
if (!rrc->UECap.UE_NR_Capability) {
|
||||
rrc->UECap.UE_NR_Capability = CALLOC(1, sizeof(NR_UE_NR_Capability_t));
|
||||
asn1cSequenceAdd(rrc->UECap.UE_NR_Capability->rf_Parameters.supportedBandListNR.list, NR_BandNR_t, nr_bandnr);
|
||||
@@ -1885,9 +1887,10 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
rrc->UECap.sdu_size = (enc_rval.encoded + 7) / 8;
|
||||
LOG_I(PHY, "[RRC]UE NR Capability encoded, %d bytes (%zd bits)\n", rrc->UECap.sdu_size, enc_rval.encoded + 7);
|
||||
|
||||
OCTET_STRING_fromBuf(&ue_CapabilityRAT_Container.ue_CapabilityRAT_Container, (const char *)rrc->UECap.sdu, rrc->UECap.sdu_size);
|
||||
|
||||
/* RAT Container */
|
||||
NR_UE_CapabilityRAT_Container_t *ue_CapabilityRAT_Container = CALLOC(1, sizeof(NR_UE_CapabilityRAT_Container_t));
|
||||
ue_CapabilityRAT_Container->rat_Type = NR_RAT_Type_nr;
|
||||
OCTET_STRING_fromBuf(&ue_CapabilityRAT_Container->ue_CapabilityRAT_Container, (const char *)rrc->UECap.sdu, rrc->UECap.sdu_size);
|
||||
NR_UECapabilityEnquiry_IEs_t *ueCapabilityEnquiry_ie = UECapabilityEnquiry->criticalExtensions.choice.ueCapabilityEnquiry;
|
||||
if (get_softmodem_params()->nsa == 1) {
|
||||
OCTET_STRING_t *requestedFreqBandsNR = ueCapabilityEnquiry_ie->ue_CapabilityEnquiryExt;
|
||||
@@ -1907,7 +1910,7 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
|
||||
for (int i = 0; i < ueCapabilityEnquiry_ie->ue_CapabilityRAT_RequestList.list.count; i++) {
|
||||
if (ueCapabilityEnquiry_ie->ue_CapabilityRAT_RequestList.list.array[i]->rat_Type == NR_RAT_Type_nr) {
|
||||
asn1cSeqAdd(&UEcapList->list, &ue_CapabilityRAT_Container);
|
||||
asn1cSeqAdd(&UEcapList->list, ue_CapabilityRAT_Container);
|
||||
uint8_t buffer[500];
|
||||
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_UL_DCCH_Message, NULL, (void *)&ul_dcch_msg, buffer, 500);
|
||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||
@@ -1921,6 +1924,9 @@ static void nr_rrc_ue_process_ueCapabilityEnquiry(NR_UE_RRC_INST_t *rrc, NR_UECa
|
||||
nr_pdcp_data_req_srb(rrc->ue_id, srb_id, 0, (enc_rval.encoded + 7) / 8, buffer, deliver_pdu_srb_rlc, NULL);
|
||||
}
|
||||
}
|
||||
/* Free struct members after it's done
|
||||
including locally allocated ue_CapabilityRAT_Container */
|
||||
ASN_STRUCT_RESET(asn_DEF_NR_UL_DCCH_Message, &ul_dcch_msg);
|
||||
}
|
||||
|
||||
void nr_rrc_initiate_rrcReestablishment(NR_UE_RRC_INST_t *rrc,
|
||||
|
||||
+23
-9
@@ -112,15 +112,29 @@ typedef enum radio_type_e {
|
||||
*/
|
||||
|
||||
extern int opt_enabled;
|
||||
#define trace_pdu(x...) if (opt_enabled) trace_pdu_implementation(0, x)
|
||||
#define trace_NRpdu(x...) if (opt_enabled) nr_trace_pdu_implementation(1, x)
|
||||
|
||||
void trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
|
||||
int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
|
||||
int oob_event, int oob_event_value);
|
||||
void nr_trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
|
||||
int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
|
||||
int oob_event, int oob_event_value);
|
||||
typedef struct {
|
||||
bool nr;
|
||||
int direction;
|
||||
uint8_t *pdu_buffer;
|
||||
unsigned int pdu_buffer_size;
|
||||
int ueid;
|
||||
int rntiType;
|
||||
int rnti;
|
||||
uint16_t sysFrame;
|
||||
uint8_t subframe;
|
||||
uint8_t harq_pid;
|
||||
int oob_event;
|
||||
int oob_event_value;
|
||||
int crcStatus;
|
||||
uint8_t isPredefinedData;
|
||||
uint8_t retx;
|
||||
} ws_trace_t;
|
||||
#define trace_pdu(x) \
|
||||
do { \
|
||||
if (opt_enabled) \
|
||||
trace_pdu_implementation(x); \
|
||||
} while (0)
|
||||
void trace_pdu_implementation(ws_trace_t *t);
|
||||
|
||||
int init_opt(void);
|
||||
|
||||
|
||||
+69
-82
@@ -275,11 +275,8 @@ int opt_create_listener_socket(char *ip_address, uint16_t port) {
|
||||
* 5. run ./oasim -a -P0 -n 30 | grep OPT
|
||||
*/
|
||||
/* Add framing header to MAC PDU and send. */
|
||||
static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
guint16 rnti, guint16 ueid, guint16 frame, guint16 subframe,
|
||||
guint8 isPredefinedData, guint8 retx, guint8 crcStatus,
|
||||
guint8 oob_event, guint8 oob_event_value,
|
||||
uint8_t *pdu_buffer, unsigned int pdu_buffer_size) {
|
||||
static void SendFrame(guint8 radioType, ws_trace_t *t)
|
||||
{
|
||||
unsigned char frameBuffer[16000];
|
||||
unsigned int frameOffset;
|
||||
ssize_t bytesSent;
|
||||
@@ -291,27 +288,28 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
/******************************************************************************/
|
||||
/* Now write out fixed fields (the mandatory elements of struct mac_lte_info) */
|
||||
frameBuffer[frameOffset++] = radioType;
|
||||
frameBuffer[frameOffset++] = direction;
|
||||
frameBuffer[frameOffset++] = rntiType;
|
||||
frameBuffer[frameOffset++] = t->direction;
|
||||
frameBuffer[frameOffset++] = t->rntiType;
|
||||
/*************************************/
|
||||
/* Now optional fields */
|
||||
/* RNTI */
|
||||
frameBuffer[frameOffset++] = MAC_LTE_RNTI_TAG;
|
||||
tmp16 = htons(rnti);
|
||||
tmp16 = htons(t->rnti);
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
/* UEId */
|
||||
frameBuffer[frameOffset++] = MAC_LTE_UEID_TAG;
|
||||
tmp16 = htons(ueid);
|
||||
tmp16 = htons(t->ueid);
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
/* Subframe number */
|
||||
frameBuffer[frameOffset++] = MAC_LTE_FRAME_SUBFRAME_TAG;
|
||||
tmp16 = htons((frame<<4)+subframe); // frame counter : this will give an expert info as wireshark expects SF and not F
|
||||
tmp16 =
|
||||
htons((t->sysFrame << 4) + t->subframe); // frame counter : this will give an expert info as wireshark expects SF and not F
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_CRC_STATUS_TAG;
|
||||
frameBuffer[frameOffset++] = crcStatus;
|
||||
frameBuffer[frameOffset++] = t->crcStatus;
|
||||
#ifdef WIRESHARK_DEV
|
||||
frameOffset += 2;
|
||||
tmp16 = htons(sfnSf); // subframe
|
||||
@@ -321,45 +319,46 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
|
||||
/***********************************************************/
|
||||
/* For these optional fields, no need to encode if value is default */
|
||||
if (!isPredefinedData) {
|
||||
if (t->isPredefinedData) {
|
||||
frameBuffer[frameOffset++] = MAC_LTE_PREDEFINED_DATA_TAG;
|
||||
frameBuffer[frameOffset++] = isPredefinedData;
|
||||
frameBuffer[frameOffset++] = t->isPredefinedData;
|
||||
}
|
||||
|
||||
if (retx != 0) {
|
||||
if (t->retx != 0) {
|
||||
frameBuffer[frameOffset++] = MAC_LTE_RETX_TAG;
|
||||
frameBuffer[frameOffset++] = retx;
|
||||
frameBuffer[frameOffset++] = t->retx;
|
||||
}
|
||||
|
||||
//#ifdef WIRESHARK_DEV
|
||||
|
||||
/* Relating to out-of-band events */
|
||||
/* N.B. dissector will only look to these fields if length is 0... */
|
||||
if (pdu_buffer_size==0) {
|
||||
switch (oob_event) {
|
||||
if (t->pdu_buffer_size == 0) {
|
||||
switch (t->oob_event) {
|
||||
case ltemac_send_preamble :
|
||||
LOG_D(OPT,"ltemac_send_preamble event %02x."
|
||||
LOG_D(OPT,
|
||||
"ltemac_send_preamble event %02x."
|
||||
//"%02x."
|
||||
"%02x.%02x\n",
|
||||
MAC_LTE_SEND_PREAMBLE_TAG,
|
||||
//ltemac_send_preamble,
|
||||
rnti,
|
||||
oob_event_value);
|
||||
// ltemac_send_preamble,
|
||||
t->rnti,
|
||||
t->oob_event_value);
|
||||
//frameBuffer[frameOffset++]=0;
|
||||
//frameBuffer[frameOffset++]=0;
|
||||
//frameBuffer[frameOffset++]=0;
|
||||
frameBuffer[frameOffset++] = MAC_LTE_SEND_PREAMBLE_TAG;
|
||||
//frameBuffer[frameOffset++]=ltemac_send_preamble;
|
||||
frameBuffer[frameOffset++]=rnti; // is the preamble
|
||||
frameBuffer[frameOffset++]=oob_event_value;
|
||||
frameBuffer[frameOffset++] = t->rnti; // is the preamble
|
||||
frameBuffer[frameOffset++] = t->oob_event_value;
|
||||
break;
|
||||
|
||||
case ltemac_send_sr:
|
||||
frameBuffer[frameOffset++]=MAC_LTE_SR_TAG ;
|
||||
frameOffset+=2;
|
||||
frameBuffer[frameOffset++]=rnti;
|
||||
frameBuffer[frameOffset++] = t->rnti;
|
||||
frameOffset++;
|
||||
frameBuffer[frameOffset++]=oob_event_value;
|
||||
frameBuffer[frameOffset++] = t->oob_event_value;
|
||||
frameOffset++;
|
||||
break;
|
||||
|
||||
@@ -378,11 +377,11 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
/* Append actual PDU */
|
||||
//memcpy(frameBuffer+frameOffset, g_PDUBuffer, g_PDUOffset);
|
||||
//frameOffset += g_PDUOffset;
|
||||
if (pdu_buffer != NULL) {
|
||||
const int sz = min(pdu_buffer_size, sizeof(frameBuffer)-frameOffset);
|
||||
memcpy(frameBuffer+frameOffset, (void *)pdu_buffer, sz);
|
||||
if ( pdu_buffer_size != sz )
|
||||
LOG_W(OPT,"pdu is huge : %d\n", pdu_buffer_size);
|
||||
if (t->pdu_buffer != NULL) {
|
||||
const int sz = min(t->pdu_buffer_size, sizeof(frameBuffer) - frameOffset);
|
||||
memcpy(frameBuffer + frameOffset, t->pdu_buffer, sz);
|
||||
if (t->pdu_buffer_size != sz)
|
||||
LOG_W(OPT, "pdu is huge : %d\n", t->pdu_buffer_size);
|
||||
frameOffset += sz;
|
||||
}
|
||||
|
||||
@@ -400,11 +399,8 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
}
|
||||
}
|
||||
|
||||
static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
guint16 rnti, guint16 ueid, guint16 frame, guint16 subframe,
|
||||
guint8 isPredefinedData, guint8 retx, guint8 crcStatus,
|
||||
guint8 oob_event, guint8 oob_event_value,
|
||||
uint8_t *pdu_buffer, unsigned int pdu_buffer_size) {
|
||||
static void SendFrameNR(guint8 radioType, ws_trace_t *t)
|
||||
{
|
||||
unsigned char frameBuffer[32000];
|
||||
unsigned int frameOffset;
|
||||
ssize_t bytesSent;
|
||||
@@ -416,33 +412,36 @@ static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
/******************************************************************************/
|
||||
/* Now write out fixed fields (the mandatory elements of struct mac_lte_info) */
|
||||
frameBuffer[frameOffset++] = radioType;
|
||||
frameBuffer[frameOffset++] = direction;
|
||||
frameBuffer[frameOffset++] = rntiType;
|
||||
frameBuffer[frameOffset++] = t->direction;
|
||||
frameBuffer[frameOffset++] = t->rntiType;
|
||||
/*************************************/
|
||||
/* Now optional fields */
|
||||
/* RNTI */
|
||||
frameBuffer[frameOffset++] = MAC_NR_RNTI_TAG;
|
||||
tmp16 = htons(rnti);
|
||||
tmp16 = htons(t->rnti);
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
/* UEId */
|
||||
frameBuffer[frameOffset++] = MAC_NR_UEID_TAG;
|
||||
tmp16 = htons(ueid);
|
||||
tmp16 = htons(t->ueid);
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
/* HARQid */
|
||||
frameBuffer[frameOffset++] = MAC_NR_HARQID;
|
||||
frameBuffer[frameOffset++] = t->harq_pid;
|
||||
/* Subframe number */
|
||||
frameBuffer[frameOffset++] = MAC_NR_FRAME_SLOT_TAG;
|
||||
tmp16 = htons(frame); // frame counter : this will give an expert info as wireshark expects SF and not F
|
||||
tmp16 = htons(t->sysFrame); // frame counter : this will give an expert info as wireshark expects SF and not F
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
tmp16 = htons(subframe); // frame counter : this will give an expert info as wireshark expects SF and not F
|
||||
tmp16 = htons(t->subframe); // frame counter : this will give an expert info as wireshark expects SF and not F
|
||||
memcpy(frameBuffer+frameOffset, &tmp16, 2);
|
||||
frameOffset += 2;
|
||||
if (direction == 0 ) { //ulink
|
||||
if (t->direction == 0) { // ulink
|
||||
frameBuffer[frameOffset++] = MAC_NR_PHR_TYPE2_OTHERCELL_TAG;
|
||||
frameBuffer[frameOffset++] = 0;
|
||||
}
|
||||
|
||||
|
||||
/***************************************/
|
||||
/* Now write the MAC PDU */
|
||||
frameBuffer[frameOffset++] = MAC_NR_PAYLOAD_TAG;
|
||||
@@ -450,11 +449,11 @@ static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
/* Append actual PDU */
|
||||
//memcpy(frameBuffer+frameOffset, g_PDUBuffer, g_PDUOffset);
|
||||
//frameOffset += g_PDUOffset;
|
||||
if (pdu_buffer != NULL) {
|
||||
const int sz=min(pdu_buffer_size, sizeof(frameBuffer)-frameOffset);
|
||||
memcpy(frameBuffer+frameOffset, (void *)pdu_buffer, sz);
|
||||
if ( sz != pdu_buffer_size )
|
||||
LOG_W(OPT,"large pdu: %d\n", pdu_buffer_size);
|
||||
if (t->pdu_buffer != NULL) {
|
||||
const int sz = min(t->pdu_buffer_size, sizeof(frameBuffer) - frameOffset);
|
||||
memcpy(frameBuffer + frameOffset, t->pdu_buffer, sz);
|
||||
if (sz != t->pdu_buffer_size)
|
||||
LOG_W(OPT, "large pdu: %d\n", t->pdu_buffer_size);
|
||||
frameOffset += sz;
|
||||
}
|
||||
|
||||
@@ -476,35 +475,33 @@ static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType,
|
||||
extern RAN_CONTEXT_t RC;
|
||||
#include <openair1/PHY/phy_extern_ue.h>
|
||||
/* Remote serveraddress (where Wireshark is running) */
|
||||
void nr_trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
|
||||
int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event,
|
||||
int oob_event_value) {
|
||||
trace_pdu_implementation(nr, direction, pdu_buffer, pdu_buffer_size,
|
||||
rnti, rntiType, rnti, sysFrameNumber, subFrameNumber, oob_event,
|
||||
oob_event_value);
|
||||
}
|
||||
|
||||
void trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
|
||||
int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event,
|
||||
int oob_event_value) {
|
||||
int radioType=FDD_RADIO;
|
||||
LOG_D(OPT,"sending packet to wireshark: direction=%s, size: %d, ueid: %d, rnti: %x, frame/sf: %d.%d\n",
|
||||
direction?"DL":"UL", pdu_buffer_size, ueid, rnti, sysFrameNumber,subFrameNumber);
|
||||
void trace_pdu_implementation(ws_trace_t *t)
|
||||
{
|
||||
int radioType = FDD_RADIO;
|
||||
LOG_D(OPT,
|
||||
"sending packet to wireshark: direction=%s, size: %d, ueid: %d, rnti: %x, frame/sf: %d.%d\n",
|
||||
t->direction ? "DL" : "UL",
|
||||
t->pdu_buffer_size,
|
||||
t->ueid,
|
||||
t->rnti,
|
||||
t->sysFrame,
|
||||
t->subframe);
|
||||
|
||||
if (nr) {
|
||||
radioType=TDD_RADIO;
|
||||
if (t->nr) {
|
||||
radioType = TDD_RADIO;
|
||||
} else {
|
||||
if (RC.eNB && RC.eNB[0][0]!=NULL)
|
||||
radioType=RC.eNB[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
|
||||
if (RC.eNB && RC.eNB[0][0] != NULL)
|
||||
radioType = RC.eNB[0][0]->frame_parms.frame_type == FDD ? FDD_RADIO : TDD_RADIO;
|
||||
else if (PHY_vars_UE_g && PHY_vars_UE_g[0][0] != NULL)
|
||||
radioType=PHY_vars_UE_g[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
|
||||
radioType = PHY_vars_UE_g[0][0]->frame_parms.frame_type == FDD ? FDD_RADIO : TDD_RADIO;
|
||||
else {
|
||||
LOG_E(OPT,"not a 4G eNB neither a 4G UE!!! \n");
|
||||
LOG_E(OPT, "not a 4G eNB neither a 4G UE!!! \n");
|
||||
}
|
||||
}
|
||||
|
||||
switch (opt_type) {
|
||||
case OPT_WIRESHARK :
|
||||
case OPT_WIRESHARK:
|
||||
if (g_socksd == -1)
|
||||
return;
|
||||
|
||||
@@ -522,20 +519,10 @@ void trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsign
|
||||
break;
|
||||
}
|
||||
|
||||
if (nr)
|
||||
SendFrameNR( radioType,
|
||||
(direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK : DIRECTION_UPLINK,
|
||||
rntiType, rnti, ueid, sysFrameNumber, subFrameNumber,
|
||||
1, 0, 1, //guint8 isPredefinedData, guint8 retx, guint8 crcStatus
|
||||
oob_event,oob_event_value,
|
||||
pdu_buffer, pdu_buffer_size);
|
||||
else
|
||||
SendFrame( radioType,
|
||||
(direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK : DIRECTION_UPLINK,
|
||||
rntiType, rnti, ueid, sysFrameNumber, subFrameNumber,
|
||||
1, 0, 1, //guint8 isPredefinedData, guint8 retx, guint8 crcStatus
|
||||
oob_event,oob_event_value,
|
||||
pdu_buffer, pdu_buffer_size);
|
||||
if (t->nr)
|
||||
SendFrameNR(radioType, t);
|
||||
else
|
||||
SendFrame(radioType, t);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
|
||||
@@ -220,14 +220,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -211,14 +211,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -204,14 +204,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -220,14 +220,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -217,14 +217,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -204,14 +204,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_DISABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -204,14 +204,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_DISABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -202,14 +202,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_DISABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -202,14 +202,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_DISABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -214,14 +214,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -217,14 +217,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -215,14 +215,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -262,14 +262,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -213,14 +213,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -214,14 +214,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -212,14 +212,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -216,14 +216,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
#rfsimulator :
|
||||
#{
|
||||
|
||||
@@ -205,14 +205,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -215,14 +215,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -213,14 +213,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -213,14 +213,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -206,14 +206,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
@@ -216,15 +216,6 @@ RUs = (
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
//parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user