diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4aefd12b54..d2c594aad5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -500,10 +500,10 @@ target_link_libraries(shlib_loader PRIVATE CONFIG_LIB)
add_boolean_option(ENABLE_LDPC_T2 OFF "Build support for LDPC Offload to T2 library" OFF)
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/x86_64-linux-gnu/pkgconfig")
if (ENABLE_LDPC_T2)
- pkg_check_modules(LIBDPDK_T2 REQUIRED libdpdk=20.11.7)
- find_library(PMD_T2 NAMES rte_baseband_accl_ldpc HINTS "/opt/dpdk-t2/lib/x86_64-linux-gnu/")
+ pkg_check_modules(LIBDPDK_T2 REQUIRED libdpdk=20.11.9)
+ find_library(PMD_T2 NAMES rte_baseband_accl_ldpc HINTS ${LIBDPDK_T2_LIBRARY_DIRS})
if (NOT PMD_T2)
- message(FATAL_ERROR "could not find PMD T2")
+ message(FATAL_ERROR "could not find poll-mode driver for AccelerComm T2 LDPC Offload (rte_baseband_accl_ldpc.so)")
endif()
message(STATUS "T2 build: use ${PMD_T2}")
add_library(ldpc_t2 MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c)
@@ -1687,7 +1687,7 @@ set(libnas_ies_OBJS
set (libnas_utils_OBJS
${NAS_SRC}COMMON/UTIL/device.c
- ${NAS_SRC}COMMON/UTIL/memory.c
+ common/utils/mem/memory.c
${NAS_SRC}COMMON/UTIL/nas_timer.c
${NAS_SRC}COMMON/UTIL/socket.c
${NAS_SRC}COMMON/UTIL/stty.c
@@ -2052,7 +2052,6 @@ add_executable(nr-softmodem
${rrc_h}
${nr_rrc_h}
${s1ap_h}
-# ${OPENAIR_BIN_DIR}/messages_xml.h
${OPENAIR_DIR}/executables/nr-gnb.c
${OPENAIR_DIR}/executables/nr-ru.c
${OPENAIR_DIR}/executables/nr-softmodem.c
@@ -2121,7 +2120,6 @@ target_link_libraries(nr-cuup PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
add_executable(nr-uesoftmodem
${rrc_h}
${s1ap_h}
-# ${OPENAIR_BIN_DIR}/messages_xml.h
${OPENAIR_DIR}/executables/nr-uesoftmodem.c
${OPENAIR_DIR}/executables/nr-ue.c
${OPENAIR_DIR}/executables/softmodem-common.c
@@ -2439,9 +2437,6 @@ make_driver(nasmesh ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH ${nasmesh_src})
# user space tool for configuring MESH IP driver
################
add_executable(rb_tool
- ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/constant.h
- ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/ioctl.h
- ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/rrc_nas_primitives.h
${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c
)
target_include_directories(rb_tool PRIVATE ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/)
diff --git a/ci-scripts/as_ue/aw2s-multi-20897-2x2.cfg b/ci-scripts/as_ue/aw2s-multi-20897-2x2.cfg
new file mode 100644
index 0000000000..b9707b801e
--- /dev/null
+++ b/ci-scripts/as_ue/aw2s-multi-20897-2x2.cfg
@@ -0,0 +1,281 @@
+/* UE simulator configuration file version 2021-06-17
+ * LTE / 5G Non StandAlone
+ * Copyright (C) 2019-2021 Amarisoft
+ */
+{
+#define N_ANTENNA_DL 2
+#define N_ANTENNA_UL 2
+#define TDD 1
+
+log_options: "all.level=warn,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
+log_filename: "/tmp/ue.log",
+
+/* Enable remote API and Web interface */
+com_addr: "0.0.0.0:9002",
+
+include "rf_driver/1chan.cfg",
+
+/* If true, allow the simulation of several UEs at the same time and
+allow dynamic UE creation from remote API */
+
+ cell_groups: [{
+ group_type: "nr",
+ multi_ue: true,
+ cells: [{
+ rf_port: 0,
+ bandwidth: 20,
+ band: 78,
+ dl_nr_arfcn:627360,
+ ssb_nr_arfcn:627360,
+ subcarrier_spacing: 30,
+ n_antenna_dl: N_ANTENNA_DL,
+ n_antenna_ul: N_ANTENNA_UL,
+ rx_to_tx_latency:2,
+ }],
+ }],
+
+ /* UE capabilities */
+ /* USIM data */
+ ue_list: [
+ {
+ "ue_id" : 1,
+ "imsi": "208970000000111",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 2,
+ "imsi": "208970000000112",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 3,
+ "imsi": "208970000000113",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 4,
+ "imsi": "208970000000114",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 5,
+ "imsi": "208970000000115",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 6,
+ "imsi": "208970000000116",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 7,
+ "imsi": "208970000000100",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 8,
+ "imsi": "208970000000102",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 9,
+ "imsi": "208970000000103",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 10,
+ "imsi": "208970000000104",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 11,
+ "imsi": "208970000000110",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 12,
+ "imsi": "208970000000105",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 13,
+ "imsi": "208970000000106",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 14,
+ "imsi": "208970000000107",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 15,
+ "imsi": "208970000000108",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ {
+ "ue_id" : 16,
+ "imsi": "208970000000109",
+ "K": "fec86ba6eb707ed08905757b1bb44b8f",
+ "sim_algo":"milenage",
+ "op": "1006020f0a478bf6b699f15c062e42b3",
+
+ as_release: 15,
+ ue_category: "nr",
+ apn:"oai",
+ attach_pdn_type:"ipv4",
+ default_nssai: [ { sst: 1, }, ],
+ default_pdu_session_snssai: { sst: 1, },
+ tun_setup_script: "ue-ifup",
+ },
+ ],
+}
diff --git a/ci-scripts/ci_ueinfra.yaml b/ci-scripts/ci_ueinfra.yaml
index 9d70d9f1c0..f5aabf9167 100644
--- a/ci-scripts/ci_ueinfra.yaml
+++ b/ci-scripts/ci_ueinfra.yaml
@@ -49,7 +49,7 @@ adb_ue_2:
amarisoft_ue:
Host: amariue
- InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue/aw2s-multi-20897-2x2.cfg &
+ InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-20897-2x2.cfg &
TermScript: /root/2023-10-27/libs/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
amarisoft_ue_1:
Host: amariue
diff --git a/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf b/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf
index 8a33b6dd96..7f975cbcd4 100644
--- a/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf
+++ b/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf
@@ -23,8 +23,8 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "eth0";
- local_s_address = "192.168.71.140";
- remote_s_address = "192.168.71.142";
+ local_s_address = "192.168.71.150";
+ remote_s_address = "192.168.71.171";
local_s_portc = 501;
local_s_portd = 2153;
remote_s_portc = 500;
@@ -51,9 +51,9 @@ gNBs =
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
- GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.150";
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
- GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.150";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
diff --git a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf
index 469ab8d187..94200b8189 100644
--- a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf
+++ b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf
@@ -16,7 +16,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }, { sst = 2 }, { sst = 3 }) });
nr_cellid = 12345678L;
@@ -24,8 +24,8 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "lo";
- local_s_address = "192.168.72.140";
- remote_s_address = "192.168.72.143";
+ local_s_address = "192.168.71.150";
+ remote_s_address = "0.0.0.0"; # multiple DUs
local_s_portc = 501;
local_s_portd = 2152;
remote_s_portc = 500;
@@ -52,9 +52,9 @@ gNBs =
(
{
type = "cp";
- ipv4_cucp = "192.168.72.140";
+ ipv4_cucp = "192.168.71.150";
port_cucp = 38462;
- ipv4_cuup = "192.168.72.141";
+ ipv4_cuup = "0.0.0.0"; # multiple CU-UPs
port_cuup = 38462;
}
)
diff --git a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf
index d6c54f0b9a..07e3701749 100644
--- a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf
+++ b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf
@@ -22,12 +22,12 @@ gNBs =
tr_s_preference = "f1";
local_s_if_name = "lo";
- local_s_address = "192.168.72.141";
- remote_s_address = "192.168.72.142";
+ local_s_address = "192.168.72.161";
+ remote_s_address = "192.168.72.171";
local_s_portc = 501;
- local_s_portd = 2152;
+ local_s_portd = 2153;
remote_s_portc = 500;
- remote_s_portd = 2152;
+ remote_s_portd = 2153;
# ------- SCTP definitions
SCTP :
@@ -41,17 +41,17 @@ gNBs =
(
{
type = "up";
- ipv4_cucp = "192.168.72.140";
- ipv4_cuup = "192.168.72.141";
+ ipv4_cucp = "192.168.71.150";
+ ipv4_cuup = "192.168.71.161";
}
)
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
- GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.141/24";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.161/24";
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
- GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.141/24";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.161/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
diff --git a/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf b/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf
index 75d2beed6d..9d8a3cb57b 100644
--- a/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf
+++ b/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf
@@ -15,7 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }, { sst = 2 }, { sst = 3 } ) });
nr_cellid = 12345678L;
@@ -23,7 +23,6 @@ gNBs =
////////// Physical parameters:
min_rxtxtime = 6;
- force_256qam_off = 1;
servingCellConfigCommon = (
{
@@ -170,8 +169,8 @@ MACRLCs = (
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_if_name = "eth0";
- local_n_address = "192.168.71.142";
- remote_n_address = "192.168.71.140";
+ local_n_address = "192.168.71.171";
+ remote_n_address = "192.168.71.150";
local_n_portc = 500;
local_n_portd = 2153;
remote_n_portc = 501;
diff --git a/ci-scripts/conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.conf b/ci-scripts/conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.conf
index 5f6d6a4937..802d2b2290 100644
--- a/ci-scripts/conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.conf
+++ b/ci-scripts/conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.conf
@@ -22,9 +22,9 @@ gNBs =
////////// Physical parameters:
pdsch_AntennaPorts_XP = 2;
- pusch_AntennaPorts = 1;
+ pusch_AntennaPorts = 2;
do_CSIRS = 1;
- do_SRS = 0;
+ do_SRS = 1;
servingCellConfigCommon = (
{
diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml
index b89b8a2bd2..b53a01da13 100644
--- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml
@@ -27,14 +27,10 @@
111111
100021
- 000020
000021
000022
000023
- 000024
020021
- 020022
- 030021
100021
@@ -46,80 +42,38 @@
oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan
-
- DeployGenObject
- Deploy MySql Database
- yaml_files/5g_rfsimulator_e1
- mysql
- 1
-
-
DeployGenObject
Deploy OAI 5G CoreNetwork
yaml_files/5g_rfsimulator_e1
- oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn
- 6
+ mysql oai-nrf oai-amf oai-smf oai-spgwu
+ 5
DeployGenObject
- Deploy OAI 5G CU-CP RF sim SA
+ Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs)
yaml_files/5g_rfsimulator_e1
- oai-cucp
- 7
+ oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3
+ 12
- DeployGenObject
- Deploy OAI 5G CU-UP and DU RF sim SA
- yaml_files/5g_rfsimulator_e1
- oai-cuup oai-du
- 9
-
-
-
DeployGenObject
Deploy OAI 5G NR-UE RF sim SA
yaml_files/5g_rfsimulator_e1
- oai-nr-ue
- 10
+ oai-nr-ue oai-nr-ue2 oai-nr-ue3
+ 15
Ping
- Ping ext-dn from NR-UE
- rfsim5g_ue
- -c 20 192.168.73.135
+ Ping ext-dn from all NR-UEs
+ rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3
+ -c 20 12.1.1.1 -i0.25
5
-
- Ping
- Ping NR-UE from ext-dn
- rfsim5g_ext_dn
- -c 20 12.1.1.2
- 5
-
-
-
- IperfFromContainer
- Iperf UDP Downlink
- rfsim5g-oai-nr-ue
- rfsim5g-oai-ext-dn
- -B 12.1.1.2 -u -i 1 -s
- -c 12.1.1.2 -u -i 1 -t 30 -b 3M
-
-
-
- IperfFromContainer
- Iperf UDP Uplink
- rfsim5g-oai-ext-dn
- rfsim5g-oai-nr-ue
- -u -i 1 -s
- -B 12.1.1.2 -c 192.168.73.135 -u -i 1 -t 30 -b 1M
-
-
UndeployGenObject
Undeploy all OAI 5G stack
diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml b/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml
index a1213c9b9b..4ccf180fd0 100644
--- a/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml
+++ b/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml
@@ -22,7 +22,7 @@
-->
rfsim-5gnr-down-e1
- CleanUp CUCP-CUUP-DU E1+F1 split
+ CleanUp E1+F1 split
trash
100022
diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml
index 6f8f71095c..c6eb681a58 100644
--- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml
@@ -27,13 +27,11 @@
111111
100021
- 000020
000021
000022
- 000023
- 000024
- 000025
020021
+ 030021
+ 030022
100021
@@ -42,61 +40,29 @@
Pull_Local_Registry
Pull Images from Local Registry
0
- oai-gnb-asan oai-nr-ue-asan
-
-
-
- DeployGenObject
- Deploy MySql Database
- yaml_files/5g_f1_rfsimulator
- mysql
- 1
+ oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan
DeployGenObject
Deploy OAI 5G CoreNetwork
yaml_files/5g_f1_rfsimulator
- oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn
+ mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn
6
DeployGenObject
- Deploy OAI 5G CU RF sim SA
+ Deploy OAI 5G CU+DU+UE RF sim SA
yaml_files/5g_f1_rfsimulator
- oai-cu
- 7
-
-
-
- DeployGenObject
- Deploy 3 OAI 5G DUs RF sim SA
- yaml_files/5g_f1_rfsimulator
- oai-du oai-du2 oai-du3
- 10
-
-
-
- DeployGenObject
- Deploy OAI 5G NR-UE RF sim SA
- yaml_files/5g_f1_rfsimulator
- oai-nr-ue oai-nr-ue2
- 12
-
-
-
- DeployGenObject
- Deploy OAI 5G NR-UE RF sim SA
- yaml_files/5g_f1_rfsimulator
- oai-nr-ue3
- 13
+ oai-cu oai-du oai-nr-ue
+ 9
Ping
Ping ext-dn from all NR-UEs
- rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3
+ rfsim5g_ue
-c 20 192.168.72.135 -i0.25
5
@@ -107,7 +73,7 @@
rfsim5g-oai-nr-ue
rfsim5g-oai-ext-dn
-B 12.1.1.2 -u -i 1 -s
- -c 12.1.1.2 -u -i 1 -t 30 -b 3M
+ -c 12.1.1.2 -u -i 1 -t 10 -b 20M
@@ -116,7 +82,7 @@
rfsim5g-oai-ext-dn
rfsim5g-oai-nr-ue
-u -i 1 -s
- -B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 1M
+ -B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 10 -b 5M
diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml
index 1bca25027f..dd18ee7132 100644
--- a/ci-scripts/xml_files/container_5g_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_rfsim.xml
@@ -28,7 +28,6 @@
111111
100001
- 000000
000001
000002
000003
@@ -36,6 +35,7 @@
000005
000006
000007
+ 000008
020001
020002
020003
@@ -61,19 +61,11 @@
oai-gnb-asan oai-nr-ue
-
- DeployGenObject
- Deploy MySql Database
- yaml_files/5g_rfsimulator
- mysql
- 1
-
-
DeployGenObject
Deploy OAI 5G CoreNetwork
yaml_files/5g_rfsimulator
- oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn
+ mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn
6
@@ -125,6 +117,12 @@
17
+
+ Attach_UE
+ Attach OAI UE (Wait for IP)
+ rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10
+
+
Ping
Ping ext-dn from NR-UE
diff --git a/ci-scripts/xml_files/container_sa_aw2s_asue.xml b/ci-scripts/xml_files/container_sa_aw2s_asue.xml
index a7e1dc25df..4d81b123e6 100644
--- a/ci-scripts/xml_files/container_sa_aw2s_asue.xml
+++ b/ci-scripts/xml_files/container_sa_aw2s_asue.xml
@@ -145,8 +145,8 @@
Iperf
- iperf (UL/2Mbps/UDP)(30 sec)(multi-ue profile)
- -u -b 20M -t 30 -i 1
+ iperf (UL/3.6Mbps/UDP)(30 sec)(multi-ue profile)
+ -u -b 36M -t 30 -i 1
IPERF3
amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10
25
diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
index 8d62746300..308efdc33b 100644
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
@@ -49,8 +49,10 @@ services:
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
- # Only one slice is defined (1, 0xFFFFFF).
+ # Three slices are defined
- SST_0=1
+ - SST_1=2
+ - SST_2=3
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
@@ -101,6 +103,8 @@ services:
- TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1
+ - NSSAI_SST1=2
+ - NSSAI_SST2=3
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
@@ -127,10 +131,16 @@ services:
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- # Only one slice is defined (1, 0xFFFFFF)
+ # Three slices are defined
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
+ - NSSAI_SST_1=2
+ - NSSAI_SD_1=0xffffff
+ - DNN_1=oai
+ - NSSAI_SST_2=3
+ - NSSAI_SD_2=0xffffff
+ - DNN_2=oai
depends_on:
- oai-nrf
- oai-smf
@@ -145,6 +155,7 @@ services:
ipv4_address: 192.168.71.134
traffic_net:
ipv4_address: 192.168.72.134
+
oai-ext-dn:
privileged: true
container_name: rfsim5g-oai-ext-dn
@@ -162,6 +173,7 @@ services:
interval: 10s
timeout: 5s
retries: 5
+
oai-cu:
image: oaisoftwarealliance/oai-gnb:develop
privileged: true
@@ -173,7 +185,7 @@ services:
- oai-ext-dn
networks:
public_net:
- ipv4_address: 192.168.71.140
+ ipv4_address: 192.168.71.150
volumes:
- ../../conf_files/gnb-cu.sa.band78.106prb.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
@@ -181,56 +193,19 @@ services:
interval: 10s
timeout: 5s
retries: 5
+
oai-du:
image: oaisoftwarealliance/oai-gnb:develop
privileged: true
container_name: rfsim5g-oai-du
- environment:
+ environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on:
- oai-cu
networks:
public_net:
- ipv4_address: 192.168.71.142
- volumes:
- - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
- healthcheck:
- test: /bin/bash -c "pgrep nr-softmodem"
- interval: 10s
- timeout: 5s
- retries: 5
- oai-du2:
- image: oaisoftwarealliance/oai-gnb:develop
- privileged: true
- container_name: rfsim5g-oai-du2
- environment:
- USE_ADDITIONAL_OPTIONS: --sa --rfsim --gNBs.[0].gNB_DU_ID 0xe01 --gNBs.[0].nr_cellid 87654321 --gNBs.[0].servingCellConfigCommon.[0].physCellId 1 --MACRLCs.[0].local_n_address 192.168.71.143 --log_config.global_log_options level,nocolor,time
- ASAN_OPTIONS: detect_leaks=0
- depends_on:
- - oai-cu
- networks:
- public_net:
- ipv4_address: 192.168.71.143
- volumes:
- - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
- healthcheck:
- test: /bin/bash -c "pgrep nr-softmodem"
- interval: 10s
- timeout: 5s
- retries: 5
- oai-du3:
- image: oaisoftwarealliance/oai-gnb:develop
- privileged: true
- container_name: rfsim5g-oai-du3
- environment:
- USE_ADDITIONAL_OPTIONS: --sa --rfsim --gNBs.[0].gNB_DU_ID 0xe02 --gNBs.[0].nr_cellid 11111111 --gNBs.[0].servingCellConfigCommon.[0].physCellId 2 --MACRLCs.[0].local_n_address 192.168.71.144 --log_config.global_log_options level,nocolor,time
- ASAN_OPTIONS: detect_leaks=0
- depends_on:
- - oai-cu
- networks:
- public_net:
- ipv4_address: 192.168.71.144
+ ipv4_address: 192.168.71.171
volumes:
- ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
@@ -238,56 +213,22 @@ services:
interval: 10s
timeout: 5s
retries: 5
+
oai-nr-ue:
image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true
container_name: rfsim5g-oai-nr-ue
- environment:
- USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.142 --log_config.global_log_options level,nocolor,time
+ environment:
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
+ -r 106 --numerology 1 -C 3619200000
+ --uicc0.imsi 208990100001100
+ --rfsimulator.serveraddr 192.168.71.171
ASAN_OPTIONS: detect_leaks=0
depends_on:
- oai-du
networks:
public_net:
- ipv4_address: 192.168.71.150
- volumes:
- - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
- healthcheck:
- test: /bin/bash -c "pgrep nr-uesoftmodem"
- interval: 10s
- timeout: 5s
- retries: 5
- oai-nr-ue2:
- image: oaisoftwarealliance/oai-nr-ue:develop
- privileged: true
- container_name: rfsim5g-oai-nr-ue2
- environment:
- USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3619200000 --rfsimulator.serveraddr 192.168.71.143 --log_config.global_log_options level,nocolor,time
- ASAN_OPTIONS: detect_leaks=0
- depends_on:
- - oai-du2
- networks:
- public_net:
- ipv4_address: 192.168.71.151
- volumes:
- - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
- healthcheck:
- test: /bin/bash -c "pgrep nr-uesoftmodem"
- interval: 10s
- timeout: 5s
- retries: 5
- oai-nr-ue3:
- image: oaisoftwarealliance/oai-nr-ue:develop
- privileged: true
- container_name: rfsim5g-oai-nr-ue3
- environment:
- USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3619200000 --rfsimulator.serveraddr 192.168.71.144 --log_config.global_log_options level,nocolor,time
- ASAN_OPTIONS: detect_leaks=0
- depends_on:
- - oai-du3
- networks:
- public_net:
- ipv4_address: 192.168.71.152
+ ipv4_address: 192.168.71.181
volumes:
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
healthcheck:
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md
index 72756b1441..4efd2714b4 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/README.md
+++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md
@@ -65,7 +65,8 @@ $ docker logout
All the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_rfsimulator` folder for a deployment with monolithic gNB.
-For a deployment with the gNB split in CU and DU components, the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_f1_rfsimulator` folder.
+For a deployment with the gNB split in CU and DU components, please refer to the `../5g_f1_rfsimulator` folder.
+For a deployment with the gNB split in CU-CP, CU-UP, and DU components, please refer to the ../5g_rfsimulator_e1` folder.
## 2.1. Deploy OAI 5G Core Network ##
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md
new file mode 100644
index 0000000000..2cc0ec88ab
--- /dev/null
+++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md
@@ -0,0 +1,230 @@
+# CI test for 5G F1+E1 splits with RFsimulator
+
+## General
+
+This docker-compose file deploys a core, RAN, and 3 UEs. Specifically:
+
+- 5GC mini deployment,
+- 1 CU-CP,
+- 3 CU-UPs, one for slices SST=1,2,3,
+- 3 DUs,
+- 3 UEs connecting to each DU, each requesting slice SST=1,2,3.
+
+The CU-CP associates each UE X connecting through DU X to CU-UP X, X=1,2,3. To this end, the docker-compose file deliberately employs the three `f1u_netX` networks to route the user-plane traffic of each DU X/CU-UP X pair, through the `f1u_netX` network in order to effectively test that the correct CU-UP is associated. Basically, the traffic test will only succeed if the correct pair of DU/CU-UP has been established; if not, the DU/CU-UP cannot communicate, as the traffic cannot be routed.
+
+Core network components are on `core_net` network, CU-CP <--> CU-UP X communicate via `e1_net` network, CU-CP <--> DU X communicate via `f1c_net` network and DU X <--> NR_UE X communicate via `ue_net` network.
+
+
+## Connectivity
+
+```
+AMF --> 192.168.71.132 (N2,Namf)
+SMF --> 192.168.71.133 (N4,Nsmf)
+NRF --> 192.168.71.130 (Nnrf)
+SPGWU --> 192.168.71.134 (N3)
+CU-CP --> 192.168.71.X (N2), 192.168.72.2 (F1C), 192.168.77.2 (E1)
+CU-UP1 --> 192.168.71.X (N3), 192.168.73.2 (F1U), 192.168.77.3 (E1)
+CU-UP2 --> 192.168.71.X (N3), 192.168.74.2 (F1U), 192.168.77.4 (E1)
+CU-UP3 --> 192.168.71.X (N3), 192.168.76.2 (F1U), 192.168.77.5 (E1)
+DU1 --> 192.168.72.2 (F1C), 192.168.73.3 (F1U), 192.168.78.2 (RFSIM)
+DU2 --> 192.168.72.3 (F1C), 192.168.74.3 (F1U), 192.168.78.3 (RFSIM)
+DU3 --> 192.168.72.4 (F1C), 192.168.76.3 (F1U), 192.168.78.4 (RFSIM)
+UE1 --> 192.168.78.5 (RFSIM)
+UE2 --> 192.168.78.6 (RFSIM)
+UE3 --> 192.168.78.7 (RFSIM)
+```
+
+## How to run
+
+You should be able to deploy the [basic 5G RFsim deployment](../5g_rfsimulator/README.md).
+
+First, start the MySQL server and 5GC:
+
+```bash
+docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu
+docker-compose ps -a
+```
+
+Wait till everything is healthy.
+
+Next, start the RAN:
+
+```bash
+docker-compose up -d oai-cucp oai-cuup{,2,3} oai-du{,2,3}
+```
+
+You can verify that the DUs and CU-UPs connected successfully:
+```bash
+docker logs rfsim5g-oai-cucp
+```
+
+
+The output is similar to:
+
+```console
+[...]
+18535.139811 [RRC] I Accepting new CU-UP ID 3585 name gNB-OAI (assoc_id 257)
+18535.425744 [RRC] I Accepting new CU-UP ID 3584 name gNB-OAI (assoc_id 260)
+18535.425757 [RRC] I Accepting new CU-UP ID 3586 name gNB-OAI (assoc_id 261)
+18535.669733 [NR_RRC] I Received F1 Setup Request from gNB_DU 3585 (du-rfsim) on assoc_id 263
+18535.669814 [RRC] I Accepting DU 3585 (du-rfsim), sending F1 Setup Response
+18536.066417 [NR_RRC] I Received F1 Setup Request from gNB_DU 3586 (du-rfsim) on assoc_id 265
+18536.066476 [RRC] I Accepting DU 3586 (du-rfsim), sending F1 Setup Response
+18536.135581 [NR_RRC] I Received F1 Setup Request from gNB_DU 3584 (du-rfsim) on assoc_id 267
+18536.135650 [RRC] I Accepting DU 3584 (du-rfsim), sending F1 Setup Response
+```
+
+
+You should see that the CU-UP initialized two GTP instances (one for NG-U, the other for F1-U):
+
+```bash
+docker logs -f rfsim5g-oai-cuup
+```
+
+
+The output is similar to:
+
+```console
+[...]
+122690.500374 [GTPU] I Initializing UDP for local address 192.168.73.2 with port 2153
+122690.500406 [GTPU] I Created gtpu instance id: 96
+122690.500413 [GTPU] I Configuring GTPu address : 192.168.71.161, port : 2152
+122690.500414 [GTPU] I Initializing UDP for local address 192.168.71.161 with port 2152
+122690.500420 [GTPU] I Created gtpu instance id: 97
+```
+
+
+
+
+You should see the typical periodical output at the DUs:
+
+```bash
+docker logs rfsim5g-oai-du
+```
+
+The output is similar to:
+
+```console
+[...]
+18626.446953 [NR_MAC] I Frame.Slot 128.0
+
+18629.151076 [NR_MAC] I Frame.Slot 256.0
+```
+
+
+```
+
+Next, connect the UEs. They are configured to connect to each DU by setting the
+RFsimulator server address to the `public_net` IP address of each DU. For each,
+you should see that they get an IP address
+
+```bash
+docker compose up -d oai-nr-ue{,2,3}
+```
+
+```bash
+docker logs rfsim5g-oai-nr-ue
+```
+
+
+The output is similar to:
+
+```console
+[...]
+18758.176149 [NR_RRC] I rrcReconfigurationComplete Encoded 10 bits (2 bytes)
+18758.176153 [NR_RRC] I Logical Channel UL-DCCH (SRB1), Generating RRCReconfigurationComplete (bytes 2)
+18758.176154 [NAS] I [UE 0] Received NAS_CONN_ESTABLI_CNF: errCode 1, length 87
+18758.176455 [OIP] I Interface oaitun_ue1 successfully configured, ip address 12.1.1.3, mask 255.255.255.0 broadcast address 12.1.1.255
+```
+
+
+
+Alternatively, check that they all received an IP address (the associated IP addresses might be different):
+
+```bash
+docker exec -it rfsim5g-oai-nr-ue3 ip a show oaitun_ue1
+```
+
+The output is similar to:
+
+```console
+[...]
+ inet 12.1.1.2/24 brd 12.1.1.255 scope global oaitun_ue1
+[...]
+```
+
+
+```bash
+docker exec -it rfsim5g-oai-nr-ue2 ip a show oaitun_ue1
+```
+
+The output is similar to:
+
+```console
+[...]
+ inet 12.1.1.4/24 brd 12.1.1.255 scope global oaitun_ue1
+[...]
+```
+
+
+```bash
+docker exec -it rfsim5g-oai-nr-ue ip a show oaitun_ue1
+```
+
+The output is similar to:
+
+```console
+[...]
+ inet 12.1.1.3/24 brd 12.1.1.255 scope global oaitun_ue1
+[...]
+```
+
+
+
+
+Also, note that each DU sees only one UE! At the CU-CP, you should see that
+each DU has been associated to a different CU-UP, based on the NSSAI (`exact
+NSSAI match`):
+```bash
+docker logs rfsim5g-oai-cucp | grep CU-U
+```
+
+
+The output is similar to:
+
+```console
+[...]
+18757.531423 [RRC] I selecting CU-UP ID 3586 based on exact NSSAI match (3:0xffffff)
+18757.531434 [RRC] I UE 1 associating to CU-UP assoc_id 261 out of 3 CU-UPs
+18758.171502 [RRC] I selecting CU-UP ID 3584 based on exact NSSAI match (1:0xffffff)
+18758.171510 [RRC] I UE 2 associating to CU-UP assoc_id 260 out of 3 CU-UPs
+18758.772320 [RRC] I selecting CU-UP ID 3585 based on exact NSSAI match (2:0xffffff)
+18758.772327 [RRC] I UE 3 associating to CU-UP assoc_id 257 out of 3 CU-UPs
+```
+
+
+
+Also, each UE should be able to ping the core network. For instance, with UE 1:
+```bash
+docker exec -it rfsim5g-oai-nr-ue ping -c1 12.1.1.1
+```
+
+The output is similar to:
+
+```console
+PING 12.1.1.1 (12.1.1.1) 56(84) bytes of data.
+64 bytes from 12.1.1.1: icmp_seq=1 ttl=64 time=15.2 ms
+
+--- 12.1.1.1 ping statistics ---
+1 packets transmitted, 1 received, 0% packet loss, time 0ms
+rtt min/avg/max/mdev = 15.155/15.155/15.155/0.000 ms
+```
+
+
+
+Finally, undeploy the UEs (to give them time to do deregistration), and then
+the rest of the network:
+```bash
+docker compose stop oai-nr-ue{,2,3}
+docker compose down
+```
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml
index 4eaa942824..adfdefbccf 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml
@@ -5,7 +5,7 @@ services:
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- - TZ=Europe/Paris
+ - TZ=Europe/1
networks:
core_net:
ipv4_address: 192.168.71.130
@@ -13,10 +13,10 @@ services:
container_name: "rfsim5g-mysql"
image: mysql:8.0
volumes:
- - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
+ - ../5g_f1_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
+ - ../5g_f1_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
environment:
- - TZ=Europe/Paris
+ - TZ=Europe/1
- MYSQL_DATABASE=oai_db
- MYSQL_USER=test
- MYSQL_PASSWORD=test
@@ -33,7 +33,7 @@ services:
container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0
environment:
- - TZ=Europe/paris
+ - TZ=Europe/1
- MCC=208
- MNC=99
- REGION_ID=128
@@ -49,8 +49,10 @@ services:
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
- # Only one slice is defined (1, 0xFFFFFF).
+ # Three slices are defined
- SST_0=1
+ - SST_1=2
+ - SST_2=3
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
@@ -80,7 +82,7 @@ services:
container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0
environment:
- - TZ=Europe/Paris
+ - TZ=Europe/1
- SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
@@ -101,6 +103,8 @@ services:
- TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1
+ - NSSAI_SST1=2
+ - NSSAI_SST2=3
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
@@ -115,7 +119,7 @@ services:
container_name: "rfsim5g-oai-spgwu"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment:
- - TZ=Europe/Paris
+ - TZ=Europe/1
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0
@@ -127,10 +131,16 @@ services:
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- # Only one slice is defined (1, 0xFFFFFF)
+ # Three slices are defined
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
+ - NSSAI_SST_1=2
+ - NSSAI_SD_1=0xffffff
+ - DNN_1=oai
+ - NSSAI_SST_2=3
+ - NSSAI_SD_2=0xffffff
+ - DNN_2=oai
depends_on:
- oai-nrf
- oai-smf
@@ -143,26 +153,6 @@ services:
networks:
core_net:
ipv4_address: 192.168.71.134
- traffic_net:
- ipv4_address: 192.168.73.134
-
- oai-ext-dn:
- privileged: true
- container_name: rfsim5g-oai-ext-dn
- image: oaisoftwarealliance/trf-gen-cn5g:focal
- entrypoint: /bin/bash -c \
- "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
- "ip route add 12.1.1.0/24 via 192.168.73.134 dev eth0; sleep infinity"
- depends_on:
- - oai-spgwu
- networks:
- traffic_net:
- ipv4_address: 192.168.73.135
- healthcheck:
- test: /bin/bash -c "ping -c 2 192.168.73.134"
- interval: 10s
- timeout: 5s
- retries: 5
oai-cucp:
image: oaisoftwarealliance/oai-gnb:develop
@@ -170,14 +160,18 @@ services:
container_name: rfsim5g-oai-cucp
environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time
+ --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
+ --gNBs.[0].local_s_address 192.168.72.2
ASAN_OPTIONS: detect_leaks=0
depends_on:
- - oai-ext-dn
+ - oai-spgwu
networks:
core_net:
- ipv4_address: 192.168.71.140
- ran_net:
- ipv4_address: 192.168.72.140
+ ipv4_address: 192.168.71.150
+ f1c_net:
+ ipv4_address: 192.168.72.2
+ e1_net:
+ ipv4_address: 192.168.77.2
volumes:
- ../../conf_files/gnb-cucp.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
@@ -192,14 +186,82 @@ services:
container_name: rfsim5g-oai-cuup
environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time
+ --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
+ --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.3
+ --gNBs.[0].local_s_address 192.168.73.2
+ --gNBs.[0].remote_s_address 127.0.0.1
ASAN_OPTIONS: detect_leaks=0
depends_on:
- oai-cucp
networks:
core_net:
- ipv4_address: 192.168.71.141
- ran_net:
- ipv4_address: 192.168.72.141
+ ipv4_address: 192.168.71.161
+ f1u_1_net:
+ ipv4_address: 192.168.73.2
+ e1_net:
+ ipv4_address: 192.168.77.3
+ volumes:
+ - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-cuup"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai-cuup2:
+ image: oaisoftwarealliance/oai-nr-cuup:develop
+ privileged: true
+ container_name: rfsim5g-oai-cuup2
+ environment:
+ USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time
+ --gNBs.[0].gNB_CU_UP_ID 0xe01
+ --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
+ --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.4
+ --gNBs.[0].local_s_address 192.168.74.2
+ --gNBs.[0].remote_s_address 127.0.0.1
+ --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.162
+ --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 2
+ ASAN_OPTIONS: detect_leaks=0
+ depends_on:
+ - oai-cucp
+ networks:
+ core_net:
+ ipv4_address: 192.168.71.162
+ f1u_2_net:
+ ipv4_address: 192.168.74.2
+ e1_net:
+ ipv4_address: 192.168.77.4
+ volumes:
+ - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-cuup"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai-cuup3:
+ image: oaisoftwarealliance/oai-nr-cuup:develop
+ privileged: true
+ container_name: rfsim5g-oai-cuup3
+ environment:
+ USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time
+ --gNBs.[0].gNB_CU_UP_ID 0xe02
+ --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
+ --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.5
+ --gNBs.[0].local_s_address 192.168.76.2
+ --gNBs.[0].remote_s_address 127.0.0.1
+ --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.163
+ --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 3
+ ASAN_OPTIONS: detect_leaks=0
+ depends_on:
+ - oai-cucp
+ networks:
+ core_net:
+ ipv4_address: 192.168.71.163
+ f1u_3_net:
+ ipv4_address: 192.168.76.2
+ e1_net:
+ ipv4_address: 192.168.77.5
volumes:
- ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
@@ -214,12 +276,81 @@ services:
container_name: rfsim5g-oai-du
environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
+ --MACRLCs.[0].local_n_address 192.168.73.3
+ --MACRLCs.[0].remote_n_address 192.168.72.2
ASAN_OPTIONS: detect_leaks=0
+ depends_on:
+ - oai-cucp
+ - oai-cuup
networks:
- ran_net:
- ipv4_address: 192.168.72.142
+ f1c_net:
+ ipv4_address: 192.168.72.3
+ f1u_1_net:
+ ipv4_address: 192.168.73.3
+ ue_net:
+ ipv4_address: 192.168.78.2
volumes:
- - ../../conf_files/gnb-du.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
+ - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-softmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai-du2:
+ image: oaisoftwarealliance/oai-gnb:develop
+ privileged: true
+ container_name: rfsim5g-oai-du2
+ environment:
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
+ --gNBs.[0].gNB_DU_ID 0xe01
+ --gNBs.[0].nr_cellid 87654321
+ --gNBs.[0].servingCellConfigCommon.[0].physCellId 1
+ --MACRLCs.[0].local_n_address 192.168.74.3
+ --MACRLCs.[0].remote_n_address 192.168.72.2
+ ASAN_OPTIONS: detect_leaks=0
+ depends_on:
+ - oai-cucp
+ - oai-cuup2
+ networks:
+ f1c_net:
+ ipv4_address: 192.168.72.4
+ f1u_2_net:
+ ipv4_address: 192.168.74.3
+ ue_net:
+ ipv4_address: 192.168.78.3
+ volumes:
+ - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-softmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai-du3:
+ image: oaisoftwarealliance/oai-gnb:develop
+ privileged: true
+ container_name: rfsim5g-oai-du3
+ environment:
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
+ --gNBs.[0].gNB_DU_ID 0xe02
+ --gNBs.[0].nr_cellid 11111111
+ --gNBs.[0].servingCellConfigCommon.[0].physCellId 2
+ --MACRLCs.[0].local_n_address 192.168.76.3
+ --MACRLCs.[0].remote_n_address 192.168.72.2
+ ASAN_OPTIONS: detect_leaks=0
+ depends_on:
+ - oai-cucp
+ - oai-cuup3
+ networks:
+ f1c_net:
+ ipv4_address: 192.168.72.5
+ f1u_3_net:
+ ipv4_address: 192.168.76.3
+ ue_net:
+ ipv4_address: 192.168.78.4
+ volumes:
+ - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
@@ -231,13 +362,62 @@ services:
privileged: true
container_name: rfsim5g-oai-nr-ue
environment:
- USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 -C 3619200000 --rfsimulator.serveraddr 192.168.72.142 --log_config.global_log_options level,nocolor,time
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
+ -r 106 --numerology 1 -C 3619200000
+ --uicc0.imsi 208990100001100
+ --rfsimulator.serveraddr 192.168.78.2
ASAN_OPTIONS: detect_leaks=0
depends_on:
- oai-du
networks:
- ran_net:
- ipv4_address: 192.168.72.150
+ ue_net:
+ ipv4_address: 192.168.78.5
+ volumes:
+ - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-uesoftmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai-nr-ue2:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue2
+ environment:
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
+ -r 106 --numerology 1 -C 3619200000
+ --uicc0.imsi 208990100001101 --uicc0.nssai_sst 2
+ --rfsimulator.serveraddr 192.168.78.3
+ ASAN_OPTIONS: detect_leaks=0
+ depends_on:
+ - oai-du2
+ networks:
+ ue_net:
+ ipv4_address: 192.168.78.6
+ volumes:
+ - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-uesoftmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai-nr-ue3:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue3
+ environment:
+ USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
+ -r 106 --numerology 1 -C 3619200000
+ --uicc0.imsi 208990100001102 --uicc0.nssai_sst 3
+ --rfsimulator.serveraddr 192.168.78.4
+ ASAN_OPTIONS: detect_leaks=0
+ depends_on:
+ - oai-du3
+ networks:
+ ue_net:
+ ipv4_address: 192.168.78.7
volumes:
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
healthcheck:
@@ -255,19 +435,51 @@ networks:
- subnet: 192.168.71.128/26
driver_opts:
com.docker.network.bridge.name: "rfsim5g-core"
- ran_net:
+ f1c_net:
driver: bridge
- name: rfsim5g-oai-ran-net
+ name: rfsim5g-oai-f1c-net
ipam:
config:
- - subnet: 192.168.72.128/26
+ - subnet: 192.168.72.0/28
driver_opts:
- com.docker.network.bridge.name: "rfsim5g-ran"
- traffic_net:
+ com.docker.network.bridge.name: "rfsim5g-f1c"
+ f1u_1_net:
driver: bridge
- name: rfsim5g-oai-traffic_net-net
+ name: rfsim5g-oai-f1u-1-net
ipam:
config:
- - subnet: 192.168.73.128/26
+ - subnet: 192.168.73.0/28
driver_opts:
- com.docker.network.bridge.name: "rfsim5g-traffic"
+ com.docker.network.bridge.name: "rfsim5g-f1u_1"
+ f1u_2_net:
+ driver: bridge
+ name: rfsim5g-oai-f1u-2-net
+ ipam:
+ config:
+ - subnet: 192.168.74.0/28
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-f1u_2"
+ f1u_3_net:
+ driver: bridge
+ name: rfsim5g-oai-f1u-3-net
+ ipam:
+ config:
+ - subnet: 192.168.76.0/28
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-f1u_3"
+ e1_net:
+ driver: bridge
+ name: rfsim5g-oai-e1-net
+ ipam:
+ config:
+ - subnet: 192.168.77.1/28
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-e1"
+ ue_net:
+ driver: bridge
+ name: rfsim5g-oai-ue-net
+ ipam:
+ config:
+ - subnet: 192.168.78.1/28
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-ue"
diff --git a/cmake_targets/at_commands/CMakeLists.txt b/cmake_targets/at_commands/CMakeLists.txt
index 3891af37ab..13067562fe 100755
--- a/cmake_targets/at_commands/CMakeLists.txt
+++ b/cmake_targets/at_commands/CMakeLists.txt
@@ -139,7 +139,7 @@ target_include_directories(secu_cn PRIVATE
################################################################################
set(util_SRC
${OPENAIR_NAS_DIR}/COMMON/UTIL/device.c
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/memory.c
+ ${OPENAIR_DIR}/common/utils/mem/memory.c
${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_log.c
${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_timer.c
${OPENAIR_NAS_DIR}/COMMON/UTIL/OctetString.c
@@ -149,19 +149,8 @@ set(util_SRC
${OPENAIR_NAS_DIR}/COMMON/UTIL/socket.c
${OPENAIR_NAS_DIR}/COMMON/UTIL/stty.c
)
-set(util_HDR
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/device.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/memory.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_log.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_timer.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/OctetString.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/parser.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/TLVDecoder.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/TLVEncoder.h
- ${OPENAIR_NAS_DIR}/COMMON/UTIL/socket.h
-)
-add_library(util ${util_SRC} ${util_HDR})
+add_library(util ${util_SRC})
target_include_directories(util PRIVATE ${OPENAIR_NAS_DIR}/COMMON/UTIL
${OPENAIR_NAS_DIR}/COMMON
)
@@ -178,15 +167,7 @@ set(api_user_SRC
${OPENAIR_NAS_DIR}/UE/API/USER/user_indication.c
)
-set(api_user_HDR
- ${OPENAIR_NAS_DIR}/UE/API/USER/at_command.h
- ${OPENAIR_NAS_DIR}/UE/API/USER/at_error.h
- ${OPENAIR_NAS_DIR}/UE/API/USER/at_response.h
- ${OPENAIR_NAS_DIR}/UE/API/USER/user_api.h
- ${OPENAIR_NAS_DIR}/UE/API/USER/user_indication.h
-)
-
-add_library(api_user ${api_user_SRC} ${api_user_HDR})
+add_library(api_user ${api_user_SRC})
target_include_directories(api_user PRIVATE ${OPENAIR_NAS_DIR}/UE/API/USER
${OPENAIR_NAS_DIR}/COMMON
${OPENAIR_NAS_DIR}/UE
@@ -200,13 +181,7 @@ set(api_usim_SRC
${OPENAIR_NAS_DIR}/UE/API/USIM/usim_api.c
)
-set(api_usim_HDR
- ${OPENAIR_NAS_DIR}/UE/API/USIM/aka_functions.h
- ${OPENAIR_NAS_DIR}/UE/API/USIM/usim_api.h
-
-)
-
-add_library(api_usim ${api_usim_SRC} ${api_usim_HDR})
+add_library(api_usim ${api_usim_SRC})
target_include_directories(api_usim PRIVATE ${OPENAIR_NAS_DIR}/UE/API/USIM)
################################################################################
@@ -217,13 +192,8 @@ set(api_network_SRC
${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/nas_message.c
${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/network_api.c
)
-set(api_network_HDR
- ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/as_message.h
- ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/nas_message.h
- ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/network_api.h
-)
-add_library(api_network ${api_network_SRC} ${api_network_HDR})
+add_library(api_network ${api_network_SRC})
target_include_directories(api_network PRIVATE ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK
${OPENAIR_NAS_DIR}/COMMON
)
@@ -311,60 +281,7 @@ set(emm_SRC
)
-set(emm_HDR
- ${OPENAIR_NAS_DIR}/UE/EMM/emmData.h
- ${OPENAIR_NAS_DIR}/UE/EMM/emm_main.h
- ${OPENAIR_NAS_DIR}/UE/EMM/emm_proc.h
- ${OPENAIR_NAS_DIR}/UE/EMM/IdleMode.h
- ${OPENAIR_NAS_DIR}/UE/EMM/LowerLayer.h
-
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachAccept.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachComplete.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachReject.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationFailure.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationReject.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationResponse.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/CsServiceNotification.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DetachAccept.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DetachRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DownlinkNasTransport.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_cause.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/EmmInformation.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_msgDef.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_msg.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/EmmStatus.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ExtendedServiceRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/GutiReallocationCommand.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/GutiReallocationComplete.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/IdentityRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/IdentityResponse.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/NASSecurityModeCommand.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/NASSecurityModeComplete.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/SecurityModeReject.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ServiceReject.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ServiceRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateReject.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/UplinkNasTransport.h
-
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_asDef.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_as.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_esmDef.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_esm.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_fsm.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_recv.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_regDef.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_reg.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_sap.h
- ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_send.h
-
-)
-
-add_library(emm ${emm_SRC} ${emm_HDR})
+add_library(emm ${emm_SRC})
target_include_directories(emm PRIVATE
${OPENAIR_DIR}/common/utils
@@ -423,41 +340,7 @@ set(esm_SRC
${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_send.c
)
-set(esm_HDR
- ${OPENAIR_TARGETS}/COMMON/openairinterface5g_limits.h
- ${OPENAIR_NAS_DIR}/UE/ESM/esm_main.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceAllocationReject.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceAllocationRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceModificationReject.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceModificationRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/esm_cause.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmInformationRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmInformationResponse.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/esm_msgDef.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/esm_msg.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmStatus.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnConnectivityReject.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnConnectivityRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnDisconnectReject.h
- ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnDisconnectRequest.h
- ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_recv.h
- ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_sap.h
- ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_send.h
- ${OPENAIR_DIR}/common/utils/utils.h
-)
-
-add_library(esm ${esm_SRC} ${esm_HDR})
+add_library(esm ${esm_SRC})
target_include_directories(esm PRIVATE
${OPENAIR_DIR}/common/utils
@@ -553,89 +436,8 @@ set(ies_SRC
${OPENAIR_NAS_DIR}/COMMON/IES/UeSecurityCapability.c
${OPENAIR_NAS_DIR}/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c
)
-set(ies_HDR
- ${OPENAIR_NAS_DIR}/COMMON/IES/AccessPointName.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/AdditionalUpdateResult.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/AdditionalUpdateType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/ApnAggregateMaximumBitRate.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationFailureParameter.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationParameterAutn.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationParameterRand.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationResponseParameter.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/CipheringKeySequenceNumber.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/Cli.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/CsfbResponse.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/DaylightSavingTime.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/DetachType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/DrxParameter.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EmergencyNumberList.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EmmCause.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsAttachResult.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsAttachType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsBearerContextStatus.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsBearerIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsMobileIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsNetworkFeatureSupport.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsQualityOfService.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsUpdateResult.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EpsUpdateType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EsmCause.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EsmInformationTransferFlag.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/EsmMessageContainer.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/GprsTimer.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/GutiType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/IdentityType2.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/ImeisvRequest.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/KsiAndSequenceNumber.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/LcsClientIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/LcsIndicator.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/LinkedEpsBearerIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/LlcServiceAccessPointIdentifier.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/LocationAreaIdentification.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/MessageType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/MobileIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/MobileStationClassmark2.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/MobileStationClassmark3.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/MsNetworkCapability.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/MsNetworkFeatureSupport.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/NasKeySetIdentifier.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/NasMessageContainer.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/NasRequestType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/NasSecurityAlgorithms.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/NetworkName.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/Nonce.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/PacketFlowIdentifier.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/PagingIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/PdnAddress.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/PdnType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/PlmnList.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/ProcedureTransactionIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/ProtocolConfigurationOptions.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/ProtocolDiscriminator.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/PTmsiSignature.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/QualityOfService.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/RadioPriority.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/SecurityHeaderType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/ServiceType.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/ShortMac.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/SsCode.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/SupportedCodecList.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TimeZoneAndTime.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TimeZone.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TmsiStatus.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TrackingAreaIdentity.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TrackingAreaIdentityList.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TrafficFlowAggregateDescription.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TrafficFlowTemplate.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/TransactionIdentifier.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/UeNetworkCapability.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/UeSecurityCapability.h
- ${OPENAIR_NAS_DIR}/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h
-)
-
-add_library(ies ${ies_SRC} ${ies_HDR})
+add_library(ies ${ies_SRC})
target_include_directories(ies PRIVATE
${OPENAIR_NAS_DIR}/COMMON/IES
diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt
index 05d7a42712..55c981701b 100755
--- a/cmake_targets/nas_sim_tools/CMakeLists.txt
+++ b/cmake_targets/nas_sim_tools/CMakeLists.txt
@@ -28,24 +28,12 @@ set(CONF2UEDATA_LIB_SRC
${OPENAIR_DIR}/openair3/NAS/TOOLS/display.c
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c
- ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.c
+ ${OPENAIR_DIR}/common/utils/mem/memory.c
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.c
${OPENAIR_DIR}/common/utils/utils.c
)
-set(conf2uedata_HDR
- ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf2uedata.h
- ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_emm.h
- ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.h
- ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.h
- ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.h
- ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/nas_log.h
- ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.h
- ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.h
- ${OPENAIR_DIR}/common/utils/utils.h
-)
-
include_directories(
${OPENAIR_DIR}/common/utils
${OPENAIR_DIR}/openair3/NAS/UE
@@ -65,7 +53,7 @@ set(conf2uedata_SRC
${CONF2UEDATA_LIB_SRC}
)
-add_executable(conf2uedata ${conf2uedata_SRC} ${conf2uedata_HDR} )
+add_executable(conf2uedata ${conf2uedata_SRC} )
target_link_libraries(conf2uedata ${CONFIG_LIBRARIES})
# usim binary
@@ -76,7 +64,7 @@ set(usim_SRC
)
-add_executable(usim ${usim_SRC} ${conf2uedata_HDR} )
+add_executable(usim ${usim_SRC} )
target_link_libraries(usim ${CONFIG_LIBRARIES})
# nvram binary
@@ -87,5 +75,5 @@ set(nvram_SRC
)
-add_executable(nvram ${nvram_SRC} ${conf2uedata_HDR} )
+add_executable(nvram ${nvram_SRC})
target_link_libraries(nvram ${CONFIG_LIBRARIES})
diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c
index a24c82d96f..c3f3d5ae21 100644
--- a/common/config/config_cmdline.c
+++ b/common/config/config_cmdline.c
@@ -35,7 +35,7 @@
#include
#include
#include
-#include
+#include "common/platform_types.h"
#include "config_userapi.h"
#include "config_common.h"
#include "../utils/LOG/log.h"
diff --git a/common/config/config_common.c b/common/config/config_common.c
index 6c3ddf3b8e..5559cc2076 100644
--- a/common/config/config_common.c
+++ b/common/config/config_common.c
@@ -28,7 +28,7 @@
#include
#include
#include
-#include
+#include "common/platform_types.h"
#include "config_common.h"
#include "../utils/LOG/log.h"
static int managed_ptr_sz(configmodule_interface_t *cfg, void *ptr)
diff --git a/common/config/config_load_configmodule.c b/common/config/config_load_configmodule.c
index 41d6aad376..dd86aaf42a 100644
--- a/common/config/config_load_configmodule.c
+++ b/common/config/config_load_configmodule.c
@@ -36,7 +36,7 @@
#include
#include
#include
-#include
+#include "common/platform_types.h"
#define CONFIG_LOADCONFIG_MAIN
#include "config_load_configmodule.h"
diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c
index aeb4e8a726..9f7477f5cd 100644
--- a/common/config/config_userapi.c
+++ b/common/config/config_userapi.c
@@ -39,7 +39,7 @@
#include
#include
#include
-#include
+#include "common/platform_types.h"
#include "config_userapi.h"
#include "config_common.h"
#include "../utils/LOG/log.h"
diff --git a/common/platform_constants.h b/common/platform_constants.h
index 454c24657b..2f54208306 100644
--- a/common/platform_constants.h
+++ b/common/platform_constants.h
@@ -89,7 +89,9 @@
#define NUM_MAX_CBA_GROUP 4
#define printk printf
-
+#define RETURNok (0)
+#define RETURNerror (-1)
+#define DEFAULT_NAS_PATH "PWD"
#define UNUSED_VARIABLE(vARIABLE) (void)(vARIABLE)
#endif /* __PLATFORM_CONSTANTS_H__ */
diff --git a/openair2/COMMON/platform_types.h b/common/platform_types.h
similarity index 53%
rename from openair2/COMMON/platform_types.h
rename to common/platform_types.h
index 6c388c3cd0..888a812465 100644
--- a/openair2/COMMON/platform_types.h
+++ b/common/platform_types.h
@@ -36,152 +36,153 @@
//-----------------------------------------------------------------------------
// GENERIC ACCESS STRATUM TYPES
//-----------------------------------------------------------------------------
-typedef int32_t sdu_size_t;
-typedef uint32_t frame_t;
-typedef int32_t sframe_t;
-typedef uint32_t sub_frame_t;
-typedef uint32_t slot_t;
-typedef uint16_t module_id_t;
-typedef uint8_t slice_id_t;
-typedef uint8_t eNB_index_t;
-typedef uint64_t ue_id_t;
-typedef int16_t smodule_id_t;
-typedef long rb_id_t;
-typedef long srb_id_t;
+typedef int32_t sdu_size_t;
+typedef uint32_t frame_t;
+typedef int32_t sframe_t;
+typedef uint32_t sub_frame_t;
+typedef uint32_t slot_t;
+typedef uint16_t module_id_t;
+typedef uint8_t slice_id_t;
+typedef uint8_t eNB_index_t;
+typedef uint64_t ue_id_t;
+typedef int16_t smodule_id_t;
+typedef long rb_id_t;
+typedef long srb_id_t;
typedef bool MBMS_flag_t;
-#define MBMS_FLAG_NO false
+#define MBMS_FLAG_NO false
#define MBMS_FLAG_YES true
typedef bool eNB_flag_t;
-#define ENB_FLAG_NO false
+#define ENB_FLAG_NO false
#define ENB_FLAG_YES true
typedef bool gNB_flag_t;
-#define GNB_FLAG_NO false
+#define GNB_FLAG_NO false
#define GNB_FLAG_YES true
typedef bool srb_flag_t;
-#define SRB_FLAG_NO false
+#define SRB_FLAG_NO false
#define SRB_FLAG_YES true
typedef bool sl_discovery_flag_t;
-#define SL_DISCOVERY_FLAG_NO false
+#define SL_DISCOVERY_FLAG_NO false
#define SL_DISCOVERY_FLAG_YES true
-typedef enum link_direction_e {
- UNKNOWN_DIR = 0,
- DIR_UPLINK = 1,
- DIR_DOWNLINK = 2
-} link_direction_t;
+typedef enum link_direction_e { UNKNOWN_DIR = 0, DIR_UPLINK = 1, DIR_DOWNLINK = 2 } link_direction_t;
-typedef enum rb_type_e {
- UNKNOWN_RADIO_BEARER = 0,
- SIGNALLING_RADIO_BEARER = 1,
- RADIO_ACCESS_BEARER = 2
-} rb_type_t;
+typedef enum rb_type_e { UNKNOWN_RADIO_BEARER = 0, SIGNALLING_RADIO_BEARER = 1, RADIO_ACCESS_BEARER = 2 } rb_type_t;
-typedef enum {
- CR_ROUND = 0,
- CR_SRB12 = 1,
- CR_HOL = 2,
- CR_LC = 3,
- CR_CQI = 4,
- CR_LCP = 5,
- CR_NUM = 6
-} sorting_criterion_t;
+typedef enum { CR_ROUND = 0, CR_SRB12 = 1, CR_HOL = 2, CR_LC = 3, CR_CQI = 4, CR_LCP = 5, CR_NUM = 6 } sorting_criterion_t;
-typedef enum {
- POL_FAIR = 0,
- POL_GREEDY = 1,
- POL_NUM = 2
-} accounting_policy_t;
+typedef enum { POL_FAIR = 0, POL_GREEDY = 1, POL_NUM = 2 } accounting_policy_t;
//-----------------------------------------------------------------------------
// PHY TYPES
//-----------------------------------------------------------------------------
-typedef uint8_t crc8_t;
-typedef uint16_t crc16_t;
-typedef uint32_t crc32_t;
-typedef unsigned int crc_t;
+typedef uint8_t crc8_t;
+typedef uint16_t crc16_t;
+typedef uint32_t crc32_t;
+typedef unsigned int crc_t;
//-----------------------------------------------------------------------------
// MAC TYPES
//-----------------------------------------------------------------------------
-typedef sdu_size_t tbs_size_t;
-typedef sdu_size_t tb_size_t;
-typedef unsigned int logical_chan_id_t;
-typedef unsigned int num_tb_t;
-typedef uint8_t mac_enb_index_t;
+typedef sdu_size_t tbs_size_t;
+typedef sdu_size_t tb_size_t;
+typedef unsigned int logical_chan_id_t;
+typedef unsigned int num_tb_t;
+typedef uint8_t mac_enb_index_t;
//-----------------------------------------------------------------------------
// RLC TYPES
//-----------------------------------------------------------------------------
-typedef unsigned int mui_t;
-typedef unsigned int confirm_t;
-typedef unsigned int rlc_tx_status_t;
-typedef int16_t rlc_sn_t;
-typedef uint16_t rlc_usn_t;
-typedef int32_t rlc_buffer_occupancy_t;
-typedef signed int rlc_op_status_t;
+typedef unsigned int mui_t;
+typedef unsigned int confirm_t;
+typedef unsigned int rlc_tx_status_t;
+typedef int16_t rlc_sn_t;
+typedef uint16_t rlc_usn_t;
+typedef int32_t rlc_buffer_occupancy_t;
+typedef signed int rlc_op_status_t;
-#define SDU_CONFIRM_NO false
-#define SDU_CONFIRM_YES true
+typedef enum rlc_mode_e { RLC_MODE_NONE = 0, RLC_MODE_AM = 1, RLC_MODE_UM = 2, RLC_MODE_TM = 4 } rlc_mode_t;
+
+/*! \struct mac_rlc_status_resp_t
+ * \brief Primitive exchanged between RLC and MAC informing about the buffer occupancy of the RLC protocol instance.
+ */
+typedef struct {
+ rlc_buffer_occupancy_t bytes_in_buffer; /*!< \brief Bytes buffered in RLC protocol instance. */
+ rlc_buffer_occupancy_t pdus_in_buffer; /*!< \brief Number of PDUs buffered in RLC protocol instance (OBSOLETE). */
+ frame_t head_sdu_creation_time; /*!< \brief Head SDU creation time. */
+ sdu_size_t head_sdu_remaining_size_to_send; /*!< \brief remaining size of sdu: could be the total size or the remaining size of
+ already segmented sdu */
+ bool head_sdu_is_segmented; /*!< \brief 0 if head SDU has not been segmented, 1 if already segmented */
+} mac_rlc_status_resp_t;
+
+#define SDU_CONFIRM_NO false
+#define SDU_CONFIRM_YES true
//-----------------------------------------------------------------------------
// PDCP TYPES
//-----------------------------------------------------------------------------
-typedef uint16_t pdcp_sn_t;
-typedef uint32_t pdcp_hfn_t;
-typedef int16_t pdcp_hfn_offset_t;
+typedef uint16_t pdcp_sn_t;
+typedef uint32_t pdcp_hfn_t;
+typedef int16_t pdcp_hfn_offset_t;
typedef enum pdcp_transmission_mode_e {
- PDCP_TRANSMISSION_MODE_UNKNOWN = 0,
- PDCP_TRANSMISSION_MODE_CONTROL = 1,
- PDCP_TRANSMISSION_MODE_DATA = 2,
+ PDCP_TRANSMISSION_MODE_UNKNOWN = 0,
+ PDCP_TRANSMISSION_MODE_CONTROL = 1,
+ PDCP_TRANSMISSION_MODE_DATA = 2,
PDCP_TRANSMISSION_MODE_TRANSPARENT = 3
} pdcp_transmission_mode_t;
//-----------------------------------------------------------------------------
// IP DRIVER / PDCP TYPES
//-----------------------------------------------------------------------------
-typedef uint16_t tcp_udp_port_t;
-typedef enum ip_traffic_type_e {
- TRAFFIC_IPVX_TYPE_UNKNOWN = 0,
- TRAFFIC_IPV6_TYPE_UNICAST = 1,
- TRAFFIC_IPV6_TYPE_MULTICAST = 2,
- TRAFFIC_IPV6_TYPE_UNKNOWN = 3,
- TRAFFIC_IPV4_TYPE_UNICAST = 5,
- TRAFFIC_IPV4_TYPE_MULTICAST = 6,
- TRAFFIC_IPV4_TYPE_BROADCAST = 7,
- TRAFFIC_IPV4_TYPE_UNKNOWN = 8,
- TRAFFIC_PC5S_SIGNALLING = 9,
- TRAFFIC_PC5S_SESSION_INIT = 10
+typedef uint16_t tcp_udp_port_t;
+typedef enum ip_traffic_type_e {
+ TRAFFIC_IPVX_TYPE_UNKNOWN = 0,
+ TRAFFIC_IPV6_TYPE_UNICAST = 1,
+ TRAFFIC_IPV6_TYPE_MULTICAST = 2,
+ TRAFFIC_IPV6_TYPE_UNKNOWN = 3,
+ TRAFFIC_IPV4_TYPE_UNICAST = 5,
+ TRAFFIC_IPV4_TYPE_MULTICAST = 6,
+ TRAFFIC_IPV4_TYPE_BROADCAST = 7,
+ TRAFFIC_IPV4_TYPE_UNKNOWN = 8,
+ TRAFFIC_PC5S_SIGNALLING = 9,
+ TRAFFIC_PC5S_SESSION_INIT = 10
} ip_traffic_type_t;
+typedef struct net_ip_address_s {
+ unsigned ipv4: 1;
+ unsigned ipv6: 1;
+ char ipv4_address[16];
+ char ipv6_address[46];
+} net_ip_address_t;
+
//-----------------------------------------------------------------------------
// RRC TYPES
//-----------------------------------------------------------------------------
-typedef uint32_t mbms_session_id_t;
-typedef uint16_t mbms_service_id_t;
-typedef uint16_t rnti_t;
-typedef uint8_t rrc_enb_index_t;
-typedef uint8_t mme_code_t;
-typedef uint32_t m_tmsi_t;
+typedef uint32_t mbms_session_id_t;
+typedef uint16_t mbms_service_id_t;
+typedef uint16_t rnti_t;
+typedef uint8_t rrc_enb_index_t;
+typedef uint8_t mme_code_t;
+typedef uint32_t m_tmsi_t;
-//Random UE identity length = 40 bits
- #define NOT_A_RANDOM_UE_IDENTITY (uint64_t)0xFFFFFFFF
- #define NOT_A_RNTI (rnti_t)0
- #define M_RNTI (rnti_t)0xFFFD
- #define P_RNTI (rnti_t)0xFFFE
- #define SI_RNTI (rnti_t)0xFFFF
-#define CBA_RNTI (rnti_t)0xfff4
+// Random UE identity length = 40 bits
+#define NOT_A_RANDOM_UE_IDENTITY (uint64_t)0xFFFFFFFF
+#define NOT_A_RNTI (rnti_t)0
+#define M_RNTI (rnti_t)0xFFFD
+#define P_RNTI (rnti_t)0xFFFE
+#define SI_RNTI (rnti_t)0xFFFF
+#define CBA_RNTI (rnti_t)0xfff4
#define OAI_C_RNTI (rnti_t)0x1234
typedef enum config_action_e {
- CONFIG_ACTION_NULL = 0,
- CONFIG_ACTION_ADD = 1,
- CONFIG_ACTION_REMOVE = 2,
- CONFIG_ACTION_MODIFY = 3,
+ CONFIG_ACTION_NULL = 0,
+ CONFIG_ACTION_ADD = 1,
+ CONFIG_ACTION_REMOVE = 2,
+ CONFIG_ACTION_MODIFY = 3,
CONFIG_ACTION_SET_SECURITY_MODE = 4,
- CONFIG_ACTION_MBMS_ADD = 10,
- CONFIG_ACTION_MBMS_MODIFY = 11
+ CONFIG_ACTION_MBMS_ADD = 10,
+ CONFIG_ACTION_MBMS_MODIFY = 11
} config_action_t;
/* Maximum size of any message we might send or receive (e.g., via a socket) */
@@ -195,10 +196,9 @@ typedef struct nsa_msg_t {
//-----------------------------------------------------------------------------
// GTPV1U TYPES
//-----------------------------------------------------------------------------
-typedef uint32_t teid_t; // tunnel endpoint identifier
-typedef uint8_t ebi_t; // eps bearer id
-typedef uint8_t pdusessionid_t;
-
+typedef uint32_t teid_t; // tunnel endpoint identifier
+typedef uint8_t ebi_t; // eps bearer id
+typedef uint8_t pdusessionid_t;
//-----------------------------------------------------------------------------
//
@@ -207,42 +207,39 @@ typedef uint8_t pdusessionid_t;
typedef intptr_t instance_t;
typedef struct protocol_ctxt_s {
- module_id_t module_id; /*!< \brief Virtualized module identifier */
- eNB_flag_t enb_flag; /*!< \brief Flag to indicate eNB (1) or UE (0) */
- instance_t instance; /*!< \brief ITTI or OTG module identifier */
+ module_id_t module_id; /*!< \brief Virtualized module identifier */
+ eNB_flag_t enb_flag; /*!< \brief Flag to indicate eNB (1) or UE (0) */
+ instance_t instance; /*!< \brief ITTI or OTG module identifier */
ue_id_t rntiMaybeUEid;
- frame_t frame; /*!< \brief LTE frame number.*/
- sub_frame_t subframe; /*!< \brief LTE sub frame number.*/
- eNB_index_t eNB_index; /*!< \brief valid for UE indicating the index of connected eNB(s) */
- bool brOption;
+ frame_t frame; /*!< \brief LTE frame number.*/
+ sub_frame_t subframe; /*!< \brief LTE sub frame number.*/
+ eNB_index_t eNB_index; /*!< \brief valid for UE indicating the index of connected eNB(s) */
+ bool brOption;
} protocol_ctxt_t;
// warning time hardcoded
-#define PROTOCOL_CTXT_TIME_MILLI_SECONDS(CtXt_h) ((CtXt_h)->frame*10+(CtXt_h)->subframe)
+#define PROTOCOL_CTXT_TIME_MILLI_SECONDS(CtXt_h) ((CtXt_h)->frame * 10 + (CtXt_h)->subframe)
#define UE_MODULE_ID_TO_INSTANCE(mODULE_iD) mODULE_iD + RC.nb_inst
-#define ENB_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD
+#define ENB_MODULE_ID_TO_INSTANCE(mODULE_iD) mODULE_iD
#define UE_INSTANCE_TO_MODULE_ID(iNSTANCE) iNSTANCE - RC.nb_inst
-#define ENB_INSTANCE_TO_MODULE_ID( iNSTANCE )iNSTANCE
+#define ENB_INSTANCE_TO_MODULE_ID(iNSTANCE) iNSTANCE
-//NR
+// NR
#define GNB_MODULE_ID_TO_INSTANCE(mODULE_iD) mODULE_iD
-#define MODULE_ID_TO_INSTANCE(mODULE_iD, iNSTANCE, eNB_fLAG) \
- do { \
+#define MODULE_ID_TO_INSTANCE(mODULE_iD, iNSTANCE, eNB_fLAG) \
+ do { \
iNSTANCE = eNB_fLAG == ENB_FLAG_YES ? ENB_MODULE_ID_TO_INSTANCE(mODULE_iD) : UE_MODULE_ID_TO_INSTANCE(mODULE_iD); \
} while (0)
-#define INSTANCE_TO_MODULE_ID(iNSTANCE, mODULE_iD, eNB_fLAG) \
- do { \
+#define INSTANCE_TO_MODULE_ID(iNSTANCE, mODULE_iD, eNB_fLAG) \
+ do { \
mODULE_iD = eNB_fLAG == ENB_FLAG_YES ? ENB_INSTANCE_TO_MODULE_ID(iNSTANCE) : UE_INSTANCE_TO_MODULE_ID(iNSTANCE); \
} while (0)
-#define PROTOCOL_CTXT_COMPUTE_MODULE_ID(CtXt_h) \
- INSTANCE_TO_MODULE_ID( (CtXt_h)->instance , (CtXt_h)->module_id , (CtXt_h)->enb_flag )
+#define PROTOCOL_CTXT_COMPUTE_MODULE_ID(CtXt_h) INSTANCE_TO_MODULE_ID((CtXt_h)->instance, (CtXt_h)->module_id, (CtXt_h)->enb_flag)
-
-#define PROTOCOL_CTXT_COMPUTE_INSTANCE(CtXt_h) \
- MODULE_ID_TO_INSTANCE( (CtXt_h)->module_id , (CtXt_h)->instance , (CtXt_h)->enb_flag )
+#define PROTOCOL_CTXT_COMPUTE_INSTANCE(CtXt_h) MODULE_ID_TO_INSTANCE((CtXt_h)->module_id, (CtXt_h)->instance, (CtXt_h)->enb_flag)
#define PROTOCOL_CTXT_SET_BY_MODULE_ID(Ctxt_Pp, mODULE_iD, eNB_fLAG, rNTI, fRAME, sUBfRAME, eNB_iNDEX) \
do { \
@@ -252,7 +249,7 @@ typedef struct protocol_ctxt_s {
(Ctxt_Pp)->frame = fRAME; \
(Ctxt_Pp)->subframe = sUBfRAME; \
(Ctxt_Pp)->eNB_index = eNB_iNDEX; \
- (Ctxt_Pp)->brOption = false; /* set a default value */ \
+ (Ctxt_Pp)->brOption = false; /* set a default value */ \
PROTOCOL_CTXT_COMPUTE_INSTANCE(Ctxt_Pp); \
} while (0)
@@ -263,22 +260,23 @@ typedef struct protocol_ctxt_s {
(Ctxt_Pp)->rntiMaybeUEid = rNTI; \
(Ctxt_Pp)->frame = fRAME; \
(Ctxt_Pp)->subframe = sUBfRAME; \
- (Ctxt_Pp)->eNB_index = 0; /* set a default value */ \
- (Ctxt_Pp)->brOption = false; /* set a default value */ \
+ (Ctxt_Pp)->eNB_index = 0; /* set a default value */ \
+ (Ctxt_Pp)->brOption = false; /* set a default value */ \
PROTOCOL_CTXT_COMPUTE_MODULE_ID(Ctxt_Pp); \
} while (0)
#define PROTOCOL_CTXT_FMT "[FRAME %05u][%s][MOD %02d][RNTI %" PRIx64 "]"
-#define PROTOCOL_CTXT_ARGS(CTXT_Pp) (CTXT_Pp)->frame, ((CTXT_Pp)->enb_flag == ENB_FLAG_YES) ? "eNB" : " UE", (CTXT_Pp)->module_id, (CTXT_Pp)->rntiMaybeUEid
+#define PROTOCOL_CTXT_ARGS(CTXT_Pp) \
+ (CTXT_Pp)->frame, ((CTXT_Pp)->enb_flag == ENB_FLAG_YES) ? "eNB" : " UE", (CTXT_Pp)->module_id, (CTXT_Pp)->rntiMaybeUEid
-#define PROTOCOL_NR_CTXT_ARGS(CTXT_Pp) (CTXT_Pp)->frame, ((CTXT_Pp)->enb_flag == GNB_FLAG_YES) ? "gNB" : " UE", (CTXT_Pp)->module_id, (CTXT_Pp)->rntiMaybeUEid
+#define PROTOCOL_NR_CTXT_ARGS(CTXT_Pp) \
+ (CTXT_Pp)->frame, ((CTXT_Pp)->enb_flag == GNB_FLAG_YES) ? "gNB" : " UE", (CTXT_Pp)->module_id, (CTXT_Pp)->rntiMaybeUEid
#define CHECK_CTXT_ARGS(CTXT_Pp)
#define exit_fun(msg) exit_function(__FILE__, __FUNCTION__, __LINE__, "exit_fun", OAI_EXIT_NORMAL)
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
void exit_function(const char *file, const char *function, const int line, const char *s, const int assert);
#ifdef __cplusplus
diff --git a/common/utils/assertions.h b/common/utils/assertions.h
index 453e853aec..d7d92b8ec4 100644
--- a/common/utils/assertions.h
+++ b/common/utils/assertions.h
@@ -27,7 +27,7 @@
#include
#include
#include
-#include
+#include "common/platform_types.h"
#define OAI_EXIT_NORMAL 0
#define OAI_EXIT_ASSERT 1
diff --git a/common/utils/config.h b/common/utils/config.h
index 0cd783fe5e..1494f17de1 100644
--- a/common/utils/config.h
+++ b/common/utils/config.h
@@ -37,9 +37,9 @@
*
* In code:
* ```
- * set_log(ASN1, OAI_INFO); // enable logging
+ * set_log(ASN1, OAILOG_INFO); // enable logging
* // do your encoding here
- * set_log(ASN1, OAI_ERR); // disable logging
+ * set_log(ASN1, OAILOG_ERR); // disable logging
* ```
*
* in gdb:
diff --git a/openair3/NAS/COMMON/UTIL/memory.c b/common/utils/mem/memory.c
similarity index 77%
rename from openair3/NAS/COMMON/UTIL/memory.c
rename to common/utils/mem/memory.c
index 334cdc5eb6..d4f09279aa 100644
--- a/openair3/NAS/COMMON/UTIL/memory.c
+++ b/common/utils/mem/memory.c
@@ -19,42 +19,11 @@
* contact@openairinterface.org
*/
-/*****************************************************************************
-Source memory.c
-
-Version 0.1
-
-Date 2012/10/09
-
-Product NAS stack
-
-Subsystem Utilities
-
-Author Frederic Maurel
-
-Description Memory access utilities
-
-*****************************************************************************/
-
-#include "memory.h"
-#include "commonDef.h"
-#include "nas_log.h"
-
-#include // fopen, fread, fclose
-#include // getenv, malloc, free
-#include // strlen
-
-/****************************************************************************/
-/**************** E X T E R N A L D E F I N I T I O N S ****************/
-/****************************************************************************/
-
-/****************************************************************************/
-/******************* L O C A L D E F I N I T I O N S *******************/
-/****************************************************************************/
-
-/****************************************************************************/
-/****************** E X P O R T E D F U N C T I O N S ******************/
-/****************************************************************************/
+#include
+#include
+#include
+#include "common/utils/mem/oai_memory.h"
+#include "common/utils/LOG/log.h"
/****************************************************************************
** **
@@ -85,13 +54,12 @@ char* memory_get_path(const char* dirname, const char* filename)
}
if (path == NULL) {
- LOG_TRACE(WARNING, "MEMORY - %s and %s environment variables are not defined trying local directory", dirname, DEFAULT_NAS_PATH);
path = ".";
}
/* Append non-volatile data file name */
size_t size = strlen(path) + strlen(filename) + 1;
- char* data_filename = (char*)malloc(size+1);
+ char* data_filename = (char*)malloc(size + 1);
if (data_filename != NULL) {
if (size != sprintf(data_filename, "%s/%s", path, filename)) {
@@ -114,19 +82,17 @@ char* memory_get_path_from_ueid(const char* dirname, const char* filename, int u
}
if (path == NULL) {
- LOG_TRACE(WARNING, "MEMORY - %s and %s environment variables are not defined trying local directory", dirname, DEFAULT_NAS_PATH);
path = ".";
}
/* Append non-volatile data file name */
- if ( snprintf(buffer, sizeof(buffer), "%s/%s%d", path, filename, ueid) < 0 ) {
+ if (snprintf(buffer, sizeof(buffer), "%s/%s%d", path, filename, ueid) < 0) {
return NULL;
}
return strdup(buffer);
}
-
/****************************************************************************
** **
** Name: memory_read() **
@@ -201,8 +167,3 @@ int memory_write(const char* datafile, const void* data, size_t size)
return (rc);
}
-
-/****************************************************************************/
-/********************* L O C A L F U N C T I O N S *********************/
-/****************************************************************************/
-
diff --git a/openair3/NAS/COMMON/UTIL/memory.h b/common/utils/mem/oai_memory.h
similarity index 52%
rename from openair3/NAS/COMMON/UTIL/memory.h
rename to common/utils/mem/oai_memory.h
index ec8406c932..311ad6f4d0 100644
--- a/openair3/NAS/COMMON/UTIL/memory.h
+++ b/common/utils/mem/oai_memory.h
@@ -19,42 +19,21 @@
* contact@openairinterface.org
*/
-/*****************************************************************************
-Source memory.h
-
-Version 0.1
-
-Date 2012/10/09
-
-Product NAS stack
-
-Subsystem Utilities
-
-Author Frederic Maurel
-
-Description Memory access utilities
-
-*****************************************************************************/
#ifndef __MEMORY_H__
#define __MEMORY_H__
-#include // size_t
+#include
+#include
+#include
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "common/platform_constants.h"
+//-----------------------------------------------------------------------------
-/****************************************************************************/
-/********************* G L O B A L C O N S T A N T S *******************/
-/****************************************************************************/
+typedef unsigned char uint8_t;
-/****************************************************************************/
-/************************ G L O B A L T Y P E S ************************/
-/****************************************************************************/
-
-/****************************************************************************/
-/******************** G L O B A L V A R I A B L E S ********************/
-/****************************************************************************/
-
-/****************************************************************************/
-/****************** E X P O R T E D F U N C T I O N S ******************/
-/****************************************************************************/
+//-----------------------------------------------------------------------------
char* memory_get_path(const char* dirname, const char* filename);
@@ -64,4 +43,7 @@ int memory_read(const char* datafile, void* data, size_t size);
int memory_write(const char* datafile, const void* data, size_t size);
+#ifdef __cplusplus
+}
+#endif
#endif /* __MEMORY_H__*/
diff --git a/common/utils/oai_asn1.h b/common/utils/oai_asn1.h
index f76f75c84c..60a5b39ac5 100644
--- a/common/utils/oai_asn1.h
+++ b/common/utils/oai_asn1.h
@@ -117,5 +117,11 @@ static inline uint64_t BIT_STRING_to_uint64(BIT_STRING_t *asn) {
#define asn1cSequenceAdd(VaR, TyPe, lOcPtr) \
TyPe *lOcPtr= calloc(1,sizeof(TyPe)); \
asn1cSeqAdd(&VaR,lOcPtr)
+#define asn1cFreeStruc(ASN_DEF, STRUCT) \
+ do { \
+ ASN_STRUCT_RESET(ASN_DEF, STRUCT); \
+ free(STRUCT); \
+ STRUCT = NULL; \
+ } while (0)
#endif
diff --git a/common/utils/ocp_itti/intertask_interface.cpp b/common/utils/ocp_itti/intertask_interface.cpp
index 8c4da1d92c..56781f79a4 100644
--- a/common/utils/ocp_itti/intertask_interface.cpp
+++ b/common/utils/ocp_itti/intertask_interface.cpp
@@ -59,29 +59,6 @@ typedef struct timer_elm_s {
static int nb_queues=0;
static pthread_mutex_t lock_nb_queues;
- void *pool_buffer_init (void) {
- return 0;
- }
-
- void *pool_buffer_clean (void *arg) {
- //-----------------------------------------------------------------------------
- return 0;
- }
-
- void free_mem_block (mem_block_t *leP, const char *caller) {
- AssertFatal(leP!=NULL,"");
- free(leP);
- }
-
- mem_block_t *get_free_mem_block (uint32_t sizeP, const char *caller) {
- mem_block_t *ptr=(mem_block_t *)malloc(sizeP+sizeof(mem_block_t));
- ptr->next = NULL;
- ptr->previous = NULL;
- ptr->data=((unsigned char *)ptr)+sizeof(mem_block_t);
- ptr->size=sizeP;
- return ptr;
- }
-
void *itti_malloc(task_id_t origin_task_id, task_id_t destination_task_id, ssize_t size) {
void *ptr = NULL;
AssertFatal ((ptr=calloc (size, 1)) != NULL, "Memory allocation of %zu bytes failed (%d -> %d)!\n",
diff --git a/common/utils/ocp_itti/intertask_interface.h b/common/utils/ocp_itti/intertask_interface.h
index bca3f9a56b..f8f33a9c82 100644
--- a/common/utils/ocp_itti/intertask_interface.h
+++ b/common/utils/ocp_itti/intertask_interface.h
@@ -26,9 +26,8 @@
#include
#include
-#include
#include
-
+#include "common/utils/mem/oai_memory.h"
typedef enum timer_type_s {
TIMER_PERIODIC,
@@ -62,7 +61,6 @@ typedef struct itti_lte_time_s {
uint8_t slot;
} itti_lte_time_t;
-
typedef struct IttiMsgEmpty_s {
// This dummy element is to avoid CLANG warning: empty struct has size 0 in C, size 1 in C++
// To be removed if the structure is filled
@@ -552,7 +550,6 @@ void itti_set_task_real_time(task_id_t task_id);
void itti_send_terminate_message(task_id_t task_id);
void *itti_malloc(task_id_t origin_task_id, task_id_t destination_task_id, ssize_t size);
-int memory_read(const char *datafile, void *data, size_t size);
int itti_free(task_id_t task_id, void *ptr);
int itti_init(task_id_t task_max, const task_info_t *tasks_info);
diff --git a/doc/BUILD.md b/doc/BUILD.md
index 6fd6d76e3a..87b6dcca89 100644
--- a/doc/BUILD.md
+++ b/doc/BUILD.md
@@ -184,6 +184,7 @@ Some libraries have further dependencies and might not build on every system:
- `nrqtscope`: Qt5
- `ldpc_cuda`: CUDA
- `websrv`: npm and others
+- `ldpc_t2`: DPDK with patch
# Running `cmake` directly
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 2cef6f9478..c92e9fb336 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -1337,9 +1337,9 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/nas_timer.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVDecoder.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/nas_timer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/memory.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/mem/memory.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/OctetString.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/memory.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/mem/oai_memory.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVDecoder.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/nas_log.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVEncoder.h \
@@ -1771,7 +1771,6 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_models.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_externs.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/MEM/mem_block.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/MATH/oml.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/MATH/oml.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_ue_context_management.c \
@@ -1836,7 +1835,7 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/udp_messages_def.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/nas_messages_types.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/sctp_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/platform_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/platform_types.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/ngap_messages_types.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/gtpv1_u_messages_types.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rlc_messages_types.h \
diff --git a/doc/F1-design.md b/doc/F1-design.md
index 916c1a2edf..ee45128ebb 100644
--- a/doc/F1-design.md
+++ b/doc/F1-design.md
@@ -152,9 +152,11 @@ In the CU file:
In the DU file:
- Set `MACRLCs.[0].tr_n_preference` to `f1`
- Update `MACRLCs.[0].local_n_address` (local north-bound address of the DU) to
- `127.0.0.4`
+ `127.0.0.4`. This IP address is used to bind the GTP socket (F1-U user plane
+ traffic).
- Update `MACRLCs.[].remote_n_address` (remote north-bound address of the CU)
- to `127.0.0.3`
+ to `127.0.0.3`. This IP address is used as the CU destination IP address for
+ F1AP communication.
Note: all `local_*_if_name` parameters are ignored.
diff --git a/doc/LDPC_T2_OFFLOAD_SETUP.md b/doc/LDPC_T2_OFFLOAD_SETUP.md
index 551ddcc1df..485ad4c4a4 100644
--- a/doc/LDPC_T2_OFFLOAD_SETUP.md
+++ b/doc/LDPC_T2_OFFLOAD_SETUP.md
@@ -21,19 +21,21 @@ This documentation aims to provide a tutorial for AMD Xilinx T2 Telco card integ
# Requirements
- bitstream image and PMD driver for the T2 card provided by AccelerComm
- - DPDK 20.11.7 with patch from Accelercomm (also tested with DPDK 20.11.3)
- - tested on RHEL7.9, RHEL9.2, Ubuntu 20.04, Ubuntu 22.04
+ - DPDK 20.11.9 with patch from Accelercomm: version ACCL_BBDEV_DPDK20.11.3_ldpc_3.1.918.patch
+ - tested on RHEL7.9, RHEL9.2, Ubuntu 22.04
# DPDK setup
## DPDK installation
+*Note: Following instructions are valid for ACCL_BBDEV_DPDK20.11.3_ldpc_3.1.918.patch version, which is compatible with DPDK 20.11.9. Installation steps, which should be followed for older versions of the patch file (for example ACL_BBDEV_DPDK20.11.3_BL_1006_build_1105_dev_branch_MCT_optimisations_1106_physical_std.patch) are present in older version of this documentation, under the tag 2023.w48.*
+
```
# Get DPDK source code
git clone https://github.com/DPDK/dpdk-stable.git ~/dpdk-stable
cd ~/dpdk-stable
-git checkout v20.11.7
-git apply ~/ACL_BBDEV_DPDK20.11.3_xxx.patch
+git checkout v20.11.9
+git apply ~/ACL_BBDEV_DPDK20.11.3_ldpc_3.1.918.patch
```
-Replace `~/ACL_BBDEV_DPDK20.11.3_xxx.patch` by patch file provided by
+Replace `~/ACL_BBDEV_DPDK20.11.3_ldpc_3.1.918.patch` by patch file provided by
Accelercomm.
```
cd ~/dpdk-stable
@@ -47,16 +49,15 @@ sudo ldconfig
## DPDK configuration
- load required kernel module
```
-sudo modprobe igb_uio
-sudo insmod ~/dpdk-stable/kernel/linux/igb_uio/igb_uio.ko
+sudo modprobe vfio-pci
```
- check presence of the card and its PCI addres on the host machine
```
lspci | grep "Xilinx"
```
- - bind the card with igb_uio driver
+ - bind the card with vfio-pci driver
```
-sudo python3 ~/dpdk-stable/usertools/dpdk-devbind.py -b igb_uio 41:00.0
+sudo python3 ~/dpdk-stable/usertools/dpdk-devbind.py --bind=vfio-pci 41:00.0
```
Replace PCI address of the card *41:00.0* by address detected by *lspci | grep "Xilinx"* command
- hugepages setup (10 x 1GB hugepages)
@@ -68,12 +69,12 @@ sudo python3 ~/dpdk-stable/usertools/dpdk-hugepages.py -p 1G --setup 10G`
the host machine*
# Modifications in the OAI code
-## PMD path specification
-Path to the PMD for operating the card is specified in `CMakeLists.txt` file in
+## DPDK lib and PMD path specification
+Path to the DPDK lib and Accelercomm PMD for operating the card is specified in the `CMakeLists.txt` file, in
*LDPC OFFLOAD library* section. Modify following line based on the location of
-the PMD on your system. By deafult, path to the PMD is set to `/opt/dpdk-t2/lib/x86_64-linux-gnu/`.
+`libdpdk.pc` file associated with the target DPDK library on your system. By default, the path is set to `/usr/local/lib/x86_64-linux-gnu/pkgconfig`.
```
-find_library(PMD_T2 NAMES rte_baseband_accl_ldpc HINTS "/opt/dpdk-t2/lib/x86_64-linux-gnu/")
+set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/x86_64-linux-gnu/pkgconfig")
```
## T2 card DPDK initialization
@@ -106,7 +107,7 @@ cd ~/openairinterface5g/cmake_targets
cd ~/openairinterface5g
source oaienv
cd cmake_targets
-./build_oai -w USRP --ninja --gNB -P -C --build-lib "ldpc_t2"
+./build_oai -w USRP --ninja --gNB -P --build-lib "ldpc_t2" -C
```
Shared object file *libldpc_t2.so* is created during the compilation. This object is conditionally compiled. Selection of the library to compile is done using *--build-lib ldpc_t2*.
@@ -131,14 +132,14 @@ sudo ./nr_dlsim -n300 -s30 -R 106 -e 27 -c
```
# OTA test
-Offload of the channel encoding and decoding to the AMD Xilinx T2 card is enabled by *--ldpc-offload-enable 1* option.
+Offload of the channel encoding and decoding to the AMD Xilinx T2 card is enabled by *--ldpc-offload-enable* option.
## Run OAI gNB with USRP B210
```
cd ~/openairinterface5g
source oaienv
cd cmake_targets/ran_build/build
-sudo ./nr-softmodem --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --ldpc-offload-enable 1
+sudo ./nr-softmodem --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --ldpc-offload-enable
```
# Limitations
diff --git a/executables/nr-cuup.c b/executables/nr-cuup.c
index 5fb66bc73a..558e450d33 100644
--- a/executables/nr-cuup.c
+++ b/executables/nr-cuup.c
@@ -71,7 +71,7 @@ rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const pc,
const mui_t mui,
const confirm_t c,
const sdu_size_t size,
- mem_block_t *const buf,
+ uint8_t *const buf,
const uint32_t *const a,
const uint32_t *const b)
{
diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index 3738fa3f28..ef38a8ee1f 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -593,7 +593,7 @@ void init_eNB_afterRU(void) {
LOG_I(PHY,"RC.nb_nr_CC[inst:%d]:%p\n", inst, RC.gNB[inst]);
gNB = RC.gNB[inst];
- gNB->ldpc_offload_flag = ldpc_offload_flag;
+ gNB->ldpc_offload_flag = get_softmodem_params()->ldpc_offload_flag;
gNB->reorder_thread_disable = get_softmodem_params()->reorder_thread_disable;
phy_init_nr_gNB(gNB);
diff --git a/executables/nr-softmodem-common.h b/executables/nr-softmodem-common.h
index da743e4342..19760bdd26 100644
--- a/executables/nr-softmodem-common.h
+++ b/executables/nr-softmodem-common.h
@@ -98,7 +98,6 @@
#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_LDPC_OFFLOAD "enable LDPC offload to AMD Xilinx T2 card\n"
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
#define CONFIG_HLP_TX_SUBDEV "set the arguments to select tx_subdev (same syntax as in UHD)\n"
#define CONFIG_HLP_RX_SUBDEV "set the arguments to select rx_subdev (same syntax as in UHD)\n"
diff --git a/executables/nr-softmodem.h b/executables/nr-softmodem.h
index d4414291df..e7eed10cff 100644
--- a/executables/nr-softmodem.h
+++ b/executables/nr-softmodem.h
@@ -29,7 +29,6 @@
{"D" , CONFIG_HLP_DLBM_PHYTEST, 0, .u64ptr=&dlsch_slot_bitmap, .defintval=0, TYPE_UINT64, 0}, \
{"U" , CONFIG_HLP_ULBM_PHYTEST, 0, .u64ptr=&ulsch_slot_bitmap, .defintval=0, TYPE_UINT64, 0}, \
{"usrp-tx-thread-config", CONFIG_HLP_USRP_THREAD, 0, .iptr=&usrp_tx_thread, .defstrval=0, TYPE_INT, 0}, \
- {"ldpc-offload-enable", CONFIG_HLP_LDPC_OFFLOAD, 0, .iptr=&ldpc_offload_flag, .defstrval=0, TYPE_INT, 0}, \
{"uecap_file", CONFIG_HLP_UECAP_FILE, 0, .strptr=&uecap_file, .defstrval="./uecap_ports1.xml", TYPE_STRING, 0}, \
{"s" , CONFIG_HLP_SNR, 0, .dblptr=&snr_dB, .defdblval=25, TYPE_DOUBLE, 0}, \
}
@@ -44,7 +43,6 @@ extern uint32_t target_ul_bw;
extern uint64_t dlsch_slot_bitmap;
extern uint64_t ulsch_slot_bitmap;
extern char *uecap_file;
-extern int ldpc_offload_flag;
// In nr-gnb.c
extern void init_gNB(int single_thread_flag,int wait_for_sync);
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index 3a5532af43..62f5e4b772 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -402,6 +402,7 @@ static void trigger_deregistration(int sig)
{
if (!stop_immediately) {
MessageDef *msg = itti_alloc_new_message(TASK_RRC_UE_SIM, 0, NAS_DEREGISTRATION_REQ);
+ NAS_DEREGISTRATION_REQ(msg).cause = AS_DETACH;
itti_send_msg_to_task(TASK_NAS_NRUE, 0, msg);
stop_immediately = true;
static const char m[] = "Press ^C again to trigger immediate shutdown\n";
@@ -425,6 +426,28 @@ static void get_channel_model_mode(configmodule_interface_t *cfg)
init_bler_table("NR_AWGN_RESULTS_DIR");
}
+void start_oai_nrue_threads()
+{
+ init_queue(&nr_rach_ind_queue);
+ init_queue(&nr_rx_ind_queue);
+ init_queue(&nr_crc_ind_queue);
+ init_queue(&nr_uci_ind_queue);
+ init_queue(&nr_sfn_slot_queue);
+ init_queue(&nr_chan_param_queue);
+ init_queue(&nr_dl_tti_req_queue);
+ init_queue(&nr_tx_req_queue);
+ init_queue(&nr_ul_dci_req_queue);
+ init_queue(&nr_ul_tti_req_queue);
+
+ if (sem_init(&sfn_slot_semaphore, 0, 0) != 0)
+ {
+ LOG_E(MAC, "sem_init() error\n");
+ abort();
+ }
+
+ init_nrUE_standalone_thread(ue_id_g);
+}
+
int NB_UE_INST = 1;
configmodule_interface_t *uniqCfg = NULL;
diff --git a/executables/nr-uesoftmodem.h b/executables/nr-uesoftmodem.h
index 3549a7fae1..7adba3fa97 100644
--- a/executables/nr-uesoftmodem.h
+++ b/executables/nr-uesoftmodem.h
@@ -97,7 +97,7 @@ extern void init_NR_UE(int, char *, char *, char *);
extern void init_NR_UE_threads(int);
extern void reset_opp_meas(void);
extern void print_opp_meas(void);
-extern void start_oai_nrue_threads(void);
+void start_oai_nrue_threads(void);
void *UE_thread(void *arg);
void init_nr_ue_vars(PHY_VARS_NR_UE *ue, uint8_t UE_id, uint8_t abstraction_flag);
void init_nrUE_standalone_thread(int ue_idx);
diff --git a/executables/softmodem-common.c b/executables/softmodem-common.c
index f72d201622..316a5b14c9 100644
--- a/executables/softmodem-common.c
+++ b/executables/softmodem-common.c
@@ -47,7 +47,6 @@ char *parallel_config=NULL;
char *worker_config=NULL;
int usrp_tx_thread = 0;
char *nfapi_str=NULL;
-int ldpc_offload_flag=0;
uint8_t nfapi_mode=0;
static mapping softmodem_funcs[] = MAPPING_SOFTMODEM_FUNCTIONS;
diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h
index e72e4dd824..b856bf252c 100644
--- a/executables/softmodem-common.h
+++ b/executables/softmodem-common.h
@@ -109,7 +109,8 @@ extern "C"
#define CONFIG_HLP_SYNC_REF "Sync Reference in Sidelink\n"
#define CONFIG_HLP_NID1 "Set NID1 value in Sidelink\n"
#define CONFIG_HLP_NID2 "Set NID2 value in Sidelink\n"
-#define CONFIG_HLP_NOITTI "Do not start itti threads, call queue processing in place, inside the caller thread"
+#define CONFIG_HLP_NOITTI "Do not start itti threads, call queue processing in place, inside the caller thread"
+#define CONFIG_HLP_LDPC_OFFLOAD "Enable LDPC offload to AMD Xilinx T2 telco card\n"
/*-----------------------------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters common to eNodeB and UE */
@@ -144,6 +145,7 @@ extern "C"
#define SYNC_REF softmodem_params.sync_ref
#define NID1 softmodem_params.nid1
#define NID2 softmodem_params.nid2
+#define LDPC_OFFLOAD_FLAG softmodem_params.ldpc_offload_flag
#define REORDER_THREAD_DISABLE softmodem_params.reorder_thread_disable
#define DEFAULT_RFCONFIG_FILE "/usr/local/etc/syriq/ue.band7.tm1.PRB100.NR40.dat";
@@ -191,7 +193,8 @@ extern int usrp_tx_thread;
{"disable-stats", CONFIG_HLP_STATS_DISABLE, PARAMFLAG_BOOL, .iptr=&stats_disabled, .defintval=0, TYPE_INT, 0}, \
{"nid1", CONFIG_HLP_NID1, 0, .iptr=&NID1, .defintval=10, TYPE_INT, 0}, \
{"nid2", CONFIG_HLP_NID2, 0, .iptr=&NID2, .defintval=1, TYPE_INT, 0}, \
- {"no-itti-threads", CONFIG_HLP_NOITTI, PARAMFLAG_BOOL, .iptr=&softmodem_params.no_itti, .defintval=0, TYPE_INT, 0}, \
+ {"no-itti-threads", CONFIG_HLP_NOITTI, PARAMFLAG_BOOL, .iptr=&softmodem_params.no_itti, .defintval=0, TYPE_INT, 0}, \
+ {"ldpc-offload-enable", CONFIG_HLP_LDPC_OFFLOAD, PARAMFLAG_BOOL, .iptr=&LDPC_OFFLOAD_FLAG, .defstrval=0, TYPE_INT, 0}, \
}
// clang-format on
@@ -241,6 +244,7 @@ extern int usrp_tx_thread;
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
+ { .s5 = { NULL } }, \
}
// clang-format on
@@ -353,6 +357,7 @@ typedef struct {
int nid1;
int nid2;
int no_itti;
+ int ldpc_offload_flag;
} softmodem_params_t;
extern uint64_t get_softmodem_optmask(void);
@@ -368,7 +373,6 @@ extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
extern int usrp_tx_thread;
extern uint16_t sl_ahead;
extern uint16_t sf_ahead;
-extern int ldpc_offload_flag;
extern int oai_exit;
void tx_func(void *param);
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
index 67dd5d19b7..6dbb2b5c0f 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
@@ -19,7 +19,7 @@
#include
#include "stddef.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "fapi_nr_ue_constants.h"
#include "PHY/impl_defs_top.h"
#include "PHY/impl_defs_nr.h"
@@ -673,7 +673,7 @@ typedef struct
} fapi_nr_prach_config_t;
typedef struct {
- uint16_t target_Nid_cell;
+ int16_t target_Nid_cell;
} fapi_nr_synch_request_t;
typedef struct {
diff --git a/nfapi/open-nFAPI/pnf/src/pnf.c b/nfapi/open-nFAPI/pnf/src/pnf.c
index 11bc86e42e..a4ff93b5e8 100644
--- a/nfapi/open-nFAPI/pnf/src/pnf.c
+++ b/nfapi/open-nFAPI/pnf/src/pnf.c
@@ -31,7 +31,7 @@
#include "pnf.h"
# if 1 // for hard-code (remove later)
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "common/ran_context.h"
diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c
index a77fdfc2f7..1f2163ca5e 100644
--- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c
+++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c
@@ -543,8 +543,8 @@ set_ldpc_dec_op(struct rte_bbdev_dec_op **ops, unsigned int n,
}
LOG_D(PHY,"ULSCH %02d HARQPID %02d R %02d COMBIN %d RV %d NCB %05d \n", ulsch_id, harq_pid, r, p_offloadParams->setCombIn, p_offloadParams->rv, p_offloadParams->n_cb);
ops[i]->ldpc_dec.code_block_mode = 1; // ldpc_dec->code_block_mode;
- ops[i]->ldpc_dec.harq_combined_input.offset = ulsch_id * (32 * 1024 * 1024) + harq_pid * (2 * 1024 * 1024) + r * (1024 * 32);
- ops[i]->ldpc_dec.harq_combined_output.offset = ulsch_id * (32 * 1024 * 1024) + harq_pid * (2 * 1024 * 1024) + r * (1024 * 32);
+ ops[i]->ldpc_dec.harq_combined_input.offset = ulsch_id * 64 * LDPC_MAX_CB_SIZE + r * LDPC_MAX_CB_SIZE;
+ ops[i]->ldpc_dec.harq_combined_output.offset = ulsch_id * 64 * LDPC_MAX_CB_SIZE + r * LDPC_MAX_CB_SIZE;
if (bufs->hard_outputs != NULL)
ops[i]->ldpc_dec.hard_output = bufs->hard_outputs[start_idx + i];
if (bufs->inputs != NULL)
@@ -968,7 +968,7 @@ int32_t LDPCinit()
int socket_id = GET_SOCKET(info.socket_id);
int out_max_sz = 8448; // max code block size (for BG1), 22 * 384
- int in_max_sz = 25344; // max number of encoded bits (for BG1), 66 * 384
+ int in_max_sz = LDPC_MAX_CB_SIZE; // max number of encoded bits (for BG2 and MCS0)
int num_ops = 1;
int f_ret = create_mempools(ad, socket_id, num_ops, out_max_sz, in_max_sz);
if (f_ret != TEST_SUCCESS) {
diff --git a/openair1/PHY/CODING/nrLDPC_extern.h b/openair1/PHY/CODING/nrLDPC_extern.h
index dbfdae21b2..f93e7eb9aa 100644
--- a/openair1/PHY/CODING/nrLDPC_extern.h
+++ b/openair1/PHY/CODING/nrLDPC_extern.h
@@ -21,7 +21,8 @@
#ifndef _NRLDPC_EXTERN_H__
#define _NRLDPC_EXTERN_H__
#include "openair1/PHY/CODING/nrLDPC_defs.h"
-
+/* LDPC maximum code block size - maximum E */
+#define LDPC_MAX_CB_SIZE 32768
/* ldpc coder/decoder API*/
typedef struct ldpc_interface_s {
LDPC_initfunc_t *LDPCinit;
diff --git a/openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h b/openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h
index d90216c3e6..7ee3be6701 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h
@@ -17,7 +17,7 @@
//#include "PHY/defs_nb_iot.h"
#include "PHY/LTE_TRANSPORT/dci_NB_IoT.h"
#include "PHY/impl_defs_lte_NB_IoT.h"
-#include "openair2/COMMON/platform_types.h"
+#include "common/platform_types.h"
//#include "dci.h"
#include "PHY/LTE_TRANSPORT/uci_NB_IoT.h"
//#include "dci.h"
diff --git a/openair1/PHY/NBIoT_TRANSPORT/README b/openair1/PHY/NBIoT_TRANSPORT/README
deleted file mode 100644
index 938b70815c..0000000000
--- a/openair1/PHY/NBIoT_TRANSPORT/README
+++ /dev/null
@@ -1 +0,0 @@
-NB-IoT transport channel procedures for NB-IoT are here
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index a3041838b9..e04d8fc41a 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -232,8 +232,8 @@ int decode_offload(PHY_VARS_gNB *phy_vars_gNB,
{
NR_gNB_ULSCH_t *ulsch = &phy_vars_gNB->ulsch[ULSCH_id];
NR_UL_gNB_HARQ_t *harq_process = ulsch->harq_process;
- int16_t z_ol[68 * 384 + 16] __attribute__((aligned(16)));
- int8_t l_ol[68 * 384 + 16] __attribute__((aligned(16)));
+ int16_t z_ol[LDPC_MAX_CB_SIZE] __attribute__((aligned(16)));
+ int8_t l_ol[LDPC_MAX_CB_SIZE] __attribute__((aligned(16)));
uint8_t Qm = pusch_pdu->qam_mod_order;
uint8_t n_layers = pusch_pdu->nrOfLayers;
const int Kr = harq_process->K;
diff --git a/openair1/PHY/defs_L1_NB_IoT.h b/openair1/PHY/defs_L1_NB_IoT.h
index ab55b67864..01143ccf47 100644
--- a/openair1/PHY/defs_L1_NB_IoT.h
+++ b/openair1/PHY/defs_L1_NB_IoT.h
@@ -119,7 +119,7 @@ static inline void* malloc16_clear( size_t size )
#include "PHY/CODING/defs_NB_IoT.h"
#include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h"
//#include "PHY/TOOLS/defs.h"
-//#include "platform_types.h"
+#include "common/platform_types.h"
///#include "openair1/PHY/LTE_TRANSPORT/defs_nb_iot.h"
////////////////////////////////////////////////////////////////////#ifdef OPENAIR_LTE (check if this is required)
diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h
index 7ee8017a45..7f1858b2c4 100644
--- a/openair1/PHY/defs_UE.h
+++ b/openair1/PHY/defs_UE.h
@@ -62,7 +62,7 @@
#include "time_meas.h"
#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "PHY/LTE_UE_TRANSPORT/transport_ue.h"
#include "PHY/LTE_TRANSPORT/transport_eNB.h" // for SIC
#include
diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h
index e021f7ce68..7098bd8c6f 100644
--- a/openair1/PHY/defs_common.h
+++ b/openair1/PHY/defs_common.h
@@ -59,7 +59,7 @@
//#include
#include "time_meas.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#define MAX_NUM_RU_PER_eNB 64
#include
diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h
index 668716e1f9..45abb05c2f 100644
--- a/openair1/PHY/defs_eNB.h
+++ b/openair1/PHY/defs_eNB.h
@@ -61,7 +61,7 @@
#include "time_meas.h"
//#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "PHY/LTE_TRANSPORT/transport_common.h"
#include "PHY/LTE_TRANSPORT/transport_eNB.h"
#include "openair2/PHY_INTERFACE/IF_Module.h"
diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h
index f9934348c7..0eb824406b 100644
--- a/openair1/PHY/defs_nr_UE.h
+++ b/openair1/PHY/defs_nr_UE.h
@@ -97,7 +97,7 @@
#include "time_meas.h"
#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "NR_UE_TRANSPORT/nr_transport_ue.h"
#if defined(UPGRADE_RAT_NR)
diff --git a/openair1/SCHED_NBIOT/README b/openair1/SCHED_NBIOT/README
deleted file mode 100644
index 319372ee93..0000000000
--- a/openair1/SCHED_NBIOT/README
+++ /dev/null
@@ -1 +0,0 @@
-213 procedures for NB-IoT eNB
diff --git a/openair1/SCHED_NR/README b/openair1/SCHED_NR/README
deleted file mode 100644
index 8814a972b0..0000000000
--- a/openair1/SCHED_NR/README
+++ /dev/null
@@ -1 +0,0 @@
-213/214 procedures for NR gNB
diff --git a/openair1/SCHED_NR_UE/README b/openair1/SCHED_NR_UE/README
deleted file mode 100644
index b2bc9d09b8..0000000000
--- a/openair1/SCHED_NR_UE/README
+++ /dev/null
@@ -1 +0,0 @@
-213/214 procedures for NR UE
diff --git a/openair1/SIMULATION/Makefile.inc b/openair1/SIMULATION/Makefile.inc
deleted file mode 100644
index 848a6cf556..0000000000
--- a/openair1/SIMULATION/Makefile.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-SIMULATION_OBJS = $(TOP_DIR)/SIMULATION/TOOLS/gauss.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/random_channel.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/rangen_double.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/taus.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/multipath_channel.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/multipath_tv_channel.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/abstraction.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/rf.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/adc.o
-SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/dac.o
-#SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/LTE_PHY/openair_hw.o
-
diff --git a/openair2/COMMON/as_message.h b/openair2/COMMON/as_message.h
index c4724b5458..4973939976 100644
--- a/openair2/COMMON/as_message.h
+++ b/openair2/COMMON/as_message.h
@@ -327,15 +327,6 @@ typedef struct nas_establish_req_s {
as_nas_info_t initialNasMsg; /* Initial NAS message to transfer */
} nas_establish_req_t;
-/*
- * fill me
- */
-typedef struct nas_deregistration_req_s {
- // This dummy element is to avoid CLANG warning: empty struct has size 0 in C, size 1 in C++
- // To be removed if the structure is filled
- uint32_t dummy;
-} nas_deregistration_req_t;
-
/*
* AS->NAS - NAS signalling connection establishment indication
* AS transfers the initial NAS message to the NAS.
@@ -406,6 +397,10 @@ typedef struct nas_release_ind_s {
release_cause_t cause; /* Release cause */
} nas_release_ind_t;
+typedef struct nas_deregistration_req_s {
+ release_cause_t cause;
+} nas_deregistration_req_t;
+
/*
* --------------------------------------------------------------------------
* NAS information transfer
diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h
index e18db881f0..f5a24494a7 100644
--- a/openair2/COMMON/commonDef.h
+++ b/openair2/COMMON/commonDef.h
@@ -42,36 +42,9 @@ Description Contains global common definitions
#include
#include
#include
-
-#define NAS_UE_ID_FMT "0x%06x"
-
-/****************************************************************************/
-/********************* G L O B A L C O N S T A N T S *******************/
-/****************************************************************************/
-
-#define RETURNok (0)
-#define RETURNerror (-1)
-
-/*
- * Name of the environment variable which defines the default directory
- * where the NAS application is executed and where are located files
- * where non-volatile data are stored
- */
-#define DEFAULT_NAS_PATH "PWD"
-
-/****************************************************************************/
-/************************ G L O B A L T Y P E S ************************/
-/****************************************************************************/
-
-/*
------------------------------------------------------------------------------
- Standard data type definitions
------------------------------------------------------------------------------
-*/
-typedef int8_t SByte_t; /* 8 bit signed integer */
+#include "common/platform_constants.h"
typedef uint8_t Byte_t; /* 8 bit unsigned integer */
-
/*
-----------------------------------------------------------------------------
Common NAS data type definitions
diff --git a/openair2/COMMON/e1ap_messages_types.h b/openair2/COMMON/e1ap_messages_types.h
index 212c400988..b6400b53b5 100644
--- a/openair2/COMMON/e1ap_messages_types.h
+++ b/openair2/COMMON/e1ap_messages_types.h
@@ -51,7 +51,7 @@
#define E1AP_BEARER_CONTEXT_RELEASE_CMD(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_release_cmd
#define E1AP_BEARER_CONTEXT_RELEASE_CPLT(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_release_cplt
-typedef f1ap_net_ip_address_t e1ap_net_ip_address_t;
+typedef net_ip_address_t e1ap_net_ip_address_t;
typedef struct PLMN_ID_s {
int mcc;
diff --git a/openair2/COMMON/f1ap_messages_def.h b/openair2/COMMON/f1ap_messages_def.h
index 0689dd52ac..a5e10b01f9 100644
--- a/openair2/COMMON/f1ap_messages_def.h
+++ b/openair2/COMMON/f1ap_messages_def.h
@@ -19,6 +19,7 @@
* contact@openairinterface.org
*/
+#include "openair2/COMMON/f1ap_messages_types.h"
/* To setup F1 at DU */
MESSAGE_DEF(F1AP_DU_REGISTER_REQ, MESSAGE_PRIORITY_MED, f1ap_du_register_req_t, f1ap_du_register_req)
diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h
index c0d5c1b437..cb4c65e9e2 100644
--- a/openair2/COMMON/f1ap_messages_types.h
+++ b/openair2/COMMON/f1ap_messages_types.h
@@ -24,7 +24,6 @@
#include
#include
-#include "rlc.h"
#include "s1ap_messages_types.h"
#include "ngap_messages_types.h"
@@ -75,12 +74,7 @@
#define F1AP_MAX_NO_OF_TNL_ASSOCIATIONS 32
#define F1AP_MAX_NO_UE_ID 1024
-typedef struct f1ap_net_ip_address_s {
- unsigned ipv4:1;
- unsigned ipv6:1;
- char ipv4_address[16];
- char ipv6_address[46];
-} f1ap_net_ip_address_t;
+typedef net_ip_address_t f1ap_net_ip_address_t;
typedef struct f1ap_net_config_t {
f1ap_net_ip_address_t CU_f1_ip_address;
diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h
index b159b3e11b..d65b31b145 100644
--- a/openair2/COMMON/mac_rrc_primitives.h
+++ b/openair2/COMMON/mac_rrc_primitives.h
@@ -23,7 +23,7 @@
#define __MAC_RRC_PRIMITIVES_H__
#include "LAYER2/RLC/rlc.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "openair2/RRC/LTE/rrc_defs.h"
diff --git a/openair2/COMMON/ngap_messages_types.h b/openair2/COMMON/ngap_messages_types.h
index 66b8719cc8..caf0bff683 100644
--- a/openair2/COMMON/ngap_messages_types.h
+++ b/openair2/COMMON/ngap_messages_types.h
@@ -29,6 +29,8 @@
#ifndef NGAP_MESSAGES_TYPES_H_
#define NGAP_MESSAGES_TYPES_H_
+#include "common/platform_constants.h"
+#include "common/platform_types.h"
#include "common/ngran_types.h"
#include "LTE_asn_constant.h"
//-------------------------------------------------------------------------------------------//
diff --git a/openair2/COMMON/ral_messages_types.h b/openair2/COMMON/ral_messages_types.h
index fa90c4a3b2..9858d420ca 100644
--- a/openair2/COMMON/ral_messages_types.h
+++ b/openair2/COMMON/ral_messages_types.h
@@ -22,7 +22,7 @@
#ifndef RAL_MESSAGES_TYPES_H_
#define RAL_MESSAGES_TYPES_H_
#include "asn_constant.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "commonDef.h"
/* 802.21 mappings with the RRC protocol :
(Research Report RR-12-265 Mapping of IEEE 802.21 MIH primitives to EPS/LTE protocols March 13 th, 2012, Michelle WETTERWALD, Prof. Christian BONNET )
diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h
index e1e9fce355..f43d7a8dc5 100644
--- a/openair2/COMMON/rrc_messages_def.h
+++ b/openair2/COMMON/rrc_messages_def.h
@@ -73,6 +73,7 @@ MESSAGE_DEF(NAS_CELL_SELECTION_IND, MESSAGE_PRIORITY_MED, NasCellSelec
MESSAGE_DEF(NAS_PAGING_IND, MESSAGE_PRIORITY_MED, NasPagingInd, nas_paging_ind)
MESSAGE_DEF(NAS_CONN_ESTABLI_CNF, MESSAGE_PRIORITY_MED, NasConnEstabCnf, nas_conn_establi_cnf)
MESSAGE_DEF(NAS_CONN_RELEASE_IND, MESSAGE_PRIORITY_MED, NasConnReleaseInd, nas_conn_release_ind)
+MESSAGE_DEF(NR_NAS_CONN_RELEASE_IND, MESSAGE_PRIORITY_MED, NRNasConnReleaseInd, nr_nas_conn_release_ind)
MESSAGE_DEF(NAS_UPLINK_DATA_CNF, MESSAGE_PRIORITY_MED, NasUlDataCnf, nas_ul_data_cnf)
MESSAGE_DEF(NAS_DOWNLINK_DATA_IND, MESSAGE_PRIORITY_MED, NasDlDataInd, nas_dl_data_ind)
diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h
index 2810dcfdd6..8fc3a8514a 100644
--- a/openair2/COMMON/rrc_messages_types.h
+++ b/openair2/COMMON/rrc_messages_types.h
@@ -28,7 +28,7 @@
#ifndef RRC_MESSAGES_TYPES_H_
#define RRC_MESSAGES_TYPES_H_
-
+#include "common/utils/mem/oai_memory.h"
#include "as_message.h"
#include "rrc_types.h"
#include "s1ap_messages_types.h"
@@ -43,6 +43,7 @@
#include "NR_RACH-ConfigCommon.h"
#include "NR_ServingCellConfigCommon.h"
#include "NR_ServingCellConfig.h"
+
//-------------------------------------------------------------------------------------------//
// Messages for RRC logging
#if defined(DISABLE_ITTI_XER_PRINT)
@@ -82,6 +83,7 @@
#define NAS_PAGING_IND(mSGpTR) (mSGpTR)->ittiMsg.nas_paging_ind
#define NAS_CONN_ESTABLI_CNF(mSGpTR) (mSGpTR)->ittiMsg.nas_conn_establi_cnf
#define NAS_CONN_RELEASE_IND(mSGpTR) (mSGpTR)->ittiMsg.nas_conn_release_ind
+#define NR_NAS_CONN_RELEASE_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_nas_conn_release_ind
#define NAS_UPLINK_DATA_CNF(mSGpTR) (mSGpTR)->ittiMsg.nas_ul_data_cnf
#define NAS_DOWNLINK_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.nas_dl_data_ind
@@ -417,7 +419,7 @@ typedef struct NRRrcConfigurationReq_s {
typedef struct NRDuDlReq_s {
rnti_t rnti;
- mem_block_t * buf;
+ uint8_t *buf;
uint64_t srb_id;
} NRDuDlReq_t;
@@ -452,6 +454,16 @@ typedef struct nrrrc_frame_process_s {
int gnb_id;
} NRRrcFrameProcess;
+typedef enum NR_Release_Cause_e {
+ RRC_CONNECTION_FAILURE,
+ RRC_RESUME_FAILURE,
+ OTHER,
+} NR_Release_Cause_t;
+
+typedef struct nr_nas_conn_release_ind {
+ NR_Release_Cause_t cause;
+} NRNasConnReleaseInd;
+
// eNB: RLC -> RRC messages
typedef struct rlc_sdu_indication_s {
int rnti;
diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h
index 3dd8fc8213..7537d7c6d7 100644
--- a/openair2/COMMON/s1ap_messages_types.h
+++ b/openair2/COMMON/s1ap_messages_types.h
@@ -24,6 +24,7 @@
#include
#include
+#include "common/platform_types.h"
#include "LTE_asn_constant.h"
//-------------------------------------------------------------------------------------------//
// Defines to access message fields.
@@ -113,13 +114,6 @@ typedef enum cn_domain_s {
CN_DOMAIN_CS = 2
} cn_domain_t;
-typedef struct net_ip_address_s {
- unsigned ipv4:1;
- unsigned ipv6:1;
- char ipv4_address[16];
- char ipv6_address[46];
-} net_ip_address_t;
-
typedef uint64_t bitrate_t;
typedef struct ambr_s {
diff --git a/openair2/ENB_APP/enb_app.h b/openair2/ENB_APP/enb_app.h
index 0154b12dbc..04f413b3c6 100644
--- a/openair2/ENB_APP/enb_app.h
+++ b/openair2/ENB_APP/enb_app.h
@@ -31,8 +31,7 @@
#define ENB_APP_H_
#include
-#include "platform_types.h"
-
+#include "common/platform_types.h"
void *eNB_app_task(void *args_p);
diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h
index 5abb7df2c9..dc182faf4b 100644
--- a/openair2/ENB_APP/enb_config.h
+++ b/openair2/ENB_APP/enb_config.h
@@ -35,7 +35,7 @@
#include
#include "commonDef.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "PHY/defs_eNB.h"
#include "s1ap_messages_types.h"
diff --git a/openair2/F1AP/f1ap_common.h b/openair2/F1AP/f1ap_common.h
index 2071234be0..13f1d8f53b 100644
--- a/openair2/F1AP/f1ap_common.h
+++ b/openair2/F1AP/f1ap_common.h
@@ -343,7 +343,7 @@
#include "f1ap_default_values.h"
#include "conversions.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "common/utils/LOG/log.h"
#include "intertask_interface.h"
#include "sctp_messages_types.h"
diff --git a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c
index 03c210c972..aaa330ecb2 100644
--- a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c
+++ b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c
@@ -270,8 +270,8 @@ int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance, sctp_assoc_t assoc_id
ctxt.rntiMaybeUEid = cu_ue_f1ap_id;
ctxt.enb_flag = 1;
ctxt.eNB_index = 0;
- mem_block_t *mb = get_free_mem_block(ie->value.choice.RRCContainer.size,__func__);
- memcpy((void *)mb->data,(void *)ie->value.choice.RRCContainer.buf,ie->value.choice.RRCContainer.size);
+ uint8_t *mb = malloc16(ie->value.choice.RRCContainer.size);
+ memcpy(mb, ie->value.choice.RRCContainer.buf, ie->value.choice.RRCContainer.size);
LOG_D(F1AP, "Calling pdcp_data_ind for UE RNTI %lx srb_id %lu with size %ld (DCCH) \n", ctxt.rntiMaybeUEid, srb_id, ie->value.choice.RRCContainer.size);
//for (int i = 0; i < ie->value.choice.RRCContainer.size; i++)
// printf("%02x ", mb->data[i]);
diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c
index 1c2b727237..8401b44eca 100644
--- a/openair2/F1AP/f1ap_cu_task.c
+++ b/openair2/F1AP/f1ap_cu_task.c
@@ -123,7 +123,6 @@ void *F1AP_CU_task(void *arg) {
int result;
LOG_I(F1AP, "Starting F1AP at CU\n");
// no RLC in CU, initialize mem pool for PDCP
- pool_buffer_init();
itti_mark_task_ready(TASK_CU_F1);
eth_params_t *IPaddrs;
diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c
index 08090a1395..cc29a92ebb 100644
--- a/openair2/F1AP/f1ap_cu_ue_context_management.c
+++ b/openair2/F1AP/f1ap_cu_ue_context_management.c
@@ -1227,7 +1227,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, f1ap_ue_conte
else{
/* 12.1.2 DRB_Information */
- f1ap_drb_information_t *drb_info_in = &f1ap_ue_context_modification_req->drbs_to_be_setup->drb_info;
+ f1ap_drb_information_t *drb_info_in = &f1ap_ue_context_modification_req->drbs_to_be_setup[i].drb_info;
drbs_toBeSetupMod_item->qoSInformation.present = F1AP_QoSInformation_PR_choice_extension;
F1AP_QoSInformation_ExtIEs_t *ie = (F1AP_QoSInformation_ExtIEs_t *)calloc(1, sizeof(*ie));
ie->id = F1AP_ProtocolIE_ID_id_DRB_Information;
diff --git a/openair2/F1AP/f1ap_du_task.c b/openair2/F1AP/f1ap_du_task.c
index 7ba479e1f9..d823a35092 100644
--- a/openair2/F1AP/f1ap_du_task.c
+++ b/openair2/F1AP/f1ap_du_task.c
@@ -54,8 +54,6 @@ void du_task_send_sctp_association_req(instance_t instance, f1ap_net_config_t *n
sctp_new_association_req_p->out_streams = 2; //du_inst->sctp_out_streams;
// remote
memcpy(&sctp_new_association_req_p->remote_address, &nc->CU_f1_ip_address, sizeof(nc->CU_f1_ip_address));
- // local
- memcpy(&sctp_new_association_req_p->local_address, &nc->DU_f1_ip_address, sizeof(nc->DU_f1_ip_address));
// du_f1ap_register_to_sctp
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
}
diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c
index 4eee1ba6b1..e306463b66 100644
--- a/openair2/F1AP/f1ap_du_ue_context_management.c
+++ b/openair2/F1AP/f1ap_du_ue_context_management.c
@@ -38,6 +38,7 @@
#include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h"
#include
+#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
bool DURecvCb(protocol_ctxt_t *ctxt_pP,
const srb_flag_t srb_flagP,
@@ -51,8 +52,8 @@ bool DURecvCb(protocol_ctxt_t *ctxt_pP,
const uint32_t *destinationL2Id)
{
// The buffer comes from the stack in gtp-u thread, we have a make a separate buffer to enqueue in a inter-thread message queue
- mem_block_t *sdu=get_free_mem_block(sdu_buffer_sizeP, __func__);
- memcpy(sdu->data, sdu_buffer_pP, sdu_buffer_sizeP);
+ uint8_t *sdu = malloc16(sdu_buffer_sizeP);
+ memcpy(sdu, sdu_buffer_pP, sdu_buffer_sizeP);
du_rlc_data_req(ctxt_pP, srb_flagP, false, rb_idP, muiP, confirmP, sdu_buffer_sizeP, sdu);
return true;
}
@@ -554,7 +555,7 @@ int DU_send_UE_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id)
int DU_send_UE_CONTEXT_RELEASE_REQUEST(sctp_assoc_t assoc_id, f1ap_ue_context_release_req_t *req)
{
- F1AP_F1AP_PDU_t pdu;
+ F1AP_F1AP_PDU_t pdu = {0};
F1AP_UEContextReleaseRequest_t *out;
uint8_t *buffer=NULL;
uint32_t len=0;
diff --git a/openair2/F1AP/f1ap_encoder.c b/openair2/F1AP/f1ap_encoder.c
index b249f23cfe..870dfd73fc 100644
--- a/openair2/F1AP/f1ap_encoder.c
+++ b/openair2/F1AP/f1ap_encoder.c
@@ -21,13 +21,6 @@
/*! \file f1ap_encoder.c
* \brief f1ap pdu encode procedures
- * \author EURECOM/NTUST
- * \date 2018
- * \version 0.1
- * \company Eurecom
- * \email: navid.nikaein@eurecom.fr, bing-kai.hong@eurecom.fr
- * \note
- * \warning
*/
#include "f1ap_common.h"
@@ -66,282 +59,3 @@ int f1ap_encode_pdu(F1AP_F1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *length) {
*length = encoded;
return encoded;
}
-
-/*
-static inline
-int f1ap_encode_initiating(f1ap_message *f1ap_message_p,
- uint8_t **buffer, uint32_t *len)
-{
- int ret = -1;
- MessageDef *message_p;
- char *message_string = NULL;
- size_t message_string_size;
- MessagesIds message_id;
-
- DevAssert(f1ap_message_p != NULL);
-
- message_string = calloc(10000, sizeof(char));
-
- f1ap_string_total_size = 0;
-
- switch(f1ap_message_p->procedureCode) {
- case F1ap_ProcedureCode_id_F1Setup:
- ret = f1ap_encode_f1_setup_request(
- &f1ap_message_p->msg.f1ap_F1SetupRequestIEs, buffer, len);
- //f1ap_xer_print_f1ap_f1setuprequest(f1ap_xer__print2sp, message_string, f1ap_message_p);
- message_id = F1AP_F1_SETUP_LOG;
- break;
-
- case F1ap_ProcedureCode_id_UEContextReleaseRequest:
- ret = f1ap_encode_ue_context_release_request(
- &f1ap_message_p->msg.f1ap_UEContextReleaseRequestIEs, buffer, len);
- //f1ap_xer_print_f1ap_uecontextreleaserequest(f1ap_xer__print2sp,
- // message_string, f1ap_message_p);
- message_id = F1AP_UE_CONTEXT_RELEASE_REQ_LOG;
- break;
-
-
- default:
- F1AP_DEBUG("Unknown procedure ID (%d) for initiating message\n",
- (int)f1ap_message_p->procedureCode);
- return ret;
- break;
- }
-
- message_string_size = strlen(message_string);
-
- message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText));
- message_p->ittiMsg.f1ap_f1_setup_log.size = message_string_size;
- memcpy(&message_p->ittiMsg.f1ap_f1_setup_log.text, message_string, message_string_size);
-
- itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
-
- free(message_string);
-
- return ret;
-}
-
-static inline
-int f1ap_encode_successfull_outcome(f1ap_message *f1ap_message_p,
- uint8_t **buffer, uint32_t *len)
-{
- int ret = -1;
- MessageDef *message_p;
- char *message_string = NULL;
- size_t message_string_size;
- MessagesIds message_id;
-
- DevAssert(f1ap_message_p != NULL);
-
- message_string = calloc(10000, sizeof(char));
-
- f1ap_string_total_size = 0;
- message_string_size = strlen(message_string);
-
-
- switch(f1ap_message_p->procedureCode) {
- case F1ap_ProcedureCode_id_InitialContextSetup:
- ret = f1ap_encode_initial_context_setup_response(
- &f1ap_message_p->msg.f1ap_InitialContextSetupResponseIEs, buffer, len);
-
- f1ap_xer_print_f1ap_initialcontextsetupresponse(f1ap_xer__print2sp, message_string, f1ap_message_p);
- message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG;
- message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText));
- message_p->ittiMsg.f1ap_initial_context_setup_log.size = message_string_size;
- memcpy(&message_p->ittiMsg.f1ap_initial_context_setup_log.text, message_string, message_string_size);
- itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
- free(message_string);
- break;
-
- case F1ap_ProcedureCode_id_UEContextRelease:
- ret = f1ap_encode_ue_context_release_complete(
- &f1ap_message_p->msg.f1ap_UEContextReleaseCompleteIEs, buffer, len);
- f1ap_xer_print_f1ap_uecontextreleasecomplete(f1ap_xer__print2sp, message_string, f1ap_message_p);
- message_id = F1AP_UE_CONTEXT_RELEASE_COMPLETE_LOG;
- message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText));
- message_p->ittiMsg.f1ap_ue_context_release_complete_log.size = message_string_size;
- memcpy(&message_p->ittiMsg.f1ap_ue_context_release_complete_log.text, message_string, message_string_size);
- itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
- free(message_string);
- break;
-
- default:
- F1AP_WARN("Unknown procedure ID (%d) for successfull outcome message\n",
- (int)f1ap_message_p->procedureCode);
- return ret;
- break;
- }
-
-
- return ret;
-}
-
-static inline
-int f1ap_encode_unsuccessfull_outcome(f1ap_message *f1ap_message_p,
- uint8_t **buffer, uint32_t *len)
-{
- int ret = -1;
- MessageDef *message_p;
- char *message_string = NULL;
- size_t message_string_size;
- MessagesIds message_id;
-
- DevAssert(f1ap_message_p != NULL);
-
- message_string = calloc(10000, sizeof(char));
-
- f1ap_string_total_size = 0;
-
- switch(f1ap_message_p->procedureCode) {
- case F1ap_ProcedureCode_id_InitialContextSetup:
- // ret = f1ap_encode_f1ap_initialcontextsetupfailureies(
- // &f1ap_message_p->ittiMsg.f1ap_InitialContextSetupFailureIEs, buffer, len);
- f1ap_xer_print_f1ap_initialcontextsetupfailure(f1ap_xer__print2sp, message_string, f1ap_message_p);
- message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG;
- break;
-
- default:
- F1AP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n",
- (int)f1ap_message_p->procedureCode);
- return ret;
- break;
- }
-
- message_string_size = strlen(message_string);
-
- message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText));
- message_p->ittiMsg.f1ap_initial_context_setup_log.size = message_string_size;
- memcpy(&message_p->ittiMsg.f1ap_initial_context_setup_log.text, message_string, message_string_size);
-
- itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
-
- free(message_string);
-
- return ret;
-}
-
-static inline
-int f1ap_encode_f1_setup_request(
- F1ap_F1SetupRequestIEs_t *f1SetupRequestIEs,
- uint8_t **buffer,
- uint32_t *length)
-{
- F1ap_F1SetupRequest_t f1SetupRequest;
- F1ap_F1SetupRequest_t *f1SetupRequest_p = &f1SetupRequest;
-
- memset((void *)f1SetupRequest_p, 0, sizeof(f1SetupRequest));
-
- if (f1ap_encode_f1ap_f1setuprequesties(f1SetupRequest_p, f1SetupRequestIEs) < 0) {
- return -1;
- }
-
- return f1ap_generate_initiating_message(buffer,
- length,
- F1ap_ProcedureCode_id_F1Setup,
- F1ap_Criticality_reject,
- &asn_DEF_F1ap_F1SetupRequest,
- f1SetupRequest_p);
-}
-
-static inline
-int f1ap_encode_trace_failure(
- F1ap_TraceFailureIndicationIEs_t *trace_failure_ies_p,
- uint8_t **buffer,
- uint32_t *length)
-{
- F1ap_TraceFailureIndication_t trace_failure;
- F1ap_TraceFailureIndication_t *trace_failure_p = &trace_failure;
-
- memset((void *)trace_failure_p, 0, sizeof(trace_failure));
-
- if (f1ap_encode_f1ap_tracefailureindicationies(
- trace_failure_p, trace_failure_ies_p) < 0) {
- return -1;
- }
-
- return f1ap_generate_initiating_message(buffer,
- length,
- F1ap_ProcedureCode_id_TraceFailureIndication,
- F1ap_Criticality_reject,
- &asn_DEF_F1ap_TraceFailureIndication,
- trace_failure_p);
-}
-
-static inline
-int f1ap_encode_initial_context_setup_response(
- F1ap_InitialContextSetupResponseIEs_t *initialContextSetupResponseIEs,
- uint8_t **buffer,
- uint32_t *length)
-{
- F1ap_InitialContextSetupResponse_t initial_context_setup_response;
- F1ap_InitialContextSetupResponse_t *initial_context_setup_response_p =
- &initial_context_setup_response;
-
- memset((void *)initial_context_setup_response_p, 0,
- sizeof(initial_context_setup_response));
-
- if (f1ap_encode_f1ap_initialcontextsetupresponseies(
- initial_context_setup_response_p, initialContextSetupResponseIEs) < 0) {
- return -1;
- }
-
- return f1ap_generate_successfull_outcome(buffer,
- length,
- F1ap_ProcedureCode_id_InitialContextSetup,
- F1ap_Criticality_reject,
- &asn_DEF_F1ap_InitialContextSetupResponse,
- initial_context_setup_response_p);
-}
-
-static inline
-int f1ap_encode_ue_context_release_complete(
- F1ap_UEContextReleaseCompleteIEs_t *f1ap_UEContextReleaseCompleteIEs,
- uint8_t **buffer,
- uint32_t *length)
-{
- F1ap_UEContextReleaseComplete_t ue_context_release_complete;
- F1ap_UEContextReleaseComplete_t *ue_context_release_complete_p =
- &ue_context_release_complete;
-
- memset((void *)ue_context_release_complete_p, 0,
- sizeof(ue_context_release_complete));
-
- if (f1ap_encode_f1ap_uecontextreleasecompleteies(
- ue_context_release_complete_p, f1ap_UEContextReleaseCompleteIEs) < 0) {
- return -1;
- }
-
- return f1ap_generate_successfull_outcome(buffer,
- length,
- F1ap_ProcedureCode_id_UEContextRelease,
- F1ap_Criticality_reject,
- &asn_DEF_F1ap_UEContextReleaseComplete,
- ue_context_release_complete_p);
-}
-
-static inline
-int f1ap_encode_ue_context_release_request(
- F1ap_UEContextReleaseRequestIEs_t *f1ap_UEContextReleaseRequestIEs,
- uint8_t **buffer,
- uint32_t *length)
-{
- F1ap_UEContextReleaseRequest_t ue_context_release_request;
- F1ap_UEContextReleaseRequest_t *ue_context_release_request_p =
- &ue_context_release_request;
-
- memset((void *)ue_context_release_request_p, 0,
- sizeof(ue_context_release_request));
-
- if (f1ap_encode_f1ap_uecontextreleaserequesties(
- ue_context_release_request_p, f1ap_UEContextReleaseRequestIEs) < 0) {
- return -1;
- }
-
- return f1ap_generate_initiating_message(buffer,
- length,
- F1ap_ProcedureCode_id_UEContextReleaseRequest,
- F1ap_Criticality_reject,
- &asn_DEF_F1ap_UEContextReleaseRequest,
- ue_context_release_request_p);
-}
-*/
diff --git a/openair2/GNB_APP/gnb_config.h b/openair2/GNB_APP/gnb_config.h
index d02b5eb4f5..235a7582d5 100644
--- a/openair2/GNB_APP/gnb_config.h
+++ b/openair2/GNB_APP/gnb_config.h
@@ -35,7 +35,7 @@
#include
#include "commonDef.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "PHY/defs_eNB.h"
#include "s1ap_messages_types.h"
diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c
index b4d1b307b2..9b965420d6 100644
--- a/openair2/LAYER2/MAC/config.c
+++ b/openair2/LAYER2/MAC/config.c
@@ -28,7 +28,7 @@
* @ingroup _mac
*/
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "LTE_SystemInformationBlockType2.h"
//#include "RadioResourceConfigCommonSIB.h"
diff --git a/openair2/LAYER2/MAC/config_ue.c b/openair2/LAYER2/MAC/config_ue.c
index 4ede02d330..99ffd7ac07 100644
--- a/openair2/LAYER2/MAC/config_ue.c
+++ b/openair2/LAYER2/MAC/config_ue.c
@@ -31,8 +31,7 @@
*/
-
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "nfapi/oai_integration/vendor_ext.h"
#include "SCHED_UE/sched_UE.h"
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index dadd019241..12984f299d 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -33,7 +33,7 @@
#include "assertions.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "LAYER2/MAC/mac.h"
#include "LAYER2/MAC/mac_extern.h"
diff --git a/openair2/LAYER2/MAC/proto_NB_IoT.h b/openair2/LAYER2/MAC/proto_NB_IoT.h
index 913e3ebcce..219c5e441d 100644
--- a/openair2/LAYER2/MAC/proto_NB_IoT.h
+++ b/openair2/LAYER2/MAC/proto_NB_IoT.h
@@ -32,7 +32,7 @@
#include "openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h"
#include "LAYER2/MAC/defs_NB_IoT.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "openair2/RRC/LTE/defs_NB_IoT.h"
/** \addtogroup _mac
* @{
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
index e0bc7ccb2a..018cfcb406 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
@@ -4277,33 +4277,6 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
AssertFatal(type0_PDCCH_CSS_config->num_symbols != -1, "Type0 PDCCH coreset num_symbols undefined");
AssertFatal(type0_PDCCH_CSS_config->rb_offset != -1, "Type0 PDCCH coreset rb_offset undefined");
-
- //uint32_t cell_id = 0; // obtain from L1 later
-
- //mac->type0_pdcch_dci_config.coreset.rb_start = rb_offset;
- //mac->type0_pdcch_dci_config.coreset.rb_end = rb_offset + num_rbs - 1;
-
-// uint64_t mask = 0x0;
-// uint8_t i;
-// for(i=0; i<(type0_PDCCH_CSS_config->num_rbs/6); ++i){ // 38.331 Each bit corresponds a group of 6 RBs
-// mask = mask >> 1;
-// mask = mask | 0x100000000000;
-// }
-
- //LOG_I(MAC,">>>>>>>>mask %x num_rbs %d rb_offset %d\n", mask, num_rbs, rb_offset);
-
-// mac->type0_pdcch_dci_config.coreset.frequency_domain_resource = mask;
-// mac->type0_pdcch_dci_config.coreset.rb_offset = rb_offset; // additional parameter other than coreset
-//
-// //mac->type0_pdcch_dci_config.type0_pdcch_coreset.duration = num_symbols;
-// mac->type0_pdcch_dci_config.coreset.cce_reg_mapping_type = CCE_REG_MAPPING_TYPE_INTERLEAVED;
-// mac->type0_pdcch_dci_config.coreset.cce_reg_interleaved_reg_bundle_size = 6; // L 38.211 7.3.2.2
-// mac->type0_pdcch_dci_config.coreset.cce_reg_interleaved_interleaver_size = 2; // R 38.211 7.3.2.2
-// mac->type0_pdcch_dci_config.coreset.cce_reg_interleaved_shift_index = cell_id;
-// mac->type0_pdcch_dci_config.coreset.precoder_granularity = PRECODER_GRANULARITY_SAME_AS_REG_BUNDLE;
-// mac->type0_pdcch_dci_config.coreset.pdcch_dmrs_scrambling_id = cell_id;
-
-
// type0-pdcch search space
float big_o = 0.0f;
float big_m = 0.0f;
diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c
index b7bfcb501e..146e7a6f4f 100644
--- a/openair2/LAYER2/NR_MAC_UE/config_ue.c
+++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c
@@ -445,22 +445,12 @@ static void config_common_ue(NR_UE_MAC_INST_t *mac,
void release_common_ss_cset(NR_BWP_PDCCH_t *pdcch)
{
- if (pdcch->otherSI_SS) {
- ASN_STRUCT_FREE(asn_DEF_NR_SearchSpace, pdcch->otherSI_SS);
- pdcch->otherSI_SS = NULL;
- }
- if (pdcch->ra_SS) {
- ASN_STRUCT_FREE(asn_DEF_NR_SearchSpace, pdcch->ra_SS);
- pdcch->otherSI_SS = NULL;
- }
- if (pdcch->paging_SS) {
- ASN_STRUCT_FREE(asn_DEF_NR_SearchSpace, pdcch->paging_SS);
- pdcch->paging_SS = NULL;
- }
- if (pdcch->commonControlResourceSet) {
- ASN_STRUCT_FREE(asn_DEF_NR_ControlResourceSet, pdcch->commonControlResourceSet);
- pdcch->commonControlResourceSet = NULL;
- }
+ asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->otherSI_SS);
+ asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->ra_SS);
+ asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->paging_SS);
+ asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->search_space_zero);
+ asn1cFreeStruc(asn_DEF_NR_ControlResourceSet, pdcch->commonControlResourceSet);
+ asn1cFreeStruc(asn_DEF_NR_ControlResourceSet, pdcch->coreset0);
}
static void modlist_ss(NR_SearchSpace_t *source, NR_SearchSpace_t *target)
@@ -503,15 +493,13 @@ static NR_SearchSpace_t *get_common_search_space(const struct NR_PDCCH_ConfigCom
static void configure_common_ss_coreset(NR_BWP_PDCCH_t *pdcch, NR_PDCCH_ConfigCommon_t *pdcch_ConfigCommon)
{
if (pdcch_ConfigCommon) {
- ASN_STRUCT_FREE(asn_DEF_NR_SearchSpace, pdcch->otherSI_SS);
- pdcch->otherSI_SS = NULL;
+ asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->otherSI_SS);
if (pdcch_ConfigCommon->searchSpaceOtherSystemInformation)
pdcch->otherSI_SS = get_common_search_space(pdcch_ConfigCommon->commonSearchSpaceList,
pdcch,
*pdcch_ConfigCommon->searchSpaceOtherSystemInformation);
- ASN_STRUCT_FREE(asn_DEF_NR_SearchSpace, pdcch->ra_SS);
- pdcch->ra_SS = NULL;
+ asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->ra_SS);
if (pdcch_ConfigCommon->ra_SearchSpace) {
if (pdcch->otherSI_SS && *pdcch_ConfigCommon->ra_SearchSpace == pdcch->otherSI_SS->searchSpaceId)
pdcch->ra_SS = pdcch->otherSI_SS;
@@ -520,8 +508,7 @@ static void configure_common_ss_coreset(NR_BWP_PDCCH_t *pdcch, NR_PDCCH_ConfigCo
get_common_search_space(pdcch_ConfigCommon->commonSearchSpaceList, pdcch, *pdcch_ConfigCommon->ra_SearchSpace);
}
- ASN_STRUCT_FREE(asn_DEF_NR_SearchSpace, pdcch->paging_SS);
- pdcch->paging_SS = NULL;
+ asn1cFreeStruc(asn_DEF_NR_SearchSpace, pdcch->paging_SS);
if (pdcch_ConfigCommon->pagingSearchSpace) {
if (pdcch->otherSI_SS && *pdcch_ConfigCommon->pagingSearchSpace == pdcch->otherSI_SS->searchSpaceId)
pdcch->paging_SS = pdcch->otherSI_SS;
@@ -675,14 +662,10 @@ static int lcid_cmp(const void *lc1, const void *lc2, void *mac_inst)
return (lc_config[id1 - 1]->ul_SpecificParameters->priority - lc_config[id2 - 1]->ul_SpecificParameters->priority);
}
-void nr_release_mac_config_logicalChannelBearer(module_id_t module_id, long channel_identity)
+void nr_release_mac_config_logicalChannelBearer(NR_UE_MAC_INST_t *mac, long channel_identity)
{
- NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
if (mac->logicalChannelConfig[channel_identity - 1] != NULL) {
- ASN_STRUCT_FREE(asn_DEF_NR_LogicalChannelConfig, mac->logicalChannelConfig[channel_identity - 1]);
- mac->logicalChannelConfig[channel_identity - 1] = NULL;
- } else {
- LOG_E(NR_MAC, "Trying to release a non configured logical channel bearer %li\n", channel_identity);
+ asn1cFreeStruc(asn_DEF_NR_LogicalChannelConfig, mac->logicalChannelConfig[channel_identity - 1]);
}
}
@@ -750,7 +733,7 @@ void nr_rrc_mac_config_req_ue_logicalChannelBearer(module_id_t module_id,
for (int i = 0; i < rlc_torelease_list->list.count; i++) {
if (rlc_torelease_list->list.array[i]) {
int lc_identity = *rlc_torelease_list->list.array[i];
- nr_release_mac_config_logicalChannelBearer(module_id, lc_identity);
+ nr_release_mac_config_logicalChannelBearer(mac, lc_identity);
}
}
}
@@ -908,10 +891,8 @@ static void setup_puschconfig(NR_PUSCH_Config_t *source, NR_PUSCH_Config_t *targ
UPDATE_MAC_IE(target->rbg_Size, source->rbg_Size, long);
UPDATE_MAC_IE(target->tp_pi2BPSK, source->tp_pi2BPSK, long);
if (source->uci_OnPUSCH) {
- if (source->uci_OnPUSCH->present == NR_SetupRelease_UCI_OnPUSCH_PR_release) {
- ASN_STRUCT_FREE(asn_DEF_NR_UCI_OnPUSCH, target->uci_OnPUSCH);
- target->uci_OnPUSCH = NULL;
- }
+ if (source->uci_OnPUSCH->present == NR_SetupRelease_UCI_OnPUSCH_PR_release)
+ asn1cFreeStruc(asn_DEF_NR_UCI_OnPUSCH, target->uci_OnPUSCH);
if (source->uci_OnPUSCH->present == NR_SetupRelease_UCI_OnPUSCH_PR_setup) {
if (target->uci_OnPUSCH) {
target->uci_OnPUSCH->choice.setup->scaling = source->uci_OnPUSCH->choice.setup->scaling;
@@ -980,7 +961,21 @@ static void setup_pdschconfig(NR_PDSCH_Config_t *source, NR_PDSCH_Config_t *targ
target->rbg_Size = source->rbg_Size;
UPDATE_MAC_IE(target->mcs_Table, source->mcs_Table, long);
UPDATE_MAC_IE(target->maxNrofCodeWordsScheduledByDCI, source->maxNrofCodeWordsScheduledByDCI, long);
- target->prb_BundlingType = source->prb_BundlingType;
+ target->prb_BundlingType.present = source->prb_BundlingType.present;
+ switch (source->prb_BundlingType.present) {
+ case NR_PDSCH_Config__prb_BundlingType_PR_staticBundling:
+ UPDATE_MAC_IE(target->prb_BundlingType.choice.staticBundling,
+ source->prb_BundlingType.choice.staticBundling,
+ struct NR_PDSCH_Config__prb_BundlingType__staticBundling);
+ break;
+ case NR_PDSCH_Config__prb_BundlingType_PR_dynamicBundling:
+ UPDATE_MAC_IE(target->prb_BundlingType.choice.dynamicBundling,
+ source->prb_BundlingType.choice.dynamicBundling,
+ struct NR_PDSCH_Config__prb_BundlingType__dynamicBundling);
+ break;
+ default:
+ break;
+ }
AssertFatal(source->zp_CSI_RS_ResourceToAddModList == NULL, "Not handled\n");
AssertFatal(source->aperiodic_ZP_CSI_RS_ResourceSetsToAddModList == NULL, "Not handled\n");
AssertFatal(source->sp_ZP_CSI_RS_ResourceSetsToAddModList == NULL, "Not handled\n");
@@ -1111,7 +1106,26 @@ static void setup_srsresourceset(NR_SRS_ResourceSet_t *target, NR_SRS_ResourceSe
target->srs_ResourceSetId = source->srs_ResourceSetId;
if (source->srs_ResourceIdList)
UPDATE_MAC_IE(target->srs_ResourceIdList, source->srs_ResourceIdList, struct NR_SRS_ResourceSet__srs_ResourceIdList);
- target->resourceType = source->resourceType;
+ target->resourceType.present = source->resourceType.present;
+ switch (source->resourceType.present) {
+ case NR_SRS_ResourceSet__resourceType_PR_aperiodic:
+ UPDATE_MAC_IE(target->resourceType.choice.aperiodic,
+ source->resourceType.choice.aperiodic,
+ struct NR_SRS_ResourceSet__resourceType__aperiodic);
+ break;
+ case NR_SRS_ResourceSet__resourceType_PR_periodic:
+ UPDATE_MAC_IE(target->resourceType.choice.periodic,
+ source->resourceType.choice.periodic,
+ struct NR_SRS_ResourceSet__resourceType__periodic);
+ break;
+ case NR_SRS_ResourceSet__resourceType_PR_semi_persistent:
+ UPDATE_MAC_IE(target->resourceType.choice.semi_persistent,
+ source->resourceType.choice.semi_persistent,
+ struct NR_SRS_ResourceSet__resourceType__semi_persistent);
+ break;
+ default:
+ break;
+ }
target->usage = source->usage;
UPDATE_MAC_IE(target->alpha, source->alpha, NR_Alpha_t);
if (source->p0)
@@ -1209,11 +1223,9 @@ static void configure_dedicated_BWP_dl(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP
NR_UE_DL_BWP_t *bwp = get_dl_bwp_structure(mac, bwp_id, true);
bwp->bwp_id = bwp_id;
NR_BWP_PDCCH_t *pdcch = &mac->config_BWP_PDCCH[bwp_id];
- if (dl_dedicated->pdsch_Config) {
- if (dl_dedicated->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_release) {
- ASN_STRUCT_FREE(asn_DEF_NR_PDSCH_Config, bwp->pdsch_Config);
- bwp->pdsch_Config = NULL;
- }
+ if(dl_dedicated->pdsch_Config) {
+ if (dl_dedicated->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_release)
+ asn1cFreeStruc(asn_DEF_NR_PDSCH_Config, bwp->pdsch_Config);
if (dl_dedicated->pdsch_Config->present == NR_SetupRelease_PDSCH_Config_PR_setup) {
if (!bwp->pdsch_Config)
bwp->pdsch_Config = calloc(1, sizeof(*bwp->pdsch_Config));
@@ -1238,33 +1250,27 @@ static void configure_dedicated_BWP_ul(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP
if (ul_dedicated) {
NR_UE_UL_BWP_t *bwp = get_ul_bwp_structure(mac, bwp_id, true);
bwp->bwp_id = bwp_id;
- if (ul_dedicated->pucch_Config) {
- if (ul_dedicated->pucch_Config->present == NR_SetupRelease_PUCCH_Config_PR_release) {
- ASN_STRUCT_FREE(asn_DEF_NR_PUCCH_Config, bwp->pucch_Config);
- bwp->pucch_Config = NULL;
- }
+ if(ul_dedicated->pucch_Config) {
+ if (ul_dedicated->pucch_Config->present == NR_SetupRelease_PUCCH_Config_PR_release)
+ asn1cFreeStruc(asn_DEF_NR_PUCCH_Config, bwp->pucch_Config);
if (ul_dedicated->pucch_Config->present == NR_SetupRelease_PUCCH_Config_PR_setup) {
if (!bwp->pucch_Config)
bwp->pucch_Config = calloc(1, sizeof(*bwp->pucch_Config));
setup_pucchconfig(ul_dedicated->pucch_Config->choice.setup, bwp->pucch_Config);
}
}
- if (ul_dedicated->pusch_Config) {
- if (ul_dedicated->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_release) {
- ASN_STRUCT_FREE(asn_DEF_NR_PUSCH_Config, bwp->pusch_Config);
- bwp->pusch_Config = NULL;
- }
+ if(ul_dedicated->pusch_Config) {
+ if (ul_dedicated->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_release)
+ asn1cFreeStruc(asn_DEF_NR_PUSCH_Config, bwp->pusch_Config);
if (ul_dedicated->pusch_Config->present == NR_SetupRelease_PUSCH_Config_PR_setup) {
if (!bwp->pusch_Config)
bwp->pusch_Config = calloc(1, sizeof(*bwp->pusch_Config));
setup_puschconfig(ul_dedicated->pusch_Config->choice.setup, bwp->pusch_Config);
}
}
- if (ul_dedicated->srs_Config) {
- if (ul_dedicated->srs_Config->present == NR_SetupRelease_SRS_Config_PR_release) {
- ASN_STRUCT_FREE(asn_DEF_NR_SRS_Config, bwp->srs_Config);
- bwp->srs_Config = NULL;
- }
+ if(ul_dedicated->srs_Config) {
+ if (ul_dedicated->srs_Config->present == NR_SetupRelease_SRS_Config_PR_release)
+ asn1cFreeStruc(asn_DEF_NR_SRS_Config, bwp->srs_Config);
if (ul_dedicated->srs_Config->present == NR_SetupRelease_SRS_Config_PR_setup) {
if (!bwp->srs_Config)
bwp->srs_Config = calloc(1, sizeof(*bwp->srs_Config));
@@ -1294,10 +1300,8 @@ static void configure_common_BWP_dl(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Do
UPDATE_MAC_IE(bwp->tdaList_Common,
dl_common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList,
NR_PDSCH_TimeDomainResourceAllocationList_t);
- if (dl_common->pdsch_ConfigCommon->present == NR_SetupRelease_PDSCH_ConfigCommon_PR_release) {
- ASN_STRUCT_FREE(asn_DEF_NR_PDSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
- bwp->tdaList_Common = NULL;
- }
+ if (dl_common->pdsch_ConfigCommon->present == NR_SetupRelease_PDSCH_ConfigCommon_PR_release)
+ asn1cFreeStruc(asn_DEF_NR_PDSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
}
NR_BWP_PDCCH_t *pdcch = &mac->config_BWP_PDCCH[bwp_id];
if (dl_common->pdcch_ConfigCommon) {
@@ -1342,8 +1346,7 @@ static void configure_common_BWP_ul(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Up
UPDATE_MAC_IE(bwp->msg3_DeltaPreamble, ul_common->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble, long);
}
if (ul_common->pusch_ConfigCommon->present == NR_SetupRelease_PUSCH_ConfigCommon_PR_release) {
- ASN_STRUCT_FREE(asn_DEF_NR_PUSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
- bwp->tdaList_Common = NULL;
+ asn1cFreeStruc(asn_DEF_NR_PUSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
free(bwp->msg3_DeltaPreamble);
bwp->msg3_DeltaPreamble = NULL;
}
@@ -1351,6 +1354,24 @@ static void configure_common_BWP_ul(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Up
}
}
+void nr_rrc_mac_config_req_reset(module_id_t module_id,
+ NR_UE_MAC_reset_cause_t reset_cause)
+{
+ NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
+ reset_mac_inst(mac);
+ reset_ra(&mac->ra);
+ release_mac_configuration(mac);
+ nr_ue_init_mac(module_id);
+
+ // Sending to PHY a request to resync
+ // with no target cell ID
+ mac->synch_request.Mod_id = module_id;
+ mac->synch_request.CC_id = 0;
+ mac->synch_request.synch_req.target_Nid_cell = -1;
+ mac->if_module->synch_request(&mac->synch_request);
+
+}
+
void nr_rrc_mac_config_req_sib1(module_id_t module_id,
int cc_idP,
NR_SI_SchedulingInfo_t *si_SchedulingInfo,
@@ -1586,9 +1607,8 @@ static void configure_csiconfig(NR_UE_ServingCell_Info_t *sc_info, struct NR_Set
switch (csi_MeasConfig_sr->present) {
case NR_SetupRelease_CSI_MeasConfig_PR_NOTHING:
break;
- case NR_SetupRelease_CSI_MeasConfig_PR_release:
- ASN_STRUCT_FREE(asn_DEF_NR_CSI_MeasConfig, sc_info->csi_MeasConfig);
- sc_info->csi_MeasConfig = NULL;
+ case NR_SetupRelease_CSI_MeasConfig_PR_release :
+ asn1cFreeStruc(asn_DEF_NR_CSI_MeasConfig, sc_info->csi_MeasConfig);
break;
case NR_SetupRelease_CSI_MeasConfig_PR_setup:
if (!sc_info->csi_MeasConfig) { // setup
@@ -1730,10 +1750,8 @@ static void configure_servingcell_info(NR_UE_ServingCell_Info_t *sc_info, NR_Ser
break;
case NR_SetupRelease_PDSCH_ServingCellConfig_PR_release:
// release all configurations
- if (sc_info->pdsch_CGB_Transmission) {
- ASN_STRUCT_FREE(asn_DEF_NR_PDSCH_CodeBlockGroupTransmission, sc_info->pdsch_CGB_Transmission);
- sc_info->pdsch_CGB_Transmission = NULL;
- }
+ 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;
@@ -1765,10 +1783,8 @@ static void configure_servingcell_info(NR_UE_ServingCell_Info_t *sc_info, NR_Ser
break;
case NR_SetupRelease_PUSCH_ServingCellConfig_PR_release:
// release all configurations
- if (sc_info->pusch_CGB_Transmission) {
- ASN_STRUCT_FREE(asn_DEF_NR_PUSCH_CodeBlockGroupTransmission, sc_info->pusch_CGB_Transmission);
- sc_info->pdsch_CGB_Transmission = NULL;
- }
+ 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;
@@ -1801,22 +1817,15 @@ static void configure_servingcell_info(NR_UE_ServingCell_Info_t *sc_info, NR_Ser
}
}
-void release_dl_BWP(NR_UE_MAC_INST_t *mac, int bwp_id)
+void release_dl_BWP(NR_UE_MAC_INST_t *mac, int index)
{
- NR_UE_DL_BWP_t *bwp = NULL;
- for (int i = 0; i < mac->dl_BWPs.count; i++) {
- if (bwp_id == mac->dl_BWPs.array[i]->bwp_id) {
- bwp = mac->dl_BWPs.array[i];
- asn_sequence_del(&mac->dl_BWPs, i, 0);
- break;
- }
- }
- AssertFatal(bwp, "No DL-BWP %d to release\n", bwp_id);
+ NR_UE_DL_BWP_t *bwp = mac->dl_BWPs.array[index];
+ int bwp_id = bwp->bwp_id;
+ asn_sequence_del(&mac->dl_BWPs, index, 0);
+
free(bwp->cyclicprefix);
- ASN_STRUCT_FREE(asn_DEF_NR_PDSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
- bwp->tdaList_Common = NULL;
- ASN_STRUCT_FREE(asn_DEF_NR_PDSCH_Config, bwp->pdsch_Config);
- bwp->pdsch_Config = NULL;
+ asn1cFreeStruc(asn_DEF_NR_PDSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
+ asn1cFreeStruc(asn_DEF_NR_PDSCH_Config, bwp->pdsch_Config);
free(bwp);
NR_BWP_PDCCH_t *pdcch = &mac->config_BWP_PDCCH[bwp_id];
@@ -1827,33 +1836,21 @@ void release_dl_BWP(NR_UE_MAC_INST_t *mac, int bwp_id)
asn_sequence_del(&pdcch->list_SS, i, 1);
}
-void release_ul_BWP(NR_UE_MAC_INST_t *mac, int bwp_id)
+void release_ul_BWP(NR_UE_MAC_INST_t *mac, int index)
{
- NR_UE_UL_BWP_t *bwp = NULL;
- for (int i = 0; i < mac->ul_BWPs.count; i++) {
- if (bwp_id == mac->ul_BWPs.array[i]->bwp_id) {
- bwp = mac->ul_BWPs.array[i];
- asn_sequence_del(&mac->ul_BWPs, i, 0);
- break;
- }
- }
- AssertFatal(bwp, "No UL-BWP %d to release\n", bwp_id);
+ NR_UE_UL_BWP_t *bwp = mac->ul_BWPs.array[index];
+ asn_sequence_del(&mac->ul_BWPs, index, 0);
+
free(bwp->cyclicprefix);
- ASN_STRUCT_FREE(asn_DEF_NR_RACH_ConfigCommon, bwp->rach_ConfigCommon);
- bwp->rach_ConfigCommon = NULL;
- ASN_STRUCT_FREE(asn_DEF_NR_PUSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
- bwp->tdaList_Common = NULL;
- ASN_STRUCT_FREE(asn_DEF_NR_ConfiguredGrantConfig, bwp->configuredGrantConfig);
- bwp->configuredGrantConfig = NULL;
- ASN_STRUCT_FREE(asn_DEF_NR_PUSCH_Config, bwp->pusch_Config);
- bwp->pusch_Config = NULL;
- ASN_STRUCT_FREE(asn_DEF_NR_PUCCH_Config, bwp->pucch_Config);
- bwp->pucch_Config = NULL;
- ASN_STRUCT_FREE(asn_DEF_NR_PUCCH_ConfigCommon, bwp->pucch_ConfigCommon);
- bwp->pucch_ConfigCommon = NULL;
- ASN_STRUCT_FREE(asn_DEF_NR_SRS_Config, bwp->srs_Config);
- bwp->srs_Config = NULL;
+ asn1cFreeStruc(asn_DEF_NR_RACH_ConfigCommon, bwp->rach_ConfigCommon);
+ asn1cFreeStruc(asn_DEF_NR_PUSCH_TimeDomainResourceAllocationList, bwp->tdaList_Common);
+ asn1cFreeStruc(asn_DEF_NR_ConfiguredGrantConfig, bwp->configuredGrantConfig);
+ asn1cFreeStruc(asn_DEF_NR_PUSCH_Config, bwp->pusch_Config);
+ 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);
}
@@ -1861,8 +1858,12 @@ static void configure_BWPs(NR_UE_MAC_INST_t *mac, NR_ServingCellConfig_t *scd)
{
configure_dedicated_BWP_dl(mac, 0, scd->initialDownlinkBWP);
if (scd->downlinkBWP_ToReleaseList) {
- for (int i = 0; i < scd->downlinkBWP_ToReleaseList->list.count; i++)
- release_dl_BWP(mac, *scd->downlinkBWP_ToReleaseList->list.array[i]);
+ for (int i = 0; i < scd->downlinkBWP_ToReleaseList->list.count; i++) {
+ for (int j = 0; j < mac->dl_BWPs.count; j++) {
+ if (*scd->downlinkBWP_ToReleaseList->list.array[i] == mac->dl_BWPs.array[i]->bwp_id)
+ release_dl_BWP(mac, i);
+ }
+ }
}
if (scd->downlinkBWP_ToAddModList) {
for (int i = 0; i < scd->downlinkBWP_ToAddModList->list.count; i++) {
@@ -1879,8 +1880,12 @@ static void configure_BWPs(NR_UE_MAC_INST_t *mac, NR_ServingCellConfig_t *scd)
if (scd->uplinkConfig) {
configure_dedicated_BWP_ul(mac, 0, scd->uplinkConfig->initialUplinkBWP);
if (scd->uplinkConfig->uplinkBWP_ToReleaseList) {
- for (int i = 0; i < scd->uplinkConfig->uplinkBWP_ToReleaseList->list.count; i++)
- release_ul_BWP(mac, *scd->uplinkConfig->uplinkBWP_ToReleaseList->list.array[i]);
+ for (int i = 0; i < scd->uplinkConfig->uplinkBWP_ToReleaseList->list.count; i++) {
+ for (int j = 0; j < mac->ul_BWPs.count; j++) {
+ if (*scd->uplinkConfig->uplinkBWP_ToReleaseList->list.array[i] == mac->ul_BWPs.array[i]->bwp_id)
+ release_ul_BWP(mac, i);
+ }
+ }
}
if (scd->uplinkConfig->uplinkBWP_ToAddModList) {
for (int i = 0; i < scd->uplinkConfig->uplinkBWP_ToAddModList->list.count; i++) {
@@ -1930,5 +1935,5 @@ void nr_rrc_mac_config_req_cg(module_id_t module_id,
if (!mac->dl_config_request || !mac->ul_config_request)
ue_init_config_request(mac, mac->current_DL_BWP->scs);
- ASN_STRUCT_FREE(asn_DEF_NR_CellGroupConfig, cell_group_config);
+ asn1cFreeStruc(asn_DEF_NR_CellGroupConfig, cell_group_config);
}
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h
index 1fdeb06e09..d92e0c4fa7 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h
+++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h
@@ -36,7 +36,7 @@
#include
#include
#include
-#include "platform_types.h"
+#include "common/platform_types.h"
/* IF */
#include "NR_IF_Module.h"
@@ -165,6 +165,11 @@ typedef enum {
UE_CONNECTED
} NR_UE_L2_STATE_t;
+typedef enum {
+ GO_TO_IDLE,
+ RE_ESTABLISHMENT
+} NR_UE_MAC_reset_cause_t;
+
typedef enum {
RA_2STEP = 0,
RA_4STEP
@@ -472,13 +477,6 @@ typedef struct {
bool phy_config_request_sent;
frame_type_t frame_type;
- /// Type0-PDCCH seach space
- fapi_nr_dl_config_dci_dl_pdu_rel15_t type0_pdcch_dci_config;
- uint32_t type0_pdcch_ss_mux_pattern;
- int type0_pdcch_ss_sfn_c;
- uint32_t type0_pdcch_ss_n_c;
- uint32_t type0_pdcch_consecutive_slots;
-
/* PDUs */
/// Outgoing CCCH pdu for PHY
CCCH_PDU CCCH_pdu;
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
index f30e700614..f762665711 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h
+++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
@@ -34,11 +34,14 @@
#define __LAYER2_MAC_UE_PROTO_H__
#include "mac_defs.h"
+#include "oai_asn1.h"
#include "RRC/NR_UE/rrc_defs.h"
#define NR_DL_MAX_DAI (4) /* TS 38.213 table 9.1.3-1 Value of counter DAI for DCI format 1_0 and 1_1 */
#define NR_DL_MAX_NB_CW (2) /* number of downlink code word */
+// Macro updates DESTINATION with configuration from ORIGIN by swapping pointers
+// Old configuration is freed after completing configuration
#define UPDATE_MAC_IE(DESTINATION, ORIGIN, TYPE) \
do { \
TYPE *tmp = ORIGIN; \
@@ -46,21 +49,27 @@
DESTINATION = tmp; \
} while(0); \
+// Macro handles reception of SetupRelease element ORIGIN (see NR_SetupRelease.h)
+// If release (NR_SetupRelease_xxx_PR_release equivalent to 1), removing structure from DESTINATION
+// If setup (NR_SetupRelease_xxx_PR_setup equivalent to 2), add or modify structure in DESTINATION
+// Destination is not a SetupRelease structure
#define HANDLE_SETUPRELEASE_DIRECT(DESTINATION, ORIGIN, TYPE, ASN_DEF) \
do { \
if (ORIGIN->present == 1) { \
- ASN_STRUCT_FREE(ASN_DEF, DESTINATION); \
- DESTINATION = NULL; \
+ asn1cFreeStruc(ASN_DEF, DESTINATION); \
} \
if (ORIGIN->present == 2) \
UPDATE_MAC_IE(DESTINATION, ORIGIN->choice.setup, TYPE); \
} while(0); \
+// Macro handles reception of SetupRelease element ORIGIN (see NR_SetupRelease.h)
+// If release (NR_SetupRelease_xxx_PR_release equivalent to 1), removing structure from DESTINATION
+// If setup (NR_SetupRelease_xxx_PR_setup equivalent to 2), add or modify structure in DESTINATION
+// Destination is a SetupRelease structure
#define HANDLE_SETUPRELEASE_IE(DESTINATION, ORIGIN, TYPE, ASN_DEF) \
do { \
if (ORIGIN->present == 1) { \
- ASN_STRUCT_FREE(ASN_DEF, DESTINATION); \
- DESTINATION = NULL; \
+ asn1cFreeStruc(ASN_DEF, DESTINATION); \
} \
if (ORIGIN->present == 2) { \
if (!DESTINATION) \
@@ -70,6 +79,8 @@
} \
} while(0); \
+// Macro releases entries in list TARGET if the corresponding ID is found in list SOURCE.
+// Prints an error if ID not found in list.
#define RELEASE_IE_FROMLIST(SOURCE, TARGET, FIELD) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
@@ -86,6 +97,7 @@
} \
} while (0) \
+// Macro adds or modifies entries of type TYPE in list TARGET with elements received in list SOURCE
#define ADDMOD_IE_FROMLIST(SOURCE, TARGET, FIELD, TYPE) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
@@ -105,6 +117,8 @@
} \
} while (0) \
+// Macro adds or modifies entries of type TYPE in list TARGET with elements received in list SOURCE
+// Action performed by function FUNC
#define ADDMOD_IE_FROMLIST_WFUNCTION(SOURCE, TARGET, FIELD, TYPE, FUNC) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
@@ -123,7 +137,6 @@
} \
} while (0)
-
/**\brief initialize the field in nr_mac instance
\param module_id module id */
void nr_ue_init_mac(module_id_t module_idP);
@@ -136,6 +149,8 @@ void nr_ue_mac_default_configs(NR_UE_MAC_INST_t *mac);
void nr_ue_decode_mib(module_id_t module_id, int cc_id);
+void release_common_ss_cset(NR_BWP_PDCCH_t *pdcch);
+
/**\brief decode SIB1 and other SIs pdus in NR_UE, from if_module dl_ind
\param module_id module id
\param cc_id component carrier id
@@ -150,6 +165,10 @@ int8_t nr_ue_decode_BCCH_DL_SCH(module_id_t module_id,
uint8_t *pduP,
uint32_t pdu_len);
+void release_dl_BWP(NR_UE_MAC_INST_t *mac, int index);
+void release_ul_BWP(NR_UE_MAC_INST_t *mac, int index);
+void nr_release_mac_config_logicalChannelBearer(NR_UE_MAC_INST_t *mac, long channel_identity);
+
void nr_rrc_mac_config_req_ue_logicalChannelBearer(module_id_t module_id,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_toadd_list,
struct NR_CellGroupConfig__rlc_BearerToReleaseList *rlc_torelease_list);
@@ -168,6 +187,8 @@ void nr_rrc_mac_config_req_sib1(module_id_t module_id,
NR_SI_SchedulingInfo_t *si_SchedulingInfo,
NR_ServingCellConfigCommonSIB_t *scc);
+void nr_rrc_mac_config_req_reset(module_id_t module_id, NR_UE_MAC_reset_cause_t cause);
+
/**\brief initialization NR UE MAC instance(s), total number of MAC instance based on NB_NR_UE_MAC_INST*/
NR_UE_MAC_INST_t * nr_l2_init_ue();
@@ -175,6 +196,10 @@ NR_UE_MAC_INST_t * nr_l2_init_ue();
\param module_id index of MAC instance(s)*/
NR_UE_MAC_INST_t *get_mac_inst(module_id_t module_id);
+void reset_mac_inst(NR_UE_MAC_INST_t *nr_mac);
+void reset_ra(RA_config_t *ra);
+void release_mac_configuration(NR_UE_MAC_INST_t *mac);
+
/**\brief called at each slot, slot length based on numerology. now use u=0, scs=15kHz, slot=1ms
performs BSR/SR/PHR procedures, random access procedure handler and DLSCH/ULSCH procedures.
\param dl_info DL indication
diff --git a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
index 9371c8c7df..0131551ed2 100644
--- a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+++ b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
@@ -39,7 +39,7 @@
#include "nr_rlc/nr_rlc_oai_api.h"
#include "RRC/NR_UE/rrc_proto.h"
#include
-
+#include "openair2/LAYER2/RLC/rlc.h"
static NR_UE_MAC_INST_t *nr_ue_mac_inst;
void send_srb0_rrc(int rnti, const uint8_t *sdu, sdu_size_t sdu_len, void *data)
@@ -60,24 +60,167 @@ void send_msg3_rrc_request(module_id_t mod_id, int rnti)
nr_mac_rrc_msg3_ind(mod_id, rnti);
}
-NR_UE_MAC_INST_t * nr_l2_init_ue()
+void nr_ue_init_mac(module_id_t module_idP)
{
- LOG_I(NR_MAC, "MAIN: init UE MAC functions \n");
- //init mac here
- nr_ue_mac_inst = (NR_UE_MAC_INST_t *)calloc(NB_NR_UE_MAC_INST, sizeof(NR_UE_MAC_INST_t));
+ LOG_I(NR_MAC, "[UE%d] Applying default macMainConfig\n", module_idP);
+ NR_UE_MAC_INST_t *mac = get_mac_inst(module_idP);
+ mac->first_sync_frame = -1;
+ mac->get_sib1 = false;
+ mac->get_otherSI = false;
+ mac->phy_config_request_sent = false;
+ memset(&mac->phy_config, 0, sizeof(mac->phy_config));
+ mac->state = UE_NOT_SYNC;
+ mac->si_window_start = -1;
+ mac->servCellIndex = 0;
+ mac->harq_ACK_SpatialBundlingPUCCH = false;
+ mac->harq_ACK_SpatialBundlingPUSCH = false;
+}
- for (int j = 0; j < NB_NR_UE_MAC_INST; j++)
- nr_ue_init_mac(j);
+void nr_ue_mac_default_configs(NR_UE_MAC_INST_t *mac)
+{
+ // default values as defined in 38.331 sec 9.2.2
+ mac->scheduling_info.retxBSR_Timer = NR_BSR_Config__retxBSR_Timer_sf10240;
+ mac->scheduling_info.periodicBSR_Timer = NR_BSR_Config__periodicBSR_Timer_infinity;
+ mac->scheduling_info.SR_COUNTER = 0;
+ mac->scheduling_info.SR_pending = 0;
+ mac->scheduling_info.sr_ProhibitTimer = 0;
+ mac->scheduling_info.sr_ProhibitTimer_Running = 0;
+ mac->scheduling_info.sr_id = -1; // invalid init value
+ // set init value 0xFFFF, make sure periodic timer and retx time counters are NOT active, after bsr transmission set the value
+ // configured by the NW.
+ mac->scheduling_info.periodicBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
+ mac->scheduling_info.retxBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
+ mac->BSR_reporting_active = BSR_TRIGGER_NONE;
+
+ for (int i = 0; i < NR_MAX_NUM_LCID; i++) {
+ LOG_D(NR_MAC, "Applying default logical channel config for LCGID %d\n", i);
+ mac->scheduling_info.lc_sched_info[i].Bj = -1;
+ mac->scheduling_info.lc_sched_info[i].bucket_size = -1;
+ mac->scheduling_info.lc_sched_info[i].LCGID = 0; // defaults to 0 irrespective of SRB or DRB
+ mac->scheduling_info.lc_sched_info[i].LCID_status = LCID_EMPTY;
+ mac->scheduling_info.lc_sched_info[i].LCID_buffer_remain = 0;
+ for (int k = 0; k < NR_MAX_HARQ_PROCESSES; k++)
+ mac->UL_ndi[k] = -1; // initialize to invalid value
+ }
+
+ memset(&mac->ssb_measurements, 0, sizeof(mac->ssb_measurements));
+ memset(&mac->ul_time_alignment, 0, sizeof(mac->ul_time_alignment));
+}
+
+NR_UE_MAC_INST_t *nr_l2_init_ue()
+{
+ //init mac here
+ nr_ue_mac_inst = (NR_UE_MAC_INST_t *)calloc(NB_NR_UE_MAC_INST, sizeof(NR_UE_MAC_INST_t));
+
+ for (int j = 0; j < NB_NR_UE_MAC_INST; j++) {
+ nr_ue_init_mac(j);
+ NR_UE_MAC_INST_t *mac = get_mac_inst(j);
+ nr_ue_mac_default_configs(mac);
if (get_softmodem_params()->sa)
- ue_init_config_request(nr_ue_mac_inst, get_softmodem_params()->numerology);
+ ue_init_config_request(mac, get_softmodem_params()->numerology);
+ }
+ int rc = rlc_module_init(0);
+ AssertFatal(rc == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
- int rc = rlc_module_init(0);
- AssertFatal(rc == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
-
- return (nr_ue_mac_inst);
+ return (nr_ue_mac_inst);
}
-NR_UE_MAC_INST_t *get_mac_inst(module_id_t module_id){
- return &nr_ue_mac_inst[(int)module_id];
+NR_UE_MAC_INST_t *get_mac_inst(module_id_t module_id) {
+ return &nr_ue_mac_inst[(int)module_id];
+}
+
+void reset_mac_inst(NR_UE_MAC_INST_t *nr_mac)
+{
+ // MAC reset according to 38.321 Section 5.12
+
+ nr_ue_mac_default_configs(nr_mac);
+ // initialize Bj for each logical channel to zero
+ // Done in default config but to -1 (is that correct?)
+
+ // stop all running timers
+ // TODO
+
+ // consider all timeAlignmentTimers as expired and perform the corresponding actions in clause 5.2
+ // TODO
+
+ // set the NDIs for all uplink HARQ processes to the value 0
+ for (int k = 0; k < NR_MAX_HARQ_PROCESSES; k++)
+ nr_mac->UL_ndi[k] = -1; // initialize to invalid value
+
+ // stop any ongoing RACH procedure
+ if (nr_mac->ra.ra_state < RA_SUCCEEDED)
+ nr_mac->ra.ra_state = RA_UE_IDLE;
+
+ // discard explicitly signalled contention-free Random Access Resources
+ // TODO not sure what needs to be done here
+
+ // flush Msg3 buffer
+ // TODO we don't have a Msg3 buffer
+
+ // cancel any triggered Scheduling Request procedure
+ // Done in default config
+
+ // cancel any triggered Buffer Status Reporting procedure
+ // Done in default config
+
+ // cancel any triggered Power Headroom Reporting procedure
+ // TODO PHR not implemented yet
+
+ // flush the soft buffers for all DL HARQ processes
+ for (int k = 0; k < NR_MAX_HARQ_PROCESSES; k++)
+ memset(&nr_mac->dl_harq_info[k], 0, sizeof(NR_UE_HARQ_STATUS_t));
+
+ // for each DL HARQ process, consider the next received transmission for a TB as the very first transmission
+ // TODO there is nothing in the MAC indicating first transmission
+
+ // release, if any, Temporary C-RNTI
+ nr_mac->ra.t_crnti = 0;
+
+ // reset BFI_COUNTER
+ // TODO beam failure procedure not implemented
+}
+
+void release_mac_configuration(NR_UE_MAC_INST_t *mac)
+{
+ asn1cFreeStruc(asn_DEF_NR_MIB, mac->mib);
+ asn1cFreeStruc(asn_DEF_NR_SI_SchedulingInfo, mac->si_SchedulingInfo);
+ asn1cFreeStruc(asn_DEF_NR_TDD_UL_DL_ConfigCommon, mac->tdd_UL_DL_ConfigurationCommon);
+ NR_UE_ServingCell_Info_t *sc = &mac->sc_info;
+ asn1cFreeStruc(asn_DEF_NR_CrossCarrierSchedulingConfig, sc->crossCarrierSchedulingConfig);
+ asn1cFreeStruc(asn_DEF_NR_SRS_CarrierSwitching, sc->carrierSwitching);
+ asn1cFreeStruc(asn_DEF_NR_UplinkConfig, sc->supplementaryUplink);
+ asn1cFreeStruc(asn_DEF_NR_PDSCH_CodeBlockGroupTransmission, sc->pdsch_CGB_Transmission);
+ asn1cFreeStruc(asn_DEF_NR_PUSCH_CodeBlockGroupTransmission, sc->pusch_CGB_Transmission);
+ asn1cFreeStruc(asn_DEF_NR_CSI_MeasConfig, sc->csi_MeasConfig);
+ asn1cFreeStruc(asn_DEF_NR_CSI_AperiodicTriggerStateList, sc->aperiodicTriggerStateList);
+ free(sc->xOverhead_PDSCH);
+ free(sc->nrofHARQ_ProcessesForPDSCH);
+ free(sc->rateMatching_PUSCH);
+ free(sc->xOverhead_PUSCH);
+ free(sc->maxMIMO_Layers_PUSCH);
+ memset(&mac->sc_info, 0, sizeof(mac->sc_info));
+
+ for (int i = 0; i < mac->dl_BWPs.count; i++)
+ release_dl_BWP(mac, i);
+ for (int i = 0; i < mac->ul_BWPs.count; i++)
+ release_ul_BWP(mac, i);
+ mac->current_DL_BWP = NULL;
+ mac->current_UL_BWP = NULL;
+
+ for (int i = 0; i < NR_MAX_NUM_LCID; i++) {
+ nr_release_mac_config_logicalChannelBearer(mac, i + 1);
+ memset(&mac->lc_ordered_info[i], 0, sizeof(nr_lcordered_info_t));
+ }
+
+ memset(&mac->ssb_measurements, 0, sizeof(mac->ssb_measurements));
+ memset(&mac->csirs_measurements, 0, sizeof(mac->csirs_measurements));
+ memset(&mac->ul_time_alignment, 0, sizeof(mac->ul_time_alignment));
+}
+
+void reset_ra(RA_config_t *ra)
+{
+ if(ra->rach_ConfigDedicated)
+ asn1cFreeStruc(asn_DEF_NR_RACH_ConfigDedicated, ra->rach_ConfigDedicated);
+ memset(ra, 0, sizeof(RA_config_t));
}
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
index aedf2bbc21..b9d9f7a8fc 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
@@ -39,6 +39,7 @@
#include "LAYER2/NR_MAC_UE/mac_proto.h"
#include
+#include "openair2/LAYER2/RLC/rlc.h"
int16_t get_prach_tx_power(module_id_t mod_id) {
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index c5e8b9d95a..91cc805d22 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -158,52 +158,6 @@ static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
dci_pdu_rel15_t *dci_pdu_rel15,
int slot);
-void nr_ue_init_mac(module_id_t module_idP)
-{
- LOG_I(NR_MAC, "[UE%d] Applying default macMainConfig\n", module_idP);
- NR_UE_MAC_INST_t *mac = get_mac_inst(module_idP);
- nr_ue_mac_default_configs(mac);
- mac->first_sync_frame = -1;
- mac->get_sib1 = false;
- mac->get_otherSI = false;
- mac->phy_config_request_sent = false;
- memset(&mac->phy_config, 0, sizeof(mac->phy_config));
- mac->state = UE_NOT_SYNC;
- mac->si_window_start = -1;
- mac->servCellIndex = 0;
-}
-
-void nr_ue_mac_default_configs(NR_UE_MAC_INST_t *mac)
-{
- // default values as defined in 38.331 sec 9.2.2
- mac->scheduling_info.retxBSR_Timer = NR_BSR_Config__retxBSR_Timer_sf10240;
- mac->scheduling_info.periodicBSR_Timer = NR_BSR_Config__periodicBSR_Timer_infinity;
- mac->scheduling_info.SR_COUNTER = 0;
- mac->scheduling_info.sr_ProhibitTimer = 0;
- mac->scheduling_info.sr_ProhibitTimer_Running = 0;
- mac->scheduling_info.sr_id = -1; // invalid init value
-
- // set init value 0xFFFF, make sure periodic timer and retx time counters are NOT active, after bsr transmission set the value
- // configured by the NW.
- mac->scheduling_info.periodicBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
- mac->scheduling_info.retxBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING;
- mac->BSR_reporting_active = BSR_TRIGGER_NONE;
-
- for (int i = 0; i < NR_MAX_NUM_LCID; i++) {
- LOG_D(NR_MAC, "Applying default logical channel config for LCGID %d\n", i);
- mac->scheduling_info.lc_sched_info[i].Bj = -1;
- mac->scheduling_info.lc_sched_info[i].bucket_size = -1;
- mac->scheduling_info.lc_sched_info[i].LCGID = 0; // defaults to 0 irrespective of SRB or DRB
- mac->scheduling_info.lc_sched_info[i].LCID_status = LCID_EMPTY;
- mac->scheduling_info.lc_sched_info[i].LCID_buffer_remain = 0;
- for (int k = 0; k < NR_MAX_HARQ_PROCESSES; k++)
- mac->UL_ndi[k] = -1; // initialize to invalid value
- }
-
- memset(&mac->ssb_measurements, 0, sizeof(mac->ssb_measurements));
- memset(&mac->ul_time_alignment, 0, sizeof(mac->ul_time_alignment));
-}
-
int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti)
{
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
index 5874f8fec9..8107f97abc 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
@@ -1043,16 +1043,13 @@ void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info)
}
mac_pdu_exist = 1;
} else {
-
if (ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator &&
(mac->state == UE_CONNECTED ||
(ra->ra_state == WAIT_RAR && ra->cfra))){
-
// Getting IP traffic to be transmitted
nr_ue_get_sdu(mod_id, cc_id,frame_tx, slot_tx, gNB_index, ulsch_input_buffer, TBS_bytes);
mac_pdu_exist = 1;
}
-
}
// Config UL TX PDU
diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c
index 9710a90518..3b738eed28 100644
--- a/openair2/LAYER2/NR_MAC_gNB/config.c
+++ b/openair2/LAYER2/NR_MAC_gNB/config.c
@@ -30,7 +30,7 @@
*/
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "common/ran_context.h"
#include "common/utils/nr/nr_common.h"
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
index a3743f1556..e1d63bc6d8 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
@@ -27,7 +27,7 @@
* \version
*/
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "uper_decoder.h"
/* MAC */
@@ -44,6 +44,7 @@
/* rlc */
#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
+#include "openair2/LAYER2/RLC/rlc.h"
#include
extern RAN_CONTEXT_t RC;
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
index 9a511815be..18e3ce1309 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
@@ -35,6 +35,7 @@
#include "NR_MAC_gNB/nr_mac_gNB.h"
#include "NR_MAC_COMMON/nr_mac_extern.h"
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
+#include "LAYER2/RLC/rlc.h"
/*NFAPI*/
#include "nfapi_nr_interface.h"
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
index d59efafdc2..34b9911847 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
@@ -33,6 +33,7 @@
#include "LAYER2/NR_MAC_COMMON/nr_mac_common.h"
#include "executables/nr-softmodem.h"
#include "LAYER2/NR_MAC_COMMON/nr_mac.h"
+#include "LAYER2/RLC/rlc.h"
#include "executables/softmodem-common.h"
#include "common/utils/nr/nr_common.h"
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
index 1a5439e292..2022f46a5b 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
@@ -3097,6 +3097,7 @@ void nr_mac_check_ul_failure(const gNB_MAC_INST *nrmac, int rnti, NR_UE_sched_ct
/* to trigger only once: trigger when ul_failure_timer == 1, but timer will
* stop at 0 and we wait for a UE release command from upper layers */
if (sched_ctrl->ul_failure_timer == 1) {
+ LOG_W(MAC, "request release after UL failure timer expiry\n");
f1_ue_data_t ue_data = du_get_f1_ue_data(rnti);
f1ap_ue_context_release_req_t request = {
.gNB_CU_ue_id = ue_data.secondary_ue,
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index fbef1dd18b..a812986d1f 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -36,6 +36,7 @@
#include
#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
#include "LAYER2/nr_rlc/nr_rlc_oai_api.h"
+#include "LAYER2/RLC/rlc.h"
//#define SRS_IND_DEBUG
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h
index c91f07e623..799285713e 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h
@@ -22,7 +22,7 @@
#ifndef MAC_RRC_DL_HANDLER_H
#define MAC_RRC_DL_HANDLER_H
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "f1ap_messages_types.h"
#include "openair2/RRC/NR/MESSAGES/asn1_msg.h"
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
index 62a4ae0248..7519691334 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
@@ -22,7 +22,7 @@
#ifndef MAC_RRC_UL_H
#define MAC_RRC_UL_H
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "f1ap_messages_types.h"
typedef void (*f1_setup_request_func_t)(const f1ap_setup_req_t* req);
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 2dcc3e429d..99081a5ffc 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -208,7 +208,7 @@ uint64_t get_pdcp_optmask(void) {
* If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken
* and PDCP has no longer anything to do with RLC. In this case, after it's handed
* an SDU it appends PDCP header and returns (by filling in incoming pointer parameters)
- * this mem_block_t to be dissected for testing purposes. For further details see test
+ * this uint8_t to be dissected for testing purposes. For further details see test
* code at targets/TEST/PDCP/test_pdcp.c:test_pdcp_data_req()
*/
bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
@@ -229,7 +229,7 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
uint8_t pdcp_tailer_len = 0;
uint16_t pdcp_pdu_size = 0;
uint16_t current_sn = 0;
- mem_block_t *pdcp_pdu_p = NULL;
+ uint8_t *pdcp_pdu_p = NULL;
rlc_op_status_t rlc_status;
bool ret = true;
hash_key_t key = HASHTABLE_NOT_A_KEY_VALUE;
@@ -288,16 +288,14 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
if (modeP == PDCP_TRANSMISSION_MODE_TRANSPARENT) {
LOG_D(PDCP, " [TM] Asking for a new mem_block of size %d\n",sdu_buffer_sizeP);
- pdcp_pdu_p = get_free_mem_block(sdu_buffer_sizeP, __func__);
+ pdcp_pdu_p = malloc16(sdu_buffer_sizeP);
if (pdcp_pdu_p != NULL) {
- memcpy(&pdcp_pdu_p->data[0], sdu_buffer_pP, sdu_buffer_sizeP);
+ memcpy(pdcp_pdu_p, sdu_buffer_pP, sdu_buffer_sizeP);
if( LOG_DEBUGFLAG(DEBUG_PDCP) ) {
- rlc_util_print_hex_octets(PDCP,
- (unsigned char *)&pdcp_pdu_p->data[0],
- sdu_buffer_sizeP);
- LOG_UI(PDCP, "Before rlc_data_req 1, srb_flagP: %d, rb_idP: %ld \n", srb_flagP, rb_idP);
+ rlc_util_print_hex_octets(PDCP, pdcp_pdu_p, sdu_buffer_sizeP);
+ LOG_UI(PDCP, "Before rlc_data_req 1, srb_flagP: %d, rb_idP: %ld \n", srb_flagP, rb_idP);
}
rlc_status = pdcp_params.send_rlc_data_req_func(ctxt_pP, srb_flagP, MBMS_FLAG_YES, rb_idP, muiP,
@@ -326,7 +324,7 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
/*
* Allocate a new block for the new PDU (i.e. PDU header and SDU payload)
*/
- pdcp_pdu_p = get_free_mem_block(pdcp_pdu_size, __func__);
+ pdcp_pdu_p = malloc16(pdcp_pdu_size);
if (pdcp_pdu_p != NULL) {
/*
@@ -339,9 +337,9 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
pdu_header.sn = pdcp_get_next_tx_seq_number(pdcp_p);
current_sn = pdu_header.sn;
memset(&pdu_header.mac_i[0],0,PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE);
- memset(&pdcp_pdu_p->data[sdu_buffer_sizeP + pdcp_header_len],0,PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE);
+ memset(&pdcp_pdu_p[sdu_buffer_sizeP + pdcp_header_len], 0, PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE);
- if (pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer((unsigned char *)pdcp_pdu_p->data, &pdu_header) == false) {
+ if (pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer(pdcp_pdu_p, &pdu_header) == false) {
LOG_E(PDCP, PROTOCOL_PDCP_CTXT_FMT" Cannot fill PDU buffer with relevant header fields!\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_p));
@@ -360,7 +358,7 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
pdu_header.sn = pdcp_get_next_tx_seq_number(pdcp_p);
current_sn = pdu_header.sn ;
- if (pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer((unsigned char *)pdcp_pdu_p->data, &pdu_header) == false) {
+ if (pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer(pdcp_pdu_p, &pdu_header) == false) {
LOG_E(PDCP, PROTOCOL_PDCP_CTXT_FMT" Cannot fill PDU buffer with relevant header fields!\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_p));
@@ -383,7 +381,7 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
"There must be a problem with PDCP initialization, ignoring this PDU...\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_p),
current_sn);
- free_mem_block(pdcp_pdu_p, __func__);
+ free(pdcp_pdu_p);
if (ctxt_pP->enb_flag == ENB_FLAG_YES) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_req);
@@ -397,13 +395,13 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
LOG_D(PDCP, "Sequence number %d is assigned to current PDU\n", current_sn);
/* Then append data... */
- memcpy(&pdcp_pdu_p->data[pdcp_header_len], sdu_buffer_pP, sdu_buffer_sizeP);
+ memcpy(&pdcp_pdu_p[pdcp_header_len], sdu_buffer_pP, sdu_buffer_sizeP);
//For control plane data that are not integrity protected,
// the MAC-I field is still present and should be padded with padding bits set to 0.
// NOTE: user-plane data are never integrity protected
for (i=0; idata[pdcp_header_len + sdu_buffer_sizeP + i] = 0x00;// pdu_header.mac_i[i];
+ pdcp_pdu_p[pdcp_header_len + sdu_buffer_sizeP + i] = 0x00; // pdu_header.mac_i[i];
}
if ((pdcp_p->security_activated != 0) &&
@@ -421,7 +419,7 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
rb_idP % LTE_maxDRB,
pdcp_header_len,
current_sn,
- pdcp_pdu_p->data,
+ pdcp_pdu_p,
sdu_buffer_sizeP);
if (ctxt_pP->enb_flag == ENB_FLAG_NO) {
@@ -434,8 +432,8 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
/* Print octets of outgoing data in hexadecimal form */
LOG_D(PDCP, "Following content with size %d will be sent over RLC (PDCP PDU header is the first two bytes)\n",
pdcp_pdu_size);
- //util_print_hex_octets(PDCP, (unsigned char*)pdcp_pdu_p->data, pdcp_pdu_size);
- //util_flush_hex_octets(PDCP, (unsigned char*)pdcp_pdu->data, pdcp_pdu_size);
+ // util_print_hex_octets(PDCP, (unsigned char*)pdcp_pdu_p, pdcp_pdu_size);
+ // util_flush_hex_octets(PDCP, (unsigned char*)pdcp_pdu, pdcp_pdu_size);
} else {
LOG_E(PDCP, "Cannot create a mem_block for a PDU!\n");
@@ -458,8 +456,13 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
* Ask sublayer to transmit data and check return value
* to see if RLC succeeded
*/
- LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)pdcp_pdu_p->data,pdcp_pdu_size,
- "[MSG] PDCP DL %s PDU on rb_id %ld\n",(srb_flagP)? "CONTROL" : "DATA", rb_idP);
+ LOG_DUMPMSG(PDCP,
+ DEBUG_PDCP,
+ (char *)pdcp_pdu_p,
+ pdcp_pdu_size,
+ "[MSG] PDCP DL %s PDU on rb_id %ld\n",
+ (srb_flagP) ? "CONTROL" : "DATA",
+ rb_idP);
if ((pdcp_pdu_p!=NULL) && (srb_flagP == 0) && (ctxt_pP->enb_flag == 1)) {
LOG_D(PDCP, "pdcp data req on drb %ld, size %d, rnti %lx\n", rb_idP, pdcp_pdu_size, ctxt_pP->rntiMaybeUEid);
@@ -563,17 +566,14 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
//-----------------------------------------------------------------------------
-bool
-pdcp_data_ind(
- const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_idP,
- const sdu_size_t sdu_buffer_sizeP,
- mem_block_t *const sdu_buffer_pP,
- const uint32_t *const srcID,
- const uint32_t *const dstID
-)
+bool pdcp_data_ind(const protocol_ctxt_t *const ctxt_pP,
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flagP,
+ const rb_id_t rb_idP,
+ const sdu_size_t sdu_buffer_sizeP,
+ uint8_t *const sdu_buffer_pP,
+ const uint32_t *const srcID,
+ const uint32_t *const dstID)
//-----------------------------------------------------------------------------
{
pdcp_t *pdcp_p = NULL;
@@ -593,8 +593,13 @@ pdcp_data_ind(
int pdcp_sn_for_count;
int security_ok;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN);
- LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)sdu_buffer_pP->data,sdu_buffer_sizeP,
- "[MSG] PDCP UL %s PDU on rb_id %ld\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
+ LOG_DUMPMSG(PDCP,
+ DEBUG_PDCP,
+ (char *)sdu_buffer_pP,
+ sdu_buffer_sizeP,
+ "[MSG] PDCP UL %s PDU on rb_id %ld\n",
+ (srb_flagP) ? "CONTROL" : "DATA",
+ rb_idP);
if (MBMS_flagP) {
AssertError(rb_idP < NB_RB_MBMS_MAX, return false, "RB id is too high (%ld/%d) %u rnti %lx!\n", rb_idP, NB_RB_MBMS_MAX, ctxt_pP->module_id, ctxt_pP->rntiMaybeUEid);
@@ -630,7 +635,7 @@ pdcp_data_ind(
PROTOCOL_CTXT_FMT"Could not get PDCP instance key 0x%"PRIx64"\n",
PROTOCOL_CTXT_ARGS(ctxt_pP),
key);
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_OUT);
return false;
}
@@ -657,16 +662,16 @@ pdcp_data_ind(
if (srb_flagP) { //SRB1/2
pdcp_header_len = PDCP_CONTROL_PLANE_DATA_PDU_SN_SIZE;
pdcp_tailer_len = PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE;
- sequence_number = pdcp_get_sequence_number_of_pdu_with_SRB_sn((unsigned char *)sdu_buffer_pP->data);
+ sequence_number = pdcp_get_sequence_number_of_pdu_with_SRB_sn((unsigned char *)sdu_buffer_pP);
} else { // DRB
pdcp_tailer_len = 0;
if (pdcp_p->seq_num_size == 7) {
pdcp_header_len = PDCP_USER_PLANE_DATA_PDU_SHORT_SN_HEADER_SIZE;
- sequence_number = pdcp_get_sequence_number_of_pdu_with_short_sn((unsigned char *)sdu_buffer_pP->data);
+ sequence_number = pdcp_get_sequence_number_of_pdu_with_short_sn((unsigned char *)sdu_buffer_pP);
} else if (pdcp_p->seq_num_size == 12) {
pdcp_header_len = PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE;
- sequence_number = pdcp_get_sequence_number_of_pdu_with_long_sn((unsigned char *)sdu_buffer_pP->data);
+ sequence_number = pdcp_get_sequence_number_of_pdu_with_long_sn((unsigned char *)sdu_buffer_pP);
} else {
//sequence_number = 4095;
LOG_E(PDCP,
@@ -686,7 +691,7 @@ pdcp_data_ind(
PROTOCOL_PDCP_CTXT_FMT"Incoming (from RLC) SDU is short of size (size:%d)! Ignoring...\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p),
sdu_buffer_sizeP);
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
if (ctxt_pP->enb_flag) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind);
@@ -718,7 +723,7 @@ pdcp_data_ind(
* mechanism all out-of-order packets will be delivered to RRC/IP
*/
LOG_W(PDCP, "Ignoring PDU...\n");
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
return false;
}
@@ -749,8 +754,9 @@ pdcp_data_ind(
pdcp_header_len,
rx_hfn_for_count,
pdcp_sn_for_count,
- sdu_buffer_pP->data,
- sdu_buffer_sizeP - pdcp_tailer_len) == 0;
+ sdu_buffer_pP,
+ sdu_buffer_sizeP - pdcp_tailer_len)
+ == 0;
if (ctxt_pP->enb_flag == ENB_FLAG_NO) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].validate_security);
@@ -766,7 +772,7 @@ pdcp_data_ind(
PROTOCOL_PDCP_CTXT_FMT"security not validated for incoming PDCP SRB PDU\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
LOG_W(PDCP, "Ignoring PDU...\n");
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
/* TODO: indicate integrity verification failure to upper layer */
return false;
}
@@ -784,10 +790,9 @@ pdcp_data_ind(
rrc_data_ind(ctxt_pP,
rb_id,
sdu_buffer_sizeP - pdcp_header_len - pdcp_tailer_len,
- (uint8_t *)&sdu_buffer_pP->data[pdcp_header_len]);
- free_mem_block(sdu_buffer_pP, __func__);
+ (uint8_t *)&sdu_buffer_pP[pdcp_header_len]);
+ free(sdu_buffer_pP);
- // free_mem_block(new_sdu, __func__);
if (ctxt_pP->enb_flag) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind);
} else {
@@ -821,7 +826,7 @@ pdcp_data_ind(
PROTOCOL_PDCP_CTXT_FMT"discard PDU, out of\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
LOG_W(PDCP, "Ignoring PDU...\n");
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
/* TODO: indicate integrity verification failure to upper layer */
return false;
} else if (pdcp_p->next_pdcp_rx_sn - sequence_number > reordering_window) {
@@ -860,8 +865,9 @@ pdcp_data_ind(
pdcp_header_len,
rx_hfn_for_count,
pdcp_sn_for_count,
- sdu_buffer_pP->data,
- sdu_buffer_sizeP - pdcp_tailer_len) == 0;
+ sdu_buffer_pP,
+ sdu_buffer_sizeP - pdcp_tailer_len)
+ == 0;
if (ctxt_pP->enb_flag == ENB_FLAG_NO) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].validate_security);
@@ -877,7 +883,7 @@ pdcp_data_ind(
PROTOCOL_PDCP_CTXT_FMT"security not validated for incoming PDPC DRB RLC/AM PDU\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
LOG_W(PDCP, "Ignoring PDU...\n");
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
/* TODO: indicate integrity verification failure to upper layer */
return false;
}
@@ -927,8 +933,9 @@ pdcp_data_ind(
pdcp_header_len,
rx_hfn_for_count,
pdcp_sn_for_count,
- sdu_buffer_pP->data,
- sdu_buffer_sizeP - pdcp_tailer_len) == 0;
+ sdu_buffer_pP,
+ sdu_buffer_sizeP - pdcp_tailer_len)
+ == 0;
if (ctxt_pP->enb_flag == ENB_FLAG_NO) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].validate_security);
@@ -944,7 +951,7 @@ pdcp_data_ind(
PROTOCOL_PDCP_CTXT_FMT"security not validated for incoming PDPC DRB RLC/UM PDU\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
LOG_W(PDCP, "Ignoring PDU...\n");
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
/* TODO: indicate integrity verification failure to upper layer */
return false;
}
@@ -961,7 +968,7 @@ pdcp_data_ind(
if (otg_enabled==1) {
LOG_D(OTG,"Discarding received packed\n");
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
if (ctxt_pP->enb_flag) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind);
@@ -990,7 +997,7 @@ pdcp_data_ind(
AssertFatal(message_p != NULL, "OUT OF MEMORY");
gtpv1u_tunnel_data_req_t *req=>PV1U_TUNNEL_DATA_REQ(message_p);
req->buffer = (uint8_t*)(req+1);
- memcpy(req->buffer + GTPU_HEADER_OVERHEAD_MAX, sdu_buffer_pP->data + payload_offset, sdu_buffer_sizeP - payload_offset);
+ memcpy(req->buffer + GTPU_HEADER_OVERHEAD_MAX, sdu_buffer_pP + payload_offset, sdu_buffer_sizeP - payload_offset);
req->length = sdu_buffer_sizeP - payload_offset;
req->offset = GTPU_HEADER_OVERHEAD_MAX;
req->ue_id = ctxt_pP->rntiMaybeUEid;
@@ -1005,16 +1012,16 @@ pdcp_data_ind(
#ifdef MBMS_MULTICAST_OUT
if ((MBMS_flagP != 0) && (mbms_socket != -1)) {
- // struct iphdr *ip_header = (struct iphdr *)&sdu_buffer_pP->data[payload_offset];
- // struct udphdr *udp_header = (struct udphdr *)&sdu_buffer_pP->data[payload_offset + sizeof(struct iphdr)];
- // struct sockaddr_in dest_addr;
- // dest_addr.sin_family = AF_INET;
- // dest_addr.sin_port = udp_header->dest;
- // dest_addr.sin_addr.s_addr = ip_header->daddr;
-
- // sendto(mbms_socket, &sdu_buffer_pP->data[payload_offset], sdu_buffer_sizeP - payload_offset, MSG_DONTWAIT, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
- // //packet_forwarded = true;
+ // struct iphdr *ip_header = (struct iphdr *)&sdu_buffer_pP[payload_offset];
+ // struct udphdr *udp_header = (struct udphdr *)&sdu_buffer_pP[payload_offset + sizeof(struct iphdr)];
+ // struct sockaddr_in dest_addr;
+ // dest_addr.sin_family = AF_INET;
+ // dest_addr.sin_port = udp_header->dest;
+ // dest_addr.sin_addr.s_addr = ip_header->daddr;
+ // sendto(mbms_socket, &sdu_buffer_pP[payload_offset], sdu_buffer_sizeP - payload_offset, MSG_DONTWAIT, (struct
+ // sockaddr*)&dest_addr, sizeof(dest_addr));
+ // //packet_forwarded = true;
}
#endif
@@ -1035,7 +1042,7 @@ pdcp_data_ind(
AssertFatal((sdu_buffer_sizeP - payload_offset >= 0), "invalid PDCP SDU size!");
// Here there is no virtualization possible
- // set ((pdcp_data_ind_header_t *) new_sdu_p->data)->inst for IP layer here
+ // set ((pdcp_data_ind_header_t *) new_sdu_p)->inst for IP layer here
if (ctxt_pP->enb_flag == ENB_FLAG_NO) {
pdcpHead->rb_id = rb_id;
@@ -1071,9 +1078,7 @@ pdcp_data_ind(
LOG_D(PDCP, "inst=%d size=%d\n", pdcpHead->inst, pdcpHead->data_size);
}
- memcpy(pdcpHead+1,
- &sdu_buffer_pP->data[payload_offset],
- sdu_buffer_sizeP - payload_offset);
+ memcpy(pdcpHead + 1, &sdu_buffer_pP[payload_offset], sdu_buffer_sizeP - payload_offset);
if( LOG_DEBUGFLAG(DEBUG_PDCP) )
log_dump(PDCP, pdcpHead+1, min(sdu_buffer_sizeP - payload_offset,30) , LOG_DUMP_CHAR,
"Printing first bytes of PDCP SDU before adding it to the list: \n");
@@ -1083,8 +1088,8 @@ pdcp_data_ind(
LOG_D(PDCP, "Following content has been received from RLC (%d,%d)(PDCP header has already been removed):\n",
sdu_buffer_sizeP - payload_offset + (int)sizeof(pdcp_data_ind_header_t),
sdu_buffer_sizeP - payload_offset);
- //util_print_hex_octets(PDCP, &new_sdu_p->data[sizeof (pdcp_data_ind_header_t)], sdu_buffer_sizeP - payload_offset);
- //util_flush_hex_octets(PDCP, &new_sdu_p->data[sizeof (pdcp_data_ind_header_t)], sdu_buffer_sizeP - payload_offset);
+ // util_print_hex_octets(PDCP, &new_sdu_p[sizeof (pdcp_data_ind_header_t)], sdu_buffer_sizeP - payload_offset);
+ // util_flush_hex_octets(PDCP, &new_sdu_p[sizeof (pdcp_data_ind_header_t)], sdu_buffer_sizeP - payload_offset);
}
/* Update PDCP statistics */
@@ -1103,7 +1108,7 @@ pdcp_data_ind(
Pdcp_stats_rx_aiat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+= (pdcp_enb[ctxt_pP->module_id].sfn - Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
Pdcp_stats_rx_aiat_tmp_w[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+=(pdcp_enb[ctxt_pP->module_id].sfn - Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]);
Pdcp_stats_rx_iat[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]=pdcp_enb[ctxt_pP->module_id].sfn;
- free_mem_block(sdu_buffer_pP, __func__);
+ free(sdu_buffer_pP);
if (ctxt_pP->enb_flag) {
stop_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind);
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
index 35bcd06308..6b0e2499fe 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
@@ -37,7 +37,7 @@
//-----------------------------------------------------------------------------
#include "RRC/LTE/rrc_defs.h"
#include "common/platform_constants.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "LTE_DRB-ToAddMod.h"
#include "LTE_DRB-ToAddModList.h"
#include "LTE_SRB-ToAddMod.h"
@@ -47,14 +47,25 @@
#include "openair3/SECU/secu_defs.h"
-typedef rlc_op_status_t (*send_rlc_data_req_func_t)(const protocol_ctxt_t *const,
- const srb_flag_t, const MBMS_flag_t,
- const rb_id_t, const mui_t,
- confirm_t, sdu_size_t, mem_block_t *,const uint32_t *const, const uint32_t *const);
+typedef rlc_op_status_t (*send_rlc_data_req_func_t)(const protocol_ctxt_t *const,
+ const srb_flag_t,
+ const MBMS_flag_t,
+ const rb_id_t,
+ const mui_t,
+ confirm_t,
+ sdu_size_t,
+ uint8_t *,
+ const uint32_t *const,
+ const uint32_t *const);
-typedef bool (pdcp_data_ind_t)( const protocol_ctxt_t *, const srb_flag_t,
- const MBMS_flag_t, const rb_id_t, const sdu_size_t,
- mem_block_t *,const uint32_t *const, const uint32_t *const);
+typedef bool(pdcp_data_ind_t)(const protocol_ctxt_t *,
+ const srb_flag_t,
+ const MBMS_flag_t,
+ const rb_id_t,
+ const sdu_size_t,
+ uint8_t *,
+ const uint32_t *const,
+ const uint32_t *const);
typedef pdcp_data_ind_t* pdcp_data_ind_func_t;
#define MAX_NUMBER_NETIF 1 //16
@@ -265,19 +276,19 @@ bool cu_f1u_data_req(protocol_ctxt_t *ctxt_pP,
const uint32_t *const sourceL2Id,
const uint32_t *const destinationL2Id);
-/*! \fn bool pdcp_data_ind(const protocol_ctxt_t* const, srb_flag_t, MBMS_flag_t, rb_id_t, sdu_size_t, mem_block_t*, bool)
-* \brief This functions handles data transfer indications coming from RLC
-* \param[in] ctxt_pP Running context.
-* \param[in] Shows if rb is SRB
-* \param[in] Tells if MBMS traffic
-* \param[in] rab_id Radio Bearer ID
-* \param[in] sdu_buffer_size Size of incoming SDU in bytes
-* \param[in] sdu_buffer Buffer carrying SDU
-* \param[in] is_data_plane flag to indicate whether the userplane data belong to the control plane or data plane
-* \return TRUE on success, false otherwise
-* \note None
-* @ingroup _pdcp
-*/
+/*! \fn bool pdcp_data_ind(const protocol_ctxt_t* const, srb_flag_t, MBMS_flag_t, rb_id_t, sdu_size_t, uint8_t*, bool)
+ * \brief This functions handles data transfer indications coming from RLC
+ * \param[in] ctxt_pP Running context.
+ * \param[in] Shows if rb is SRB
+ * \param[in] Tells if MBMS traffic
+ * \param[in] rab_id Radio Bearer ID
+ * \param[in] sdu_buffer_size Size of incoming SDU in bytes
+ * \param[in] sdu_buffer Buffer carrying SDU
+ * \param[in] is_data_plane flag to indicate whether the userplane data belong to the control plane or data plane
+ * \return TRUE on success, false otherwise
+ * \note None
+ * @ingroup _pdcp
+ */
pdcp_data_ind_t pdcp_data_ind;
/*! \fn void rrc_pdcp_config_req(const protocol_ctxt_t* const ,uint32_t,rb_id_t,uint8_t)
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
index c1ba248178..c27eef4e67 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
@@ -27,7 +27,7 @@
*/
#include "common/utils/LOG/log.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "pdcp.h"
#include "pdcp_primitives.h"
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
index 89b8ff672f..64fa304165 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
@@ -29,7 +29,7 @@
#define PDCP_UTIL_H
#include "common/utils/LOG/log.h"
-#include "../../COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "pdcp.h"
/*
diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h
index f61f9ca6c7..39471ebbee 100644
--- a/openair2/LAYER2/RLC/rlc.h
+++ b/openair2/LAYER2/RLC/rlc.h
@@ -35,12 +35,12 @@
#ifndef __RLC_H__
# define __RLC_H__
-# include "platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
# include "hashtable.h"
# include "LTE_asn_constant.h"
# include "common/utils/LOG/log.h"
-# include "mem_block.h"
+#include "intertask_interface.h"
//# include "PHY/defs.h"
# include "LTE_RLC-Config.h"
# include "LTE_DRB-ToAddMod.h"
@@ -71,26 +71,6 @@ typedef enum rlc_confirm_e {
RLC_SDU_CONFIRM_YES = 1,
} rlc_confirm_t;
-typedef enum rlc_mode_e {
- RLC_MODE_NONE = 0,
- RLC_MODE_AM = 1,
- RLC_MODE_UM = 2,
- RLC_MODE_TM = 4
-} rlc_mode_t;
-
-/*! \struct mac_rlc_status_resp_t
-* \brief Primitive exchanged between RLC and MAC informing about the buffer occupancy of the RLC protocol instance.
-*/
-typedef struct {
- rlc_buffer_occupancy_t bytes_in_buffer; /*!< \brief Bytes buffered in RLC protocol instance. */
- rlc_buffer_occupancy_t pdus_in_buffer; /*!< \brief Number of PDUs buffered in RLC protocol instance (OBSOLETE). */
- frame_t head_sdu_creation_time; /*!< \brief Head SDU creation time. */
- sdu_size_t head_sdu_remaining_size_to_send; /*!< \brief remaining size of sdu: could be the total size or the remaining size of already segmented sdu */
- bool head_sdu_is_segmented; /*!< \brief 0 if head SDU has not been segmented, 1 if already segmented */
-} mac_rlc_status_resp_t;
-
-
-
//-----------------------------------------------------------------------------
// PRIVATE INTERNALS OF RLC
//-----------------------------------------------------------------------------
@@ -284,39 +264,35 @@ void rlc_util_print_hex_octets(
* \param[in] muiP Message Unit identifier.
* \param[in] confirmP Boolean, is confirmation requested.
* \param[in] sdu_sizeP Size of SDU in bytes.
-* \param[in] sduP SDU.
-* \return A status about the processing, OK or error code.
-*/
-rlc_op_status_t rlc_data_req (
- const protocol_ctxt_t *const,
- const srb_flag_t,
- const MBMS_flag_t,
- const rb_id_t,
- const mui_t,
- const confirm_t,
- const sdu_size_t,
- mem_block_t *const,
- const uint32_t *const,
- const uint32_t *const
-);
+ * \param[in] sduP SDU.
+ * \return A status about the processing, OK or error code.
+ */
+rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const,
+ const srb_flag_t,
+ const MBMS_flag_t,
+ const rb_id_t,
+ const mui_t,
+ const confirm_t,
+ const sdu_size_t,
+ uint8_t *const,
+ const uint32_t *const,
+ const uint32_t *const);
/*! \fn void rlc_data_ind (const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP, const sdu_size_t sdu_sizeP, mem_block_t* sduP) {
* \brief Interface with higher layers, route SDUs coming from RLC protocol instances to upper layer instance.
* \param[in] ctxtP Running context.
* \param[in] srb_flagP Flag to indicate SRB (1) or DRB (0)
* \param[in] MBMS_flagP Flag to indicate whether this is the MBMS service (1) or not (0)
-* \param[in] rb_idP Radio bearer identifier.
-* \param[in] sdu_sizeP Size of SDU in bytes.
-* \param[in] sduP SDU.
-*/
-void rlc_data_ind(
- const protocol_ctxt_t *const,
- const srb_flag_t,
- const MBMS_flag_t,
- const rb_id_t,
- const sdu_size_t,
- mem_block_t *const);
-
+ * \param[in] rb_idP Radio bearer identifier.
+ * \param[in] sdu_sizeP Size of SDU in bytes.
+ * \param[in] sduP SDU.
+ */
+void rlc_data_ind(const protocol_ctxt_t *const,
+ const srb_flag_t,
+ const MBMS_flag_t,
+ const rb_id_t,
+ const sdu_size_t,
+ uint8_t *const);
/*! \fn void rlc_data_conf (const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, const mui_t muiP, const rlc_tx_status_t statusP)
* \brief Interface with higher layers, confirm to upper layer the transmission status for a SDU stamped with a MUI, scheduled for transmission.
@@ -435,18 +411,9 @@ rlc_op_status_t rlc_stat_req (
unsigned int *const stat_timer_status_prohibit_timed_out);
/*! \fn int rlc_module_init(int enb_flag)
-* \brief RAZ the memory of the RLC layer, initialize the memory pool manager (mem_block_t structures mainly used in RLC module).
-*/
+ * \brief RAZ the memory of the RLC layer, initialize the memory pool manager (uint8_t structures mainly used in RLC module).
+ */
int rlc_module_init(int enb_flag);
-
-void du_rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_idP,
- const mui_t muiP,
- confirm_t confirmP,
- sdu_size_t sdu_sizeP,
- mem_block_t *sdu_pP);
/** @} */
#define RLC_FG_COLOR_BLACK "\e[0;30m"
diff --git a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
index 412a974406..e90a5a4309 100644
--- a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
+++ b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
@@ -23,7 +23,7 @@
#include "NR_DRB-ToAddModList.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "intertask_interface.h"
#include "openair2/COMMON/e1ap_messages_types.h"
#include "openair3/ocp-gtpu/gtp_itf.h"
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp.h b/openair2/LAYER2/nr_pdcp/nr_pdcp.h
index 4a8966e100..183a982ed7 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp.h
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp.h
@@ -20,7 +20,7 @@
*/
#include
-#include "openair2/COMMON/platform_types.h"
+#include "common/platform_types.h"
#ifndef _NR_PDCP_H_
#define _NR_PDCP_H_
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
index 1657f3c4bb..8d342a8206 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
@@ -24,7 +24,7 @@
#include
#include
-#include "openair2/COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "nr_pdcp_sdu.h"
#include "openair2/RRC/NR/rrc_gNB_radio_bearers.h"
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
index 96444e5b10..46383c7b11 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
@@ -30,6 +30,7 @@
#include "NR_RLC-Config.h"
#include "NR_CellGroupConfig.h"
#include "openair2/RRC/NR/nr_rrc_proto.h"
+#include "common/utils/mem/oai_memory.h"
#include
/* from OAI */
@@ -111,7 +112,7 @@ typedef struct {
mui_t muiP;
confirm_t confirmP;
sdu_size_t sdu_sizeP;
- mem_block_t *sdu_pP;
+ uint8_t *sdu_pP;
} rlc_data_req_queue_item;
#define RLC_DATA_REQ_QUEUE_SIZE 10000
@@ -173,13 +174,13 @@ static void init_nr_rlc_data_req_queue(void)
}
static void enqueue_rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_idP,
- const mui_t muiP,
- confirm_t confirmP,
- sdu_size_t sdu_sizeP,
- mem_block_t *sdu_pP)
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flagP,
+ const rb_id_t rb_idP,
+ const mui_t muiP,
+ confirm_t confirmP,
+ sdu_size_t sdu_sizeP,
+ uint8_t *sdu_pP)
{
int i;
int logged = 0;
@@ -210,13 +211,13 @@ static void enqueue_rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
}
void du_rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_idP,
- const mui_t muiP,
- confirm_t confirmP,
- sdu_size_t sdu_sizeP,
- mem_block_t *sdu_pP)
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flagP,
+ const rb_id_t rb_idP,
+ const mui_t muiP,
+ confirm_t confirmP,
+ sdu_size_t sdu_sizeP,
+ uint8_t *sdu_pP)
{
enqueue_rlc_data_req(ctxt_pP,
srb_flagP,
@@ -241,7 +242,7 @@ typedef struct {
MBMS_flag_t MBMS_flagP;
rb_id_t rb_id;
sdu_size_t sdu_buffer_size;
- mem_block_t *sdu_buffer;
+ uint8_t *sdu_buffer;
} pdcp_data_ind_queue_item;
#define PDCP_DATA_IND_QUEUE_SIZE 10000
@@ -256,13 +257,12 @@ typedef struct {
static pdcp_data_ind_queue pq;
-static void do_pdcp_data_ind(
- const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_id,
- const sdu_size_t sdu_buffer_size,
- mem_block_t *const sdu_buffer)
+static void do_pdcp_data_ind(const protocol_ctxt_t *const ctxt_pP,
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flagP,
+ const rb_id_t rb_id,
+ const sdu_size_t sdu_buffer_size,
+ uint8_t *const sdu_buffer)
{
nr_pdcp_ue_t *ue;
nr_pdcp_entity_t *rb;
@@ -285,14 +285,14 @@ static void do_pdcp_data_ind(
rb = nr_pdcp_get_rb(ue, rb_id, srb_flagP);
if (rb != NULL) {
- rb->recv_pdu(rb, (char *)sdu_buffer->data, sdu_buffer_size);
+ rb->recv_pdu(rb, (char *)sdu_buffer, sdu_buffer_size);
} else {
LOG_E(PDCP, "pdcp_data_ind: no RB found (rb_id %ld, srb_flag %d)\n", rb_id, srb_flagP);
}
nr_pdcp_manager_unlock(nr_pdcp_ue_manager);
- free_mem_block(sdu_buffer, __FUNCTION__);
+ free(sdu_buffer);
}
static void *pdcp_data_ind_thread(void *_)
@@ -337,13 +337,12 @@ static void init_nr_pdcp_data_ind_queue(void)
}
}
-static void enqueue_pdcp_data_ind(
- const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_id,
- const sdu_size_t sdu_buffer_size,
- mem_block_t *const sdu_buffer)
+static void enqueue_pdcp_data_ind(const protocol_ctxt_t *const ctxt_pP,
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flagP,
+ const rb_id_t rb_id,
+ const sdu_size_t sdu_buffer_size,
+ uint8_t *const sdu_buffer)
{
int i;
int logged = 0;
@@ -371,12 +370,12 @@ static void enqueue_pdcp_data_ind(
if (pthread_mutex_unlock(&pq.m) != 0) abort();
}
-bool pdcp_data_ind(const protocol_ctxt_t *const ctxt_pP,
+bool pdcp_data_ind(const protocol_ctxt_t *const ctxt_pP,
const srb_flag_t srb_flagP,
const MBMS_flag_t MBMS_flagP,
const rb_id_t rb_id,
const sdu_size_t sdu_buffer_size,
- mem_block_t *const sdu_buffer,
+ uint8_t *const sdu_buffer,
const uint32_t *const srcID,
const uint32_t *const dstID)
{
@@ -670,8 +669,8 @@ static void deliver_pdu_drb_ue(void *deliver_pdu_data, ue_id_t ue_id, int rb_id,
DevAssert(deliver_pdu_data == NULL);
protocol_ctxt_t ctxt = { .enb_flag = 0, .rntiMaybeUEid = ue_id };
- mem_block_t *memblock = get_free_mem_block(size, __FUNCTION__);
- memcpy(memblock->data, buf, size);
+ uint8_t *memblock = malloc16(size);
+ memcpy(memblock, buf, size);
LOG_D(PDCP, "%s(): (drb %d) calling rlc_data_req size %d UE %ld/%04lx\n", __func__, rb_id, size, ctxt.rntiMaybeUEid, ctxt.rntiMaybeUEid);
enqueue_rlc_data_req(&ctxt, 0, MBMS_FLAG_NO, rb_id, sdu_id, 0, size, memblock);
}
@@ -702,8 +701,8 @@ static void deliver_pdu_drb_gnb(void *deliver_pdu_data, ue_id_t ue_id, int rb_id
extern instance_t CUuniqInstance;
itti_send_msg_to_task(TASK_GTPV1_U, CUuniqInstance, message_p);
} else {
- mem_block_t *memblock = get_free_mem_block(size, __FUNCTION__);
- memcpy(memblock->data, buf, size);
+ uint8_t *memblock = malloc16(size);
+ memcpy(memblock, buf, size);
LOG_D(PDCP, "%s(): (drb %d) calling rlc_data_req size %d\n", __func__, rb_id, size);
enqueue_rlc_data_req(&ctxt, 0, MBMS_FLAG_NO, rb_id, sdu_id, 0, size, memblock);
}
@@ -760,8 +759,8 @@ void deliver_pdu_srb_rlc(void *deliver_pdu_data, ue_id_t ue_id, int srb_id,
char *buf, int size, int sdu_id)
{
protocol_ctxt_t ctxt = { .enb_flag = 1, .rntiMaybeUEid = ue_id };
- mem_block_t *memblock = get_free_mem_block(size, __FUNCTION__);
- memcpy(memblock->data, buf, size);
+ uint8_t *memblock = malloc16(size);
+ memcpy(memblock, buf, size);
enqueue_rlc_data_req(&ctxt, 1, MBMS_FLAG_NO, srb_id, sdu_id, 0, size, memblock);
}
@@ -958,13 +957,11 @@ bool pdcp_remove_UE(const protocol_ctxt_t *const ctxt_pP)
abort();
}
-bool nr_pdcp_remove_UE(ue_id_t ue_id)
+void nr_pdcp_remove_UE(ue_id_t ue_id)
{
nr_pdcp_manager_lock(nr_pdcp_ue_manager);
nr_pdcp_manager_remove_ue(nr_pdcp_ue_manager, ue_id);
nr_pdcp_manager_unlock(nr_pdcp_ue_manager);
-
- return 1;
}
/* hack: dummy function needed due to LTE dependencies */
@@ -1246,12 +1243,12 @@ bool cu_f1u_data_req(protocol_ctxt_t *ctxt_pP,
const uint32_t *const destinationL2Id) {
//Force instance id to 0, OAI incoherent instance management
ctxt_pP->instance=0;
- mem_block_t *memblock = get_free_mem_block(sdu_buffer_size, __func__);
+ uint8_t *memblock = malloc16(sdu_buffer_size);
if (memblock == NULL) {
- LOG_E(RLC, "%s:%d:%s: ERROR: get_free_mem_block failed\n", __FILE__, __LINE__, __FUNCTION__);
+ LOG_E(RLC, "%s:%d:%s: ERROR: malloc16 failed\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
}
- memcpy(memblock->data,sdu_buffer, sdu_buffer_size);
+ memcpy(memblock, sdu_buffer, sdu_buffer_size);
int ret=pdcp_data_ind(ctxt_pP,srb_flagP, false, rb_id, sdu_buffer_size, memblock, NULL, NULL);
if (!ret) {
LOG_E(RLC, "%s:%d:%s: ERROR: pdcp_data_ind failed\n", __FILE__, __LINE__, __FUNCTION__);
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
index ea88fbfb18..f95dae6a43 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
@@ -29,20 +29,20 @@ void nr_pdcp_layer_init(bool uses_e1);
uint64_t nr_pdcp_module_init(uint64_t _pdcp_optmask, int id);
void du_rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_idP,
- const mui_t muiP,
- confirm_t confirmP,
- sdu_size_t sdu_sizeP,
- mem_block_t *sdu_pP);
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flagP,
+ const rb_id_t rb_idP,
+ const mui_t muiP,
+ confirm_t confirmP,
+ sdu_size_t sdu_sizeP,
+ uint8_t *sdu_pP);
-bool pdcp_data_ind(const protocol_ctxt_t *const ctxt_pP,
+bool pdcp_data_ind(const protocol_ctxt_t *const ctxt_pP,
const srb_flag_t srb_flagP,
const MBMS_flag_t MBMS_flagP,
const rb_id_t rb_id,
const sdu_size_t sdu_buffer_size,
- mem_block_t *const sdu_buffer,
+ uint8_t *const sdu_buffer,
const uint32_t *const srcID,
const uint32_t *const dstID);
@@ -63,7 +63,7 @@ void add_drb(int is_gnb,
void nr_DRB_preconfiguration(ue_id_t crntiMaybeUEid);
-bool nr_pdcp_remove_UE(ue_id_t ue_id);
+void nr_pdcp_remove_UE(ue_id_t ue_id);
void nr_pdcp_reestablishment(ue_id_t ue_id, int rb_id, bool srb_flag);
void nr_pdcp_suspend_srb(ue_id_t ue_id, int srb_id);
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h
index 0d26e1f3ec..dc6adc5e9f 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h
@@ -24,7 +24,7 @@
#include "nr_pdcp_entity.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
typedef void nr_pdcp_ue_manager_t;
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
index 383ae37d35..7c7ee584a2 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
@@ -62,7 +62,7 @@ static void release_rlc_entity_from_lcid(nr_rlc_ue_t *ue, logical_chan_id_t chan
return;
if (rb->type == NR_RLC_SRB) {
int id = rb->choice.srb_id - 1;
- AssertFatal(id > 0, "logic bug: impossible to have srb0 here\n");
+ AssertFatal(id >= 0, "logic bug: impossible to have srb0 here\n");
if (ue->srb[id]) {
ue->srb[id]->delete_entity(ue->srb[id]);
ue->srb[id] = NULL;
@@ -293,7 +293,6 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module
return ret;
}
-
rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
const srb_flag_t srb_flagP,
const MBMS_flag_t MBMS_flagP,
@@ -301,7 +300,7 @@ rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
const mui_t muiP,
confirm_t confirmP,
sdu_size_t sdu_sizeP,
- mem_block_t *sdu_pP,
+ uint8_t *sdu_pP,
const uint32_t *const sourceL2Id,
const uint32_t *const destinationL2Id)
{
@@ -331,14 +330,14 @@ 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->recv_sdu(rb, (char *)sdu_pP->data, sdu_sizeP, muiP);
+ 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__);
}
nr_rlc_manager_unlock(nr_rlc_ue_manager);
- free_mem_block(sdu_pP, __func__);
+ free(sdu_pP);
return RLC_OP_STATUS_OK;
}
@@ -402,7 +401,7 @@ static void deliver_sdu(void *_ue, nr_rlc_entity_t *entity, char *buf, int size)
int is_srb;
int rb_id;
protocol_ctxt_t ctx;
- mem_block_t *memblock;
+ uint8_t *memblock;
int i;
int is_enb;
@@ -500,12 +499,12 @@ rb_found:
}
/* UE or monolithic gNB */
- memblock = get_free_mem_block(size, __func__);
+ memblock = malloc16(size);
if (memblock == NULL) {
- LOG_E(RLC, "%s:%d:%s: ERROR: get_free_mem_block failed\n", __FILE__, __LINE__, __FUNCTION__);
+ LOG_E(RLC, "%s:%d:%s: ERROR: malloc16 failed\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
}
- memcpy(memblock->data, buf, size);
+ memcpy(memblock, buf, size);
LOG_D(PDCP, "Calling PDCP layer from RLC in %s\n", __FUNCTION__);
if (!pdcp_data_ind(&ctx, is_srb, 0, rb_id, size, memblock, NULL, NULL)) {
LOG_E(RLC, "%s:%d:%s: ERROR: pdcp_data_ind failed\n", __FILE__, __LINE__, __FUNCTION__);
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h b/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
index ed29c5458b..aa499cfab6 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
@@ -21,7 +21,7 @@
#ifndef _NR_RLC_UE_MANAGER_H_
#define _NR_RLC_UE_MANAGER_H_
-#include "openair2/COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "nr_rlc_entity.h"
#include "common/platform_constants.h"
diff --git a/openair2/LAYER2/rlc_v2/rlc_oai_api.c b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
index 3e191595dd..d9798f6138 100644
--- a/openair2/LAYER2/rlc_v2/rlc_oai_api.c
+++ b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
@@ -265,18 +265,16 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(
return ret;
}
-
-rlc_op_status_t rlc_data_req (const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_idP,
- const mui_t muiP,
- confirm_t confirmP,
- sdu_size_t sdu_sizeP,
- mem_block_t *sdu_pP,
- const uint32_t *const sourceL2Id,
- const uint32_t *const destinationL2Id
- )
+rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flagP,
+ const rb_id_t rb_idP,
+ const mui_t muiP,
+ confirm_t confirmP,
+ sdu_size_t sdu_sizeP,
+ uint8_t *sdu_pP,
+ const uint32_t *const sourceL2Id,
+ const uint32_t *const destinationL2Id)
{
int rnti = ctxt_pP->rntiMaybeUEid;
rlc_ue_t *ue;
@@ -312,7 +310,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t *const ctxt_pP,
if (rb != NULL) {
rb->set_time(rb, rlc_current_time);
- rb->recv_sdu(rb, (char *)sdu_pP->data, sdu_sizeP, muiP);
+ 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__);
exit(1);
@@ -320,7 +318,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t *const ctxt_pP,
rlc_manager_unlock(rlc_ue_manager);
- free_mem_block(sdu_pP, __func__);
+ free(sdu_pP);
return RLC_OP_STATUS_OK;
}
@@ -359,7 +357,7 @@ static void deliver_sdu(void *_ue, rlc_entity_t *entity, char *buf, int size)
int is_srb;
int rb_id;
protocol_ctxt_t ctx;
- mem_block_t *memblock;
+ uint8_t *memblock;
int i;
int is_enb;
int is_mbms;
@@ -413,13 +411,13 @@ rb_found:
T_INT(0 /*ctxt_pP->module_id*/),
T_INT(ue->rnti), T_INT(rb_id), T_INT(size));
}
-
- memblock = get_free_mem_block(size, __func__);
+
+ memblock = malloc16(size);
if (memblock == NULL) {
- LOG_E(RLC, "%s:%d:%s: ERROR: get_free_mem_block failed\n", __FILE__, __LINE__, __FUNCTION__);
+ LOG_E(RLC, "%s:%d:%s: ERROR: malloc16 failed\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
}
- memcpy(memblock->data, buf, size);
+ memcpy(memblock, buf, size);
if (!get_pdcp_data_ind_func()(&ctx, is_srb, is_mbms, rb_id, size, memblock, NULL, NULL)) {
LOG_E(RLC, "%s:%d:%s: ERROR: pdcp_data_ind failed (is_srb %d rb_id %d rnti %d)\n",
__FILE__, __LINE__, __FUNCTION__,
@@ -1010,24 +1008,6 @@ void rlc_tick(int frame, int subframe)
}
}
-void du_rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
- const srb_flag_t srb_flagP,
- const MBMS_flag_t MBMS_flagP,
- const rb_id_t rb_idP,
- const mui_t muiP,
- confirm_t confirmP,
- sdu_size_t sdu_sizeP,
- mem_block_t *sdu_pP){
- rlc_data_req (ctxt_pP,
- srb_flagP,
- MBMS_flagP,
- rb_idP,
- muiP,
- confirmP,
- sdu_sizeP,
- sdu_pP, NULL, NULL);
-}
-
/* HACK to be removed: nr_rlc_get_available_tx_space is needed by
* openair3/ocp-gtpu/gtp_itf.cpp which is compiled in lte-softmodem
* so let's put a dummy nr_rlc_get_available_tx_space here
diff --git a/openair2/M2AP/m2ap_timers.h b/openair2/M2AP/m2ap_timers.h
index d2875d92af..b41ba35f3b 100644
--- a/openair2/M2AP/m2ap_timers.h
+++ b/openair2/M2AP/m2ap_timers.h
@@ -23,7 +23,7 @@
#define M2AP_TIMERS_H_
#include
-#include "platform_types.h"
+#include "common/platform_types.h"
typedef struct {
/* incremented every TTI (every millisecond when in realtime).
diff --git a/openair2/MCE_APP/mce_app.h b/openair2/MCE_APP/mce_app.h
index fc55c10f1c..0f4be6ccd8 100644
--- a/openair2/MCE_APP/mce_app.h
+++ b/openair2/MCE_APP/mce_app.h
@@ -31,8 +31,7 @@
#define MCE_APP_H_
#include
-#include "platform_types.h"
-
+#include "common/platform_types.h"
void *MCE_app_task(void *args_p);
diff --git a/openair2/MCE_APP/mce_config.h b/openair2/MCE_APP/mce_config.h
index 1fbe81a627..01a19b3a5c 100644
--- a/openair2/MCE_APP/mce_config.h
+++ b/openair2/MCE_APP/mce_config.h
@@ -35,7 +35,7 @@
#include
#include "commonDef.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "PHY/impl_defs_top.h"
#include "PHY/defs_eNB.h"
diff --git a/openair2/NETWORK_DRIVER/LITE/local.h b/openair2/NETWORK_DRIVER/LITE/local.h
index ea82dd9b85..4ceae1b929 100644
--- a/openair2/NETWORK_DRIVER/LITE/local.h
+++ b/openair2/NETWORK_DRIVER/LITE/local.h
@@ -56,7 +56,7 @@
#define IP2PDCP_FIFO 22
#include "constant.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "sap.h"
struct cx_entity {
diff --git a/openair2/NETWORK_DRIVER/MESH/local.h b/openair2/NETWORK_DRIVER/MESH/local.h
index aa55c07612..ef4cfde8ac 100644
--- a/openair2/NETWORK_DRIVER/MESH/local.h
+++ b/openair2/NETWORK_DRIVER/MESH/local.h
@@ -62,7 +62,7 @@
#include "constant.h"
#include "sap.h"
#include "rrc_nas_primitives.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
struct rb_entity {
nasRadioBearerId_t rab_id;
diff --git a/openair2/NETWORK_DRIVER/UE_IP/local.h b/openair2/NETWORK_DRIVER/UE_IP/local.h
index 46e44f0040..8a89d7a9de 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/local.h
+++ b/openair2/NETWORK_DRIVER/UE_IP/local.h
@@ -52,7 +52,7 @@
#include
#include "constant.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "sap.h"
typedef struct ue_ip_priv_s {
diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_PHY_INTERFACE/NR_IF_Module.h
index f85d44398f..dd4e7e970b 100644
--- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.h
+++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.h
@@ -38,7 +38,7 @@
#include "nfapi_nr_interface.h"
#include "nfapi_nr_interface_scf.h"
#include "common/platform_constants.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#define MAX_NUM_DL_PDU 100
#define MAX_NUM_UL_PDU 100
diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
index 3560fc49ee..5be2d3c03c 100644
--- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
+++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
@@ -33,7 +33,7 @@
#ifndef __NR_IF_MODULE_H__
#define __NR_IF_MODULE_H__
-#include "platform_types.h"
+#include "common/platform_types.h"
#include
#include "fapi_nr_ue_interface.h"
#include "openair2/PHY_INTERFACE/queue_t.h"
diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h b/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h
index cff783739e..c395ff95e7 100644
--- a/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h
+++ b/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h
@@ -21,7 +21,7 @@
#ifndef __NR_CHAN_MODEL_H__
#define __NR_CHAN_MODEL_H__
-#include
+#include "common/platform_types.h"
#include
#include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h"
diff --git a/openair2/PHY_INTERFACE/IF_Module.h b/openair2/PHY_INTERFACE/IF_Module.h
index f306903f5f..3fe38a2731 100644
--- a/openair2/PHY_INTERFACE/IF_Module.h
+++ b/openair2/PHY_INTERFACE/IF_Module.h
@@ -36,11 +36,10 @@
#include
//#include "openair1/PHY/LTE_TRANSPORT/transport_eNB.h"
#include "nfapi_interface.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include
#include
-
#define MAX_NUM_DL_PDU 100
#define MAX_NUM_UL_PDU 100
#define MAX_NUM_HI_DCI0_PDU 100
@@ -53,37 +52,37 @@
#define MAX_NUM_RACH_IND 100
#define MAX_NUM_SRS_IND 100
-typedef struct {
- /// Module ID
- module_id_t module_id;
- /// CC ID
- int CC_id;
- /// frame
- frame_t frame;
- /// subframe
- sub_frame_t subframe;
+ typedef struct {
+ /// Module ID
+ module_id_t module_id;
+ /// CC ID
+ int CC_id;
+ /// frame
+ frame_t frame;
+ /// subframe
+ sub_frame_t subframe;
- /// harq indication list
- nfapi_harq_indication_t harq_ind;
+ /// harq indication list
+ nfapi_harq_indication_t harq_ind;
- /// crc indication list
- nfapi_crc_indication_t crc_ind;
+ /// crc indication list
+ nfapi_crc_indication_t crc_ind;
- /// SR indication list
- nfapi_sr_indication_t sr_ind;
+ /// SR indication list
+ nfapi_sr_indication_t sr_ind;
- /// CQI indication list
- nfapi_cqi_indication_t cqi_ind;
+ /// CQI indication list
+ nfapi_cqi_indication_t cqi_ind;
- /// RACH indication list
- nfapi_rach_indication_t rach_ind;
- /// RACH indication list for BR UEs
- nfapi_rach_indication_t rach_ind_br;
- /// SRS indication list
- nfapi_srs_indication_body_t srs_ind;
+ /// RACH indication list
+ nfapi_rach_indication_t rach_ind;
+ /// RACH indication list for BR UEs
+ nfapi_rach_indication_t rach_ind_br;
+ /// SRS indication list
+ nfapi_srs_indication_body_t srs_ind;
- /// RX indication
- nfapi_rx_indication_t rx_ind;
+ /// RX indication
+ nfapi_rx_indication_t rx_ind;
} UL_IND_t;
diff --git a/openair2/PHY_INTERFACE/IF_Module_NB_IoT.h b/openair2/PHY_INTERFACE/IF_Module_NB_IoT.h
index 954eaaa281..8aec51d85d 100644
--- a/openair2/PHY_INTERFACE/IF_Module_NB_IoT.h
+++ b/openair2/PHY_INTERFACE/IF_Module_NB_IoT.h
@@ -12,7 +12,7 @@
//#include "openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h"
#include "LTE_PhysicalConfigDedicated-NB-r13.h"
//#include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h"
-#include "openair2/COMMON/platform_types.h"
+#include "common/platform_types.h"
//#include "openair1/SCHED/IF_Module_L1_primitives_NB_IoT.h"
//#define SCH_PAYLOAD_SIZE_MAX 4096
diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
index 8210811862..3ed4428db6 100644
--- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
+++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
@@ -31,7 +31,7 @@
#define __OPENAIR_RRC_L2_INTERFACE_H__
#include "COMMON/mac_rrc_primitives.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
int8_t
mac_rrc_data_req(
diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c
index bc333bdcd6..f8c30698b1 100644
--- a/openair2/RRC/LTE/L2_interface.c
+++ b/openair2/RRC/LTE/L2_interface.c
@@ -36,7 +36,7 @@
* \email: javier.morgade@ieee.org
*/
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "rrc_defs.h"
#include "rrc_extern.h"
#include "common/utils/LOG/log.h"
diff --git a/openair2/RRC/LTE/L2_interface_common.c b/openair2/RRC/LTE/L2_interface_common.c
index 86fccddcf6..e84b015b67 100644
--- a/openair2/RRC/LTE/L2_interface_common.c
+++ b/openair2/RRC/LTE/L2_interface_common.c
@@ -28,7 +28,7 @@
* \email: raymond.knopp@eurecom.fr
*/
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "rrc_defs.h"
#include "rrc_extern.h"
#include "common/utils/LOG/log.h"
diff --git a/openair2/RRC/LTE/L2_interface_ue.c b/openair2/RRC/LTE/L2_interface_ue.c
index d1128c66ee..91fade8b50 100644
--- a/openair2/RRC/LTE/L2_interface_ue.c
+++ b/openair2/RRC/LTE/L2_interface_ue.c
@@ -36,7 +36,7 @@
* \email: javier.morgade@ieee.org
*/
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "rrc_defs.h"
#include "rrc_extern.h"
#include "common/utils/LOG/log.h"
diff --git a/openair2/RRC/LTE/defs_NB_IoT.h b/openair2/RRC/LTE/defs_NB_IoT.h
index 656f5334a6..fe9dca84a9 100644
--- a/openair2/RRC/LTE/defs_NB_IoT.h
+++ b/openair2/RRC/LTE/defs_NB_IoT.h
@@ -41,7 +41,7 @@
#include "collection/tree.h"
#include "rrc_types_NB_IoT.h"
#include "common/platform_constants.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "common/openairinterface5g_limits.h"
#include "COMMON/mac_rrc_primitives.h"
diff --git a/openair2/RRC/LTE/rrc_common.c b/openair2/RRC/LTE/rrc_common.c
index 7654b56922..230e0d409b 100644
--- a/openair2/RRC/LTE/rrc_common.c
+++ b/openair2/RRC/LTE/rrc_common.c
@@ -32,7 +32,7 @@
#include "rrc_extern.h"
#include "LAYER2/MAC/mac_extern.h"
#include "COMMON/openair_defs.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
#include "LAYER2/RLC/rlc.h"
#include "COMMON/mac_rrc_primitives.h"
diff --git a/openair2/RRC/LTE/rrc_defs.h b/openair2/RRC/LTE/rrc_defs.h
index 35303cd4f8..3191c487c2 100644
--- a/openair2/RRC/LTE/rrc_defs.h
+++ b/openair2/RRC/LTE/rrc_defs.h
@@ -45,7 +45,7 @@
#include "NR_UE-NR-Capability.h"
#include "common/platform_constants.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "LAYER2/MAC/mac.h"
#include "openair2/RRC/common.h"
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index 15b4914a65..a5ad82b61e 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -55,7 +55,7 @@
#include "LTE_HandoverCommand.h"
#include "rlc.h"
#include "rrc_eNB_UE_context.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "LTE_SL-CommConfig-r12.h"
#include "LTE_PeriodicBSR-Timer-r12.h"
#include "LTE_RetxBSR-Timer-r12.h"
diff --git a/openair2/RRC/LTE/rrc_eNB_UE_context.h b/openair2/RRC/LTE/rrc_eNB_UE_context.h
index 89469529df..7d69921658 100644
--- a/openair2/RRC/LTE/rrc_eNB_UE_context.h
+++ b/openair2/RRC/LTE/rrc_eNB_UE_context.h
@@ -31,7 +31,7 @@
#define __RRC_ENB_UE_CONTEXT_H__
#include "collection/tree.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "rrc_defs.h"
int rrc_eNB_compare_ue_rnti_id(
diff --git a/openair2/RRC/NR/cucp_cuup_if.h b/openair2/RRC/NR/cucp_cuup_if.h
index cbf84a289e..86b3a2435e 100644
--- a/openair2/RRC/NR/cucp_cuup_if.h
+++ b/openair2/RRC/NR/cucp_cuup_if.h
@@ -26,7 +26,7 @@
#include
#include
#include
-#include "platform_types.h"
+#include "common/platform_types.h"
struct e1ap_bearer_setup_req_s;
struct e1ap_bearer_setup_resp_s;
diff --git a/openair2/RRC/NR/mac_rrc_dl.h b/openair2/RRC/NR/mac_rrc_dl.h
index 36c6af4396..0899bca06a 100644
--- a/openair2/RRC/NR/mac_rrc_dl.h
+++ b/openair2/RRC/NR/mac_rrc_dl.h
@@ -22,7 +22,7 @@
#ifndef MAC_RRC_DL_H
#define MAC_RRC_DL_H
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "f1ap_messages_types.h"
typedef void (*f1_setup_response_func_t)(sctp_assoc_t assoc_id, const f1ap_setup_resp_t *resp);
diff --git a/openair2/RRC/NR/nr_rrc_common.c b/openair2/RRC/NR/nr_rrc_common.c
index b64ea7d13f..7aa281c343 100644
--- a/openair2/RRC/NR/nr_rrc_common.c
+++ b/openair2/RRC/NR/nr_rrc_common.c
@@ -31,7 +31,7 @@
#include "nr_rrc_extern.h"
#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
#include "COMMON/openair_defs.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
#include "LAYER2/RLC/rlc.h"
#include "COMMON/mac_rrc_primitives.h"
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
index 892873638a..17be416c12 100644
--- a/openair2/RRC/NR/nr_rrc_defs.h
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -42,7 +42,7 @@
#include "common/ngran_types.h"
#include "common/platform_constants.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "mac_rrc_dl.h"
#include "cucp_cuup_if.h"
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index d967d3623f..fe51b6c54e 100644
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -67,7 +67,7 @@
#include "uper_encoder.h"
#include "uper_decoder.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "common/utils/LOG/vcd_signal_dumper.h"
#include "T.h"
@@ -1904,6 +1904,10 @@ static void rrc_CU_process_ue_context_release_complete(MessageDef *msg_p)
}
gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ /* we call nr_pdcp_remove_UE() in the handler of E1 bearer release, but if we
+ * are in E1, we also need to free the UE in the CU-CP, so call it twice to
+ * cover all cases */
+ nr_pdcp_remove_UE(UE->rrc_ue_id);
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(instance, UE->rrc_ue_id);
LOG_I(NR_RRC, "removed UE CU UE ID %u/RNTI %04x \n", UE->rrc_ue_id, UE->rnti);
rrc_delete_ue_data(UE);
@@ -2089,6 +2093,7 @@ void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp
/* pass QoS info to MAC */
int nb_qos_flows = drb_config->numQosFlowSetup;
+ AssertFatal(nb_qos_flows > 0, "must map at least one flow to a DRB\n");
drbs[i].drb_info.flows_to_be_setup_length = nb_qos_flows;
drbs[i].drb_info.flows_mapped_to_drb = (f1ap_flows_mapped_to_drb_t *)calloc(nb_qos_flows, sizeof(f1ap_flows_mapped_to_drb_t));
AssertFatal(drbs[i].drb_info.flows_mapped_to_drb, "could not allocate memory\n");
@@ -2107,6 +2112,9 @@ void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp
qos_char->non_dynamic.qos_priority_level = in_qos_char->qos_priority;
}
}
+ /* the DRB QoS parameters: we just reuse the ones from the first flow */
+ drbs[i].drb_info.drb_qos = drbs[i].drb_info.flows_mapped_to_drb[0].qos_params;
+
/* pass NSSAI info to MAC */
drbs[i].nssai = RRC_pduSession->param.nssai;
}
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c
index b659ccc2f8..00497d6d1b 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.c
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.c
@@ -788,9 +788,7 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins
pdu_session_to_setup_t *pdu = bearer_req.pduSession + bearer_req.numPDUSessions;
bearer_req.numPDUSessions++;
pdu->sessionId = session->pdusession_id;
- nssai_t *nssai = &msg->allowed_nssai[i];
- pdu->nssai.sst = nssai->sst;
- pdu->nssai.sd = nssai->sd;
+ pdu->nssai = msg->pdusession_setup_params[i].nssai;
if (cuup_nssai.sst == 0)
cuup_nssai = pdu->nssai; /* for CU-UP selection below */
pdu->integrityProtectionIndication = rrc->security.do_drb_integrity ? E1AP_IntegrityProtectionIndication_required : E1AP_IntegrityProtectionIndication_not_needed;
diff --git a/openair2/RRC/NR/rrc_gNB_UE_context.h b/openair2/RRC/NR/rrc_gNB_UE_context.h
index af40b33981..37d71f9c29 100644
--- a/openair2/RRC/NR/rrc_gNB_UE_context.h
+++ b/openair2/RRC/NR/rrc_gNB_UE_context.h
@@ -31,7 +31,7 @@
#define __RRC_GNB_UE_CONTEXT_H__
#include "collection/tree.h"
-#include "COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "nr_rrc_defs.h"
int rrc_gNB_compare_ue_rnti_id(rrc_gNB_ue_context_t* c1_pP, rrc_gNB_ue_context_t* c2_pP);
diff --git a/openair2/RRC/NR/rrc_gNB_cuup.c b/openair2/RRC/NR/rrc_gNB_cuup.c
index 3ab6dfe7bb..6c5ea8aef5 100644
--- a/openair2/RRC/NR/rrc_gNB_cuup.c
+++ b/openair2/RRC/NR/rrc_gNB_cuup.c
@@ -46,7 +46,7 @@ static const nr_rrc_cuup_container_t *select_cuup_slice(const struct rrc_cuup_tr
for (int s = 0; s < sr->plmn[p].supported_slices; ++s) {
e1ap_nssai_t *nssai = &sr->plmn[p].slice[s];
if (nssai->sst == sst && nssai->sd == sd) {
- LOG_I(RRC, "selecting CU-UP ID %ld based on exact NSSAI match (%d:0x%06x)\n", sr->gNB_cu_up_id, sst, sd);
+ LOG_A(RRC, "selecting CU-UP ID %ld based on exact NSSAI match (%d:0x%06x)\n", sr->gNB_cu_up_id, sst, sd);
return cuup; /* exact match */
} else if (nssai->sst == sst && second_best_match == NULL) {
LOG_I(RRC, "second best match: CU-UP ID %ld matches SST %d\n", sr->gNB_cu_up_id, sst);
@@ -66,7 +66,7 @@ static const nr_rrc_cuup_container_t *select_cuup_round_robin(size_t n_t, const
nr_rrc_cuup_container_t *cuup = NULL;
RB_FOREACH(cuup, rrc_cuup_tree, (struct rrc_cuup_tree *)&t) {
if (m == 0) {
- LOG_I(RRC, "round-robin match: select CU-UP ID %ld (no NSSAI match)\n", cuup->setup_req->gNB_cu_up_id);
+ LOG_W(RRC, "round-robin match: select CU-UP ID %ld (no NSSAI match)\n", cuup->setup_req->gNB_cu_up_id);
return cuup;
}
m--;
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index 389f849b20..98f67918d3 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -49,7 +49,6 @@
#include "rrc_defs.h"
#include "rrc_proto.h"
#include "LAYER2/NR_MAC_UE/mac_proto.h"
-#include "COMMON/mac_rrc_primitives.h"
#include "intertask_interface.h"
@@ -689,8 +688,7 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(instance_t instance,
switch (bcch_message->message.choice.c1->present) {
case NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1:
LOG_D(NR_RRC, "[UE %ld] Decoding SIB1\n", instance);
- ASN_STRUCT_FREE(asn_DEF_NR_SIB1, SI_info->sib1);
- SI_info->sib1 = NULL;
+ asn1cFreeStruc(asn_DEF_NR_SIB1, SI_info->sib1);
NR_SIB1_t *sib1 = bcch_message->message.choice.c1->choice.systemInformationBlockType1;
if(!SI_info->sib1)
SI_info->sib1 = calloc(1, sizeof(*SI_info->sib1));
@@ -707,7 +705,6 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(instance_t instance,
nr_rrc_configure_default_SI(SI_info, sib1);
// configure timers and constant
nr_rrc_set_sib1_timers_and_constants(&rrc->timers_and_constants, sib1);
- // take ServingCellConfigCommon and configure L1/L2
nr_rrc_mac_config_req_sib1(instance, 0, sib1->si_SchedulingInfo, sib1->servingCellConfigCommon);
break;
case NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformation:
@@ -1335,19 +1332,13 @@ static int nr_rrc_ue_decode_dcch(instance_t instance,
case NR_DL_DCCH_MessageType__c1_PR_rrcResume:
LOG_I(NR_RRC, "Received rrcResume on DL-DCCH-Message\n");
break;
- case NR_DL_DCCH_MessageType__c1_PR_rrcRelease: {
- struct NR_RRCRelease__criticalExtensions *ext = &c1->choice.rrcRelease->criticalExtensions;
- LOG_I(NR_RRC, "Received RRC Release (gNB %d)\n", gNB_indexP);
- MessageDef *msg_p = itti_alloc_new_message(TASK_RRC_NRUE, 0, NAS_CONN_RELEASE_IND);
- // FixMe: this code do nothing !!!!
- if (ext->present == NR_RRCRelease__criticalExtensions_PR_rrcRelease) {
- ext->choice.rrcRelease->deprioritisationReq->deprioritisationTimer =
- NR_RRCRelease_IEs__deprioritisationReq__deprioritisationTimer_min5;
- ext->choice.rrcRelease->deprioritisationReq->deprioritisationType =
- NR_RRCRelease_IEs__deprioritisationReq__deprioritisationType_frequency;
- }
- itti_send_msg_to_task(TASK_NAS_NRUE, instance, msg_p);
- } break;
+ case NR_DL_DCCH_MessageType__c1_PR_rrcRelease:
+ LOG_I(NR_RRC, "[UE %ld] Received RRC Release (gNB %d)\n",
+ instance, gNB_indexP);
+ // TODO properly implement procedures in 5.3.8.3 of 38.331
+ NR_Release_Cause_t cause = OTHER;
+ nr_rrc_going_to_IDLE(instance, cause, dl_dcch_msg->message.choice.c1->choice.rrcRelease);
+ break;
case NR_DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry:
LOG_I(NR_RRC, "Received Capability Enquiry (gNB %d)\n", gNB_indexP);
@@ -1656,28 +1647,6 @@ void *recv_msgs_from_lte_ue(void *args_p)
return NULL;
}
-void start_oai_nrue_threads()
-{
- init_queue(&nr_rach_ind_queue);
- init_queue(&nr_rx_ind_queue);
- init_queue(&nr_crc_ind_queue);
- init_queue(&nr_uci_ind_queue);
- init_queue(&nr_sfn_slot_queue);
- init_queue(&nr_chan_param_queue);
- init_queue(&nr_dl_tti_req_queue);
- init_queue(&nr_tx_req_queue);
- init_queue(&nr_ul_dci_req_queue);
- init_queue(&nr_ul_tti_req_queue);
-
- if (sem_init(&sfn_slot_semaphore, 0, 0) != 0)
- {
- LOG_E(MAC, "sem_init() error\n");
- abort();
- }
-
- init_nrUE_standalone_thread(0);
-}
-
static void nsa_rrc_ue_process_ueCapabilityEnquiry(void)
{
NR_UE_NR_Capability_t *UE_Capability_nr = NR_UE_rrc_inst[0].UECap.UE_NR_Capability = CALLOC(1, sizeof(NR_UE_NR_Capability_t));
@@ -1847,6 +1816,141 @@ static void process_lte_nsa_msg(NR_UE_RRC_INST_t *rrc, nsa_msg_t *msg, int msg_l
}
}
+void nr_rrc_going_to_IDLE(instance_t instance,
+ NR_Release_Cause_t release_cause,
+ NR_RRCRelease_t *RRCRelease)
+{
+ NR_UE_RRC_INST_t *rrc = &NR_UE_rrc_inst[instance];
+ NR_UE_Timers_Constants_t *tac = &rrc->timers_and_constants;
+
+ // if going to RRC_IDLE was triggered by reception
+ // of the RRCRelease message including a waitTime
+ NR_RejectWaitTime_t *waitTime = NULL;
+ if (RRCRelease) {
+ struct NR_RRCRelease_IEs *rrcReleaseIEs = RRCRelease->criticalExtensions.choice.rrcRelease;
+ if(rrcReleaseIEs) {
+ waitTime = rrcReleaseIEs->nonCriticalExtension ?
+ rrcReleaseIEs->nonCriticalExtension->waitTime : NULL;
+ if (waitTime) {
+ if (tac->T302_active)
+ tac->T302_cnt = 0; // stop 302
+ // start timer T302 with the value set to the waitTime
+ tac->T302_active = true;
+ tac->T302_k = *waitTime * 1000; // waitTime is in seconds
+ // TODO inform upper layers that access barring is applicable
+ // for all access categories except categories '0' and '2'.
+ LOG_E(NR_RRC,"Go to IDLE. Handling RRCRelease message including a waitTime not implemented\n");
+ }
+ }
+ }
+ if (!waitTime) {
+ if (tac->T302_active) {
+ tac->T302_cnt = 0;
+ tac->T302_active = false;
+ // TODO barring alleviation as in 5.3.14.4
+ // not implemented
+ LOG_E(NR_RRC,"Go to IDLE. Barring alleviation not implemented\n");
+ }
+ }
+ if (tac->T390_active) {
+ tac->T390_cnt = 0;
+ tac->T390_active = false;
+ // TODO barring alleviation as in 5.3.14.4
+ // not implemented
+ LOG_E(NR_RRC,"Go to IDLE. Barring alleviation not implemented\n");
+ }
+ if (!RRCRelease && rrc->nrRrcState == RRC_STATE_INACTIVE_NR) {
+ // TODO discard the cell reselection priority information provided by the cellReselectionPriorities
+ // cell reselection priorities not implemented yet
+ if (tac->T320_active) {
+ tac->T320_cnt = 0;
+ tac->T320_active = false;
+ }
+ }
+ // Stop all the timers except T302, T320 and T325
+ tac->T300_active = false;
+ tac->T300_cnt = 0;
+ tac->T301_active = false;
+ tac->T301_cnt = 0;
+ tac->T304_active = false;
+ tac->T304_cnt = 0;
+ tac->T310_active = false;
+ tac->T310_cnt = 0;
+ tac->T311_active = false;
+ tac->T311_cnt = 0;
+ tac->T319_active = false;
+ tac->T319_cnt = 0;
+
+ // discard the UE Inactive AS context
+ // TODO there is no inactive AS context
+
+ // release the suspendConfig
+ // TODO suspendConfig not handled yet
+
+ // discard the keys (only kgnb is stored)
+ memset(rrc->kgnb, 0, sizeof(rrc->kgnb));
+
+ // release all radio resources, including release of the RLC entity,
+ // the MAC configuration and the associated PDCP entity
+ // and SDAP for all established RBs
+ for (int j = 0; j < NB_CNX_UE; j++) {
+ rrcPerNB_t *nb = &rrc->perNB[j];
+ for (int i = 0; i < MAX_DRBS_PER_UE; i++) {
+ if (nb->status_DRBs[i] != RB_NOT_PRESENT) {
+ nb->status_DRBs[i] = RB_NOT_PRESENT;
+ nr_pdcp_release_drb(rrc->rnti, i);
+ }
+ }
+ for (int i = 1; i < NR_NUM_SRB; i++) {
+ if (nb->Srb[i] != RB_NOT_PRESENT) {
+ nb->Srb[i] = RB_NOT_PRESENT;
+ nr_pdcp_release_srb(rrc->rnti, i);
+ }
+ }
+ for (int i = 0; i < NR_MAX_NUM_LCID; i++) {
+ if (nb->active_RLC_entity[i]) {
+ nb->active_RLC_entity[i] = false;
+ nr_rlc_release_entity(rrc->rnti, i);
+ }
+ }
+ }
+
+ asn1cFreeStruc(asn_DEF_NR_MeasConfig, rrc->meas_config);
+ rrc->meas_config = NULL;
+
+ for (int i = 0; i < NB_CNX_UE; i++) {
+ rrcPerNB_t *nb = &rrc->perNB[i];
+ NR_UE_RRC_SI_INFO *SI_info = &nb->SInfo;
+ asn1cFreeStruc(asn_DEF_NR_SIB1, SI_info->sib1);
+ asn1cFreeStruc(asn_DEF_NR_SIB2, SI_info->sib2);
+ asn1cFreeStruc(asn_DEF_NR_SIB3, SI_info->sib3);
+ asn1cFreeStruc(asn_DEF_NR_SIB4, SI_info->sib4);
+ asn1cFreeStruc(asn_DEF_NR_SIB5, SI_info->sib5);
+ asn1cFreeStruc(asn_DEF_NR_SIB6, SI_info->sib6);
+ asn1cFreeStruc(asn_DEF_NR_SIB7, SI_info->sib7);
+ asn1cFreeStruc(asn_DEF_NR_SIB8, SI_info->sib8);
+ asn1cFreeStruc(asn_DEF_NR_SIB9, SI_info->sib9);
+ asn1cFreeStruc(asn_DEF_NR_SIB10_r16, SI_info->sib10);
+ asn1cFreeStruc(asn_DEF_NR_SIB11_r16, SI_info->sib11);
+ asn1cFreeStruc(asn_DEF_NR_SIB12_r16, SI_info->sib12);
+ asn1cFreeStruc(asn_DEF_NR_SIB13_r16, SI_info->sib13);
+ asn1cFreeStruc(asn_DEF_NR_SIB14_r16, SI_info->sib14);
+ }
+
+ // reset MAC
+ NR_UE_MAC_reset_cause_t cause = GO_TO_IDLE;
+ nr_rrc_mac_config_req_reset(instance, cause);
+
+ // enter RRC_IDLE
+ rrc->nrRrcState = RRC_STATE_IDLE_NR;
+ rrc->rnti = 0;
+
+ // Indicate the release of the RRC connection to upper layers
+ MessageDef *msg_p = itti_alloc_new_message(TASK_RRC_NRUE, 0, NR_NAS_CONN_RELEASE_IND);
+ NR_NAS_CONN_RELEASE_IND(msg_p).cause = release_cause;
+ itti_send_msg_to_task(TASK_NAS_NRUE, instance, msg_p);
+}
+
void nr_ue_rrc_timer_trigger(int instance, int frame, int gnb_id)
{
MessageDef *message_p;
diff --git a/openair2/RRC/NR_UE/rrc_defs.h b/openair2/RRC/NR_UE/rrc_defs.h
index 998f83e75c..4266716799 100644
--- a/openair2/RRC/NR_UE/rrc_defs.h
+++ b/openair2/RRC/NR_UE/rrc_defs.h
@@ -37,7 +37,7 @@
#include
#include
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "commonDef.h"
#include "common/platform_constants.h"
@@ -148,17 +148,25 @@ typedef struct NR_UE_Timers_Constants_s {
// timers status
bool T300_active;
bool T301_active;
+ bool T302_active;
bool T304_active;
bool T310_active;
bool T311_active;
bool T319_active;
+ bool T320_active;
+ bool T325_active;
+ bool T390_active;
// timers
uint32_t T300_cnt;
uint32_t T301_cnt;
+ uint32_t T302_cnt;
uint32_t T304_cnt;
uint32_t T310_cnt;
uint32_t T311_cnt;
uint32_t T319_cnt;
+ uint32_t T320_cnt;
+ uint32_t T325_cnt;
+ uint32_t T390_cnt;
// counters
uint32_t N310_cnt;
uint32_t N311_cnt;
@@ -167,10 +175,14 @@ typedef struct NR_UE_Timers_Constants_s {
uint32_t N311_k;
uint32_t T300_k;
uint32_t T301_k;
+ uint32_t T302_k;
uint32_t T304_k;
uint32_t T310_k;
uint32_t T311_k;
uint32_t T319_k;
+ uint32_t T320_k;
+ uint32_t T325_k;
+ uint32_t T390_k;
} NR_UE_Timers_Constants_t;
typedef enum {
@@ -210,7 +222,7 @@ typedef struct NR_UE_RRC_INST_s {
NR_BWP_Id_t dl_bwp_id;
NR_BWP_Id_t ul_bwp_id;
- /* KeNB as computed from parameters within USIM card */
+ /* KgNB as computed from parameters within USIM card */
uint8_t kgnb[32];
/* Used integrity/ciphering algorithms */
//RRC_LIST_TYPE(NR_SecurityAlgorithmConfig_t, NR_SecurityAlgorithmConfig) SecurityAlgorithmConfig_list;
diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h
index 2d9d19423c..1b4df0d797 100644
--- a/openair2/RRC/NR_UE/rrc_proto.h
+++ b/openair2/RRC/NR_UE/rrc_proto.h
@@ -92,6 +92,11 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
void nr_mac_rrc_sync_ind(const module_id_t module_id,
const frame_t frame,
const bool in_sync);
+
+void nr_rrc_going_to_IDLE(instance_t instance,
+ NR_Release_Cause_t release_cause,
+ NR_RRCRelease_t *RRCRelease);
+
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success);
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, int rnti);
@@ -110,7 +115,7 @@ void init_connections_with_lte_ue(void);
void nsa_sendmsg_to_lte_ue(const void *message, size_t msg_len, Rrc_Msg_Type_t msg_type);
-void start_oai_nrue_threads(void);
+extern void start_oai_nrue_threads(void);
int get_from_lte_ue_fd();
diff --git a/openair2/SDAP/nr_sdap/nr_sdap.h b/openair2/SDAP/nr_sdap/nr_sdap.h
index 5d4d907a8c..8fb313a340 100644
--- a/openair2/SDAP/nr_sdap/nr_sdap.h
+++ b/openair2/SDAP/nr_sdap/nr_sdap.h
@@ -22,7 +22,7 @@
#ifndef _NR_SDAP_GNB_H_
#define _NR_SDAP_GNB_H_
-#include "openair2/COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "common/utils/LOG/log.h"
#include "nr_sdap_entity.h"
diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
index f3f8315839..d030eca60e 100644
--- a/openair2/SDAP/nr_sdap/nr_sdap_entity.c
+++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
@@ -491,7 +491,7 @@ bool nr_sdap_delete_entity(ue_id_t ue_id, int pdusession_id)
int upperBound = 0;
if (entityPtr == NULL && (pdusession_id) * (pdusession_id - NGAP_MAX_PDU_SESSION) > 0) {
- LOG_W(SDAP, "SDAP entities not established or Invalid range of pdusession_id [0, 256].\n");
+ LOG_E(SDAP, "SDAP entities not established or Invalid range of pdusession_id [0, 256].\n");
return ret;
}
LOG_D(SDAP, "Deleting SDAP entity for UE %lx and PDU Session id %d\n", ue_id, entityPtr->pdusession_id);
@@ -516,7 +516,7 @@ bool nr_sdap_delete_entity(ue_id_t ue_id, int pdusession_id)
ret = true;
}
}
- LOG_W(SDAP, "Entity does not exist or it was not found.\n");
+ LOG_E(SDAP, "Entity does not exist or it was not found.\n");
return ret;
}
diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.h b/openair2/SDAP/nr_sdap/nr_sdap_entity.h
index 07d62a4746..0b4ae82bcb 100644
--- a/openair2/SDAP/nr_sdap/nr_sdap_entity.h
+++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.h
@@ -24,7 +24,7 @@
#include
#include
-#include "openair2/COMMON/platform_types.h"
+#include "common/platform_types.h"
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h"
#include "NR_RadioBearerConfig.h"
diff --git a/openair2/UTIL/MEM/mem_block.h b/openair2/UTIL/MEM/mem_block.h
deleted file mode 100644
index 31422d5e28..0000000000
--- a/openair2/UTIL/MEM/mem_block.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.openairinterface.org/?page_id=698
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *-------------------------------------------------------------------------------
- * For more information about the OpenAirInterface (OAI) Software Alliance:
- * contact@openairinterface.org
- */
-
-/***************************************************************************
- mem_block.h - description
- -------------------
- AUTHOR : Lionel GAUTHIER
- COMPANY : EURECOM
- EMAIL : Lionel.Gauthier@eurecom.fr
-
-
- ***************************************************************************/
-#ifndef __MEM_BLOCK_H__
-# define __MEM_BLOCK_H__
-
-#include
-#include
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include "common/platform_constants.h"
-//-----------------------------------------------------------------------------
-
-typedef struct mem_block_t {
- struct mem_block_t *next;
- struct mem_block_t *previous;
- size_t size;
- unsigned char pool_id;
- unsigned char *data;
-} mem_block_t;
-
-//-----------------------------------------------------------------------------
-
-void *pool_buffer_init (void);
-void *pool_buffer_clean (void *arg);
-void free_mem_block (mem_block_t * leP, const char* caller);
-mem_block_t* get_free_mem_block (uint32_t sizeP, const char* caller);
-mem_block_t *get_free_copy_mem_block (void);
-mem_block_t *get_free_copy_mem_block_up (void);
-mem_block_t *copy_mem_block (mem_block_t * leP, mem_block_t * destP);
-void display_mem_load (void);
-#define LIST_NAME_MAX_CHAR 32
-
-typedef struct {
- struct mem_block_t *head;
- struct mem_block_t *tail;
- int nb_elements;
- char name[LIST_NAME_MAX_CHAR];
-} list2_t;
-//-----------------------------------------------------------------------------
-typedef struct {
- struct mem_block_t *head;
- struct mem_block_t *tail;
- int nb_elements;
- char name[LIST_NAME_MAX_CHAR];
-} list_t;
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/openair2/X2AP/x2ap_timers.h b/openair2/X2AP/x2ap_timers.h
index f32b73e87b..167beaa29a 100644
--- a/openair2/X2AP/x2ap_timers.h
+++ b/openair2/X2AP/x2ap_timers.h
@@ -23,7 +23,7 @@
#define X2AP_TIMERS_H_
#include
-#include "platform_types.h"
+#include "common/platform_types.h"
typedef struct {
/* incremented every TTI (every millisecond when in realtime).
diff --git a/openair3/M3AP/m3ap_timers.h b/openair3/M3AP/m3ap_timers.h
index 95dcbfc9d9..cd0ac5d85f 100644
--- a/openair3/M3AP/m3ap_timers.h
+++ b/openair3/M3AP/m3ap_timers.h
@@ -23,7 +23,7 @@
#define M3AP_TIMERS_H_
#include
-#include "platform_types.h"
+#include "common/platform_types.h"
typedef struct {
/* incremented every TTI (every millisecond when in realtime).
diff --git a/openair3/MME_APP/mme_app.h b/openair3/MME_APP/mme_app.h
index 01a9ec615f..6e432f3cd0 100644
--- a/openair3/MME_APP/mme_app.h
+++ b/openair3/MME_APP/mme_app.h
@@ -31,8 +31,7 @@
#define MME_APP_H_
#include
-#include "platform_types.h"
-
+#include "common/platform_types.h"
void *MME_app_task(void *args_p);
diff --git a/openair3/MME_APP/mme_config.h b/openair3/MME_APP/mme_config.h
index 1afe619008..f7856b0755 100644
--- a/openair3/MME_APP/mme_config.h
+++ b/openair3/MME_APP/mme_config.h
@@ -35,7 +35,7 @@
#include
#include "commonDef.h"
-#include "platform_types.h"
+#include "common/platform_types.h"
#include "common/platform_constants.h"
#include "PHY/impl_defs_top.h"
#include "PHY/defs_eNB.h"
diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
index f83f1138b6..4b7c4cc45c 100644
--- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c
+++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
@@ -1137,14 +1137,19 @@ void *nas_nrue(void *args_p)
break;
}
- case NAS_CONN_RELEASE_IND:
- LOG_I(NAS, "[UE %ld] Received %s: cause %u\n", instance, ITTI_MSG_NAME(msg_p), NAS_CONN_RELEASE_IND(msg_p).cause);
- /* the following is not clean, but probably necessary: we need to give
- * time to RLC to Ack the SRB1 PDU which contained the RRC release
- * message. Hence, we just below wait some time, before finally
- * unblocking the nr-uesoftmodem, which will terminate the process. */
- usleep(100000);
- itti_wait_tasks_unblock(); /* will unblock ITTI to stop nr-uesoftmodem */
+ case NR_NAS_CONN_RELEASE_IND:
+ LOG_I(NAS, "[UE %ld] Received %s: cause %u\n",
+ instance, ITTI_MSG_NAME (msg_p), NR_NAS_CONN_RELEASE_IND (msg_p).cause);
+ nr_ue_nas_t *nas = get_ue_nas_info(0);
+ // TODO handle connection release
+ if (nas->termination_procedure) {
+ /* the following is not clean, but probably necessary: we need to give
+ * time to RLC to Ack the SRB1 PDU which contained the RRC release
+ * message. Hence, we just below wait some time, before finally
+ * unblocking the nr-uesoftmodem, which will terminate the process. */
+ usleep(100000);
+ itti_wait_tasks_unblock(); /* will unblock ITTI to stop nr-uesoftmodem */
+ }
break;
case NAS_UPLINK_DATA_CNF:
@@ -1162,6 +1167,8 @@ void *nas_nrue(void *args_p)
nr_ue_nas_t *nas = get_ue_nas_info(0);
if (nas->guti) {
nas_deregistration_req_t *req = &NAS_DEREGISTRATION_REQ(msg_p);
+ if (req->cause == AS_DETACH)
+ nas->termination_procedure = true;
as_nas_info_t initialNasMsg = {0};
generateDeregistrationRequest(nas, &initialNasMsg, req);
send_nas_uplink_data_req(instance, &initialNasMsg);
diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.h b/openair3/NAS/NR_UE/nr_nas_msg_sim.h
index b1a1d25d1e..b5bb026c0b 100644
--- a/openair3/NAS/NR_UE/nr_nas_msg_sim.h
+++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.h
@@ -98,6 +98,7 @@ typedef struct {
uicc_t *uicc;
ue_sa_security_key_t security;
Guti5GSMobileIdentity_t *guti;
+ bool termination_procedure;
} nr_ue_nas_t;
typedef enum fgs_protocol_discriminator_e {
diff --git a/openair3/NAS/TOOLS/conf_emm.c b/openair3/NAS/TOOLS/conf_emm.c
index 668b90a0ae..894cd2d1ec 100644
--- a/openair3/NAS/TOOLS/conf_emm.c
+++ b/openair3/NAS/TOOLS/conf_emm.c
@@ -1,6 +1,6 @@
#include
-#include "memory.h"
+#include "common/utils/mem/oai_memory.h"
#include "conf_emm.h"
#include "fs.h"
diff --git a/openair3/NAS/TOOLS/conf_user_data.c b/openair3/NAS/TOOLS/conf_user_data.c
index 5e14797e16..621fe6c601 100644
--- a/openair3/NAS/TOOLS/conf_user_data.c
+++ b/openair3/NAS/TOOLS/conf_user_data.c
@@ -2,7 +2,7 @@
#include
#include "commonDef.h"
-#include "memory.h"
+#include "common/utils/mem/oai_memory.h"
#include "fs.h"
#include "conf_user_data.h"
diff --git a/openair3/NAS/TOOLS/display.c b/openair3/NAS/TOOLS/display.c
index 0828eeb673..d5396f87f9 100644
--- a/openair3/NAS/TOOLS/display.c
+++ b/openair3/NAS/TOOLS/display.c
@@ -5,7 +5,7 @@
#include "usim_api.h"
#include "emmData.h"
#include "display.h"
-#include "memory.h"
+#include "common/utils/mem/oai_memory.h"
#include "fs.h"
#define PRINT_PLMN_DIGIT(d) if ((d) != 0xf) printf("%u", (d))
diff --git a/openair3/NAS/UE/API/USIM/usim_api.c b/openair3/NAS/UE/API/USIM/usim_api.c
index 7facdaba79..be66e4a810 100644
--- a/openair3/NAS/UE/API/USIM/usim_api.c
+++ b/openair3/NAS/UE/API/USIM/usim_api.c
@@ -38,16 +38,14 @@ Description Implements the API used by the NAS layer to read/write
*****************************************************************************/
-
+#include
+#include // memcpy, memset
+#include // malloc, free
#include "usim_api.h"
#include "nas_log.h"
#include "utils.h"
-#include "memory.h"
-#include
+#include "common/utils/mem/oai_memory.h"
#include "aka_functions.h"
-#include // memcpy, memset
-#include // malloc, free
-#include
/****************************************************************************/
/**************** E X T E R N A L D E F I N I T I O N S ****************/
diff --git a/openair3/NAS/UE/EMM/emm_main.c b/openair3/NAS/UE/EMM/emm_main.c
index ec5babc540..3deabbe9be 100644
--- a/openair3/NAS/UE/EMM/emm_main.c
+++ b/openair3/NAS/UE/EMM/emm_main.c
@@ -37,6 +37,9 @@ Description Defines the EPS Mobility Management procedure call manager,
*****************************************************************************/
+#include // memset, memcpy, strlen
+#include // sprintf
+#include // malloc, free
#include "emm_main.h"
#include "nas_log.h"
#include "utils.h"
@@ -44,13 +47,9 @@ Description Defines the EPS Mobility Management procedure call manager,
#include "MobileIdentity.h"
#include "emm_proc_defs.h"
-#include "memory.h"
#include "usim_api.h"
#include "IdleMode.h"
-
-#include // memset, memcpy, strlen
-#include // sprintf
-#include // malloc, free
+#include "common/utils/mem/oai_memory.h"
/****************************************************************************/
/**************** E X T E R N A L D E F I N I T I O N S ****************/
diff --git a/openair3/NAS/UE/nas_ue_task.c b/openair3/NAS/UE/nas_ue_task.c
index fbd7a1365e..33c585bcc3 100644
--- a/openair3/NAS/UE/nas_ue_task.c
+++ b/openair3/NAS/UE/nas_ue_task.c
@@ -29,7 +29,7 @@
# include "user_api.h"
# include "nas_parser.h"
# include "nas_proc.h"
-# include "memory.h"
+#include "common/utils/mem/oai_memory.h"
#include "nas_user.h"
#include "common/ran_context.h"
diff --git a/openair3/NAS/UE/nas_user.c b/openair3/NAS/UE/nas_user.c
index fba70e1db4..57327802f3 100644
--- a/openair3/NAS/UE/nas_user.c
+++ b/openair3/NAS/UE/nas_user.c
@@ -39,7 +39,7 @@ Description NAS procedure functions triggered by the user
#include "user_defs.h"
#include "nas_log.h"
-#include "memory.h"
+#include "common/utils/mem/oai_memory.h"
#include "at_command.h"
#include "at_response.h"
diff --git a/openair3/UTILS/CONF/COPYING b/openair3/UTILS/CONF/COPYING
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp
index 69db8caa4a..9fb8f159fe 100644
--- a/openair3/ocp-gtpu/gtp_itf.cpp
+++ b/openair3/ocp-gtpu/gtp_itf.cpp
@@ -10,7 +10,7 @@ extern "C" {
#include
#include
-#include
+#include "common/platform_types.h"
#include
#include "common/utils/LOG/log.h"
#include
@@ -940,7 +940,7 @@ static int Gtpv1uHandleError(int h,
uint32_t msgBufLen,
uint16_t peerPort,
uint32_t peerIp) {
- LOG_E(GTPU, "Handle error to be dev\n");
+ LOG_E(GTPU, "Received GTP error indication (error handling is missing/not implemented)\n");
int rc = GTPNOK;
return rc;
}
diff --git a/openair3/ocp-gtpu/gtp_itf.h b/openair3/ocp-gtpu/gtp_itf.h
index 7ac025f14a..ce806f0bfc 100644
--- a/openair3/ocp-gtpu/gtp_itf.h
+++ b/openair3/ocp-gtpu/gtp_itf.h
@@ -4,6 +4,8 @@
#define GTPNOK -1
# define GTPU_HEADER_OVERHEAD_MAX 64
+
+#include "common/utils/hashtable/hashtable.h"
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/radio/rfsimulator/simulator.c b/radio/rfsimulator/simulator.c
index 1111e48e6b..5dea88edd5 100644
--- a/radio/rfsimulator/simulator.c
+++ b/radio/rfsimulator/simulator.c
@@ -314,7 +314,7 @@ static void fullwrite(int fd, void *_buf, ssize_t count, rfsimulator_state_t *t)
continue;
if (errno == EAGAIN) {
- LOG_E(HW, "write() failed, errno(%d)\n", errno);
+ LOG_D(HW, "write() failed, errno(%d)\n", errno);
usleep(250);
continue;
} else
diff --git a/targets/TEST/PDCP/test_pdcp.c b/targets/TEST/PDCP/test_pdcp.c
index f5f34daec6..fb8259bbde 100644
--- a/targets/TEST/PDCP/test_pdcp.c
+++ b/targets/TEST/PDCP/test_pdcp.c
@@ -217,7 +217,7 @@ bool test_pdcp_data_req(void)
unsigned int index = 0;
/*
- * Create an unsigned char buffer out of mem_block_t
+ * Create an unsigned char buffer out of uint8_t
*/
pdcp_test_pdu_buffer = (unsigned char*) calloc(1, pdcp_test_pdu_buffer_size);
@@ -244,8 +244,8 @@ bool test_pdcp_data_req(void)
msg("[TEST] Starting to dissect PDU created by PDCP...\n");
/*
- * XXX mem_block_t doesn't hold buffer size, how do we keep the size
- * information if we pass mem_block_ts via a linked list?
+ * XXX uint8_t doesn't hold buffer size, how do we keep the size
+ * information if we pass uint8_ts via a linked list?
*/
if (pdcp_test_pdu_buffer_size == 0 ) {
@@ -254,11 +254,11 @@ bool test_pdcp_data_req(void)
}
/*
- * Serialize incoming mem_block_t into an unsigned character array
+ * Serialize incoming uint8_t into an unsigned character array
* and add removed PDU to RX list in order to use it in the next test
* (test_pdcp_data_ind())
*/
- mem_block_t* pdcp_test_pdu = list_remove_head(&test_pdu_tx_list);
+ uint8_t* pdcp_test_pdu = list_remove_head(&test_pdu_tx_list);
memcpy(pdcp_test_pdu_buffer, pdcp_test_pdu->data, pdcp_test_pdu_buffer_size);
list_add_tail_eurecom(pdcp_test_pdu, &test_pdu_rx_list);
@@ -314,7 +314,7 @@ bool test_pdcp_data_ind(void)
* every single element in the list
*/
list_t test_pdu_indication_list;
- mem_block_t* test_sdu = NULL;
+ uint8_t* test_sdu = NULL;
/*
* pdcp_data_req() method prepended PDU header in front of DUMMY_BUFFER so
* the size should be 12 bytes
@@ -354,7 +354,7 @@ bool test_pdcp_data_ind(void)
/*
* Get pdcp_data_ind_header_t added by pdcp_data_ind()
*/
- mem_block_t* test_data_ind_header = list_remove_head(&test_pdu_indication_list);
+ uint8_t* test_data_ind_header = list_remove_head(&test_pdu_indication_list);
if (test_data_ind_header == NULL) {
msg("[TEST] Data indication header is not valid!\n");
diff --git a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c
index d2a0d4c6dc..7116f696dc 100644
--- a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c
+++ b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c
@@ -112,8 +112,8 @@ bool init_pdcp_entity(pdcp_t *pdcp_entity);
//-----------------------------------------------------------------------------
void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_data_req *data_requestP, int* drop_countP, int *tx_packetsP, int* dropped_tx_packetsP) //-----------------------------------------------------------------------------
{
- mem_block_t* tb_src;
- mem_block_t* tb_dst;
+ uint8_t *tb_src;
+ uint8_t *tb_dst;
unsigned int tb_size;
data_indP->no_tb = 0;
@@ -130,7 +130,7 @@ void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_dat
*tx_packetsP = *tx_packetsP + 1;
if (*drop_countP == 0) {
- tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size, __func__);
+ tb_dst = malloc16(sizeof(mac_rlc_max_rx_header_size_t) + tb_size);
if (tb_dst != NULL) {
((struct mac_tb_ind *) (tb_dst->data))->first_bit = 0;
@@ -154,7 +154,7 @@ void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_dat
*dropped_tx_packetsP = *dropped_tx_packetsP + 1;
}
- free_mem_block(tb_src, __func__);
+ free(tb_src);
if (data_indP->no_tb > 0) {
printf("[RLC-LOOP] Exchange %d TBs\n",data_indP->no_tb);