diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4c2baa4de3..27a7c471d5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1216,6 +1216,10 @@ set(NR_PDCP_SRC
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_integrity_nia2.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.c
${OPENAIR2_DIR}/LAYER2/nr_pdcp/asn1_utils.c
+ openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
+ openair2/LAYER2/nr_pdcp/cuup_cucp_if.c
+ openair2/LAYER2/nr_pdcp/cuup_cucp_direct.c
+ openair2/LAYER2/nr_pdcp/cuup_cucp_e1ap.c
)
set(NR_SDAP_SRC
@@ -1277,6 +1281,7 @@ set(L2_NR_SRC
${NR_RRC_DIR}/rrc_gNB_UE_context.c
${NR_RRC_DIR}/rrc_gNB_NGAP.c
${NR_RRC_DIR}/rrc_gNB_radio_bearers.c
+ ${NR_RRC_DIR}/rrc_gNB_cuup.c
)
set(L2_SRC_UE
@@ -1445,12 +1450,6 @@ add_library(e1_if
target_link_libraries(e1_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap SECURITY ${OPENSSL_LIBRARIES} e1ap GTPV1U)
-add_library(e1_pdcp_if
- ${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_e1_api.c
- )
-
-target_link_libraries(e1_pdcp_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
-
target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc)
if(E2_AGENT)
target_link_libraries(L2_NR PUBLIC e2_agent e2_ran_func)
@@ -2106,7 +2105,7 @@ add_executable(nr-cuup
target_link_libraries(nr-cuup PRIVATE
CONFIG_LIB ITTI SCTP_CLIENT
- GTPV1U e1ap e1_pdcp_if f1ap SIMU_ETH
+ GTPV1U e1ap f1ap SIMU_ETH
z sctp dl pthread shlib_loader ${T_LIB})
target_link_libraries(nr-cuup PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
diff --git a/ci-scripts/ci_ueinfra.yaml b/ci-scripts/ci_ueinfra.yaml
index fc3cd03149..af49df4161 100644
--- a/ci-scripts/ci_ueinfra.yaml
+++ b/ci-scripts/ci_ueinfra.yaml
@@ -161,6 +161,78 @@ rfsim5g_ue2:
DetachScript: docker stop rfsim5g-oai-nr-ue2
MTU: 1500
+rfsim5g_ue3:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue3 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue3
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue3
+ DetachScript: docker stop rfsim5g-oai-nr-ue3
+ MTU: 1500
+
+rfsim5g_ue4:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue4 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue4
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue4
+ DetachScript: docker stop rfsim5g-oai-nr-ue4
+ MTU: 1500
+
+rfsim5g_ue5:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue5 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue5
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue5
+ DetachScript: docker stop rfsim5g-oai-nr-ue5
+ MTU: 1500
+
+rfsim5g_ue6:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue6 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue6
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue6
+ DetachScript: docker stop rfsim5g-oai-nr-ue6
+ MTU: 1500
+
+rfsim5g_ue7:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue7 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue7
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue7
+ DetachScript: docker stop rfsim5g-oai-nr-ue7
+ MTU: 1500
+
+rfsim5g_ue8:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue8 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue8
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue8
+ DetachScript: docker stop rfsim5g-oai-nr-ue8
+ MTU: 1500
+
+rfsim5g_ue9:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue9 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue9
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue9
+ DetachScript: docker stop rfsim5g-oai-nr-ue9
+ MTU: 1500
+
+rfsim5g_ue10:
+ Host: localhost
+ NetworkScript: docker exec rfsim5g-oai-nr-ue10 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec rfsim5g-oai-nr-ue10
+ IF: oaitun_ue1
+ AttachScript: docker start rfsim5g-oai-nr-ue10
+ DetachScript: docker stop rfsim5g-oai-nr-ue10
+ MTU: 1500
+
rfsim5g_ext_dn:
Host: localhost
NetworkScript: docker exec rfsim5g-oai-ext-dn ip a show dev eth0
diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index dab8b0b64c..bc6b36bd8b 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -289,6 +289,7 @@ class Containerize():
self.proxyCommit = None
self.eNB_instance = 0
self.eNB_serverId = ['', '', '']
+ self.deployKind = [True, True, True]
self.yamlPath = ['', '', '']
self.services = ['', '', '']
self.nb_healthy = [0, 0, 0]
@@ -835,6 +836,7 @@ class Containerize():
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
logging.debug('\u001B[1m Deploying OAI Object on server: ' + lIpAddr + '\u001B[0m')
+ self.deployKind[self.eNB_instance] = True
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
@@ -1037,6 +1039,7 @@ class Containerize():
logging.debug('\u001B[1m Checking Services to deploy\u001B[0m')
# Implicitly we are running locally
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
+ self.deployKind[0] = False
cmd = 'docker-compose config --services'
listServices = myCmd.run(cmd)
if listServices.returncode != 0:
diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py
index d7a8ccfdd9..d7fecf8397 100644
--- a/ci-scripts/cls_oaicitest.py
+++ b/ci-scripts/cls_oaicitest.py
@@ -43,7 +43,7 @@ import logging
import datetime
import signal
import statistics as stat
-from multiprocessing import SimpleQueue
+from multiprocessing import SimpleQueue, Lock
import concurrent.futures
#import our libs
@@ -494,7 +494,7 @@ class OaiCiTest():
messages = [f.result() for f in futures]
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
- def Ping_common(self, EPC, ue, RAN):
+ def Ping_common(self, EPC, ue, RAN, printLock):
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
ping_status = 0
ueIP = ue.getIP()
@@ -551,6 +551,8 @@ class OaiCiTest():
avg_msg = f'RTT(Avg) : {rtt_avg} ms'
max_msg = f'RTT(Max) : {rtt_max} ms'
+ # adding a lock for cleaner display in command line
+ printLock.acquire()
logging.info(f'\u001B[1;37;44m ping result for {ue_header} \u001B[0m')
logging.info(f'\u001B[1;34m {pal_msg} \u001B[0m')
logging.info(f'\u001B[1;34m {min_msg} \u001B[0m')
@@ -563,6 +565,7 @@ class OaiCiTest():
if float(packetloss) > float(self.ping_packetloss_threshold):
message += '\nPacket Loss too high'
logging.error(f'\u001B[1;37;41m Packet Loss too high; Target: {self.ping_packetloss_threshold}%\u001B[0m')
+ printLock.release()
return (False, message)
elif float(packetloss) > 0:
message += '\nPacket Loss is not 0%'
@@ -573,7 +576,9 @@ class OaiCiTest():
ping_rttavg_error_msg = f'RTT(Avg) too high: {rtt_avg} ms; Target: {self.ping_rttavg_threshold} ms'
message += f'\n {ping_rttavg_error_msg}'
logging.error('\u001B[1;37;41m'+ ping_rttavg_error_msg +' \u001B[0m')
+ printLock.release()
return (False, message)
+ printLock.release()
return (True, message)
@@ -587,8 +592,9 @@ class OaiCiTest():
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
logging.debug(ues)
+ pingLock = Lock()
with concurrent.futures.ThreadPoolExecutor() as executor:
- futures = [executor.submit(self.Ping_common, EPC, ue, RAN) for ue in ues]
+ futures = [executor.submit(self.Ping_common, EPC, ue, RAN, pingLock) for ue in ues]
results = [f.result() for f in futures]
# each result in results is a tuple, first member goes to successes, second to messages
successes, messages = map(list, zip(*results))
@@ -1358,7 +1364,10 @@ class OaiCiTest():
for instance in range(0, len(CONTAINERS.yamlPath)):
if CONTAINERS.yamlPath[instance]!='':
CONTAINERS.eNB_instance=instance
- CONTAINERS.UndeployObject(HTML,RAN)
+ if CONTAINERS.deployKind[instance]:
+ CONTAINERS.UndeployObject(HTML,RAN)
+ else:
+ CONTAINERS.UndeployGenObject(HTML,RAN, self)
RAN.prematureExit=True
#this function is called only if eNB/gNB fails to start
@@ -1385,7 +1394,10 @@ class OaiCiTest():
for instance in range(0, len(CONTAINERS.yamlPath)):
if CONTAINERS.yamlPath[instance]!='':
CONTAINERS.eNB_instance=instance
- CONTAINERS.UndeployObject(HTML,RAN)
+ if CONTAINERS.deployKind[instance]:
+ CONTAINERS.UndeployObject(HTML,RAN)
+ else:
+ CONTAINERS.UndeployGenObject(HTML,RAN,self)
RAN.prematureExit=True
def IdleSleep(self,HTML):
diff --git a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf
index 5eb123dba1..469ab8d187 100644
--- a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf
+++ b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf
@@ -8,7 +8,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
diff --git a/ci-scripts/conf_files/gnb-cucp.sa.f1.quectel.conf b/ci-scripts/conf_files/gnb-cucp.sa.f1.quectel.conf
index 9d0c13cd74..8b9e865e0d 100644
--- a/ci-scripts/conf_files/gnb-cucp.sa.f1.quectel.conf
+++ b/ci-scripts/conf_files/gnb-cucp.sa.f1.quectel.conf
@@ -8,7 +8,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
diff --git a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf
index 6759654e0d..357518bcf2 100644
--- a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf
+++ b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf
@@ -7,7 +7,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
@@ -56,32 +56,9 @@ gNBs =
}
);
-security = {
- # preferred ciphering algorithms
- # the first one of the list that an UE supports in chosen
- # valid values: nea0, nea1, nea2, nea3
- ciphering_algorithms = ( "nea0" );
-
- # preferred integrity algorithms
- # the first one of the list that an UE supports in chosen
- # valid values: nia0, nia1, nia2, nia3
- integrity_algorithms = ( "nia2", "nia0" );
-
- # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
- # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
- drb_ciphering = "yes";
- drb_integrity = "no";
+log_config : {
+ global_log_level = "info";
+ pdcp_log_level = "info";
+ f1ap_log_level = "info";
+ ngap_log_level = "info";
};
- log_config :
- {
- global_log_level ="info";
- hw_log_level ="info";
- phy_log_level ="info";
- mac_log_level ="info";
- rlc_log_level ="debug";
- pdcp_log_level ="info";
- rrc_log_level ="info";
- f1ap_log_level ="info";
- ngap_log_level ="debug";
- };
-
diff --git a/ci-scripts/conf_files/gnb-cuup.sa.f1.quectel.conf b/ci-scripts/conf_files/gnb-cuup.sa.f1.quectel.conf
index 535ef68bd0..4e65547db9 100644
--- a/ci-scripts/conf_files/gnb-cuup.sa.f1.quectel.conf
+++ b/ci-scripts/conf_files/gnb-cuup.sa.f1.quectel.conf
@@ -7,7 +7,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
@@ -56,23 +56,6 @@ gNBs =
}
);
-security = {
- # preferred ciphering algorithms
- # the first one of the list that an UE supports in chosen
- # valid values: nea0, nea1, nea2, nea3
- ciphering_algorithms = ( "nea0" );
-
- # preferred integrity algorithms
- # the first one of the list that an UE supports in chosen
- # valid values: nia0, nia1, nia2, nia3
- integrity_algorithms = ( "nia2", "nia0" );
-
- # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
- # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
- drb_ciphering = "yes";
- drb_integrity = "no";
-};
-
log_config: {
global_log_level = "info";
};
diff --git a/ci-scripts/conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf b/ci-scripts/conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf
index a1e66c7ade..eb664f1ccb 100644
--- a/ci-scripts/conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf
+++ b/ci-scripts/conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf
@@ -6,7 +6,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
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 4f615b8dba..dcdb8307dc 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
@@ -10,7 +10,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
gNB_name = "gNB-Eurecom-n78_20";
diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml
index 36cbf21dc0..7c755ab184 100644
--- a/ci-scripts/xml_files/container_5g_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_rfsim.xml
@@ -33,10 +33,15 @@
000002
000003
000004
+ 000005
+ 000006
+ 000007
020001
020002
020003
020004
+ 020105
+ 444445
030001
030002
444444
@@ -44,7 +49,7 @@
020005
444444
333333
- 020005
+ 020006
100001
@@ -96,6 +101,30 @@
9
+
+ DeployGenObject
+ Deploy OAI 5G NR-UEs (#3, #4, #5) RF sim SA
+ yaml_files/5g_rfsimulator
+ oai-nr-ue3 oai-nr-ue4 oai-nr-ue5
+ 12
+
+
+
+ DeployGenObject
+ Deploy OAI 5G NR-UEs (#6, #7, #8) RF sim SA
+ yaml_files/5g_rfsimulator
+ oai-nr-ue6 oai-nr-ue7 oai-nr-ue8
+ 15
+
+
+
+ DeployGenObject
+ Deploy OAI 5G NR-UEs (#9, #10) RF sim SA
+ yaml_files/5g_rfsimulator
+ oai-nr-ue9 oai-nr-ue10
+ 17
+
+
Ping
Ping ext-dn from NR-UE
@@ -136,6 +165,22 @@
5
+
+ Ping
+ Ping ext-dn from both UEs
+ rfsim5g_ue rfsim5g_ue2
+ -c 20 192.168.72.135
+ 5
+
+
+
+ Ping
+ Ping ext-dn from all UEs
+ rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10
+ -c 100 192.168.72.135 -i 0.2 -s 1016
+ 5
+
+
IperfFromContainer
Iperf UDP Downlink
@@ -166,6 +211,12 @@
rfsim5g_ue rfsim5g_ue2
+
+ Detach_UE
+ Detach OAI UE 2 to 10
+ rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10
+
+
UndeployGenObject
Undeploy all OAI 5G stack
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
index 21792e35bf..bbdfe7d1f4 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
@@ -184,7 +184,7 @@ services:
image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true
container_name: rfsim5g-oai-nr-ue
- environment:
+ environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on:
- oai-gnb
@@ -198,12 +198,11 @@ services:
interval: 10s
timeout: 5s
retries: 5
-
oai-nr-ue2:
image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true
container_name: rfsim5g-oai-nr-ue2
- environment:
+ environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on:
- oai-gnb
@@ -217,6 +216,150 @@ services:
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: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.152
+ 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-ue4:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue4
+ environment:
+ USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001103 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.153
+ 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-ue5:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue5
+ environment:
+ USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001104 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.154
+ 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-ue6:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue6
+ environment:
+ USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001105 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.155
+ 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-ue7:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue7
+ environment:
+ USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001106 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.156
+ 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-ue8:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue8
+ environment:
+ USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001107 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.157
+ 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-ue9:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue9
+ environment:
+ USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001108 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.158
+ 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-ue10:
+ image: oaisoftwarealliance/oai-nr-ue:develop
+ privileged: true
+ container_name: rfsim5g-oai-nr-ue10
+ environment:
+ USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001109 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
+ depends_on:
+ - oai-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.159
+ 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
networks:
public_net:
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/oai_db.sql b/ci-scripts/yaml_files/5g_rfsimulator/oai_db.sql
index 75f586c299..ec5e497e88 100755
--- a/ci-scripts/yaml_files/5g_rfsimulator/oai_db.sql
+++ b/ci-scripts/yaml_files/5g_rfsimulator/oai_db.sql
@@ -193,6 +193,20 @@ LOCK TABLES `users` WRITE;
INSERT INTO `users` VALUES ('20834123456789','380561234567','35609204079300',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,'+�E��ų\0�,IH��H',0,0,00000000000000000096,'Px�X \Z1��x��','^��K�����FeU���'),('20810000001234','33611123456','35609204079299',NULL,'PURGED',120,40000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000281454575616225,'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0','�4�s@���z��~�'),('31002890832150','33638060059','35611302209414',NULL,'PURGED',120,40000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012416,'`�F�݆��D��ϛ���','�4�s@���z��~�'),('001010123456789','33600101789','35609204079298',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'\0 \n\r',1,0,00000000000000000351,'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0','L�*\\�����^��]� '),('208930000000001','33638030001','35609204079301',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208950000000002','33638050002','35609204079502',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000020471,'\0 \n\r','�4�s@���z��~�'),('208950000000003','33638050003','35609204079503',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012343,'\0 \n\r','�4�s@���z��~�'),('208950000000004','33638050004','35609204079504',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000005','33638050005','35609204079505',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000001','33638050001','35609204079501',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208950000000006','33638050006','35609204079506',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000007','33638050007','35609204079507',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208930000000002','33638030002','35609204079302',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208930000000003','33638030003','35609204079303',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208930000000004','33638030004','35609204079304',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208930000000005','33638030005','35609204079305',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208930000000006','33638030006','35609204079306',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208930000000007','33638030007','35609204079307',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208940000000007','33638040007','35609204079407',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208940000000006','33638040006','35609204079406',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208940000000005','33638040005','35609204079405',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208940000000004','33638040004','35609204079404',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208940000000003','33638040003','35609204079403',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208940000000002','33638040002','35609204079402',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208940000000001','33638040001','35609204079401',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'��wq��gzW�Ё��Z]','�4�s@���z��~�'),('208920100001100','33638020001','35609204079201',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001101','33638020001','35609204079201',NULL,'NOT_PURGED',120,50000000,100000000,47,0000000000,1,'��k��p~Љu{�K�',1,0,00000281044204937234,'\0 \n\r','�$I6;��+f�k�u�|�'),('208920100001102','33638020002','35609204079202',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001103','33638020003','35609204079203',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001104','33638020004','35609204079204',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001105','33638020005','35609204079205',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001106','33638020006','35609204079206',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��k��p~Љu{�K�',1,0,00000000000000006103,'ebd07771ace8677a','�$I6;��+f�k�u�|�'),('208920100001107','33638020007','35609204079207',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001108','33638020008','35609204079208',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001109','33638020009','35609204079209',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208920100001110','33638020010','35609204079210',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208930100001111','33638030011','35609304079211',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208930100001112','33638030012','35609304079212',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006103,'ebd07771ace8677a','�4�s@���z��~�'),('208930100001113','33638030013','35609304079213',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000006263,'�SNܒ�Iv��e�6','�4�s@���z��~�'),('208950000000008','33638050008','35609204079508',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000009','33638050009','35609204079509',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000010','33638050010','35609204079510',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000011','33638050011','35609204079511',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000012','33638050012','35609204079512',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000013','33638050013','35609204079513',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000014','33638050014','35609204079514',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000012215,'56f0261d9d051063','�4�s@���z��~�'),('208950000000015','33638050015','35609204079515',NULL,'PURGED',120,50000000,100000000,47,0000000000,1,'��G?/�Д���� |hb',1,0,00000000000000000000,'3536663032363164','�4�s@���z��~�'),('208920100001118','33638020010','35609204079210',NULL,'NOT_PURGED',120,50000000,100000000,47,0000000000,1,'��k��p~Љu{�K�',1,0,00000281044204934762,'~?03�u-%�ey�y�','�$I6;��+f�k�u�|�'),('208920100001121','33638020010','35609204079210',NULL,'NOT_PURGED',120,50000000,100000000,47,0000000000,1,'��k��p~Љu{�K�',1,0,00000281044204935293,'&��@xg�]���\n��Vp','�$I6;��+f�k�u�|�'),('208920100001119','33638020010','35609204079210',NULL,'NOT_PURGED',120,50000000,100000000,47,0000000000,1,'��k��p~Љu{�K�',1,0,00000281044204935293,'269482407867805d','�$I6;��+f�k�u�|�'),('208920100001120','33638020010','35609204079210',NULL,'NOT_PURGED',120,50000000,100000000,47,0000000000,1,'��k��p~Љu{�K�',1,0,00000281044204935293,'3236393438323430','�$I6;��+f�k�u�|�');
INSERT INTO `users` VALUES ('208990100001100','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
INSERT INTO `users` VALUES ('208990100001101','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001102','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001103','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001104','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001105','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001106','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001107','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001108','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001109','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001110','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001111','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001112','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001113','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001114','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+INSERT INTO `users` VALUES ('208990100001115','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
INSERT INTO `users` VALUES ('208950000000031','380561234567','55000000000001',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0x0C0A34601D4F07677303652C0462535B,0,0,0x40,'ebd07771ace8677a',0x63bfa50ee6523365ff14c1f45f88737d);
INSERT INTO `users` VALUES ('208950000000032','380561234567','55000000000001',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0x0C0A34601D4F07677303652C0462535B,0,0,0x40,'ebd07771ace8677a',0x63bfa50ee6523365ff14c1f45f88737d);
INSERT INTO `users` VALUES ('208950000000033','380561234567','55000000000001',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0x0C0A34601D4F07677303652C0462535B,0,0,0x40,'ebd07771ace8677a',0x63bfa50ee6523365ff14c1f45f88737d);
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index dbceb680a2..8de83f473d 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -338,10 +338,11 @@ function main() {
echo_info "Will compile with verbose instructions"
shift;;
--build-doxygen)
- CMAKE_CMD="$CMAKE_CMD -DGENERATE_DOXYGEN=ON"
- BUILD_DOXYGEN=1
- echo_info "Will build doxygen support"
- shift;;
+ CMAKE_CMD="$CMAKE_CMD -DGENERATE_DOXYGEN=ON"
+ TARGET_LIST="$TARGET_LIST doc"
+ BUILD_DOXYGEN=1
+ echo_info "Will build doxygen support"
+ shift;;
--disable-T-Tracer)
CMAKE_CMD="$CMAKE_CMD -DT_TRACER=False"
echo_info "Disabling the T tracer"
@@ -490,6 +491,12 @@ function main() {
echo_info "Running \"$CMAKE_CMD\""
eval $CMAKE_CMD
compilations $BUILD_DIR all.txt $TARGET_LIST
+ ###################
+ # Doxygen Support #
+ ###################
+ if [ "$BUILD_DOXYGEN" = "1" ] ; then
+ echo_info "Built Doxygen based documentation. The documentation file is located here: $OPENAIR_DIR/$BUILD_DIR/build/html/index.html"
+ fi
if [ "$UE" = 1 ] ; then
@@ -513,18 +520,6 @@ function main() {
fi
fi
- ###################
- # Doxygen Support #
- ###################
- if [ "$BUILD_DOXYGEN" = "1" ] ; then
- doxygen_log=$OPENAIR_DIR/cmake_targets/log/doxygen.log
- echo_info "Building Doxygen based documentation. The documentation file is located here: $OPENAIR_DIR/targets/DOCS/html/index.html"
- echo_info "Doxygen generation log is located here: $doxygen_log"
- echo_info "Generating Doxygen files....please wait"
- (
- $CMAKE --build . --target doc
- ) >& $doxygen_log
- fi
##############
# Auto-tests #
diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c
index bd5f835a51..2e9b44cce8 100644
--- a/common/config/config_cmdline.c
+++ b/common/config/config_cmdline.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file common/config/cmdline/config_libconfig.c
+/*! \file config_cmdline.c
* \brief configuration module, command line parsing implementation
* \author Francois TABURET
* \date 2017
diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h
index 37b89398cb..0004525d3c 100644
--- a/common/utils/LOG/log.h
+++ b/common/utils/LOG/log.h
@@ -64,23 +64,13 @@
extern "C" {
#endif
-/** @defgroup _LOG LOG Generator
- * @{*/
-/* @}*/
-
-/** @defgroup _macro Macro Definition
- * @ingroup _LOG
- * @brief these macros are used in the code of LOG
- * @{*/
-/* @}*/
-
/** @defgroup _max_length Maximum Length of LOG
* @ingroup _macro
* @brief the macros that describe the maximum length of LOG
* @{*/
#define MAX_LOG_TOTAL 16384 /*!< \brief the maximum length of a log */
-/* @}*/
+/** @}*/
/** @defgroup _log_level Message levels defined by LOG
* @ingroup _macro
@@ -95,8 +85,7 @@ extern "C" {
# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers, likely impact real-time behavior*/
#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
-/* @}*/
-
+/** @}*/
/** @defgroup _log_format Defined log format
* @ingroup _macro
@@ -112,15 +101,6 @@ extern "C" {
#define LOG_BLUE "\033[34m" /*!< \brief VT100 sequence for blue foreground */
#define LOG_CYBL "\033[40;36m" /*!< \brief VT100 sequence for cyan foreground on black background */
#define LOG_RESET "\033[0m" /*!< \brief VT100 sequence for reset (black) foreground */
-/* @}*/
-
-
-/** @defgroup _syslog_conf Macros for write in syslog.conf
- * @ingroup _macro
- * @brief Macros used to write lines (local/remote) in syslog.conf
- * @{*/
-
-
#define FLAG_NOCOLOR 0x0001 /*!< \brief use colors in log messages, depending on level */
#define FLAG_THREAD 0x0008 /*!< \brief display thread name in log messages */
#define FLAG_LEVEL 0x0010 /*!< \brief display log level in log messages */
@@ -130,6 +110,7 @@ extern "C" {
#define FLAG_THREAD_ID 0x0200
#define FLAG_REAL_TIME 0x0400
#define FLAG_INITIALIZED 0x8000
+/** @}*/
#define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O)
#define CLEAR_LOG_OPTION(O) g_log->flag = (g_log->flag & (~O))
@@ -333,7 +314,7 @@ typedef struct {
int enable_flag;
} log_mem_cnt_t;
-/* @}*/
+/** @}*/
/*!\fn int32_t write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, char format);
\brief Write output file from signal data
@@ -460,8 +441,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
#define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */
# define LOG_MM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 1);} while(0)
-/* @}*/
-
+/** @}*/
/** @defgroup _useful_functions useful functions in LOG
* @ingroup _macro
@@ -472,8 +452,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
#define LOG_EXIT(c) do { LOG_END(c); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
#define LOG_RETURN(c,r) do {LOG_T(c,"Leaving %s (rc = %08lx)\n", __FUNCTION__ , (unsigned long)(r) );return(r);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
-
-/* @}*/
+/** @}*/
#ifdef __cplusplus
}
diff --git a/common/utils/lte/prach_utils.h b/common/utils/lte/prach_utils.h
index 995805fbd2..c3c8003727 100644
--- a/common/utils/lte/prach_utils.h
+++ b/common/utils/lte/prach_utils.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file common/utils/prach_utils.h
-* \brief computation of some PRACH variables used in both MAC and PHY
-* \author R. Knopp
-* \date 2020
-* \version 0.1
-* \company Eurecom
-* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
-* \note
-* \warning
-*/
+/*! \file prach_utils.h
+ * \brief computation of some PRACH variables used in both MAC and PHY
+ * \author R. Knopp
+ * \date 2020
+ * \version 0.1
+ * \company Eurecom
+ * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
+ * \note
+ * \warning
+ */
uint8_t get_prach_fmt(int prach_ConfigIndex,int frame_type);
uint8_t get_prach_prb_offset(int frame_type,
diff --git a/common/utils/ocp_itti/intertask_interface.cpp b/common/utils/ocp_itti/intertask_interface.cpp
index 941e4de6ef..8c4da1d92c 100644
--- a/common/utils/ocp_itti/intertask_interface.cpp
+++ b/common/utils/ocp_itti/intertask_interface.cpp
@@ -30,17 +30,19 @@
extern "C" {
#include
#include
+#include "executables/softmodem-common.h"
- typedef struct timer_elm_s {
- timer_type_t type; ///< Timer type
- long instance;
- long duration;
- uint64_t timeout;
- void *timer_arg; ///< Optional argument that will be passed when timer expires
- } timer_elm_t ;
+typedef struct timer_elm_s {
+ timer_type_t type; ///< Timer type
+ long instance;
+ long duration;
+ uint64_t timeout;
+ void *timer_arg; ///< Optional argument that will be passed when timer expires
+} timer_elm_t;
typedef struct task_list_s {
task_info_t admin;
+ ittiTask_parms_t task_parms;
pthread_t thread;
pthread_mutex_t queue_cond_lock;
std::vector message_queue;
@@ -162,12 +164,12 @@ extern "C" {
pthread_mutex_lock (&t->queue_cond_lock);
int ret=itti_send_msg_to_task_locked(destination_task_id, destinationInstance, message);
- while ( t->message_queue.size()>0 && t->admin.func != NULL ) {
+ while (t->message_queue.size() > 0 && t->task_parms.shortcut_func != NULL) {
if (t->message_queue.size()>1)
LOG_W(ITTI,"queue in no thread mode is %ld\n", t->message_queue.size());
pthread_mutex_unlock (&t->queue_cond_lock);
- t->admin.func(NULL);
+ t->task_parms.shortcut_func(NULL);
pthread_mutex_lock (&t->queue_cond_lock);
}
@@ -327,11 +329,20 @@ extern "C" {
pthread_mutex_unlock (&t->queue_cond_lock);
}
- int itti_create_task(task_id_t task_id,
- void *(*start_routine)(void *),
- void *args_p) {
+ int itti_create_task(const task_id_t task_id, void *(*start_routine)(void *), const ittiTask_parms_t *parms)
+ {
task_list_t *t=tasks[task_id];
- threadCreate (&t->thread, start_routine, args_p, (char *)itti_get_task_name(task_id),-1,OAI_PRIORITY_RT);
+ if (get_softmodem_params()->no_itti && task_id < sizeofArray(tasks_info) && parms && parms->shortcut_func) {
+ LOG_W(ITTI, "not starting the thread for %s, the msg processing will be done in place\n", tasks_info[task_id].name);
+ t->task_parms.shortcut_func = parms->shortcut_func;
+ return 0;
+ }
+ threadCreate(&t->thread,
+ start_routine,
+ parms ? parms->args_to_start_routine : NULL,
+ (char *)itti_get_task_name(task_id),
+ -1,
+ OAI_PRIORITY_RT);
LOG_I(ITTI,"Created Posix thread %s\n", itti_get_task_name(task_id) );
return 0;
}
@@ -353,6 +364,7 @@ extern "C" {
AssertFatal(new_tasks != NULL, "could not realloc() tasks list");
tasks = new_tasks;
tasks[newQueue]= new task_list_t;
+ tasks[newQueue]->task_parms = {0};
pthread_mutex_unlock (&lock_nb_queues);
LOG_I(ITTI,"Starting itti queue: %s as task %d\n", taskInfo->name, newQueue);
pthread_mutex_init(&tasks[newQueue]->queue_cond_lock, NULL);
@@ -361,9 +373,6 @@ extern "C" {
AssertFatal( ( tasks[newQueue]->sem_fd = eventfd(0, EFD_SEMAPHORE) ) >=0, "");
itti_subscribe_event_fd((task_id_t)newQueue, tasks[newQueue]->sem_fd);
- if (tasks[newQueue]->admin.threadFunc != NULL)
- itti_create_task((task_id_t)newQueue, tasks[newQueue]->admin.threadFunc, NULL);
-
return newQueue;
}
diff --git a/common/utils/ocp_itti/intertask_interface.h b/common/utils/ocp_itti/intertask_interface.h
index 131606f6fe..bca3f9a56b 100644
--- a/common/utils/ocp_itti/intertask_interface.h
+++ b/common/utils/ocp_itti/intertask_interface.h
@@ -275,87 +275,69 @@ typedef uint32_t itti_message_types_t;
typedef unsigned long message_number_t;
#define MESSAGE_NUMBER_SIZE (sizeof(unsigned long))
-typedef enum task_priorities_e {
- TASK_PRIORITY_MAX = 100,
- TASK_PRIORITY_MAX_LEAST = 85,
- TASK_PRIORITY_MED_PLUS = 70,
- TASK_PRIORITY_MED = 55,
- TASK_PRIORITY_MED_LEAST = 40,
- TASK_PRIORITY_MIN_PLUS = 25,
- TASK_PRIORITY_MIN = 10,
-} task_priorities_t;
-
typedef struct {
- task_priorities_t priority;
unsigned int queue_size;
/* Printable name */
char name[256];
- void *(*func)(void *) ;
- void *(*threadFunc)(void *) ;
} task_info_t;
-//
-//TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL,NULL)
-//TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL)
-//TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)
-//TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 1000, NULL, NULL)
-void *rrc_enb_process_msg(void *);
-#define FOREACH_TASK(TASK_DEF) \
- TASK_DEF(TASK_UNKNOWN, TASK_PRIORITY_MED, 50, NULL, NULL) \
- TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10, NULL, NULL) \
- TASK_DEF(TASK_L2L1, TASK_PRIORITY_MAX, 200, NULL, NULL) \
- TASK_DEF(TASK_BM, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_PHY_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_MAC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RLC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_PDCP_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_NGAP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_X2AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_M2AP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_M2AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_M3AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_M3AP_MME, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_MCE_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_MME_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_PHY_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_MAC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RLC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_PDCP_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000, NULL, NULL) \
- TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_CUCP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_CUUP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_UE_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_GNB_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_NSA_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_RRC_NSA_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_NAS_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_MAX, TASK_PRIORITY_MED, 200, NULL, NULL)
-#define TASK_DEF(TaskID, pRIO, qUEUEsIZE, FuNc, ThreadFunc) { pRIO, qUEUEsIZE, #TaskID, FuNc, ThreadFunc },
+#define FOREACH_TASK(TASK_DEF) \
+ TASK_DEF(TASK_UNKNOWN, 50) \
+ TASK_DEF(TASK_TIMER, 10) \
+ TASK_DEF(TASK_L2L1, 200) \
+ TASK_DEF(TASK_BM, 200) \
+ TASK_DEF(TASK_PHY_ENB, 200) \
+ TASK_DEF(TASK_MAC_GNB, 200) \
+ TASK_DEF(TASK_RLC_ENB, 200) \
+ TASK_DEF(TASK_RRC_ENB_NB_IoT, 200) \
+ TASK_DEF(TASK_PDCP_ENB, 200) \
+ TASK_DEF(TASK_PDCP_GNB, 200) \
+ TASK_DEF(TASK_DATA_FORWARDING, 200) \
+ TASK_DEF(TASK_END_MARKER, 200) \
+ TASK_DEF(TASK_RRC_ENB, 200) \
+ TASK_DEF(TASK_RRC_GNB, 200) \
+ TASK_DEF(TASK_RAL_ENB, 200) \
+ TASK_DEF(TASK_S1AP, 200) \
+ TASK_DEF(TASK_NGAP, 200) \
+ TASK_DEF(TASK_X2AP, 200) \
+ TASK_DEF(TASK_M2AP_ENB, 200) \
+ TASK_DEF(TASK_M2AP_MCE, 200) \
+ TASK_DEF(TASK_M3AP, 200) \
+ TASK_DEF(TASK_M3AP_MME, 200) \
+ TASK_DEF(TASK_M3AP_MCE, 200) \
+ TASK_DEF(TASK_SCTP, 200) \
+ TASK_DEF(TASK_ENB_APP, 200) \
+ TASK_DEF(TASK_GNB_APP, 200) \
+ TASK_DEF(TASK_MCE_APP, 200) \
+ TASK_DEF(TASK_MME_APP, 200) \
+ TASK_DEF(TASK_PHY_UE, 200) \
+ TASK_DEF(TASK_MAC_UE, 200) \
+ TASK_DEF(TASK_RLC_UE, 200) \
+ TASK_DEF(TASK_PDCP_UE, 200) \
+ TASK_DEF(TASK_RRC_UE, 200) \
+ TASK_DEF(TASK_RRC_NRUE, 200) \
+ TASK_DEF(TASK_NAS_UE, 200) \
+ TASK_DEF(TASK_RAL_UE, 200) \
+ TASK_DEF(TASK_GTPV1_U, 1000) \
+ TASK_DEF(TASK_CU_F1, 200) \
+ TASK_DEF(TASK_DU_F1, 200) \
+ TASK_DEF(TASK_CUCP_E1, 200) \
+ TASK_DEF(TASK_CUUP_E1, 200) \
+ TASK_DEF(TASK_RRC_UE_SIM, 200) \
+ TASK_DEF(TASK_RRC_GNB_SIM, 200) \
+ TASK_DEF(TASK_RRC_NSA_UE, 200) \
+ TASK_DEF(TASK_RRC_NSA_NRUE, 200) \
+ TASK_DEF(TASK_NAS_NRUE, 200) \
+ TASK_DEF(TASK_MAX, 200)
+
+#define TASK_DEF(TaskID, qUEUEsIZE) {qUEUEsIZE, #TaskID},
/* Map task id to printable name. */
static const task_info_t tasks_info[] = {
FOREACH_TASK(TASK_DEF)
};
-#define TASK_ENUM(TaskID, pRIO, qUEUEsIZE, FuNc,ThreadFunc ) TaskID,
+#define TASK_ENUM(TaskID, qUEUEsIZE) TaskID,
//! Tasks id of each task
typedef enum {
FOREACH_TASK(TASK_ENUM)
@@ -502,9 +484,11 @@ void itti_poll_msg(task_id_t task_id, MessageDef **received_msg);
\param args_p Optional argument to pass to the start routine
@returns -1 on failure, 0 otherwise
**/
-int itti_create_task(task_id_t task_id,
- void *(*start_routine) (void *),
- void *args_p);
+typedef struct {
+ void *args_to_start_routine;
+ void *(*shortcut_func)(void *);
+} ittiTask_parms_t;
+int itti_create_task(const task_id_t task_id, void *(*start_routine)(void *), const ittiTask_parms_t *args_p);
int itti_create_queue(const task_info_t *task_info);
@@ -568,8 +552,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);
-void *calloc_or_fail(size_t size);
-void *malloc_or_fail(size_t size);
int memory_read(const char *datafile, void *data, size_t size);
int itti_free(task_id_t task_id, void *ptr);
diff --git a/common/utils/telnetsrv/telnetsrv_5Gue_measurements.c b/common/utils/telnetsrv/telnetsrv_5Gue_measurements.c
index ae04666c95..bdf508e6ef 100644
--- a/common/utils/telnetsrv/telnetsrv_5Gue_measurements.c
+++ b/common/utils/telnetsrv/telnetsrv_5Gue_measurements.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file common/utils/telnetsrv/telnetsrv_nrue_measurements.c
+/*! \file telnetsrv_5Gue_measurements.c
* \brief: implementation of telnet commands related to nrUE measurments
* \author Francois TABURET
* \date 2021
diff --git a/common/utils/telnetsrv/telnetsrv_enb_phycmd.c b/common/utils/telnetsrv/telnetsrv_enb_phycmd.c
index f3b40980f1..3c8b16b680 100644
--- a/common/utils/telnetsrv/telnetsrv_enb_phycmd.c
+++ b/common/utils/telnetsrv/telnetsrv_enb_phycmd.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file common/utils/telnetsrv/telnetsrv_phycmd.c
+/*! \file telnetsrv_enb_phycmd.c
* \brief: implementation of telnet commands related to softmodem linux process
* \author Francois TABURET
* \date 2017
diff --git a/common/utils/telnetsrv/telnetsrv_loader.h b/common/utils/telnetsrv/telnetsrv_loader.h
index 315e57c34e..db9df13b8b 100644
--- a/common/utils/telnetsrv/telnetsrv_loader.h
+++ b/common/utils/telnetsrv/telnetsrv_loader.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file common/utils/telnetsrv_proccmd.h
+/*! \file telnetsrv_loader.h
* \brief: Include file defining telnet commands related to softmodem linux process
* \author Francois TABURET
* \date 2018
diff --git a/common/utils/telnetsrv/telnetsrv_phycmd.h b/common/utils/telnetsrv/telnetsrv_phycmd.h
index d4818340dd..b999436395 100644
--- a/common/utils/telnetsrv/telnetsrv_phycmd.h
+++ b/common/utils/telnetsrv/telnetsrv_phycmd.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file common/utils/telnetsrv_proccmd.h
+/*! \file telnetsrv_phycmd.h
* \brief: Include file defining telnet commands related to softmodem linux process
* \author Francois TABURET
* \date 2017
diff --git a/common/utils/utils.h b/common/utils/utils.h
index 3f618b61f6..52f94fb3ce 100644
--- a/common/utils/utils.h
+++ b/common/utils/utils.h
@@ -56,23 +56,24 @@ static inline void *malloc16_clear( size_t size ) {
return ptr;
}
-
-static inline void *calloc_or_fail(size_t size) {
- void *ptr = calloc(1, size);
+static inline void *calloc_or_fail(size_t nmemb, size_t size)
+{
+ void *ptr = calloc(nmemb, size);
if (ptr == NULL) {
- fprintf(stderr, "[UE] Failed to calloc %zu bytes", size);
+ fprintf(stderr, "Failed to calloc() %zu elements of %zu bytes: out of memory", nmemb, size);
exit(EXIT_FAILURE);
}
return ptr;
}
-static inline void *malloc_or_fail(size_t size) {
+static inline void *malloc_or_fail(size_t size)
+{
void *ptr = malloc(size);
if (ptr == NULL) {
- fprintf(stderr, "[UE] Failed to malloc %zu bytes", size);
+ fprintf(stderr, "Failed to malloc() %zu bytes: out of memory", size);
exit(EXIT_FAILURE);
}
diff --git a/doc/Doxyfile b/doc/Doxyfile
index f60031541a..00485ee5b9 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -855,1699 +855,1525 @@ WARN_LOGFILE = cmake_targets/log/doxy.log
# Note: If this tag is empty the current directory is searched.
EXCLUDE_PATTERNS = if4_tools.c
INPUT = \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/lte-softmodem.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/stats.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/lte-ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/lte-softmodem.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/stats.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/lte-uesoftmodem.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/lte-enb.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/lte-ru.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/RT/USER/ru_control.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../targets/COMMON/MESSAGES/V2/flexsplit.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/USRP/USERSPACE/LIB/usrp_lib.cpp \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/iqplayer/iqplayer_lib.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/record_player.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/common_lib.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/common_lib.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/record_player.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/rfsimulator/rfsimulator.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/rfsimulator/simulator.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/rfsimulator/apply_channelmod.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/ETHERNET/if_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/ETHERNET/ethernet_lib.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/ETHERNET/eth_udp.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/ETHERNET/ethernet_lib.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../radio/ETHERNET/eth_raw.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_cmdline.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_paramdesc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_userapi.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_load_configmodule.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_load_configmodule.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/config/libconfig/config_libconfig.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_load_configmodule.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/config/libconfig/config_libconfig.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/config/libconfig/config_libconfig.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/config/libconfig/config_libconfig_private.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_paramdesc.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_userapi.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/oai_asn1.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_meas.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_stat.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/load_module_shlib.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_userapi.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/config/config_cmdline.c \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_meas.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/obj_hashtable.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/hashtable.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/obj_hashtable.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/hashtable.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/utils.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/nr/nr_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_meas.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/utils.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/oai_asn1.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/system.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/nr/nr_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ocp_itti/intertask_interface.cpp \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ocp_itti/all_msg.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ocp_itti/intertask_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/lte/ue_power.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/nr/nr_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/obj_hashtable.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/hashtable.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/hashtable.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/hashtable/obj_hashtable.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_stat.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/system.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/load_module_shlib.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_proccmd.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_cpumeasur_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_loader.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_phycmd.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_loader.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_measurements.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_ltemeasur_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_measurements.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_proccmd.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_bearer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_enb_measurements.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_enb_phycmd.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_ci.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_5Gue_measurements.c \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/lte/prach_utils.c \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/lte/prach_utils.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/utils.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/system.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/collection/linear_alloc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/collection/tree.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/collection/queue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/system.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_enb_measurements.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_phycmd.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_measurements.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_ltemeasur_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_loader.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_cpumeasur_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_enb_phycmd.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_measurements.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_loader.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_proccmd.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_proccmd.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/telnetsrv/telnetsrv_5Gue_measurements.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/load_module_shlib.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/backtrace.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/assertions.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/oai_asn1.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/threadPool/thread-pool.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/threadPool/thread-pool.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/utils.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/database.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/utils.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/database.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/local_tracer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T_IDs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/Makefile \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T_messages.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/check_vcd.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_stat.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/lte/ue_power.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log_if.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/vcd_signal_dumper.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/vcd_signal_dumper.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log.c \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log_if.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/vcd_signal_dumper.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_stat.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ocp_itti/all_msg.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ocp_itti/intertask_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/utils.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/check_vcd.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/extract_output_subframe.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/utils.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/database.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/event.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/database.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/extract_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/configuration.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/configuration.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/extract_input_subframe.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/utils.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/replay.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/extract.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/event.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/record.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/multi.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/handler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/macpdu2wireshark.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/tracer/packet-mac-lte.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/genids.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/local_tracer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T_IDs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/T.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/T/defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/collection/tree.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/collection/queue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/collection/linear_alloc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/assertions.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/config.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/load_module_shlib.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/simple_executable.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/threadPool/thread-pool.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/threadPool/thread-pool.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ds/byte_array.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ds/byte_array.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/openairinterface5g_limits.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../common/platform_constants.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/ngran_types.h \
@CMAKE_CURRENT_SOURCE_DIR@/../common/ran_context.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_models.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_tx.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_rx.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_externs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_rijndael.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_key_deriver.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_snow3g.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_stream_eea.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_snow3g.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_stream_eia.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_internal.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OSA/osa_rijndael.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/mac_pcap.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/probe.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/opt.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/wireshark_headers.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OMG/defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OMG/omg_constants.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/message_queue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/socket_link.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/socket_link.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/link_manager.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/ringbuffer_queue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/ringbuffer_queue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/message_queue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/link_manager.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/LISTS/list.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/LISTS/list.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/LISTS/list2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/MEM/mem_block.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/MATH/oml.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/MATH/oml.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_app.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_app.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_task.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_interface_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_ue_context_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_rrc_message_transfer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_warning_message_transmission.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_task.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_task.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_ue_context_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_paging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_rrc_message_transfer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_default_values.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_rrc_message_transfer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_itti_messaging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_ue_context_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_paging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_warning_message_transmission.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_encoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_task.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_system_information.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_rrc_message_transfer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_interface_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_handlers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_ue_context_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_interface_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_interface_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_async.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_emtc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_app.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/NB_IoT_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_mme.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_app.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/RRC_config_tools.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_timer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_timer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_ran_api_to_fix.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_net_comm.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config_eMTC.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/RRC_config_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_ran_api.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_net_comm.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/time_common.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/control_delegation.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/flexran.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/header.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/config_common.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/config_messages.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/controller_commands.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/stats_messages.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/stats_common.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MESSAGES/V2/mac_primitives.proto \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_sidelink.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MACRLC_paramdef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_ran_api.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_common_internal.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_mce.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/L1_paramdef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_common_internal.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_app.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_task_manager.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/NB_IoT_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config_SL.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_app.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_async.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/RRC_paramsvalues.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_handler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/flexran_agent_task_manager.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/S1AP/flexran_agent_s1ap_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/S1AP/flexran_agent_s1ap.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/S1AP/flexran_agent_s1ap.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_timers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_ids.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_handler.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_generate_messages.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_encoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_itti_messaging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_handler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_ids.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_generate_messages.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_decoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_timers.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_paramdef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_app.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_app.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/MACRLC_nr_paramdef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/L1_nr_paramdef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/RRC_nr_paramsvalues.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/MESSAGES/ASN.1/38463-g80.R16.78.0.cmake \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/MESSAGES/CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_handler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_handler.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_generate_messages.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_timers.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_encoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_handler.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_ids.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_handler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_interface_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_itti_messaging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_generate_messages.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_interface_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_generate_messages.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_default_values.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_decoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_generate_messages.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_interface_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_interface_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_timers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_ids.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_stub_UE.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/IF_Module.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_stub_UE.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/IF_Module_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/queue_t.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_interface_vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_interface_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/queue_t.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/IF_Module.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rlc_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/platform_constants.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/nas_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/gtpv1_u_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m2ap_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/pdcp_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/f1ap_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/f1ap_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/x2ap_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_rrc_primitives.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/sctp_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/prs_nr_paramdef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/nas_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rrc_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/commonDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/phy_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/sctp_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/as_message.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_rlc_primitives.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/flexran_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m3ap_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/udp_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/x2ap_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/pdcp_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/phy_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m2ap_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/networkDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/s1ap_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/platform_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/ngap_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m3ap_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/s1ap_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rrm_constants.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/openair_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rrc_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_primitives.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rlc_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/ngap_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/gtpv1_u_messages_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/udp_messages_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_PHY_INTERFACE/NR_IF_Module.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_PHY_INTERFACE/NR_IF_Module.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/UE_IP/local.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/UE_IP/sap.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/UE_IP/proto_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/UE_IP/common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/UE_IP/device.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/UE_IP/netlink.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/UE_IP/constant.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/LITE/constant.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/MESH/ioctl.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/MESH/constant.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_ue_manager.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_entity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_entity_um.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_pdu.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_entity_am.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_entity_um.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_entity_am.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_sdu.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_entity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_asn1_utils.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_ue_manager.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_oai_api.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_sdu.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/asn1_utils.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/rlc_v2/rlc_pdu.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_compute_tbs_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/l1_helpers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/ue_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/mac.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/slicing/slicing_internal.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/slicing/slicing.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/slicing/slicing.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/mac_vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_ulsch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/rar_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/main.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/defs_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/config_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_dlsch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_RA.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_bch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_phytest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/rar_tools_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/main_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/ra_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_fairRR.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_fairRR.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_mch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/mac_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/config_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/pre_processor.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/mac_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_primitives.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/rlc_primitives.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/rlc_def.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/rlc_def_lte.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/rlc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/main_ue_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/config_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_vars.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_timer_thread.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia2.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_sdu.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_sdu.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea2.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_asn1_utils.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/asn1_utils.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_timer_thread.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/main.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_sdu.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_um.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_pdu.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_sdu.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_asn1_utils.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_pdu.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/asn1_utils.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/openair2_proc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap_entity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap_entity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_GTPV1U.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_radio_bearers.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_UE_context.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/mac_rrc_dl_direct.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/L2_nr_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/MESSAGES/asn1_msg.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/MESSAGES/asn1_msg.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_GTPV1U.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_radio_bearers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/mac_rrc_dl_f1ap.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_NGAP.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_internode.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_NGAP.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_UE_context.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_reconfig.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_nsa.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/mac_rrc_dl.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/L2_interface_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_list.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/main_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_UE.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_nsa.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/nas_config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/rb_config.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/rb_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/nas_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/L2_interface_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/plmn_data.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_M2AP.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_types_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_GTPV1U.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_GTPV1U.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_UE_context.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/L2_interface_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/defs_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/MESSAGES/asn1_msg.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/MESSAGES/asn1_msg.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_S1AP.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_endc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/L2_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/extern_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_UE.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_UE_context.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_M2AP.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_S1AP.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/proto_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_itti_messaging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_interface_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_ids.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_interface_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_encoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_interface_management.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_handler.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_timers.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_handler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_interface_management.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_handler.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_handler.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_default_values.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_ids.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_timers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_generate_messages.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_handler.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_decoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/COMMON/security_types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_overload.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_nas_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_itti_messaging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_trace.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_trace.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_handlers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_ue_context.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/gnb_ind_vars.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_vnf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/gnb_ind_vars.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/vendor_ext.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_vnf.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_pnf.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_pnf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/common/public_inc/debug.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/common/src/debug.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/sidelink_nr_ue_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi_p4.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi_p7.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi_p5.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/inc/nfapi.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf_p7.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf_p7_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/inc/vnf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/inc/vnf_p7.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf_p7_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf_p7.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/inc/pnf_p7.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/inc/pnf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/sim_common/inc/vendor_ext.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf_sim/inc/fapi_stub.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf_sim/inc/fapi_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/softmodem-common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-softmodem.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-cuup.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/stats.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-softmodem-common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/softmodem-common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-softmodem.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-gnb.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/rt_profiling.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-uesoftmodem.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-uesoftmodem.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/lte-softmodem.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/stats.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/thread-common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-ru.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_default_values.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_task.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_task.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_overload.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_decoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_ue_context.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_context_management_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_trace.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_handlers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_ue_context.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_management_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_context_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_decoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_handlers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_encoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nas_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nas_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nnsf.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_overload.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nnsf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_trace.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_default_values.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_nnsf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_overload.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_context_management_procedures.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_nnsf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_decoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_encoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_default_values.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_management_procedures.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_context_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_nas_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_handlers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_nas_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_overload.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_ue_context.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/fs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/fs.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_user_data.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_user_plmn.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_parser.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_network.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_parser.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_user_plmn.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/usim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_network.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf2uedata.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_usim.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/nvram.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_emm.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_user_data.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/display.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf2uedata.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_usim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/display.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/TOOLS/conf_emm.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/NR_UE/nr_nas_msg_sim.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_handlers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_trace.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_encoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_trace.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_handlers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_context_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_decoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_nas_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_decoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_ue_context.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_overload.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NGAP/ngap_gNB_default_values.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/secu_defs.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/sha_256_hmac.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea0.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/aes_128_ecb.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/aes_128.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/rijndael.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea1.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/aes_128_cbc_cmac.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eia1.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/snow3g.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/aes_128_ctr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/kdf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/secu_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/rijndael.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/kdf.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea1.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea0.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/key_nas_deriver.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/aes_128_ecb.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/aes_128_ctr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eia2.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/snow3g.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/sha_256_hmac.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/aes_128_cbc_cmac.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eia1.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eia2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea2.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/key_nas_deriver.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/MME_APP/mme_app.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_interface_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_generate_messages.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_interface_management.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_management_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_handler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_encoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_timers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_ids.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_handler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_timers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_decoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_interface_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_management_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_decoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_interface_management.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MME_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_ids.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_default_values.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/M3AP/m3ap_MCE_handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/UICC/usim_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/UICC/usim_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/ocp-gtpu/gtp_itf.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/NR_UE/nr_nas_msg_sim.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/NR_UE/ue_process_nas.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/NR_UE/nr_nas_msg_sim.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/user_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_proc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_main.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emmData.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Authentication.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SecurityModeControl.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/TrackingAreaUpdate.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_timers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Detach.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Attach.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SecurityModeControl.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/IdleMode.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_proc_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/IdleMode_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/LowerLayer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Authentication.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/IdleMode.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/LowerLayer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/EmmStatusHdl.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_fsm_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/ServiceRequestHdl.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_main.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_reg.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegistered.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmNull.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_fsm.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_recv.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_as.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_asDef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_sap.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_fsm.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregistered.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_send.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_as.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_esm.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_recv.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_reg.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_regDef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_esmDef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_sap.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_send.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_esm.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Identification.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/LowerLayer_defs.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_parser.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_user.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_ue_task.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_proc.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_user.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_command.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_indication.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_indication.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_response.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_error.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_api_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_api.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_api.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_response.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_error.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_command.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_proc_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_network.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USIM/aka_functions.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USIM/usim_api.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USIM/usim_api.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USIM/aka_functions.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_proc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_ue_task.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_proc_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_pt.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esmData.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/EsmStatusHdl.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ip.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_pt.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_proc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/PdnDisconnect.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/PdnConnectivity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_main.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_indication.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_api.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_api.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_command.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_command.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_error.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_api_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_response.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/user_indication.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_response.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/API/USER/at_error.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_parser.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_ue_task.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr_context.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_pt_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_send.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_recv.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/PdnConnectivity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ip.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_main.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/PdnDisconnect.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr_context.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_proc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_pt.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/EsmStatusHdl.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_main.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_pt.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esmData.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_recv.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_send.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_sap.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_send.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_sap.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_recv.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_recv.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/SAP/esm_sapDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr_context.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr_context.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_main.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/EpsBearerContextDeactivation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/ESM/esm_ebr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_user.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_network.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_proc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_network.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_parser.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_main.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_main.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Identification.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/IdleMode.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_timers.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/TrackingAreaUpdate.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/LowerLayer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_proc_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/LowerLayer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/EmmStatusHdl.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Attach.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_fsm_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emm_proc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Authentication.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SecurityModeControl.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Detach.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/IdleMode.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegistered.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_reg.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_send.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_as.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmNull.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_reg.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_as.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_sap.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_esm.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_send.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_regDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_fsm.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_esmDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_esm.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_fsm.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmDeregistered.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_asDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_sap.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_recv.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/emm_recv.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/LowerLayer_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/Authentication.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/SecurityModeControl.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/IdleMode_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/emmData.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/EMM/ServiceRequestHdl.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_ue_task.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/user_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/gNB/network_process_nas.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/parser.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/stty.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVEncoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVDecoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/OctetString.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/socket.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/nas_timer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/memory.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/nas_timer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/device.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/OctetString.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVEncoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVDecoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/memory.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/nas_log.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/device.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/socket.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/UE/nas_proc.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/securityDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/nr_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/NR_NAS_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/nas_message.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/as_message.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/nas_message.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/network_api.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/network_api.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateResult.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGMMCapability.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmergencyNumberList.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/RadioPriority.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZoneAndTime.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/QualityOfService.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasMessageContainer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsIndicator.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsMobileIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/KsiAndSequenceNumber.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GutiType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NrUESecurityCapability.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SupportedCodecList.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TransactionIdentifier.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DetachType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowTemplate.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SpareHalfOctet.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasMessageContainer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark2.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentityList.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DrxParameter.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeNetworkCapability.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/QualityOfService.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterAutn.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmmCause.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateResult.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeNetworkCapability.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TmsiStatus.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NrUESecurityCapability.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkCapability.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasKeySetIdentifier.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsIndicator.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SsCode.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GprsTimer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmergencyNumberList.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmMessageContainer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmmCause.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmMessageContainer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ShortMac.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ServiceType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasKeySetIdentifier.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TransactionIdentifier.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsQualityOfService.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PagingIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GutiType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DaylightSavingTime.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGCNasMessageContainer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkCapability.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZoneAndTime.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Cli.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SORTransparentContainer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasRequestType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MessageType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DrxParameter.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationResult.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZone.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/RadioPriority.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SecurityHeaderType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasRequestType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SsCode.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SpareHalfOctet.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasSecurityAlgorithms.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GprsTimer.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowTemplate.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DetachType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterRand.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AccessPointName.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark3.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MessageType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LocationAreaIdentification.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AccessPointName.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateResult.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Nonce.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LocationAreaIdentification.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsClientIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ImeisvRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSMobileIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGMMCapability.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachResult.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationResult.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/IdentityType2.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PagingIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationFailureParameter.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSMobileIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TmsiStatus.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DaylightSavingTime.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NetworkName.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZone.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CsfbResponse.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PacketFlowIdentifier.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ServiceType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeSecurityCapability.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PlmnList.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateType.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterRand.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmCause.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnAddress.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmCause.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasPagingIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SORTransparentContainer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PlmnList.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NetworkName.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGCNasMessageContainer.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmInformationTransferFlag.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CsfbResponse.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ShortMac.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ExtendedProtocolDiscriminator.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachResult.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PTmsiSignature.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PacketFlowIdentifier.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark3.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/IdentityType2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnAddress.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Cli.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Nonce.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SecurityHeaderType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerContextStatus.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerContextStatus.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ExtendedProtocolDiscriminator.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolDiscriminator.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentity.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeSecurityCapability.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ImeisvRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsQualityOfService.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnType.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsMobileIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SupportedCodecList.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateResult.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PTmsiSignature.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolDiscriminator.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsClientIdentity.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmStatus.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_msg.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_msg.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmStatus.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_cause.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/userDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/milenage.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityResponse.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_msg.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationComplete.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSIdentityResponse.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationComplete.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSIdentityResponse.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmInformation.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSNASSecurityModeComplete.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityRequest.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSAuthenticationResponse.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmInformation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationAccept.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_msg.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmStatus.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachComplete.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSNASSecurityModeComplete.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachComplete.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmInformation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeComplete.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeCommand.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceReject.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_msg.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSDeregistrationRequestUEOriginating.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachComplete.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSNASSecurityModeComplete.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSAuthenticationResponse.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSIdentityResponse.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachComplete.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmStatus.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityResponse.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationComplete.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ServiceRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSIdentityResponse.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmStatus.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSAuthenticationResponse.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachAccept.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_cause.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_msg.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSNASSecurityModeComplete.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationComplete.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSDeregistrationRequestUEOriginating.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/emm_cause.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmInformation.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeCommand.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/RegistrationRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/EmmStatus.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeComplete.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/DetachRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/EMM/MSG/AttachRequest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/ocp-gtpu/gtpv1u_gNB_task.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/ocp-gtpu/gtp_itf.cpp \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/ocp-gtpu/gtp_itf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/ocp-gtpu/gtpv1u_eNB_task.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_context_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_itti_messaging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_ue_context.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_management_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_context_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_overload.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_overload.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_encoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_decoder.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_ue_context.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_trace.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_handlers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_trace.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nnsf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nas_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nnsf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_handlers.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_management_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_nas_procedures.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/S1AP/s1ap_eNB_default_values.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/MME_APP/mme_config.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/MME_APP/mme_app.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/MME_APP/mme_app.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/MME_APP/mme_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/parser.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/device.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/device.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/TLVEncoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/OctetString.h \
+@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@/../openair3/NAS/COMMON/UTIL/OctetString.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/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 \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/socket.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/stty.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/UTIL/socket.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/network_api.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/nas_message.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/network_api.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/nas_message.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/API/NETWORK/as_message.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ServiceType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterRand.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolDiscriminator.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ExtendedProtocolDiscriminator.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CsfbResponse.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmCause.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DaylightSavingTime.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DaylightSavingTime.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmmCause.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TransactionIdentifier.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ExtendedProtocolDiscriminator.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GutiType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SupportedCodecList.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark3.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AccessPointName.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PlmnList.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PlmnList.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Nonce.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZone.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Cli.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/IdentityType2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachResult.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmergencyNumberList.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CsfbResponse.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PacketFlowIdentifier.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentityList.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeSecurityCapability.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ImeisvRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SpareHalfOctet.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ShortMac.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark3.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowTemplate.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SORTransparentContainer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasPagingIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasMessageContainer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Cli.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasRequestType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PagingIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DetachType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmergencyNumberList.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmMessageContainer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationResult.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GprsTimer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TmsiStatus.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/IdentityType2.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsQualityOfService.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LocationAreaIdentification.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGCNasMessageContainer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkCapability.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ShortMac.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationResult.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EmmCause.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/KsiAndSequenceNumber.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/RadioPriority.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationFailureParameter.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Nonce.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnAddress.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmInformationTransferFlag.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SpareHalfOctet.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LocationAreaIdentification.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/QualityOfService.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NrUESecurityCapability.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SsCode.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsQualityOfService.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrafficFlowTemplate.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/RadioPriority.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolDiscriminator.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsMobileIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SsCode.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TrackingAreaIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasMessageContainer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DetachType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGMMCapability.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TmsiStatus.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileStationClassmark2.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MessageType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DrxParameter.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TransactionIdentifier.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateResult.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/QualityOfService.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasKeySetIdentifier.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MobileIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GprsTimer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasRequestType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerContextStatus.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSMobileIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsClientIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSMobileIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ServiceType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PagingIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeNetworkCapability.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NrUESecurityCapability.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterAutn.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnAddress.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeSecurityCapability.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PTmsiSignature.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PacketFlowIdentifier.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGCNasMessageContainer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PTmsiSignature.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsMobileIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/GutiType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerContextStatus.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsIndicator.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsIndicator.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateResult.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/DrxParameter.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NetworkName.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkCapability.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZone.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasKeySetIdentifier.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachResult.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AccessPointName.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGMMCapability.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateResult.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsAttachType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/UeNetworkCapability.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSDeregistrationType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmMessageContainer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SecurityHeaderType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmCause.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasSecurityAlgorithms.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SORTransparentContainer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AdditionalUpdateType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZoneAndTime.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ImeisvRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/MessageType.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SecurityHeaderType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LcsClientIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationParameterRand.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsBearerIdentity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZoneAndTime.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateResult.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsUpdateType.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NetworkName.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SupportedCodecList.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/NR_NAS_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/milenage.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmStatus.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_msg.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmStatus.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_cause.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/esm_msg.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/userDef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/nr_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/gNB/network_process_nas.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/UTILS/conversions.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/kdf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/rijndael.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eia2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/snow3g.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/rijndael.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/snow3g.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eea1.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/key_nas_deriver.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/secu_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SECU/nas_stream_eia1.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_itti_messaging.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_itti_messaging.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_task.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_eNB_task.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/SCTP/sctp_default_values.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/UICC/usim_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair3/UICC/usim_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_vnf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_pnf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_vnf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/gnb_ind_vars.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/nfapi_pnf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/gnb_ind_vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/oai_integration/vendor_ext.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf_sim/inc/fapi_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf_sim/inc/fapi_stub.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf_p7.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/src/vnf_p7_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/inc/vnf_p7.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/inc/vnf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/common/src/debug.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/common/public_inc/debug.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf_p7_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/src/pnf_p7.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/inc/pnf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/inc/pnf_p7.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi_p4.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi_p5.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/src/nfapi_p7.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/inc/nfapi.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../nfapi/open-nFAPI/sim_common/inc/vendor_ext.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/nr_prach_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/phy_procedures_nr_gNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/fapi_nr_l1.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/nr_ru_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/fapi_nr_l1.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/sched_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/phy_frame_config_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/phy_frame_config_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/ru_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/sched_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/nfapi_lte_dummy.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/sched_eNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/phy_procedures_lte_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/phy_procedures_lte_eNb.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/sched_common_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/nfapi_nr_dummy.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/fapi_l1.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/fapi_l1.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/prach_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/scm_corrmat.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/multipath_tv_channel.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/channel_sim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/rangen_double.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/multipath_channel.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/abstraction.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/sim.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/taus.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/random_channel.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/phase_noise.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/socket.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/socket.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/rf.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/rf.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/adc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/dac.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/LTE_PHY/dummy_functions.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/LTE_PHY/dlsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/LTE_PHY/ulsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/LTE_PHY/unitary_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/LTE_PHY/common_sim.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/nr_dummy_functions.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/dlsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/prachsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/ulsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/pucchsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/dlschsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/ulschsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/nr_unitary_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/NR_PHY/pbchsim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/harq_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_procedures_nr_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/fapi_nr_ue_l1.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_frame_config_nr_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/pucch_uci_ue_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/pucch_uci_ue_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/fapi_nr_ue_l1.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_sch_processing_time.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_frame_config_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/harq_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_UE/phy_procedures_lte_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_UE/srs_pc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_UE/sched_UE.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_UE/pucch_pc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_UE/pusch_pc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/lte_init_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_encoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_ids.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_timers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_generate_messages.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_generate_messages.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_decoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_handler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_timers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_ids.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_decoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_management_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/X2AP/x2ap_eNB_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_app.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_app.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/MCE_APP/mce_config.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_generate_messages.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_decoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_handler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_interface_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_management_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_ids.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_encoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_generate_messages.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_ids.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_management_procedures.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_default_values.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_timers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_generate_messages.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_interface_management.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_decoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_management_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_timers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_interface_management.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_interface_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_handler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_MCE_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_generate_messages.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/M2AP/m2ap_eNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/MESH/ioctl.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/MESH/constant.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_compute_tbs_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_COMMON/nr_mac.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_um.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_asn1_utils.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_pdu.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_sdu.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_pdu.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_sdu.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/asn1_utils.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/main.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/pre_processor.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_fairRR.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/ue_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/mac_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/rar_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_bch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/mac.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/rar_tools_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/config_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_primitives.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_fairRR.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_ulsch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_RA.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_mch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/mac_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_phytest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler_dlsch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/main_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/ra_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/defs_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/config_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/eNB_scheduler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/slicing/slicing.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/slicing/slicing_internal.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/slicing/slicing.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/MAC/l1_helpers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/main.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/openair2_proc.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/RLC/rlc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_vars.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ue_power_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/config_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/mac_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/main_ue_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_asn1_utils.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_timer_thread.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia2.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea2.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_timer_thread.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_sdu.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_sdu.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/asn1_utils.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/wireshark_headers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/opt.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/probe.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OPT/mac_pcap.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_tx.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg_rx.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OTG/otg.h \
+@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 \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_interface_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_ids.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_paging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_rrc_message_transfer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_interface_management.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_paging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_default_values.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_ue_context_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_itti_messaging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_task.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_system_information.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_paging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_rrc_message_transfer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_encoder.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_paging.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_warning_message_transmission.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_ue_context_management.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_handlers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_ue_context_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_task.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_warning_message_transmission.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_rrc_message_transfer.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_rrc_message_transfer.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_task.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_task.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_ids.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_itti_messaging.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_interface_management.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_interface_management.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_config.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_paramdef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/L1_nr_paramdef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/RRC_nr_paramsvalues.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_app.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/MACRLC_nr_paramdef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/GNB_APP/gnb_app.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/queue_t.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/IF_Module.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_stub_UE.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_interface_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_stub_UE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/IF_Module_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/phy_interface_vars.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/queue_t.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/PHY_INTERFACE/IF_Module.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/pdcp_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_rrc_primitives.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/ngap_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rlc_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m3ap_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/sctp_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/x2ap_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/commonDef.h \
+@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@/../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 \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/e1ap_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/phy_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/s1ap_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/networkDef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/f1ap_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/udp_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/gtpv1_u_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/s1ap_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rrc_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/e1ap_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m3ap_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/phy_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/x2ap_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/mac_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/openair_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/as_message.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/nas_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/pdcp_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m2ap_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/prs_nr_paramdef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/f1ap_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/m2ap_messages_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/COMMON/rrc_messages_def.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_UE.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_sl_preconfig.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_nsa.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_vars.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/sl_preconfig_paramvalues.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_timers_and_constants.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/main_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/rrc_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR_UE/L2_interface_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/rb_config.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/rb_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/nas_config.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NAS/nas_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_internode.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/cucp_cuup_if.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/cucp_cuup_direct.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_GTPV1U.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/mac_rrc_dl_direct.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_radio_bearers.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_NGAP.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_UE_context.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/MESSAGES/asn1_msg.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/MESSAGES/asn1_msg.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_UE_context.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/cucp_cuup_e1ap.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_config.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_radio_bearers.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/nr_rrc_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/L2_nr_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_reconfig.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_NGAP.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/mac_rrc_dl_f1ap.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_GTPV1U.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/mac_rrc_dl.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/NR/rrc_gNB_nsa.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_GTPV1U.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_S1AP.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_GTPV1U.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_UE.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_UE_context.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_UE_context.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_endc.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/L2_interface_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_types_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/MESSAGES/asn1_msg.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/MESSAGES/asn1_msg.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_vars.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/L2_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_M2AP.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/proto_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/plmn_data.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/defs_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/L2_interface_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_M2AP.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/extern_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/RRC/LTE/rrc_eNB_S1AP.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_emtc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_mme.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_mce.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/L1_paramdef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_app.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config_SL.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config_eMTC.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef_sidelink.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/MACRLC_paramdef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/RRC_config_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_paramdef.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/RRC_config_tools.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_app.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/RRC_paramsvalues.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/NB_IoT_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/ENB_APP/enb_config.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap_api.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap_default_values.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap_api.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap_setup.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/E1AP/e1ap_asnc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_PHY_INTERFACE/nr_sched_response.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_PHY_INTERFACE/nr_sched_response.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_PHY_INTERFACE/NR_IF_Module.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/NR_PHY_INTERFACE/NR_IF_Module.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap_entity.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair2/SDAP/nr_sdap/nr_sdap_entity.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_gNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/impl_defs_top.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_extern_nr_ue.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/lte_parms.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/lte_param_init.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/nr_init_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/lte_init.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/defs_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/lte_init_ru.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/phy_init.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/init_top.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/nr_init_ru.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/nr_parms.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/lte_init_ru.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/init_top.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/nr_init.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/pss_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/dci_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/sss_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_prach.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/csi_rx.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/phy_init.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/nr_phy_init.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/nr_init_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/defs_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/INIT/lte_init.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/uci_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pss.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/power_control.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/prach_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pmch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/uci_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pcfich.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pucch_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pucch_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/rar_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/mdci.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/prach_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_tools_common_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pucch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pmch_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pbch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/phich.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/lte_mcs.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_common_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/sss.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/sss_gen.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pilots.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pcfich_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_tools_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_vars.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/phich_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/group_hopping.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/if4_tools.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/uci_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/prach.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/edci.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_coding.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_eNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_nr_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_csi_rs.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/pucch_rx.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dci.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dci_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prs.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prach_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dci.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_transport_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_pss.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_tbs_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prach.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/srs_rx.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_pbch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_sss.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_uci_tools_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prach.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_scrambling.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/impl_defs_top_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/pss6144.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/filt96_32.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/freq_equalization.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_sync_time.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/filt96_32_khz_1dot25.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_estimation.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/adjust_gain.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/filt16_32.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cdot_prod.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/phy_scope_interface.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/phy_scope_interface.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/nr_phy_scope.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/nr_phy_scope.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/nr_phy_qt_scope.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/nr_phy_qt_scope.cpp \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/file_output.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/dfts_load.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/alaw_lut.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lte_ue_scope.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/tools_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lut.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/signal_energy.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lte_phy_scope.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cadd_vv.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cmult_vv.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lte_enb_scope.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cmult_sv.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/oai_dfts.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/sqrt.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/dB_routines.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lte_phy_scope.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/log2_approx.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_L1_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/get_pmi.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_sync_time.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/freq_equalization.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_estimation.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_UE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/nr_modulation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/ofdm_mod.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/ul_7_5_kHz.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/nr_modulation.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/compute_bf_weights.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/beamforming.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_eNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/slot_fep_ul.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/slot_fep_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_vars.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ptrs_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_gold.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_dmrs_rx.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/pss_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_gen_mod_table.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ul_ref_seq_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ul_ref_seq_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/sss_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/scrambling_luts.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/dmrs_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/refsig_defs_ue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ptrs_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_refsig.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/dmrs_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_mod_table.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ss_pbch_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_gold_ue.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_extern_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_gNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/defs_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_refsig.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_ul_ref.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_gold.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_dl_uespec.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/types_NB_IoT.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_turbo_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/coding_load.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/lte_interleaver_inline.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/coding_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/viterbi_lte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/crcext.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/viterbi.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/defs_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/lte_segmentation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/crc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nr_segmentation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/TESTBENCH/ldpctest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/TESTBENCH/polartest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/TESTBENCH/smallblocktest.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/crc_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc240_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc208_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc112_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc208_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc256_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc104_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc320_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc352_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc144_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc120_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc192_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc352_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc384_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc96_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc176_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc160_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc256_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc176_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc88_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/Gen_shift_value.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc80_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc320_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc72_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc192_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc224_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc128_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc288_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc240_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc288_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc224_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc384_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/lte_rate_matching.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nr_polar_init.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrSmallBlock/nr_small_block_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrSmallBlock/decodeSmallBlock.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrSmallBlock/encodeSmallBlock.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/ccoding_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nr_rate_matching.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_sequence_pattern.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_interleaving_pattern.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_uci_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_kronecker_power_matrices.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_dci_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_crc.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_kernal_operation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_load.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_sse.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/ccoding_byte_lte.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/coding_defs.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPCdecoder_defs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG1_avx512.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG2_avx512.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/coding_load.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/viterbi_lte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/crc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nr_rate_matching.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/viterbi.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_load.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nr_segmentation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nr_polar_init.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/coding_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/crc_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/crcext.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrSmallBlock/encodeSmallBlock.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrSmallBlock/nr_small_block_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrSmallBlock/decodeSmallBlock.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/ccoding_byte_lte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/lte_rate_matching.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_sse.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/lte_interleaver_inline.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_lut.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/main.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG2_avx512.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/main.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/main128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/main.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_BG1_avx2.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_BG1_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/main128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_BG2_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_BG2_avx2.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/main.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/main.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_BG2_avx2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/cnProc_gen_BG1_avx2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/main.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/main.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG2_avx512.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG1_avx512.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG2_avx512.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_lut.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/thread_NR_UE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_decoder/nrLDPCdecoder_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/ccoding_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc384_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc80_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc160_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc128_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc120_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc208_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc288_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc112_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc192_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc176_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc352_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc128_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc224_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc104_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc320_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc96_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc224_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc256_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc288_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc320_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc384_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc352_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc192_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc192_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc192_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc320_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc288_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc144_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc320_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc384_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc72_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc96_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc288_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc240_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc384_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc176_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc256_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc224_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc352_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc256_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc224_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc160_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc256_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc88_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc208_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc240_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrLDPC_encoder/ldpc_BG2_Zc352_byte_128.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_uci_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_crc.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_interleaving_pattern.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_kernal_operation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_dci_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_sequence_pattern.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/defs_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/lte_segmentation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/CODING/3gpplte.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_refsig.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_dl_uespec.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_gold.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_ul_ref.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/defs_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_nr_UE.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_mod_table.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ul_ref_seq_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ptrs_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/pss_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/scrambling_luts.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/sss_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_dmrs_rx.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ss_pbch_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_gold_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/dmrs_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ptrs_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/ul_ref_seq_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_gold.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/refsig_defs_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/dmrs_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_refsig.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_REFSIG/nr_gen_mod_table.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_eNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/types.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dci.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_uci_tools_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_scrambling.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_pss.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/srs_rx.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/pucch_rx.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_transport_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dci_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dci.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_csi_rs.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_pbch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prach.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_ulsch.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prs.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_tbs_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_sss.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prach.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_TRANSPORT/nr_prach_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/slot_fep_mbsfn.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/ul_7_5_kHz_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/nr_modulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_UE.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/slot_fep_nr.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_eNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/beamforming.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/modulation_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/compute_bf_weights.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/ofdm_mod.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/gen_75KHz.cpp \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/nr_modulation.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/slot_fep.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/ul_7_5_kHz.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/MODULATION/slot_fep_ul.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_UE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/csi_rx.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/pss_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/sss_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/dci_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_prach.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_RU.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_vars_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_eNB.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/edci.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/sss.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/uci_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/group_hopping.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pcfich_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_common_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pucch_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/rar_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pmch_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pucch_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pcfich.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/defs_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/power_control.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/lte_mcs.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/sss_gen.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/uci_tools.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pss.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pmch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/uci_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pucch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/phich_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pbch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_tools_common_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/prach_extern.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_tools_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/transport_proto.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/prach.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/prach_common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/phich.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dlsch_coding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/pilots.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/dci_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/mdci.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/impl_defs_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_eNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/types_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_adjust_gain.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_nr_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_vars.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/sldch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/pucch_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/pbch_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/pmch_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/slsch.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/get_pmi.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/rar_tools_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/phich_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/pcfich_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/slss.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/dci_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/sss_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/uci_tools_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/LTE_UE_TRANSPORT/pch_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/sse_intrin.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/impl_defs_top.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/impl_defs_nr.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/impl_defs_lte_NB_IoT.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_extern_nr_ue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/types.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/defs_UE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/file_output.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/sqrt.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cdot_prod.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/phy_scope_interface.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/oai_dfts_neon.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cmult_vv.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cmult_sv.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/dB_routines.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/dfts_load.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/log2_approx.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/phy_scope_interface.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/simde_operations.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lut.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/nr_phy_scope.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/nr_phy_scope.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lte_phy_scope.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/nr_phy_qt_scope.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/cadd_vv.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/phy_scope.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/signal_energy.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/oai_dfts.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lte_ue_scope.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/lte_phy_scope.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/tools_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/TOOLS/alaw_lut.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_vars_nr_ue.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-ru.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/softmodem-common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-softmodem.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/stats.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-gnb.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-softmodem-common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/create_tasks_mbms.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/create_tasks_ue.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/create_tasks.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/softmodem-common.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/rt_profiling.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/create_tasks.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-uesoftmodem.c \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-uesoftmodem.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/thread-common.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-softmodem.h \
-@CMAKE_CURRENT_SOURCE_DIR@/../executables/nr-ue.c
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_vars_ue.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/sse_intrin.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/impl_defs_lte_NB_IoT.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/phy_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_ESTIMATION/nr_freq_equalization.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/proto.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/socket.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/socket.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/ETH_TRANSPORT/defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/adc.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/dac.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/rf.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/RF/rf.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/multipath_channel.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/taus.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/rangen_double.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/scm_corrmat.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/multipath_tv_channel.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/abstraction.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/random_channel.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/phase_noise.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/channel_sim.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SIMULATION/TOOLS/sim.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_frame_config_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/harq_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/fapi_nr_ue_l1.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_frame_config_nr_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/pucch_uci_ue_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/harq_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_procedures_nr_ue.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/pucch_uci_ue_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/phy_sch_processing_time.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/fapi_nr_ue_l1.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR_UE/defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/fapi_l1.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/prach_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/nfapi_nr_dummy.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/sched_common_extern.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/phy_procedures_lte_common.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/phy_procedures_lte_eNb.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/sched_common.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/fapi_l1.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/ru_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED/sched_eNB.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_UE/sched_UE.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/phy_frame_config_nr.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/phy_frame_config_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/nr_prach_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/fapi_nr_l1.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/phy_procedures_nr_gNB.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/sched_nr.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/fapi_nr_l1.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../openair1/SCHED_NR/nr_ru_procedures.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/ETHERNET/if_defs.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/ETHERNET/ethernet_lib.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/record_player.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/record_player.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/common_lib.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/COMMON/common_lib.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/iqplayer/iqplayer_lib.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/rfsimulator/simulator.c \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/rfsimulator/rfsimulator.h \
+@CMAKE_CURRENT_SOURCE_DIR@/../radio/rfsimulator/apply_channelmod.c
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
diff --git a/doc/E1-design.md b/doc/E1-design.md
index 6f9e8f4edd..983013dce7 100644
--- a/doc/E1-design.md
+++ b/doc/E1-design.md
@@ -2,38 +2,55 @@
# 1. Introduction
-E1 is named for the interface that lies between the nodes CU Control Plane (CUCP) and CU User Plane (CUUP). Once the nodes are configured, all user plane traffic flows through CUUP.
+E1 is the interface that lies between the nodes CU Control Plane (CUCP) and CU User Plane (CUUP). Once the nodes are configured, all user plane traffic flows through CUUP.
-The E1 design in OAI follows the 3GPP specification in TS 38.460. The code design on E1 in OAI is very similar to
-F1. The ITTI message passing mechanism is used to exchange messages between E1AP thread, SCTP thread and RRC thread.
-
-The following sequence chart shows the current E1AP message flow.
+The E1 design in OAI follows the 3GPP specification in TS 38.460/463. The code
+design on E1 in OAI is very similar to F1: OAI uses E1 internally to set up
+bearers, even in monolithic gNB, where the actual "way" the messages are passed
+is abstracted through function pointers. More specifically, there are handlers
+that handle the E1 messages as shown below, *which are the same* no matter if
+the CU is integrated or separate in CU-CP/UP. The below sequence diagram lists
+the handlers that are executed and the current E1AP message flow (SCTP
+connection setup only in split-mode, the rest is the same for CU):
```mermaid
sequenceDiagram
participant c as CUCP
participant u as CUUP
- u->>c: SCTP new association
- c->>u: SCTP new association response
- Note over u: Create UDP sockets for F1-U and N3
+ u->c: SCTP connection setup (in split mode)
u->>c: E1AP Setup Request
+ Note over c: Execute rrc_gNB_process_e1_setup_req()
c->>u: E1AP Setup Response
+
Note over c: Receives PDU session setup request from AMF
c->>u: Bearer Context Setup Request
- Note over u: Configure DRBs and create GTP Tunnels for F1-U and N3
+ Note over u: Execute e1_bearer_context_setup()
Configure DRBs and create GTP Tunnels for F1-U and N3
u->>c: Bearer Context Setup Response
- Note over c: Sends F1-U UL TNL info to DU and receives DL TNL info
+ Note over c: Execute rrc_gNB_process_e1_setup_req()
Sends F1-U UL TNL info to DU and receives DL TNL info
+
c->>u: Bearer Context Modification Request
- Note over u: Updates GTP Tunnels with received info
+ Note over u: Execute e1_bearer_context_modif()
Updates GTP Tunnels with received info
+ u->>c: Bearer Context Modification Response
+ Note over c: Execute rrc_gNB_process_e1_bearer_context_modif_resp()
+
+ Note over c: UE release triggered
+ c->>u: Bearer Context Release Request
+ Note over u: Execute e1_bearer_release_cmd()
Frees GTP tunnels, PDCP data etc
+ u->>c: Bearer Context Release Complete
+ Note over c: Execute rrc_gNB_process_e1_bearer_context_release_cplt()
```
-_Note that the E1 bearer release procedures are currently not implemented._
+The files that implement the callback towards these handlers are in
+- `cucp_cuup_direct.c`: integrated CU (for CP=>UP messages)
+- `cucp_cuup_e1ap.c`: E1 split mode (for CP=>UP messages)
+- `cuup_cucp_direct.c`: integrated CU (for UP=>CP messages)
+- `cuup_cucp_e1ap.c`: E1 split mode (for UP=>CP messages)
# 2. Running the E1 Split
## 2.1 Configuration File
-The gNB is started based on the node type that is specified in the configuration file. To start a gNB instance in CUCP or CUUP, the `tr_s_preference` should be set to "f1" and the config member `E1_INTERFACE` should be present in the config file. The `type` parameter within the `E1_INTERFACE` should be set to `cp`, and `nr-softmodem` should be used to run a CU-CP. The type should be `up` and `nr-cuup` should be used to run the CU-UP. Further, there are the parameters `ipv4_cucp` and `ipv4_cuup` to specify the IP addresses of the respective network functions.
+The gNB is started based on the node type that is specified in the configuration file. To start a gNB instance in CUCP or CUUP, the `tr_s_preference` should be set to "f1" and the config member `E1_INTERFACE` should be present in the config file. The `type` parameter within the `E1_INTERFACE` should be set to `cp`, and executable `nr-softmodem` should be used to run a CU-CP. The type should be `up` and executable `nr-cuup` should be used to run the CU-UP. Further, there are the parameters `ipv4_cucp` and `ipv4_cuup` to specify the IP addresses of the respective network functions.
For CUCP, a typical `E1_INTERFACE` config looks like
```
@@ -62,7 +79,7 @@ One could take an existing CU configuration file and add the above parameters to
The CUUP uses the IP address specified in `local_s_address` for F1-U and `GNB_IPV4_ADDRESS_FOR_NGU` for N3 links. Note that `local_s_address` is under `gNBs` and `GNB_IPV4_ADDRESS_FOR_NGU` is part of the `NETWORK_INTERFACES` config member.
-Alternatively, you can use the config files `ci-scripts/conf_files/gnb-cucp.sa.conf` and `ci-scripts/conf_files/gnb-cuup.sa.conf` which are already in the repository.
+Alternatively, you can use the config files `ci-scripts/conf_files/gnb-cucp.sa.f1.conf` and `ci-scripts/conf_files/gnb-cuup.sa.f1.conf`.
## 2.2 Steps to Run the Split in rfsimulator with OAI UE
@@ -73,7 +90,7 @@ Note: A 5G core must be running at this point. Steps to start the OAI 5G core ca
1. Start the CUCP first by running the following command
```
-sudo ./nr-softmodem -O ../../../ci-scripts/conf_files/gnb-cucp.sa.conf --gNBs.[0].min_rxtxtime 6 --sa
+sudo ./nr-softmodem -O ../../../ci-scripts/conf_files/gnb-cucp.sa.f1.conf --gNBs.[0].min_rxtxtime 6 --sa
```
Note that `min_rxtxtime` should be set to `6` only when you are connecting an OAI UE to the gNB.
@@ -82,7 +99,7 @@ Note that `min_rxtxtime` should be set to `6` only when you are connecting an OA
CUUP (has its own executable):
```
-sudo ./nr-cuup -O ../../../ci-scripts/conf_files/gnb-cuup.sa.conf --sa
+sudo ./nr-cuup -O ../../../ci-scripts/conf_files/gnb-cuup.sa.f1.conf --sa
```
DU:
@@ -106,3 +123,25 @@ You can also run the nodes on different machines. If you do so please change the
{width=1200}
[PDF version](images/e1-archi.pdf) | [LaTeX/TikZ version](img/e1-archi.tex) if you want to modify to reflect your setup
+
+# 4. Multiple CU-UP
+
+It is possible to connect multiple CU-UP to the same CU-CP. In the handler of
+the E1 Setup Request, the CU-CP verifies that the PLMN(s) (MCC, MNC) between
+both nodes match, and that no CU-UP with the same ID exists. Note that the
+NSSAIs for the CU-UPs can be different.
+
+During attach, the following rules are used to select a CU-UP at the CU-CP, in
+order:
+- Select a CU-UP based on slice identifiers:
+ - If both the SST and SD match exactly, that CU-UP is selected. (If multiple
+ have the same NSSAI, the first is always selected.)
+ - Otherwise, the first CU-UP with the same SST but different SD is selected.
+- Round-robin across all CU-UPs.
+- The first CU-UP.
+- If no CU-UP is selected, the CU-CP asserts.
+
+Note that CU-UPs are not released from CU-CP internal structures. That means
+that you have to restart the CU-CP if you want to connect the CU-UP again
+(e.g., after a crash). The CU-CP might also misfunction during attach if a
+CU-UP was connected, but disconnected in the meantime.
diff --git a/executables/create_tasks_ue.c b/executables/create_tasks_ue.c
index 2172827b03..728e4546b5 100644
--- a/executables/create_tasks_ue.c
+++ b/executables/create_tasks_ue.c
@@ -47,8 +47,8 @@ int create_tasks_ue(uint32_t ue_nb) {
if (users == NULL) abort();
users->count = ue_nb;
-
- if (itti_create_task (TASK_NAS_UE, nas_ue_task, users) < 0) {
+ ittiTask_parms_t parms = {users, NULL};
+ if (itti_create_task(TASK_NAS_UE, nas_ue_task, &parms) < 0) {
LOG_E(NAS, "Create task for NAS UE failed\n");
return -1;
}
diff --git a/executables/nr-cuup.c b/executables/nr-cuup.c
index 2992953ef0..d83137c328 100644
--- a/executables/nr-cuup.c
+++ b/executables/nr-cuup.c
@@ -95,12 +95,6 @@ void nr_rlc_add_drb(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Beare
abort();
}
-int nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ctxt_pP, const gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp_p, int offset)
-{
- abort();
- return 0;
-}
-
void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_context_p, e1ap_bearer_setup_resp_t *e1ap_resp)
{
abort();
@@ -108,14 +102,14 @@ void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_contex
f1ap_cudu_inst_t *getCxt(instance_t instanceP)
{
- abort();
- return NULL;
-}
-
-NR_DRB_ToAddModList_t *fill_DRB_configList(gNB_RRC_UE_t *ue)
-{
- abort();
- return NULL;
+ // the E1 module uses F1's getCxt() to decide whether there is F1-U and if
+ // so, what is the GTP instance. In the CU-UP, we don't start the F1 module,
+ // and instead, E1 handles the GTP-U endpoint. In the following, we fake the
+ // instance and put the right GTP-U instance number in.
+ const e1ap_upcp_inst_t *e1inst = getCxtE1(instanceP);
+ static f1ap_cudu_inst_t fake = {0};
+ fake.gtpInst = e1inst->gtpInstF1U;
+ return &fake;
}
int main(int argc, char **argv)
@@ -134,7 +128,7 @@ int main(int argc, char **argv)
AssertFatal(rc >= 0, "Create task for GTPV1U failed\n");
rc = itti_create_task(TASK_CUUP_E1, E1AP_CUUP_task, NULL);
AssertFatal(rc >= 0, "Create task for CUUP E1 failed\n");
- nr_pdcp_layer_init();
+ nr_pdcp_layer_init(true);
cu_init_f1_ue_data(); // for CU-UP/CP mapping: we use the same
MessageDef *msg = RCconfig_NR_CU_E1(true);
AssertFatal(msg != NULL, "Send init to task for E1AP UP failed\n");
diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index e4a9e4e5e6..3738fa3f28 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file lte-enb.c
+/*! \file nr-gnb.c
* \brief Top-level threads for gNodeB
* \author R. Knopp, F. Kaltenberger, Navid Nikaein
* \date 2012
@@ -290,7 +290,7 @@ void rx_func(void *param)
pushTpool(&gNB->threadPool, res);
}
} else if (get_softmodem_params()->continuous_tx) {
- notifiedFIFO_elt_t *res = pullTpool(&gNB->L1_tx_free, &gNB->threadPool);
+ notifiedFIFO_elt_t *res = pullNotifiedFIFO(&gNB->L1_tx_free);
if (res == NULL)
return; // Tpool has been stopped
processingData_L1tx_t *syncMsg = (processingData_L1tx_t *)NotifiedFifoData(res);
@@ -420,10 +420,8 @@ void *nrL1_stats_thread(void *param) {
// two parallel L1 tx threads.
void *tx_reorder_thread(void* param) {
PHY_VARS_gNB *gNB = (PHY_VARS_gNB *)param;
- notifiedFIFO_elt_t *resL1Reserve = NULL;
-
- resL1Reserve = pullTpool(&gNB->L1_tx_out, &gNB->threadPool);
+ notifiedFIFO_elt_t *resL1Reserve = pullNotifiedFIFO(&gNB->L1_tx_out);
AssertFatal(resL1Reserve != NULL, "pullTpool() did not return start message in %s\n", __func__);
int next_tx_slot=((processingData_L1tx_t *)NotifiedFifoData(resL1Reserve))->slot;
@@ -436,15 +434,15 @@ void *tx_reorder_thread(void* param) {
if (((processingData_L1tx_t *)NotifiedFifoData(resL1))->slot != next_tx_slot) {
LOG_E(PHY,"order mistake\n");
resL1Reserve = NULL;
- resL1 = pullTpool(&gNB->L1_tx_out, &gNB->threadPool);
+ resL1 = pullNotifiedFIFO(&gNB->L1_tx_out);
}
- } else {
- resL1 = pullTpool(&gNB->L1_tx_out, &gNB->threadPool);
+ } else {
+ resL1 = pullNotifiedFIFO(&gNB->L1_tx_out);
if (resL1 != NULL && ((processingData_L1tx_t *)NotifiedFifoData(resL1))->slot != next_tx_slot) {
if (resL1Reserve)
LOG_E(PHY,"error, have a stored packet, then a second one\n");
resL1Reserve = resL1;
- resL1 = pullTpool(&gNB->L1_tx_out, &gNB->threadPool);
+ resL1 = pullNotifiedFIFO(&gNB->L1_tx_out);
if (((processingData_L1tx_t *)NotifiedFifoData(resL1))->slot != next_tx_slot)
LOG_E(PHY,"error, pull two msg, none is good\n");
}
diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index 553f21a9fb..75a9e0dc24 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -80,7 +80,6 @@ unsigned short config_frames[4] = {2,9,11,13};
#include "nfapi/oai_integration/vendor_ext.h"
#include "gnb_config.h"
#include "openair2/E1AP/e1ap_common.h"
-#include "openair2/E1AP/e1ap_api.h"
#ifdef E2_AGENT
#include "openair2/E2AP/flexric/src/agent/e2_agent_api.h"
@@ -403,12 +402,16 @@ static int create_gNB_tasks(ngran_node_t node_type)
if (node_type == ngran_gNB_CU || node_type == ngran_gNB) {
MessageDef *msg = RCconfig_NR_CU_E1(false);
instance_t inst = 0;
- createE1inst(UPtype, inst, &E1AP_SETUP_REQ(msg));
+ createE1inst(UPtype, inst, &E1AP_REGISTER_REQ(msg).net_config, NULL);
cuup_init_n3(inst);
- itti_free(TASK_UNKNOWN, msg);
- getCxtE1(inst)->same_process = true;
- ;
RC.nrrrc[gnb_id_start]->e1_inst = inst; // stupid instance !!!*/
+
+ /* send E1 Setup Request to RRC */
+ MessageDef *new_msg = itti_alloc_new_message(TASK_GNB_APP, 0, E1AP_SETUP_REQ);
+ E1AP_SETUP_REQ(new_msg) = E1AP_REGISTER_REQ(msg).setup_req;
+ new_msg->ittiMsgHeader.originInstance = -1; /* meaning, it is local */
+ itti_send_msg_to_task(TASK_RRC_GNB, 0 /*unused by callee*/, new_msg);
+ itti_free(TASK_UNKNOWN, msg);
}
//Use check on x2ap to consider the NSA scenario
@@ -562,7 +565,7 @@ void init_pdcp(void) {
LINK_ENB_PDCP_TO_GTPV1U_BIT;
if (!NODE_IS_DU(get_node_type())) {
- nr_pdcp_layer_init();
+ nr_pdcp_layer_init(get_node_type() == ngran_gNB_CUCP);
nr_pdcp_module_init(pdcp_initmask, 0);
}
}
diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index 64653a280b..8cb2a29d15 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -743,7 +743,8 @@ void *UE_thread(void *arg)
//this thread should be over the processing thread to keep in real time
PHY_VARS_NR_UE *UE = (PHY_VARS_NR_UE *) arg;
// int tx_enabled = 0;
- openair0_timestamp timestamp, writeTimestamp;
+ openair0_timestamp timestamp = 0;
+ openair0_timestamp writeTimestamp = 0;
void *rxp[NB_ANTENNAS_RX];
int start_rx_stream = 0;
fapi_nr_config_request_t *cfg = &UE->nrUE_config;
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index e5332e8e5e..c970b1d09d 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -197,7 +197,8 @@ int create_tasks_nrue(uint32_t ue_nb) {
if (ue_nb > 0) {
LOG_I(NR_RRC,"create TASK_RRC_NRUE \n");
- if (itti_create_task (TASK_RRC_NRUE, rrc_nrue_task, NULL) < 0) {
+ const ittiTask_parms_t parmsRRC = {NULL, rrc_nrue};
+ if (itti_create_task(TASK_RRC_NRUE, rrc_nrue_task, &parmsRRC) < 0) {
LOG_E(NR_RRC, "Create task for RRC UE failed\n");
return -1;
}
@@ -208,7 +209,8 @@ int create_tasks_nrue(uint32_t ue_nb) {
return -1;
}
}
- if (itti_create_task (TASK_NAS_NRUE, nas_nrue_task, NULL) < 0) {
+ const ittiTask_parms_t parmsNAS = {NULL, nas_nrue};
+ if (itti_create_task(TASK_NAS_NRUE, nas_nrue_task, &parmsNAS) < 0) {
LOG_E(NR_RRC, "Create task for NAS UE failed\n");
return -1;
}
@@ -380,7 +382,7 @@ static void init_pdcp(int ue_id) {
if (get_softmodem_params()->nsa && rlc_module_init(0) != 0) {
LOG_I(RLC, "Problem at RLC initiation \n");
}
- nr_pdcp_layer_init();
+ nr_pdcp_layer_init(false);
nr_pdcp_module_init(pdcp_initmask, ue_id);
pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req);
pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
diff --git a/executables/rt_profiling.h b/executables/rt_profiling.h
index e37c37bb1e..03dcf94517 100644
--- a/executables/rt_profiling.h
+++ b/executables/rt_profiling.h
@@ -20,13 +20,13 @@
* contact@openairinterface.org
*/
-/*! \file time_profiling.h
- * \brief Definitions for proflling real-time scheduling
- * \author
+/*! \file rt_profiling.h
+ * \brief Definitions for proflling real-time scheduling
+ * \author
* \date 2022
* \version 0.1
* \company Eurecom
- * \email:
+ * \email:
* \note
* \warning
*/
diff --git a/executables/softmodem-common.c b/executables/softmodem-common.c
index bdf942226f..7c32e2ea23 100644
--- a/executables/softmodem-common.c
+++ b/executables/softmodem-common.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file lte-softmodem-common.c
+/*! \file softmodem-common.c
* \brief common code for 5G and LTE softmodem main xNB and UEs source (nr-softmodem.c, lte-softmodem.c...)
* \author Nokia BellLabs France, francois Taburet
* \date 2020
@@ -105,10 +105,10 @@ void get_common_options(uint32_t execmask) {
paramdef_t cmdline_params[] = CMDLINE_PARAMS_DESC;
checkedparam_t cmdline_CheckParams[] = CMDLINE_PARAMS_CHECK_DESC;
- int numparams = sizeof(cmdline_params) / sizeof(paramdef_t);
+ int numparams = sizeofArray(cmdline_params);
config_set_checkfunctions(cmdline_params, cmdline_CheckParams, numparams);
- config_get(cmdline_params, sizeof(cmdline_params) / sizeof(paramdef_t), NULL);
- nfapi_index = config_paramidx_fromname(cmdline_params, sizeof(cmdline_params) / sizeof(paramdef_t),"nfapi");
+ config_get(cmdline_params, numparams, NULL);
+ nfapi_index = config_paramidx_fromname(cmdline_params, numparams, "nfapi");
AssertFatal(nfapi_index >= 0,"Index for nfapi config option not found!");
nfapi_mode = config_get_processedint(&cmdline_params[nfapi_index]);
diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h
index aa26dd1afc..e538ea5f25 100644
--- a/executables/softmodem-common.h
+++ b/executables/softmodem-common.h
@@ -19,13 +19,13 @@
* contact@openairinterface.org
*/
-/*! \file lte-softmodem-common.h
+/*! \file softmodem-common.h
* \brief Top-level threads for eNodeB
- * \author
+ * \author
* \date 2012
* \version 0.1
* \company Eurecom
- * \email:
+ * \email:
* \note
* \warning
*/
@@ -109,6 +109,7 @@ 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"
/*-----------------------------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters common to eNodeB and UE */
@@ -190,6 +191,7 @@ 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}, \
}
// clang-format on
@@ -238,6 +240,7 @@ extern int usrp_tx_thread;
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
+ { .s5 = { NULL } }, \
}
// clang-format on
@@ -349,6 +352,7 @@ typedef struct {
int sync_ref;
int nid1;
int nid2;
+ int no_itti;
} softmodem_params_t;
extern uint64_t get_softmodem_optmask(void);
diff --git a/nfapi/oai_integration/nfapi_pnf.c b/nfapi/oai_integration/nfapi_pnf.c
index 3536f23a08..33f85a97ea 100644
--- a/nfapi/oai_integration/nfapi_pnf.c
+++ b/nfapi/oai_integration/nfapi_pnf.c
@@ -1112,7 +1112,7 @@ notifiedFIFO_elt_t *l1tx_message_extract(PHY_VARS_gNB *gNB, int frame, int slot)
notifiedFIFO_elt_t *res;
//TODO: This needs to be reworked for nfapi to work
- res = pullTpool(&gNB->L1_tx_free, &gNB->threadPool);
+ res = pullNotifiedFIFO(&gNB->L1_tx_free);
return res;
}
diff --git a/openair1/PHY/CODING/ccoding_byte.c b/openair1/PHY/CODING/ccoding_byte.c
index 576a947cff..dc96f6e2ca 100644
--- a/openair1/PHY/CODING/ccoding_byte.c
+++ b/openair1/PHY/CODING/ccoding_byte.c
@@ -246,5 +246,3 @@ main() {
printf("\n");
}
#endif
-
-/** @}*/
diff --git a/openair1/PHY/CODING/ccoding_byte_lte.c b/openair1/PHY/CODING/ccoding_byte_lte.c
index 5329dd42fb..becdc59074 100644
--- a/openair1/PHY/CODING/ccoding_byte_lte.c
+++ b/openair1/PHY/CODING/ccoding_byte_lte.c
@@ -325,5 +325,3 @@ main() {
printf("\n");
}
#endif
-
-/** @}*/
diff --git a/openair1/PHY/CODING/coding_defs.h b/openair1/PHY/CODING/coding_defs.h
index 69070c5544..efc81620af 100644
--- a/openair1/PHY/CODING/coding_defs.h
+++ b/openair1/PHY/CODING/coding_defs.h
@@ -504,5 +504,5 @@ int nr_rate_matching_ldpc_rx(uint32_t Tbslbrm,
decoder_if_t phy_threegpplte_turbo_decoder;
decoder_if_t phy_threegpplte_turbo_decoder8;
decoder_if_t phy_threegpplte_turbo_decoder16;
-
+/** @} */
#endif
diff --git a/openair1/PHY/CODING/coding_load.c b/openair1/PHY/CODING/coding_load.c
index 0b9e524690..b8d130150b 100644
--- a/openair1/PHY/CODING/coding_load.c
+++ b/openair1/PHY/CODING/coding_load.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file openair1/PHY/CODING
+/*! \file coding_load.c
* \brief: load library implementing coding/decoding algorithms
* \author Francois TABURET
* \date 2017
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
index 9a235d6a58..bf1e6f3400 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*!\file ldpc_encoder2.c
+/*! \file ldpc_encoder_optim.c
* \brief Defines the optimized LDPC encoder
* \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom)
* \email openair_tech@eurecom.fr
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
index 6ec1c05342..03f974011c 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*!\file ldpc_encoder2.c
+/*! \file ldpc_encoder_optim8seg.c
* \brief Defines the optimized LDPC encoder
* \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom)
* \email openair_tech@eurecom.fr
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
index 8a9df739bf..7bbe9dfa78 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*!\file ldpc_encoder2.c
+/*! \file ldpc_encoder_optim8segmulti.c
* \brief Defines the optimized LDPC encoder
* \author Florian Kaltenberger, Raymond Knopp, Kien le Trung (Eurecom)
* \email openair_tech@eurecom.fr
diff --git a/openair1/PHY/CODING/nrLDPC_load.c b/openair1/PHY/CODING/nrLDPC_load.c
index 7de9276efa..b75c070a38 100644
--- a/openair1/PHY/CODING/nrLDPC_load.c
+++ b/openair1/PHY/CODING/nrLDPC_load.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file openair1/PHY/CODING/coding_nr_load.c
+/*! \file nrLDPC_load.c
* \brief: load library implementing coding/decoding algorithms
* \author Francois TABURET
* \date 2020
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
index 4df7557495..1e065dd3a7 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*!\file PHY/CODING/nrPolar_tools/nr_polar_procedures.h
+/*! \file nr_polar_procedures.c
* \brief
* \author Turker Yilmaz
* \date 2018
@@ -129,17 +129,13 @@ void nr_polar_uxG(uint64_t *D, const uint64_t *u, const uint64_t **G_N_tab, uint
int n_ones = 0;
for (int a = 0; a < N_array; a++) {
uint64_t uxG = u[a] & Gn[a];
- for (int m = 0; m < 64; m++) {
- if (((uxG >> m) & 1) == 1) {
- n_ones++;
- }
- }
+ if (uxG != 0)
+ n_ones += count_bits_set(uxG);
}
- uint64_t bit = n_ones % 2;
int n1 = n >> 6;
int n2 = n - (n1 << 6);
- D[n1] |= bit << n2;
+ D[n1] |= ((uint64_t)n_ones & 1) << n2;
}
}
@@ -396,9 +392,9 @@ void nr_polar_rate_matching_pattern(uint16_t *rmp,
uint16_t E)
{
uint8_t i;
- uint16_t *d, *y, ind;
+ uint16_t *d, ind;
d = (uint16_t *)malloc(sizeof(uint16_t) * N);
- y = (uint16_t *)malloc(sizeof(uint16_t) * N);
+ uint16_t* y = calloc(N, sizeof(uint16_t));
for (int m=0; m<=N-1; m++) d[m]=m;
@@ -416,11 +412,11 @@ void nr_polar_rate_matching_pattern(uint16_t *rmp,
} else {
if ( (K/(double)E) <= (7.0/16) ) { //puncturing
for (int k=0; k<=E-1; k++) {
- rmp[k]=y[k+N-E];
+ rmp[k]=y[k+N-E];
}
} else { //shortening
for (int k=0; k<=E-1; k++) {
- rmp[k]=y[k];
+ rmp[k]=y[k];
}
}
}
diff --git a/openair1/PHY/CODING/nr_polar_init.c b/openair1/PHY/CODING/nr_polar_init.c
index bbc51f416b..23830cc010 100644
--- a/openair1/PHY/CODING/nr_polar_init.c
+++ b/openair1/PHY/CODING/nr_polar_init.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*!\file PHY/CODING/nr_polar_init.h
+/*! \file nr_polar_init.c
* \brief
* \author Turker Yilmaz, Raymond Knopp
* \date 2018
@@ -28,7 +28,7 @@
* \email turker.yilmaz@eurecom.fr, raymond.knopp@eurecom.fr
* \note
* \warning
-*/
+ */
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include "PHY/NR_TRANSPORT/nr_dci.h"
diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c
index 3fa74edb1a..4601f97b6e 100644
--- a/openair1/PHY/INIT/lte_parms.c
+++ b/openair1/PHY/INIT/lte_parms.c
@@ -151,6 +151,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,
frame_parms->ofdm_symbol_size = 256*osf;
frame_parms->samples_per_tti = 3840*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 90;
+ AssertFatal(log2_osf < 4 ,"log2_osf %d will cause undefined behaviour \n", log2_osf);
frame_parms->nb_prefix_samples>>=(3-log2_osf);
frame_parms->nb_prefix_samples0>>=(3-log2_osf);
frame_parms->N_RBGS = 2;
diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h
index 2116ba9c02..daf6eafa42 100644
--- a/openair1/PHY/INIT/phy_init.h
+++ b/openair1/PHY/INIT/phy_init.h
@@ -42,7 +42,7 @@
*/
/*!
-\fn int l1_top_init_eNB(void)
+\fn l1_north_init_eNB
\brief Initialize north interface for L1
@returns 0 on success
*/
@@ -74,9 +74,9 @@ int init_lte_ue_signal(PHY_VARS_UE *phy_vars_ue,
/*!
\brief Allocate and initialize the PHY variables releated to the transport channel buffers (UL/DL)
@param ue Pointer to UE L1 context
-@param abstraction flag Indicates that abstraction is used in L1
+@param abstraction_flag Indicates that abstraction is used in L1
*/
-void init_lte_ue_transport(PHY_VARS_UE *ue,int absraction_flag);
+void init_lte_ue_transport(PHY_VARS_UE *ue, int abstraction_flag);
/*!
\brief Allocate and initialize the PHY variables relevant to the LTE implementation (eNB).
@@ -99,14 +99,20 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNb,
*/
void phy_free_lte_eNB(PHY_VARS_eNB *phy_vars_eNb);
-/** \brief Configure LTE_DL_FRAME_PARMS with components derived after initial synchronization (MIB decoding + primary/secondary synch).
-\details The basically allows configuration of \f$N_{\mathrm{RB}}^{\mathrm{DL}}\f$, the cell id \f$N_{\mathrm{ID}}^{\mathrm{cell}}\f$, the normal/extended prefix mode, the frame type (FDD/TDD), \f$N_{\mathrm{cp}}\f$, the number of TX antennas at eNB (\f$p\f$) and the number of PHICH groups, \f$N_{\mathrm{group}}^{\mathrm{PHICH}}\f$
-@param lte_frame_parms pointer to LTE parameter structure
+/** \brief Configure LTE_DL_FRAME_PARMS with components derived after initial synchronization (MIB decoding + primary/secondary
+synch). \details The basically allows configuration of \f$N_{\mathrm{RB}}^{\mathrm{DL}}\f$, the cell id
+\f$N_{\mathrm{ID}}^{\mathrm{cell}}\f$, the normal/extended prefix mode, the frame type (FDD/TDD), \f$N_{\mathrm{cp}}\f$, the number
+of TX antennas at eNB (\f$p\f$) and the number of PHICH groups, \f$N_{\mathrm{group}}^{\mathrm{PHICH}}\f$
+@param Mod_id
+@param CC_id
+@param eutra_band
@param N_RB_DL Number of DL resource blocks
@param Nid_cell Cell ID
@param Ncp Normal/Extended Prefix flag
@param p_eNB Number of eNB TX antennas
@param phich_config Pointer to PHICH_CONFIG_COMMON
+@param dl_CarrierFreq
+@param ul_CarrierFreq
*/
void phy_config_mib_eNB(int Mod_id,
int CC_id,
@@ -296,6 +302,7 @@ void phy_config_sib13_eNB(module_id_t Mod_id,
@param index index of the node
@param cba_rnti rnti for the cba transmission
@param num_active_cba_groups num active cba group
+@param cba_group_id
*/
void phy_config_cba_rnti (module_id_t Mod_id,int CC_id,eNB_flag_t eNB_flag, uint8_t index, rnti_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups);
@@ -390,5 +397,6 @@ void phy_config_update_sib13_request(PHY_Config_t *phy_config);
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
void fill_subframe_mask(PHY_VARS_eNB *eNB);
+/** @}*/
#endif
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_estimation.h b/openair1/PHY/LTE_ESTIMATION/lte_estimation.h
index fc4ee18905..4bc9b5d875 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_estimation.h
+++ b/openair1/PHY/LTE_ESTIMATION/lte_estimation.h
@@ -32,13 +32,6 @@
/*!\brief Timing drift hysterisis in samples*/
#define SYNCH_HYST 2
-/*!
-\brief This function is used for time-frequency scanning prior to complete cell search. It scans
-over the entire LTE band for maximum correlation and keeps the 10 best scores and the correspoding frequency offset (5 kHz granularity) for each of the 3 PSS sequences.
-\param ue Pointer to UE variables
-\param band index of lte band
-\param DL_freq Central RF Frequency in Hz
-*/
/*!
\brief This function allocates memory needed for the synchronization.
\param frame_parms LTE DL frame parameter structure
@@ -151,6 +144,7 @@ This function computes the time domain channel response, finds the peak and adju
\param frame_parms LTE DL frame parameter structure
\param phy_vars_ue Pointer to UE PHY data structure
\param eNb_id
+\param subframe
\param clear If clear==1 moving average filter is reset
\param coef Coefficient of the moving average filter (Q1.15)
*/
@@ -181,6 +175,7 @@ void lte_ue_measurements_emul(PHY_VARS_UE *phy_vars_ue,
/*! \brief Function to return the path-loss based on the UE cell-specific reference signal strength and transmission power of eNB
@param Mod_id Module ID for UE
+@param CC_id
@param eNB_index Index of eNB on which to act
@returns Path loss in dB
*/
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index 8587bf1f70..e80de0798d 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -118,10 +118,8 @@ void lte_sync_time_free(void) {
#define SHIFT 17
-
-int lte_sync_time(int **rxdata, ///rx data in time domain
- LTE_DL_FRAME_PARMS *frame_parms,
- int *eNB_id) {
+int lte_sync_time(int **rxdata, LTE_DL_FRAME_PARMS *frame_parms, int *eNB_id)
+{
// perform a time domain correlation using the oversampled sync sequence
unsigned int n, ar, s, peak_pos, peak_val, sync_source;
struct complexd sync_out[3]= {{0}}, sync_out2[3]= {{0}};
@@ -168,7 +166,6 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
return(peak_pos);
}
-
int ru_sync_time_init(RU_t *ru) { // LTE_UE_COMMON *common_vars
/*
int16_t dmrs[2048];
diff --git a/openair1/PHY/LTE_REFSIG/defs_NB_IoT.h b/openair1/PHY/LTE_REFSIG/defs_NB_IoT.h
index 8f0b7b8c4c..13c6130ad3 100644
--- a/openair1/PHY/LTE_REFSIG/defs_NB_IoT.h
+++ b/openair1/PHY/LTE_REFSIG/defs_NB_IoT.h
@@ -1,16 +1,16 @@
/*******************************************************************************
*******************************************************************************/
-/*! \file PHY/LTE_REFSIG/defs_NB_IoT.c
-* \function called by lte_dl_cell_spec_NB_IoT.c , TS 36-211, V13.4.0 2017-02
-* \author M. KANJ
-* \date 2017
-* \version 0.0
-* \company bcom
-* \email: matthieu.kanj@b-com.com
-* \note
-* \warning
-*/
+/*! \file defs_NB_IoT.h
+ * \function called by lte_dl_cell_spec_NB_IoT.c , TS 36-211, V13.4.0 2017-02
+ * \author M. KANJ
+ * \date 2017
+ * \version 0.0
+ * \company bcom
+ * \email: matthieu.kanj@b-com.com
+ * \note
+ * \warning
+ */
/* Definitions for NB_IoT Reference signals */
@@ -58,3 +58,4 @@ void generate_ul_ref_sigs_rx_NB_IoT(void);
void free_ul_ref_sigs_NB_IoT(void);
#endif
+/** @}*/
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
index 1b9c17133c..e2cff34682 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_REFSIG/lte_dl_ue_spec.c
-* \brief Top-level routines for generating UE-specific Reference signals from 36-211, V11.3.0 2013-06
-* \author R. Knopp X. Jiang
-* \date 2015
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr xiwen.jiang@eurecom.fr
-* \note
-* \warning
-*/
+/*! \file lte_dl_uespec.c
+ * \brief Top-level routines for generating UE-specific Reference signals from 36-211, V11.3.0 2013-06
+ * \author R. Knopp X. Jiang
+ * \date 2015
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr xiwen.jiang@eurecom.fr
+ * \note
+ * \warning
+ */
#include
#include
diff --git a/openair1/PHY/LTE_REFSIG/lte_refsig.h b/openair1/PHY/LTE_REFSIG/lte_refsig.h
index 9d3bae503b..b053592798 100644
--- a/openair1/PHY/LTE_REFSIG/lte_refsig.h
+++ b/openair1/PHY/LTE_REFSIG/lte_refsig.h
@@ -186,3 +186,4 @@ int lte_generate_srs(int32_t **txdataF,
#endif
+/** @}*/
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
index 3bc7a32d60..b9d4fbc906 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
@@ -1065,8 +1065,8 @@ int allocate_REs_in_RB_pilots_QPSK_tm2(PHY_VARS_eNB* phy_vars_eNB,
first_re=6;
re=first_re;
x0p=&x0[*jj];
- uint64_t tmp0[4];
- uint64_t tmp1[4];
+ uint64_t tmp0[4] = {0};
+ uint64_t tmp1[4] = {0};
qam4_table_offset=(((uint32_t)x0p[0]))|
(((uint32_t)x0p[1])<<1)|
@@ -1338,8 +1338,8 @@ int allocate_REs_in_RB_pilots_16QAM_tm2(PHY_VARS_eNB* phy_vars_eNB,
first_re=6;
re=first_re;
x0p=&x0[*jj];
- uint64_t tmp0[4];
- uint64_t tmp1[4];
+ uint64_t tmp0[4] = {0};
+ uint64_t tmp1[4] = {0};
qam16_table_offset=(((uint32_t)x0p[0])<<1)|(((uint32_t)x0p[2]))|
(((uint32_t)x0p[1])<<3)|(((uint32_t)x0p[3])<<2) |
@@ -1503,8 +1503,8 @@ int allocate_REs_in_RB_pilots_64QAM_tm2(PHY_VARS_eNB* phy_vars_eNB,
x0p=&x0[*jj];
- uint64_t tmp0[4];
- uint64_t tmp1[4];
+ uint64_t tmp0[4] = {0};
+ uint64_t tmp1[4] = {0};
// 12-bits corresponds to 2 64QAM symbols input which generates 2 64QAM symbols on 2 TX antenna ports
qam64_table_offset=(((uint32_t)x0p[0])<<2)|(((uint32_t)x0p[2])<<1)|(((uint32_t)x0p[4]))|
@@ -1691,7 +1691,8 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
int16_t re_off=re_offset;
uint8_t first_re,last_re;
- int32_t tmp_sample1,tmp_sample2;
+ int32_t tmp_sample1 = 0;
+ int32_t tmp_sample2 = 0;
int16_t tmp_amp=amp;
int s=1;
int mprime2 = mprime,ind,ind_dword,ind_qpsk_symb;
diff --git a/openair1/PHY/LTE_TRANSPORT/prach_extern.h b/openair1/PHY/LTE_TRANSPORT/prach_extern.h
index 04b956d440..6f9654fbb0 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach_extern.h
+++ b/openair1/PHY/LTE_TRANSPORT/prach_extern.h
@@ -76,12 +76,4 @@ uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index);
int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t subframe);
-
-void compute_prach_seq(uint16_t rootSequenceIndex,
- uint8_t prach_ConfigIndex,
- uint8_t zeroCorrelationZoneConfig,
- uint8_t highSpeedFlag,
- frame_type_t frame_type,
- uint32_t X_u[64][839]);
-
#endif
diff --git a/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h b/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h
index d8b17ff263..9edfd257d9 100644
--- a/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h
+++ b/openair1/PHY/LTE_TRANSPORT/proto_NB_IoT.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/proto.h
+/*! \file proto_NB_IoT.h
* \brief Function prototypes for PHY physical/transport channel processing and generation V8.6 2009-03
* \author R. Knopp, F. Kaltenberger
* \date 2011
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_common.h b/openair1/PHY/LTE_TRANSPORT/transport_common.h
index 135f3cdf4b..bc90d44e1e 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_common.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_common.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/transport_commont.h
-* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) common to both eNB/UE
-* \author R. Knopp
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
-* \note
-* \warning
-*/
+/*! \file transport_common.h
+ * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX) common to both eNB/UE
+ * \author R. Knopp
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
+ * \note
+ * \warning
+ */
#ifndef __TRANSPORT_COMMON__H__
#define __TRANSPORT_COMMON__H__
#include "PHY/defs_common.h"
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h
index 57a7b2ec91..4fd2c4f040 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h
@@ -55,7 +55,7 @@ uint8_t get_I_TBS(uint8_t I_MCS);
unsigned char get_I_TBS_UL(unsigned char I_MCS);
/** \brief Compute Q (modulation order) based on downlink I_MCS. Implements table 7.1.7.1-1 from 36.213.
- @param I_MCS
+ @param mcs
@param nb_rb
@return Transport block size */
uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
@@ -63,7 +63,7 @@ uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
uint16_t find_nb_rb_DL(uint8_t mcs, uint32_t bytes, uint16_t nb_rb_max, uint16_t rb_gran);
/** \brief Compute Q (modulation order) based on uplink I_MCS. Implements table 7.1.7.1-1 from 36.213.
- @param I_MCS
+ @param mcs
@param nb_rb
@return Transport block size */
uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb);
@@ -212,45 +212,16 @@ int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame, uint8_t sub
/*!
\brief Helper for MAC, returns number of available PRACH in TDD for a particular configuration index
- @param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
@returns 0-5 depending on number of available prach
*/
uint8_t get_num_prach_tdd(module_id_t Mod_id);
-/*!
- \brief Return the PRACH format as a function of the Configuration Index and Frame type.
- @param prach_ConfigIndex PRACH Configuration Index
- @param frame_type 0-FDD, 1-TDD
- @returns 0-1 accordingly
-*/
-/*
-uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type);
-*/
-
/*!
\brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index
- @param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
@returns 0-5 depending on number of available prach
*/
uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index);
-/*!
- \brief Comp ute DFT of PRACH ZC sequences. Used for generation of prach in UE and reception of PRACH in eNB.
- @param rootSequenceIndex PRACH root sequence
- #param prach_ConfigIndex PRACH Configuration Index
- @param zeroCorrelationZoneConfig PRACH ncs_config
- @param highSpeedFlat PRACH High-Speed Flag
- @param frame_type TDD/FDD flag
- @param Xu DFT output
-*/
-void compute_prach_seq(uint16_t rootSequenceIndex,
- uint8_t prach_ConfigIndex,
- uint8_t zeroCorrelationZoneConfig,
- uint8_t highSpeedFlag,
- frame_type_t frame_type,
- uint32_t X_u[64][839]);
-
-
void init_prach_tables(int N_ZC);
/*!
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h
index d18f3ee442..e356db540e 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/defs.h
-* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
-* \author R. Knopp
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
-* \note
-* \warning
-*/
+/*! \file transport_eNB.h
+ * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
+ * \author R. Knopp
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
+ * \note
+ * \warning
+ */
#ifndef __TRANSPORT_ENB__H__
#define __TRANSPORT_ENB__H__
#include "transport_common.h"
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_proto.h b/openair1/PHY/LTE_TRANSPORT/transport_proto.h
index d40fb5db77..a6765c0fe2 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_proto.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_proto.h
@@ -306,39 +306,29 @@ int mch_modulation_khz_1dot25(int32_t **txdataF,
LTE_DL_FRAME_PARMS *frame_parms,
LTE_eNB_DLSCH_t *dlsch);
-
/** \brief Top-level generation function for eNB TX of MBSFN
@param phy_vars_eNB Pointer to eNB variables
+@param proc
@param a Pointer to transport block
- @param abstraction_flag
*/
void generate_mch_khz_1dot25(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,uint8_t *a);
-
/** \brief Top-level generation function for eNB TX of MBSFN
@param phy_vars_eNB Pointer to eNB variables
+@param proc
@param a Pointer to transport block
- @param abstraction_flag
-
*/
void generate_mch(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,uint8_t *a);
/** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals)
@param phy_vars_eNB Pointer to eNB variables
- @param proc Pointer to RXn-TXnp4 proc information
@param mcs MCS for MBSFN
@param ndi new data indicator
- @param rdvix
+ @param rvidx
*/
void fill_eNB_dlsch_MCH(PHY_VARS_eNB *phy_vars_eNB,int mcs,int ndi,int rvidx);
-/** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals)
- @param phy_vars_ue Pointer to UE variables
- @param mcs MCS for MBSFN
- @param eNB_id index of eNB in ue variables
-*/
-
/** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals)
for N subframes.
@param phy_vars_eNB Pointer to eNB variables
@@ -426,7 +416,7 @@ void dci_encoding(uint8_t *a,
uint16_t rnti);
/*! \brief Top-level DCI entry point. This routine codes an set of DCI PDUs and performs PDCCH modulation, interleaving and mapping.
- \param num_dci Number of pdcch symbols
+ \param num_pdcch_symbols
\param num_dci Number of DCI pdus to encode
\param dci_alloc Allocation vectors for each DCI pdu
\param n_rnti n_RNTI (see )
@@ -525,7 +515,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
@param phy_vars_eNB Pointer to eNB top-level descriptor
@param proc Pointer to RXTX proc variables
@param UE_id ID of UE transmitting this PUSCH
- @param subframe Index of subframe for PUSCH
@param control_only_flag Receive PUSCH with control information only
@param Nbundled Nbundled parameter for ACK/NAK scrambling from 36-212/36-213
@param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used
@@ -584,7 +573,6 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
int br_flag
);
-
/*!
\brief Process PRACH waveform
@param phy_vars_eNB Pointer to eNB top-level descriptor. If NULL, then this is an RRU
@@ -592,6 +580,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB,
@param max_preamble most likely preamble
@param max_preamble_energy Estimated Energy of most likely preamble
@param max_preamble_delay Estimated Delay of most likely preamble
+ @param avg_preamble_energy
@param Nf System frame number
@param tdd_mapindex Index of PRACH resource in Table 5.7.1-4 (TDD)
@param br_flag indicator to act on eMTC PRACH
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c
index dc2df52bf4..eb029aa429 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/drs_modulation.c
-* \brief Top-level routines for generating the Demodulation Reference Signals from 36-211, V8.6 2009-03
-* \author R. Knopp, F. Kaltenberger, A. Bhamri
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr
-* \note
-* \warning
-*/
+/*! \file drs_modulation.c
+ * \brief Top-level routines for generating the Demodulation Reference Signals from 36-211, V8.6 2009-03
+ * \author R. Knopp, F. Kaltenberger, A. Bhamri
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr
+ * \note
+ * \warning
+ */
#include "PHY/defs_UE.h"
#include "PHY/phy_extern_ue.h"
#include "PHY/sse_intrin.h"
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c b/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c
index 0faec65f70..c13c050a6e 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/srs_modulation.c
-* \brief Top-level routines for generating sounding reference signal (SRS) V8.6 2009-03
-* \author R. Knopp, F. Kaltenberger
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr, florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
+/*! \file srs_modulation.c
+ * \brief Top-level routines for generating sounding reference signal (SRS) V8.6 2009-03
+ * \author R. Knopp, F. Kaltenberger
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr, florian.kaltenberger@eurecom.fr
+ * \note
+ * \warning
+ */
#include "PHY/defs_UE.h"
#include "PHY/phy_extern.h"
#include "common/utils/LOG/log.h"
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
index 36da4ccab0..18eb375f62 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
+++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
@@ -101,18 +101,6 @@ void qpsk_qpsk(int16_t *stream0_in,
int16_t *rho01,
int32_t length);
-/** \brief This function perform LLR computation for dual-stream (QPSK/QPSK) transmission.
- @param frame_parms Frame descriptor structure
- @param rxdataF_comp Compensated channel output
- @param rxdataF_comp_i Compensated channel output for interference
- @param rho_i Correlation between channel of signal and inteference
- @param dlsch_llr llr output
- @param symbol OFDM symbol index in sub-frame
- @param first_symbol_flag flag to indicate this is the first symbol of the dlsch
- @param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
- @param llr128p pointer to pointer to symbol in dlsch_llr*/
-
void qpsk_llr(int16_t *stream0_in,
int16_t *stream0_out,
int length);
@@ -158,6 +146,7 @@ void qpsk_qam16(int16_t *stream0_in,
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
@param rho_i Correlation between channel of signal and inteference
+@param dl_ch_mag_i
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@@ -194,6 +183,7 @@ void qpsk_qam64(int16_t *stream0_in,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
+@param dl_ch_mag_i
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@@ -231,13 +221,13 @@ void qam16_qpsk(short *stream0_in,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
- @param ch_mag Input from scaled channel magnitude square of h0'*g0
+ @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
+ @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_16qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp,
@@ -271,14 +261,14 @@ void qam16_qam16(short *stream0_in,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
- @param ch_mag Input from scaled channel magnitude square of h0'*g0
- @param ch_mag_i Input from scaled channel magnitude square of h0'*g1
+ @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
+ @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
+ @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_16qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp,
@@ -313,14 +303,14 @@ void qam16_qam64(short *stream0_in,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
- @param ch_mag Input from scaled channel magnitude square of h0'*g0
- @param ch_mag_i Input from scaled channel magnitude square of h0'*g1
+ @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
+ @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
+ @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_16qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp,
@@ -353,13 +343,13 @@ void qam64_qpsk(short *stream0_in,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
- @param ch_mag Input from scaled channel magnitude square of h0'*g0
+ @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
+ @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_64qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp,
@@ -409,14 +399,14 @@ void qam64_qam16_avx2(short *stream0_in,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
- @param ch_mag Input from scaled channel magnitude square of h0'*g0
- @param ch_mag_i Input from scaled channel magnitude square of h0'*g1
+ @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
+ @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
+ @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
@param llr16p pointer to pointer to symbol in dlsch_llr*/
int dlsch_64qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp,
@@ -467,15 +457,16 @@ void qam64_qam64_avx2(int32_t *stream0_in,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param rxdataF_comp_i Compensated channel output for interference
- @param ch_mag Input from scaled channel magnitude square of h0'*g0
- @param ch_mag_i Input from scaled channel magnitude square of h0'*g1
+ @param dl_ch_mag Input from scaled channel magnitude square of h0'*g0
+ @param dl_ch_mag_i Input from scaled channel magnitude square of h0'*g1
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
- @param llr16p pointer to pointer to symbol in dlsch_llr*/
+ @param pbch_pss_sss_adjust Number of channel bits taken by PBCH/PSS/SSS
+@param llr_offset
+*/
int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
int **rxdataF_comp,
int **rxdataF_comp_i,
@@ -490,7 +481,6 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
//short **llr16p,
uint32_t llr_offset);
-
/** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms.
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@@ -499,7 +489,6 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
- @param llr128p pointer to pointer to symbol in dlsch_llr
@param beamforming_mode beamforming mode
*/
int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
@@ -514,16 +503,6 @@ int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
/**
\brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms
- @param frame_parms Frame descriptor structure
- @param rxdataF_comp Compensated channel output
- @param dlsch_llr llr output
- @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation and weighted for mid-point in 16QAM constellation
- @param symbol OFDM symbol index in sub-frame
- @param first_symbol_flag
- @param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adjust Adjustment factor in RE for PBCH/PSS/SSS allocations
- @param llr128p pointer to pointer to symbol in dlsch_llr
- @param beamforming_mode beamforming mode
*/
int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
@@ -551,14 +530,16 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
\brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
+@param sic_buffer
+@param rho_i
+@param num_pdcch_symbols
@param dlsch_llr llr output
- @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first mid-point of 64-QAM constellation
- @param dl_ch_magb Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by second mid-point of 64-QAM constellation
- @param symbol OFDM symbol index in sub-frame
- @param first_symbol_flag
+ @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first
+mid-point of 64-QAM constellation
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adjust PBCH/PSS/SSS RE adjustment (in REs)
- @param beamforming_mode beamforming mode
+@param subframe
+@param mod_order_0
+@param rb_alloc
*/
void dlsch_16qam_llr_SIC (LTE_DL_FRAME_PARMS *frame_parms,
int32_t **rxdataF_comp,
@@ -1021,9 +1002,10 @@ void dlsch_scale_channel(int32_t **dl_ch_estimates_ext,
@param dlsch_llr Pointer to LLR values computed by dlsch_demodulation
@param lte_frame_parms Pointer to frame descriptor
@param dlsch Pointer to DLSCH descriptor
+@param harq_process
@param frame Frame number
@param subframe Subframe number
- @param num_pdcch_symbols Number of PDCCH symbols
+@param harq_pid
@param is_crnti indicates if PDSCH belongs to a CRNTI (necessary for parallelizing decoding threads)
@param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used
@returns 0 on success, 1 on unsuccessful decoding
@@ -1045,7 +1027,8 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
PDSCH_t dlsch_id,
uint8_t eNB_id);
-/** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel estimation. It performs
+/** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel
+estimation. It performs
- RB extraction (signal and channel estimates)
- channel compensation (matched filtering)
- RE extraction (pilot, PBCH, synch. signals)
@@ -1056,11 +1039,17 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
@param type Type of PDSCH (SI_PDSCH,RA_PDSCH,PDSCH,PMCH)
@param eNB_id eNb index (Nid1) 0,1,2
@param eNB_id_i Interfering eNB index (Nid1) 0,1,2, or 3 in case of MU-MIMO IC receiver
+@param frame
@param subframe Subframe number
@param symbol Symbol on which to act (within sub-frame)
@param first_symbol_flag set to 1 on first DLSCH symbol
- @param rx_type. rx_type=RX_IC_single_stream will enable interference cancellation of a second stream when decoding the first stream. In case of TM1, 2, 5, and this can cancel interference from a neighbouring cell given by eNB_id_i. In case of TM5, eNB_id_i should be set to n_connected_eNB to perform multi-user interference cancellation. In case of TM3, eNB_id_i should be set to eNB_id to perform co-channel interference cancellation; this option should be used together with an interference cancellation step [...]. In case of TM3, if rx_type=RX_IC_dual_stream, both streams will be decoded by applying the IC single stream receiver twice.
+ @param rx_type rx_type=RX_IC_single_stream will enable interference cancellation of a second stream when decoding the first
+stream. In case of TM1, 2, 5, and this can cancel interference from a neighbouring cell given by eNB_id_i. In case of TM5, eNB_id_i
+should be set to n_connected_eNB to perform multi-user interference cancellation. In case of TM3, eNB_id_i should be set to eNB_id
+to perform co-channel interference cancellation; this option should be used together with an interference cancellation step [...].
+In case of TM3, if rx_type=RX_IC_dual_stream, both streams will be decoded by applying the IC single stream receiver twice.
@param i_mod Modulation order of the interfering stream
+ @param harq_pid
*/
int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
PDSCH_t type,
@@ -1085,6 +1074,7 @@ int32_t rx_pdcch(PHY_VARS_UE *ue,
@param phy_vars_ue Pointer to UE variables
@param[out] pss_ext contain the PSS signals after the extraction
@param[out] sss_ext contain the SSS signals after the extraction
+@param subframe
@returns 0 on success
*/
int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
@@ -1095,6 +1085,7 @@ int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
/*! \brief Extract only PSS resource elements
@param phy_vars_ue Pointer to UE variables
@param[out] pss_ext contain the PSS signals after the extraction
+@param subframe
@returns 0 on success
*/
int pss_only_extract(PHY_VARS_UE *phy_vars_ue,
@@ -1104,6 +1095,7 @@ int pss_only_extract(PHY_VARS_UE *phy_vars_ue,
/*! \brief Extract only SSS resource elements
@param phy_vars_ue Pointer to UE variables
@param[out] sss_ext contain the SSS signals after the extraction
+@param subframe
@returns 0 on success
*/
int sss_only_extract(PHY_VARS_UE *phy_vars_ue,
@@ -1179,7 +1171,7 @@ void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx)
/*! \brief Top-level generation route for Sidelink Shared Channel
\param ue pointer to UE descriptor
- \param slsch pointer to SLSCH configuration and payload
+ \param slss pointer to SLSCH configuration and payload
\param frame_tx Frame number
\param subframe_tx subframe number
*/
@@ -1261,13 +1253,13 @@ uint8_t get_I_TBS(uint8_t I_MCS);
unsigned char get_I_TBS_UL(unsigned char I_MCS);
/** \brief Compute Q (modulation order) based on downlink I_MCS. Implements table 7.1.7.1-1 from 36.213.
- @param I_MCS
+ @param mcs
@param nb_rb
@return Transport block size */
uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
/** \brief Compute Q (modulation order) based on uplink I_MCS. Implements table 7.1.7.1-1 from 36.213.
- @param I_MCS
+ @param mcs
@param nb_rb
@return Transport block size */
uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb);
@@ -1321,10 +1313,13 @@ uint8_t I_TBS2I_MCS(uint8_t I_TBS);
uint8_t SE2I_TBS(float SE,
uint8_t N_PRB,
uint8_t symbPerRB);
-/** \brief This function generates the sounding reference symbol (SRS) for the uplink according to 36.211 v8.6.0. If IFFT_FPGA is defined, the SRS is quantized to a QPSK sequence.
+/** \brief This function generates the sounding reference symbol (SRS) for the uplink according to 36.211 v8.6.0. If IFFT_FPGA is
+defined, the SRS is quantized to a QPSK sequence.
@param frame_parms LTE DL Frame Parameters
@param soundingrs_ul_config_dedicated Dynamic configuration from RRC during Connection Establishment
@param txdataF pointer to the frequency domain TX signal
+@param amp
+@param subframe
@returns 0 on success*/
int generate_srs(LTE_DL_FRAME_PARMS *frame_parms,
SOUNDINGRS_UL_CONFIG_DEDICATED *soundingrs_ul_config_dedicated,
@@ -1361,13 +1356,6 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
unsigned int nb_rb,
uint8_t ant);
-
-/*!
- \brief This function initializes the Group Hopping, Sequence Hopping and nPRS sequences for PUCCH/PUSCH according to 36.211 v8.6.0. It should be called after configuration of UE (reception of SIB2/3) and initial configuration of eNB (or after reconfiguration of cell-specific parameters).
- @param frame_parms Pointer to a LTE_DL_FRAME_PARMS structure (eNB or UE)*/
-void init_ul_hopping(LTE_DL_FRAME_PARMS *frame_parms);
-
-
/*!
\brief This function implements the initialization of paging parameters for UE (See Section 7, 36.304).It must be called after setting IMSImod1024 during UE startup and after receiving SIB2
@param ue Pointer to UE context
@@ -1464,16 +1452,17 @@ void generate_RIV_tables(void);
N_RB_DL, PHICH_CONFIG and Nid_cell) and the UE can begin decoding PDCCH and DLSCH SI to retrieve the rest. Once these
parameters are know, the routine calls some basic initialization routines (cell-specific reference signals, etc.)
@param phy_vars_ue Pointer to UE variables
+@param mode
*/
int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode);
-
/*!
\brief Encoding of PUSCH/ACK/RI/ACK from 36-212.
@param a Pointer to ulsch SDU
- @param frame_parms Pointer to Frame parameters
- @param ulsch Pointer to ulsch descriptor
+@param phy_vars_ue
@param harq_pid HARQ process ID
+@param eNB_id
+@param subframe_rx
@param tmode Transmission mode (1-7)
@param control_only_flag Generate PUSCH with control information only
@param Nbundled Parameter for ACK/NAK bundling (36.213 Section 7.3)
@@ -1630,44 +1619,40 @@ int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame, uint8_t sub
@param phy_vars_ue Pointer to ue top-level descriptor
@param eNB_id Index of destination eNB
@param subframe subframe index to operate on
- @param index of preamble (0-63)
@param Nf System frame number
@returns 0 on success
*/
int32_t generate_prach(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint16_t Nf);
-
/*!
\brief Helper for MAC, returns number of available PRACH in TDD for a particular configuration index
- @param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
@returns 0-5 depending on number of available prach
*/
uint8_t get_num_prach_tdd(module_id_t Mod_id);
/*!
- \brief Return the PRACH format as a function of the Configuration Index and Frame type.
- @param prach_ConfigIndex PRACH Configuration Index
- @param frame_type 0-FDD, 1-TDD
+ \brief Return the PRACH format as a function of the Configuration Index and Frame type
+ @param prach_ConfigIndex Configuration Index
+ @param frame_type 0-FDD 1-TDD
@returns 0-1 accordingly
*/
uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type);
/*!
- \brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index
- @param frame_parms Pointer to LTE_DL_FRAME_PARMS structure
+ \brief Helper for MAC returns frequency index of PRACH resource in TDD for a particular configuration index
@returns 0-5 depending on number of available prach
*/
uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index);
/*!
- \brief Comp ute DFT of PRACH ZC sequences. Used for generation of prach in UE and reception of PRACH in eNB.
+ \brief Comp ute DFT of PRACH ZC sequences. Used for generation of prach in UE and reception of PRACH in eNB
@param rootSequenceIndex PRACH root sequence
- #param prach_ConfigIndex PRACH Configuration Index
+ @param prach_ConfigIndex PRACH Configuration Index
@param zeroCorrelationZoneConfig PRACH ncs_config
- @param highSpeedFlat PRACH High-Speed Flag
- @param frame_type TDD/FDD flag
- @param Xu DFT output
+ @param highSpeedFlag PRACH High-Speed Flag
+ @param frame_type TDD-FDD flag
+ @param X_u DFT output
*/
void compute_prach_seq(uint16_t rootSequenceIndex,
uint8_t prach_ConfigIndex,
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
index a10e0515a5..2fb8e67621 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
+++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/defs.h
-* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
-* \author R. Knopp
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
-* \note
-* \warning
-*/
+/*! \file transport_ue.h
+ * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
+ * \author R. Knopp
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
+ * \note
+ * \warning
+ */
#ifndef __TRANSPORT_UE__H__
#define __TRANSPORT_UE__H__
#include "PHY/defs_UE.h"
diff --git a/openair1/PHY/MODULATION/modulation_common.h b/openair1/PHY/MODULATION/modulation_common.h
index 06b595fbe3..a131cdae63 100644
--- a/openair1/PHY/MODULATION/modulation_common.h
+++ b/openair1/PHY/MODULATION/modulation_common.h
@@ -28,16 +28,15 @@
*/
/**
-\fn void PHY_ofdm_mod(int *input,int *output,int fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
-This function performs OFDM modulation with cyclic extension or zero-padding.
-
-@param input The sequence input samples in the frequency-domain. This is a concatenation of the input symbols in SIMD redundant format
-@param output The time-domain output signal
-@param fftsize size of OFDM symbol size (\f$N_d\f$)
-@param nb_symbols The number of OFDM symbols in the block
-@param nb_prefix_samples The number of prefix/suffix/zero samples
-@param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
-
+ \fn void PHY_ofdm_mod(int *input,int *output,int fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t
+ etype) This function performs OFDM modulation with cyclic extension or zero-padding
+ @param input The sequence input samples in the frequency-domain This is a concatenation of the input symbols in SIMD redundant
+ format
+ @param output The time-domain output signal
+ @param fftsize size of OFDM symbol size (\f$N_d\f$)
+ @param nb_symbols The number of OFDM symbols in the block
+ @param nb_prefix_samples The number of prefix/suffix/zero samples
+ @param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
*/
void PHY_ofdm_mod(int *input,
int *output,
diff --git a/openair1/PHY/MODULATION/modulation_eNB.h b/openair1/PHY/MODULATION/modulation_eNB.h
index b5b148b802..59ef26f306 100644
--- a/openair1/PHY/MODULATION/modulation_eNB.h
+++ b/openair1/PHY/MODULATION/modulation_eNB.h
@@ -44,7 +44,6 @@ void remove_7_5_kHz(RU_t *ru,uint8_t subframe);
after beamforming
@param beam_weights Beamforming weights applied on each
antenna element and each carrier
- @param slot Slot number
@param symbol Symbol index on which to act
@param aa physical antenna index
@param p logical antenna index
@@ -58,18 +57,18 @@ int beam_precoding(int32_t **txdataF,
int aa,
int p,
int l1_id);
-
+
/** \brief This function performs beamforming precoding for common
* data for only one eNB, fdragon
@param txdataF Table of pointers for frequency-domain TX signals
@param txdataF_BF Table of pointers for frequency-domain TX signals
- @param frame_parms Frame descriptor structure
-after beamforming
@param beam_weights Beamforming weights applied on each
antenna element and each carrier
- @param slot Slot number
- @param symbol Symbol index on which to act
- @param aa physical antenna index*/
+ @param subframe sf number
+ @param nb_antenna_ports physical antennas
+@param nb_tx
+@param frame_parms
+*/
int beam_precoding_one_eNB(int32_t **txdataF,
int32_t **txdataF_BF,
int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15],
diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
index 4934498a4a..e3210552fc 100644
--- a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
+++ b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
@@ -28,16 +28,17 @@
* @{
*/
-
/*!
\brief This function performs channel estimation including frequency interpolation
\param gNB Pointer to gNB PHY variables
\param Ns slot number (0..19)
\param p
\param symbol symbol within slot
-\param bwp_start_subcarrier, first allocated subcarrier
-\param nb_rb_pusch, number of allocated RBs for this UE
+\param ul_id
+\param bwp_start_subcarrier first allocated subcarrier
+\param pusch_pdu
\param max_ch maximum value of estimated channel
+\param nvar
*/
int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
@@ -95,3 +96,4 @@ void nr_freq_equalization(NR_DL_FRAME_PARMS *frame_parms,
void nr_init_fde(void);
#endif
+/** @}*/
diff --git a/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c b/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
index 20c0e7db50..5da33435ed 100644
--- a/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
+++ b/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_REFSIG/nr_dl_dmrs.c
+/*! \file nr_dmrs_rx.c
* \brief Top-level routines for generating DMRS from 38-211
* \author
* \date 2018
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
index 717b7b8155..ef537ea8f2 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_TRANSPORT/dlsch_decoding.c
-* \brief Top-level routines for transmission of the PDSCH 38211 v 15.2.0
-* \author Guy De Souza
-* \date 2018
-* \version 0.1
-* \company Eurecom
-* \email: desouza@eurecom.fr
-* \note
-* \warning
-*/
+/*! \file nr_dlsch.c
+ * \brief Top-level routines for transmission of the PDSCH 38211 v 15.2.0
+ * \author Guy De Souza
+ * \date 2018
+ * \version 0.1
+ * \company Eurecom
+ * \email: desouza@eurecom.fr
+ * \note
+ * \warning
+ */
#include "nr_dlsch.h"
#include "nr_dci.h"
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.h b/openair1/PHY/NR_TRANSPORT/nr_dlsch.h
index 8ee2e1171f..aa111413e1 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/defs.h
-* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
-* \author R. Knopp
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
-* \note
-* \warning
-*/
+/*! \file nr_dlsch.h
+ * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
+ * \author R. Knopp
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
+ * \note
+ * \warning
+ */
#ifndef __NR_DLSCH__H
#define __NR_DLSCH__H
diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
index 2583996b95..0f998ebee6 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_TRANSPORT/nr_transport_proto.h.c
-* \brief Function prototypes for PHY physical/transport channel processing and generation
-* \author Ahmed Hussein
-* \date 2019
-* \version 0.1
-* \company Fraunhofer IIS
-* \email: ahmed.hussein@iis.fraunhofer.de
-* \note
-* \warning
-*/
+/*! \file nr_transport_proto.h
+ * \brief Function prototypes for PHY physical/transport channel processing and generation
+ * \author Ahmed Hussein
+ * \date 2019
+ * \version 0.1
+ * \company Fraunhofer IIS
+ * \email: ahmed.hussein@iis.fraunhofer.de
+ * \note
+ * \warning
+ */
#ifndef __NR_TRANSPORT__H__
#define __NR_TRANSPORT__H__
diff --git a/openair1/PHY/NR_TRANSPORT/nr_uci_tools_common.c b/openair1/PHY/NR_TRANSPORT/nr_uci_tools_common.c
index 4d286bc937..cccdaed8ef 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_uci_tools_common.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_uci_tools_common.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_TRANSPORT/nr_dci_tools_common.c
+/*! \file nr_uci_tools_common.c
* \brief
* \author
* \date 2020
diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
index 8ac877a29e..65591293a8 100644
--- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
@@ -46,10 +46,6 @@ void peak_estimator(int32_t *buffer, int32_t buf_len, int32_t *peak_idx, int32_t
/*!
\brief This function performs channel estimation including frequency and temporal interpolation
-\param ue Pointer to UE PHY variables
-\param gNB_id Index of target gNB
-\param Ns slot number (0..19)
-\param symbol symbol within slot
*/
void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
UE_nr_rxtx_proc_t *proc,
@@ -141,5 +137,5 @@ void nr_pdsch_ptrs_processing(PHY_VARS_NR_UE *ue,
NR_UE_DLSCH_t dlsch[2]);
float_t get_nr_RSRP(module_id_t Mod_id,uint8_t CC_id,uint8_t gNB_index);
-
+/** @}*/
#endif
diff --git a/openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c b/openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
index 0cc81d2a29..3317c036d8 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
@@ -327,7 +327,7 @@ void cic_decimator(int16_t *input_buffer, int16_t *output_buffer, int length, in
}
/* get working buffers */
- buffer_one = malloc(length*sizeof(int32_t) * 2); /* for i&q samples */
+ buffer_one = calloc(length, sizeof(int32_t) * 2); /* for i&q samples */
if (buffer_one == NULL) {
msg("Fatal memory allocation problem \n");
assert(0);
diff --git a/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c b/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
index 0ca2371a33..f11042f9b2 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
@@ -608,8 +608,6 @@ int nr_csi_rs_pmi_estimation(const PHY_VARS_NR_UE *ue,
uint32_t *precoded_sinr_dB) {
const NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
- memset(i1,0,3*sizeof(uint8_t));
- i2[0] = 0;
// i1 is a three-element vector in the form of [i11 i12 i13], when CodebookType is specified as 'Type1SinglePanel'.
// Note that i13 is not applicable when the number of transmission layers is one of {1, 5, 6, 7, 8}.
@@ -904,8 +902,8 @@ void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t
uint8_t rank_indicator = 0;
uint32_t precoded_sinr_dB = 0;
uint8_t cqi = 0;
- uint8_t i1[3];
- uint8_t i2[1];
+ uint8_t i1[3] = {0};
+ uint8_t i2[1] = {0};
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params = convert_csirs_pdu(csirs_config_pdu);
nr_generate_csi_rs(frame_parms,
ue->nr_csi_info->csi_rs_generated_signal,
diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
index 16bdb6e77b..c979926c92 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
@@ -19,13 +19,9 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/dci_nr.c
- * \brief Implements PDCCH physical channel TX/RX procedures (36.211) and DCI encoding/decoding (36.212/36.213). Current LTE compliance V8.6 2009-03.
- * \author R. Knopp, A. Mico Pereperez
- * \date 2018
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr
+/*! \file dci_nr.c
+ * \brief Implements PDCCH physical channel TX/RX procedures (36.211) and DCI encoding/decoding (36.212/36.213). Current LTE
+ * compliance V8.6 2009-03. \author R. Knopp, A. Mico Pereperez \date 2018 \version 0.1 \company Eurecom \email: knopp@eurecom.fr
* \note
* \warning
*/
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
index 300d6df911..894a2ee3a3 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/dlsch_demodulation.c
+/*! \file nr_dlsch_demodulation.c
* \brief Top-level routines for demodulating the PDSCH physical channel from 38-211, V15.2 2018-06
* \author H.Wang
* \date 2018
@@ -126,21 +126,9 @@ static int nr_dlsch_llr(uint32_t rx_size_symbol,
uint8_t nr_slot_rx,
NR_UE_DLSCH_t dlsch[2],
uint32_t llr_offset[NR_SYMBOLS_PER_SLOT]);
-/** \fn dlsch_extract_rbs(int32_t **rxdataF,
- int32_t **dl_ch_estimates,
- int32_t **rxdataF_ext,
- int32_t **dl_ch_estimates_ext,
- unsigned char symbol
- uint8_t pilots,
- uint8_t config_type,
- unsigned short start_rb,
- unsigned short nb_rb_pdsch,
- uint8_t n_dmrs_cdm_groups,
- uint8_t Nl,
- NR_DL_FRAME_PARMS *frame_parms,
- uint16_t dlDmrsSymbPos)
- \brief This function extracts the received resource blocks, both channel estimates and data symbols,
- for the current allocation and for multiple layer antenna gNB transmission.
+/** \fn nr_dlsch_extract_rbs
+ \brief This function extracts the received resource blocks, both channel estimates and data symbols, for the current
+ allocation and for multiple layer antenna gNB transmission.
@param rxdataF Raw FFT output of received signal
@param dl_ch_estimates Channel estimates of current slot
@param rxdataF_ext FFT output for RBs in this allocation
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
index fdd31058b8..a0230ac8cb 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/LTE_TRANSPORT/initial_sync.c
-* \brief Routines for initial UE synchronization procedure (PSS,SSS,PBCH and frame format detection)
-* \author R. Knopp, F. Kaltenberger
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
+/*! \file nr_initial_sync.c
+ * \brief Routines for initial UE synchronization procedure (PSS,SSS,PBCH and frame format detection)
+ * \author R. Knopp, F. Kaltenberger
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,kaltenberger@eurecom.fr
+ * \note
+ * \warning
+ */
#include "PHY/types.h"
#include "PHY/defs_nr_UE.h"
#include "PHY/MODULATION/modulation_UE.h"
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
index 1d7c33e2ee..4ab7baa4af 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_UE_TRANSPORT/transport_proto_ue.h
+/*! \file nr_transport_proto_ue.h
* \brief Function prototypes for PHY physical/transport channel processing and generation V8.6 2009-03
* \author R. Knopp, F. Kaltenberger
* \date 2011
@@ -71,6 +71,7 @@ void nr_qpsk_qpsk(int16_t *stream0_in,
@param rho_i Correlation between channel of signal and inteference
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
+ @param len
@param first_symbol_flag flag to indicate this is the first symbol of the dlsch
@param nb_rb number of RBs for this allocation
@param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
@@ -87,16 +88,14 @@ int32_t nr_dlsch_qpsk_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
uint16_t pbch_pss_sss_adj,
int16_t **llr128p);
-/** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms.
+/** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
+ @param len
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS
- @param llr128p pointer to pointer to symbol in dlsch_llr
- @param beamforming_mode beamforming mode
*/
int32_t nr_dlsch_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
int32_t *rxdataF_comp,
@@ -111,13 +110,12 @@ int32_t nr_dlsch_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param dlsch_llr llr output
- @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation and weighted for mid-point in 16QAM constellation
+ @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation and weighted for
+ mid-point in 16QAM constellation
+ @param len
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adjust Adjustment factor in RE for PBCH/PSS/SSS allocations
- @param llr128p pointer to pointer to symbol in dlsch_llr
- @param beamforming_mode beamforming mode
*/
void nr_dlsch_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
@@ -133,13 +131,14 @@ void nr_dlsch_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param dlsch_llr llr output
- @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first mid-point of 64-QAM constellation
- @param dl_ch_magb Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by second mid-point of 64-QAM constellation
+ @param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first
+ mid-point of 64-QAM constellation
+ @param dl_ch_magb Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by second
+ mid-point of 64-QAM constellation
@param symbol OFDM symbol index in sub-frame
+ @param len
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
- @param pbch_pss_sss_adjust PBCH/PSS/SSS RE adjustment (in REs)
- @param beamforming_mode beamforming mode
*/
void nr_dlsch_64qam_llr(NR_DL_FRAME_PARMS *frame_parms,
@@ -184,14 +183,18 @@ void nr_conjch0_mult_ch1(int *ch0,
one segment or correct decoding of all segments. Only the segment CRCs are check for the moment, the
overall CRC is ignored. Finally transport block reassembly is performed.
@param phy_vars_ue Pointer to ue variables
+ @param proc
+ @param eNB_id
@param dlsch_llr Pointer to LLR values computed by dlsch_demodulation
- @param lte_frame_parms Pointer to frame descriptor
+ @param frame_parms Pointer to frame descriptor
@param dlsch Pointer to DLSCH descriptor
+ @param harq_process
@param frame Frame number
+ @param nb_symb_sch
@param nr_slot_rx Slot number
- @param num_pdcch_symbols Number of PDCCH symbols
- @param is_crnti indicates if PDSCH belongs to a CRNTI (necessary for parallelizing decoding threads)
- @param llr8_flag If 1, indicate that the 8-bit turbo decoder should be used
+ @param harq_pid
+ @param b_size
+ @param b
@returns 0 on success, 1 on unsuccessful decoding
*/
@@ -217,12 +220,12 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
unsigned int G);
/*! \brief Perform PUSCH scrambling. TS 38.211 V15.4.0 subclause 6.3.1.1
- @param[in] in, Pointer to input bits
- @param[in] size, of input bits
- @param[in] Nid, cell id
- @param[in] n_RNTI, CRNTI
+ @param[in] in Pointer to input bits
+ @param[in] size of input bits
+ @param[in] Nid cell id
+ @param[in] n_RNTI CRNTI
@param[in] uci_on_pusch whether UCI placeholder bits need to be scrambled (true -> no optimized scrambling)
- @param[out] out, the scrambled bits
+ @param[out] out the scrambled bits
*/
void nr_pusch_codeword_scrambling(uint8_t *in,
uint32_t size,
@@ -312,8 +315,10 @@ int dump_ue_stats(PHY_VARS_NR_UE *phy_vars_ue, UE_nr_rxtx_proc_t *proc, char* bu
end, the basic frame parameters are known (Frame configuration - TDD/FDD and cyclic prefix length,
N_RB_DL, PHICH_CONFIG and Nid_cell) and the UE can begin decoding PDCCH and DLSCH SI to retrieve the rest. Once these
parameters are know, the routine calls some basic initialization routines (cell-specific reference signals, etc.)
+@param proc
@param phy_vars_ue Pointer to UE variables
- @param mode current running mode
+@param n_frames
+ @param sa current running mode
*/
int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
PHY_VARS_NR_UE *phy_vars_ue,
@@ -321,8 +326,9 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
int sa);
/*!
- \brief This function gets the carrier frequencies either from FP or command-line-set global variables, depending on the availability of the latter
- @param fp Pointer to frame params
+ \brief This function gets the carrier frequencies either from FP or command-line-set global variables, depending on the
+ availability of the latter
+ @param ue
@param dl_Carrier Pointer to DL carrier to be set
@param ul_Carrier Pointer to UL carrier to be set
*/
@@ -341,11 +347,7 @@ void nr_get_carrier_frequencies_sl(PHY_VARS_NR_UE *ue,
/*!
\brief This function sets the OAI RF card rx/tx params
@param openair0_cfg Pointer OAI config for a specific card
- @param tx_gain_off Tx gain offset
@param rx_gain_off Rx gain offset
- @param ul_Carrier UL carrier to be set
- @param dl_Carrier DL carrier to be set
- @param freq_offset Freq offset to be set
*/
void nr_rf_card_config_gain(openair0_config_t *openair0_cfg,
double rx_gain_off);
@@ -371,8 +373,8 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
fapi_nr_dci_indication_t *dci_ind,
fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15);
-
-/** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel estimation. It performs
+/** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel
+ estimation. It performs
- RB extraction (signal and channel estimates)
- channel compensation (matched filtering)
- RE extraction (pilot, PBCH, synch. signals)
@@ -380,13 +382,23 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
- LLR computation
This function supports TM1, 2, 3, 5, and 6.
@param ue Pointer to PHY variables
- @param type Type of PDSCH (SI_PDSCH,RA_PDSCH,PDSCH,PMCH)
- @param eNB_id eNb index (Nid1) 0,1,2
- @param eNB_id_i Interfering eNB index (Nid1) 0,1,2, or 3 in case of MU-MIMO IC receiver
- @param frame Frame number
- @param nr_slot_rx Slot number
+ @param proc
+ @prama dlsch
@param symbol Symbol on which to act (within sub-frame)
@param first_symbol_flag set to 1 on first DLSCH symbol
+ @param harq_pid
+ @param pdsch_est_size
+ @param dl_ch_estimates
+ @param llr
+ @param dl_valid_re
+ @param rxdataF
+ @param llr_offset
+ @param log2_maxhrx_size_symbol
+ @param rx_size_symbol
+ @param nbRx
+ @param rxdataF_comp
+ @param ptrs_phase_per_slot
+ @param ptrs_re_per_slot
*/
int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
UE_nr_rxtx_proc_t *proc,
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
index b0ea45b7ec..8467753af7 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_TRANSPORT/defs.h
-* \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
-* \author R. Knopp
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
-* \note
-* \warning
-*/
+/*! \file nr_transport_ue.h
+ * \brief data structures for PDSCH/DLSCH/PUSCH/ULSCH physical and transport channel descriptors (TX/RX)
+ * \author R. Knopp
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
+ * \note
+ * \warning
+ */
#ifndef __NR_TRANSPORT_UE__H__
#define __NR_TRANSPORT_UE__H__
#include
@@ -164,7 +164,4 @@ typedef struct {
// PTRS symbol index, to be updated every PTRS symbol within a slot.
uint8_t ptrs_symbol_index;
} NR_UE_DLSCH_t;
-
-
-/**@}*/
#endif
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
index 1bc4d42c26..d07ad7fa88 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
@@ -19,14 +19,14 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_UE_TRANSPORT/nr_ue_rf_config.c
-* \brief Functional helpers to configure the RF boards at UE side
-* \author Guido Casati
-* \date 2020
-* \version 0.1
-* \company Fraunhofer IIS
-* \email: guido.casati@iis.fraunhofer.de
-*/
+/*! \file nr_ue_rf_helpers.c
+ * \brief Functional helpers to configure the RF boards at UE side
+ * \author Guido Casati
+ * \date 2020
+ * \version 0.1
+ * \company Fraunhofer IIS
+ * \email: guido.casati@iis.fraunhofer.de
+ */
#include "PHY/defs_nr_UE.h"
#include "PHY/phy_extern_nr_ue.h"
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
index 6ca2f2da5e..93c314b389 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/NR_UE_TRANSPORT/nr_ulsch.c
-* \brief Top-level routines for transmission of the PUSCH TS 38.211 v 15.4.0
-* \author Khalid Ahmed
-* \date 2019
-* \version 0.1
-* \company Fraunhofer IIS
-* \email: khalid.ahmed@iis.fraunhofer.de
-* \note
-* \warning
-*/
+/*! \file nr_ulsch_ue.c
+ * \brief Top-level routines for transmission of the PUSCH TS 38.211 v 15.4.0
+ * \author Khalid Ahmed
+ * \date 2019
+ * \version 0.1
+ * \company Fraunhofer IIS
+ * \email: khalid.ahmed@iis.fraunhofer.de
+ * \note
+ * \warning
+ */
#include
#include "PHY/NR_REFSIG/dmrs_nr.h"
#include "PHY/NR_REFSIG/ptrs_nr.h"
@@ -292,6 +292,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
/// Transform-coded "y"-sequences (for definition see 38-211 V15.3.0 2018-09, subsection 6.3.1.4)
int32_t y[max_num_re] __attribute__ ((aligned(16)));
+ memset(y, 0, max_num_re*sizeof(int32_t));
if (pusch_pdu->transform_precoding == transformPrecoder_enabled) {
diff --git a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
index 728468bc04..b73d432f2e 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
@@ -666,9 +666,9 @@ void nr_generate_pucch2(const PHY_VARS_NR_UE *ue,
printf("\t [nr_generate_pucch2] start function at slot(nr_slot_tx)=%d with payload=%lu and nr_bit=%d\n",nr_slot_tx, pucch_pdu->payload, pucch_pdu->n_bit);
#endif
// b is the block of bits transmitted on the physical channel after payload coding
- uint64_t b[16]; // limit to 1024-bit encoded length
+ uint64_t b[16] = {0}; // limit to 1024-bit encoded length
// M_bit is the number of bits of block b (payload after encoding)
- uint16_t M_bit;
+ uint16_t M_bit = 0;
nr_uci_encoding(pucch_pdu->payload,
pucch_pdu->n_bit,
2,0,
@@ -687,7 +687,8 @@ void nr_generate_pucch2(const PHY_VARS_NR_UE *ue,
* n_id = {0,1,...,1023} equals the higher-layer parameter Data-scrambling-Identity if configured
* n_id = N_ID_cell if higher layer parameter not configured
*/
- uint8_t *btilde = malloc(sizeof(int8_t)*M_bit);
+ uint8_t *btilde = calloc(M_bit, sizeof(uint8_t));
+
// rnti is given by the C-RNTI
uint16_t rnti=pucch_pdu->rnti;
#ifdef DEBUG_NR_PUCCH_TX
@@ -716,8 +717,8 @@ void nr_generate_pucch2(const PHY_VARS_NR_UE *ue,
*/
//#define ONE_OVER_SQRT2_S 23171 // 32767/sqrt(2) = 23170 (ONE_OVER_SQRT2)
// complex-valued symbol d(0)
- int16_t *d_re = malloc(sizeof(int16_t)*M_bit);
- int16_t *d_im = malloc(sizeof(int16_t)*M_bit);
+ int16_t *d_re = calloc(M_bit, sizeof(int16_t));
+ int16_t *d_im = calloc(M_bit, sizeof(int16_t));
uint16_t m_symbol = (M_bit%2==0) ? M_bit/2 : floor(M_bit/2)+1;
for (int i=0; i < m_symbol; i++) { // QPSK modulation subclause 5.1.3
diff --git a/openair1/PHY/TOOLS/alaw_lut.h b/openair1/PHY/TOOLS/alaw_lut.h
index 1b20ce213b..effdf4142c 100644
--- a/openair1/PHY/TOOLS/alaw_lut.h
+++ b/openair1/PHY/TOOLS/alaw_lut.h
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file PHY/TOOLS/ALAW/alaw_lut.h
-* \brief
-* \author S. Sandeep Kumar, Raymond Knopp
-* \date 2016
-* \version 0.1
-* \company Eurecom
-* \email: ee13b1025@iith.ac.in, knopp@eurecom.fr
-* \note
-* \warning
-*/
+/*! \file alaw_lut.h
+ * \brief
+ * \author S. Sandeep Kumar, Raymond Knopp
+ * \date 2016
+ * \version 0.1
+ * \company Eurecom
+ * \email: ee13b1025@iith.ac.in, knopp@eurecom.fr
+ * \note
+ * \warning
+ */
// Linear to ALaw
// 16 bit signed integer (typecasted as uint16_t) to 8 bit unsigned integer
diff --git a/openair1/PHY/TOOLS/cdot_prod.c b/openair1/PHY/TOOLS/cdot_prod.c
index 7370bb21b1..ccac6f5a7e 100644
--- a/openair1/PHY/TOOLS/cdot_prod.c
+++ b/openair1/PHY/TOOLS/cdot_prod.c
@@ -25,13 +25,13 @@
// returns the complex dot product of x and y
/*! \brief Complex number dot_product
+@param x input vector
+@param y input vector
+@param N size of vectors
+@param output_shift normalization of int multiplications
*/
-c32_t dot_product(const c16_t *x,//! input vector
- const c16_t *y,//! input vector
- const uint32_t N,//! size of the vectors
- const int output_shift //! normalization afer int16 multiplication
- )
+c32_t dot_product(const c16_t *x, const c16_t *y, const uint32_t N, const int output_shift)
{
const int16_t reflip[32] __attribute__((aligned(32))) = {1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1};
const int8_t imshuffle[64] __attribute__((aligned(32))) = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13, 18, 19, 16, 17, 22, 23, 20, 21, 26, 27, 24, 25, 30, 31, 28, 29};
diff --git a/openair1/PHY/TOOLS/dfts_load.c b/openair1/PHY/TOOLS/dfts_load.c
index f83624fcf4..d7d1ae3a2d 100644
--- a/openair1/PHY/TOOLS/dfts_load.c
+++ b/openair1/PHY/TOOLS/dfts_load.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file openair1/PHY/CODING/coding_nr_load.c
+/*! \file dfts_load.c
* \brief: load library implementing coding/decoding algorithms
* \author Francois TABURET
* \date 2020
diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h
index 4f4af5f7cb..31ce89b5e4 100644
--- a/openair1/PHY/TOOLS/tools_defs.h
+++ b/openair1/PHY/TOOLS/tools_defs.h
@@ -378,26 +378,6 @@ void init_fft(uint16_t size,
uint8_t logsize,
uint16_t *rev);
-/*!\fn void fft(int16_t *x,int16_t *y,int16_t *twiddle,uint16_t *rev,uint8_t log2size,uint8_t scale,uint8_t input_fmt)
-This function performs optimized fixed-point radix-2 FFT/IFFT.
-@param x Input
-@param y Output in format: [Re0,Im0,Re0,Im0, Re1,Im1,Re1,Im1, ....., Re(N-1),Im(N-1),Re(N-1),Im(N-1)]
-@param twiddle Twiddle factors
-@param rev bit-reversed permutation
-@param log2size Base-2 logarithm of FFT size
-@param scale Total number of shifts (should be log2size/2 for normalized FFT)
-@param input_fmt (0 - input is in complex Q1.15 format, 1 - input is in complex redundant Q1.15 format)
-*/
-/*void fft(int16_t *x,
- int16_t *y,
- int16_t *twiddle,
- uint16_t *rev,
- uint8_t log2size,
- uint8_t scale,
- uint8_t input_fmt
- );
-*/
-
#define FOREACH_DFTSZ(SZ_DEF) \
SZ_DEF(12) \
SZ_DEF(24) \
@@ -711,11 +691,6 @@ int32_t sub_cpx_vector16(int16_t *x,
*/
int32_t signal_energy(int32_t *,uint32_t);
-/*!\fn int32_t signal_energy_fixed_p9(int *input, uint32_t length);
-\brief Computes the signal energy per subcarrier
-\ the input signal has a fixed point representation of AMP_SHIFT bits
-\ the ouput energy has a fixed point representation of AMP_SHIFT bits
-*/
int32_t signal_energy_amp_shift(int32_t *input, uint32_t length);
#ifdef LOCALIZATION
@@ -791,6 +766,11 @@ double interp(double x, double *xs, double *ys, int count);
void simde_mm128_separate_real_imag_parts(simde__m128i *out_re, simde__m128i *out_im, simde__m128i in0, simde__m128i in1);
void simde_mm256_separate_real_imag_parts(simde__m256i *out_re, simde__m256i *out_im, simde__m256i in0, simde__m256i in1);
+static __attribute__((always_inline)) inline int count_bits_set(uint64_t v)
+{
+ return __builtin_popcountll(v);
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h
index 20f59a1aa8..b8cc7ae84c 100644
--- a/openair1/PHY/defs_RU.h
+++ b/openair1/PHY/defs_RU.h
@@ -249,7 +249,6 @@ typedef struct RU_proc_t_s {
int instance_cnt_feptx;
/// \internal This variable is protected by \ref mutex_ru_thread
int instance_cnt_ru;
- /// This varible is protected by \ref mutex_emulatedRF
int instance_cnt_emulateRF;
/// pthread structure for RU FH processing thread
pthread_t pthread_FH;
diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h
index 8455b2acb0..7ee8017a45 100644
--- a/openair1/PHY/defs_UE.h
+++ b/openair1/PHY/defs_UE.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file PHY/defs.h
+/*! \file defs_UE.h
\brief Top-level defines and structure definitions
\author R. Knopp, F. Kaltenberger
\date 2011
diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h
index dfadfa2c58..e021f7ce68 100644
--- a/openair1/PHY/defs_common.h
+++ b/openair1/PHY/defs_common.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file PHY/defs.h
+/*! \file defs_common.h
\brief Top-level defines and structure definitions
\author R. Knopp, F. Kaltenberger
\date 2011
@@ -129,22 +129,24 @@ typedef struct {
/// PRACH-ConfigInfo from 36.331 RRC spec
typedef struct {
- /// Parameter: prach-ConfigurationIndex, see TS 36.211 (5.7.1). \vr{[0..63]}
+ /// Parameter: prach-ConfigurationIndex, see TS 36.211 (5.7.1). {[0..63]}
uint8_t prach_ConfigIndex;
- /// Parameter: High-speed-flag, see TS 36.211 (5.7.2). \vr{[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set.
+ /// Parameter: High-speed-flag, see TS 36.211 (5.7.2). {[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set.
uint8_t highSpeedFlag;
- /// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). \vr{[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to table 5.7.2-3 for preamble format 4.
+ /// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). {[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to
+ /// table 5.7.2-3 for preamble format 4.
uint8_t zeroCorrelationZoneConfig;
- /// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). \vr{[0..94]}\n For TDD the value range is dependent on the value of \ref prach_ConfigIndex.
+ /// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). {[0..94]}\n For TDD the value range is dependent on the value of \ref
+ /// prach_ConfigIndex.
uint8_t prach_FreqOffset;
} PRACH_CONFIG_INFO;
/// PRACH-ConfigSIB or PRACH-Config from 36.331 RRC spec
typedef struct {
- /// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). \vr{[0..837]}
+ /// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). {[0..837]}
uint16_t rootSequenceIndex;
- /// prach_Config_enabled=1 means enabled. \vr{[0..1]}
+ /// prach_Config_enabled=1 means enabled. {[0..1]}
uint8_t prach_Config_enabled;
/// PRACH Configuration Information
PRACH_CONFIG_INFO prach_ConfigInfo;
@@ -152,11 +154,13 @@ typedef struct {
/// PRACH-eMTC-Config from 36.331 RRC spec
typedef struct {
- /// Parameter: High-speed-flag, see TS 36.211 (5.7.2). \vr{[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set.
+ /// Parameter: High-speed-flag, see TS 36.211 (5.7.2). {[0..1]} 1 corresponds to Restricted set and 0 to Unrestricted set.
uint8_t highSpeedFlag;
- /// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). \vr{[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to table 5.7.2-3 for preamble format 4.
+ /// Parameter: \f$N_\text{CS}\f$, see TS 36.211 (5.7.2). {[0..15]}\n Refer to table 5.7.2-2 for preamble format 0..3 and to
+ /// table 5.7.2-3 for preamble format 4.
uint8_t zeroCorrelationZoneConfig;
- /// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). \vr{[0..94]}\n For TDD the value range is dependent on the value of \ref prach_ConfigIndex.
+ /// Parameter: prach-FrequencyOffset, see TS 36.211 (5.7.1). {[0..94]}\n For TDD the value range is dependent on the value of \ref
+ /// prach_ConfigIndex.
/// PRACH starting subframe periodicity, expressed in number of subframes available for preamble transmission (PRACH opportunities), see TS 36.211. Value 2 corresponds to 2 subframes, 4 corresponds to 4 subframes and so on. EUTRAN configures the PRACH starting subframe periodicity larger than or equal to the Number of PRACH repetitions per attempt for each CE level (numRepetitionPerPreambleAttempt).
uint8_t prach_starting_subframe_periodicity[4];
@@ -176,9 +180,9 @@ typedef struct {
/// PRACH-ConfigSIB or PRACH-Config from 36.331 RRC spec
typedef struct {
- /// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). \vr{[0..837]}
+ /// Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 (5.7.1). {[0..837]}
uint16_t rootSequenceIndex;
- /// prach_Config_enabled=1 means enabled. \vr{[0..1]}
+ /// prach_Config_enabled=1 means enabled. {[0..1]}
uint8_t prach_Config_enabled;
/// PRACH Configuration Information
PRACH_eMTC_CONFIG_INFO prach_ConfigInfo;
@@ -200,11 +204,11 @@ typedef enum {
/// PUCCH-ConfigDedicated from 36.331 RRC spec
typedef struct {
- /// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). \vr{[0..1]}
+ /// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). {[0..1]}
uint8_t ackNackRepetition;
/// Parameter: \f$N_\text{ANRep}\f$, see TS 36.213 (10.1).
ACKNAKREP_t repetitionFactor;
- /// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). \vr{[0..2047]}
+ /// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t n1PUCCH_AN_Rep;
/// Feedback mode, see TS 36.213 (7.3). \details Applied to both PUCCH and PUSCH feedback. For TDD, should always be set to bundling.
ANFBmode_t tdd_AckNackFeedbackMode;
@@ -212,13 +216,14 @@ typedef struct {
/// PUCCH-ConfigCommon from 36.331 RRC spec
typedef struct {
- /// Parameter: \f$\Delta^\text{PUCCH}_\text{shift}\f$, see TS 36.211 (5.4.1). \vr{[1..3]} \note the specification sais it is an enumerated value.
+ /// Parameter: \f$\Delta^\text{PUCCH}_\text{shift}\f$, see TS 36.211 (5.4.1). {[1..3]} \note the specification sais it is an
+ /// enumerated value.
uint8_t deltaPUCCH_Shift;
- /// Parameter: \f$N^{(2)}_\text{RB}\f$, see TS 36.211 (5.4). \vr{[0..98]}
+ /// Parameter: \f$N^{(2)}_\text{RB}\f$, see TS 36.211 (5.4). {[0..98]}
uint8_t nRB_CQI;
- /// Parameter: \f$N^{(1)}_\text{CS}\f$, see TS 36.211 (5.4). \vr{[0..7]}
+ /// Parameter: \f$N^{(1)}_\text{CS}\f$, see TS 36.211 (5.4). {[0..7]}
uint8_t nCS_AN;
- /// Parameter: \f$N^{(1)}_\text{PUCCH}\f$ see TS 36.213 (10.1). \vr{[0..2047]}
+ /// Parameter: \f$N^{(1)}_\text{PUCCH}\f$ see TS 36.213 (10.1). {[0..2047]}
uint16_t n1PUCCH_AN;
/// group hopping sequence for DRS \note not part of offical UL-PUCCH_CONFIG_COMMON ASN1 specification.
@@ -229,13 +234,13 @@ typedef struct {
/// UL-ReferenceSignalsPUSCH from 36.331 RRC spec
typedef struct {
- /// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). \vr{[0..1]}
+ /// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). {[0..1]}
uint8_t groupHoppingEnabled;
- /// Parameter: \f$\Delta SS\f$, see TS 36.211 (5.5.1.3). \vr{[0..29]}
+ /// Parameter: \f$\Delta SS\f$, see TS 36.211 (5.5.1.3). {[0..29]}
uint8_t groupAssignmentPUSCH;
- /// Parameter: Sequence-hopping-enabled, see TS 36.211 (5.5.1.4). \vr{[0..1]}
+ /// Parameter: Sequence-hopping-enabled, see TS 36.211 (5.5.1.4). {[0..1]}
uint8_t sequenceHoppingEnabled;
- /// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). \vr{[0..7]}
+ /// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). {[0..7]}
uint8_t cyclicShift;
/// nPRS for cyclic shift of DRS \note not part of offical UL-ReferenceSignalsPUSCH ASN1 specification.
uint8_t nPRS[20];
@@ -253,13 +258,13 @@ typedef enum {
/// PUSCH-ConfigCommon from 36.331 RRC spec.
typedef struct {
- /// Parameter: \f$N_{sb}\f$, see TS 36.211 (5.3.4). \vr{[1..4]}
+ /// Parameter: \f$N_{sb}\f$, see TS 36.211 (5.3.4). {[1..4]}
uint8_t n_SB;
/// Parameter: Hopping-mode, see TS 36.211 (5.3.4).
PUSCH_HOPPING_t hoppingMode;
- /// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). \vr{[0..98]}
+ /// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). {[0..98]}
uint8_t pusch_HoppingOffset;
- /// See TS 36.213 (8.6.1). \vr{[0..1]} 1 indicates 64QAM is allowed, 0 not allowed.
+ /// See TS 36.213 (8.6.1). {[0..1]} 1 indicates 64QAM is allowed, 0 not allowed.
uint8_t enable64QAM;
/// Ref signals configuration
UL_REFERENCE_SIGNALS_PUSCH_t ul_ReferenceSignalsPUSCH;
@@ -267,11 +272,11 @@ typedef struct {
/// UE specific PUSCH configuration.
typedef struct {
- /// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). \vr{[0..15]}
+ /// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). {[0..15]}
uint16_t betaOffset_ACK_Index;
- /// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). \vr{[0..15]}
+ /// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). {[0..15]}
uint16_t betaOffset_RI_Index;
- /// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). \vr{[0..15]}
+ /// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). {[0..15]}
uint16_t betaOffset_CQI_Index;
} PUSCH_CONFIG_DEDICATED;
@@ -285,9 +290,10 @@ typedef struct {
/// PDSCH-ConfigCommon from 36.331 RRC spec
typedef struct {
- /// Parameter: Reference-signal power, see TS 36.213 (5.2). \vr{[-60..50]}\n Provides the downlink reference-signal EPRE. The actual value in dBm.
+ /// Parameter: Reference-signal power, see TS 36.213 (5.2). {[-60..50]}\n Provides the downlink reference-signal EPRE. The actual
+ /// value in dBm.
int8_t referenceSignalPower;
- /// Parameter: \f$P_B\f$, see TS 36.213 (Table 5.2-1). \vr{[0..3]}
+ /// Parameter: \f$P_B\f$, see TS 36.213 (Table 5.2-1). {[0..3]}
uint8_t p_b;
} PDSCH_CONFIG_COMMON;
@@ -311,13 +317,15 @@ typedef struct {
/// SoundingRS-UL-ConfigCommon Information Element from 36.331 RRC spec
typedef struct {
- /// enabled flag=1 means SRS is enabled. \vr{[0..1]}
+ /// enabled flag=1 means SRS is enabled. {[0..1]}
uint8_t enabled_flag;
- /// Parameter: SRS Bandwidth Configuration, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). \vr{[0..7]}\n Actual configuration depends on UL bandwidth. \note the specification sais it is an enumerated value.
+ /// Parameter: SRS Bandwidth Configuration, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). {[0..7]}\n Actual
+ /// configuration depends on UL bandwidth. \note the specification sais it is an enumerated value.
uint8_t srs_BandwidthConfig;
- /// Parameter: SRS SubframeConfiguration, see TS 36.211 (table 5.5.3.3-1 for FDD, table 5.5.3.3-2 for TDD). \vr{[0..15]} \note the specification sais it is an enumerated value.
+ /// Parameter: SRS SubframeConfiguration, see TS 36.211 (table 5.5.3.3-1 for FDD, table 5.5.3.3-2 for TDD). {[0..15]} \note the
+ /// specification sais it is an enumerated value.
uint8_t srs_SubframeConfig;
- /// Parameter: Simultaneous-AN-and-SRS, see TS 36.213 (8.2). \vr{[0..1]}
+ /// Parameter: Simultaneous-AN-and-SRS, see TS 36.213 (8.2). {[0..1]}
uint8_t ackNackSRS_SimultaneousTransmission;
/// Parameter: srsMaxUpPts, see TS 36.211 (5.5.3.2). \details If this field is present, reconfiguration of \f$m^\text{max}_\text{SRS,0}\f$ applies for UpPts, otherwise reconfiguration does not apply.
uint8_t srs_MaxUpPts;
@@ -390,19 +398,22 @@ typedef struct {
uint8_t subframe;
/// rnti
uint16_t rnti;
- /// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). \vr{[0..3]} \note the specification sais it is an enumerated value.
+ /// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). {[0..3]} \note the
+ /// specification sais it is an enumerated value.
uint8_t srs_Bandwidth;
- /// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) \vr{[0..3]} \note the specification sais it is an enumerated value.
+ /// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) {[0..3]} \note the specification
+ /// sais it is an enumerated value.
uint8_t srs_HoppingBandwidth;
- /// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). \vr{[0..23]}
+ /// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). {[0..23]}
uint8_t freqDomainPosition;
- /// Parameter: Duration, see TS 36.213 (8.2). \vr{[0..1]} 0 corresponds to "single" and 1 to "indefinite".
+ /// Parameter: Duration, see TS 36.213 (8.2). {[0..1]} 0 corresponds to "single" and 1 to "indefinite".
uint8_t duration;
- /// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). \vr{[0..1]}
+ /// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). {[0..1]}
uint8_t transmissionComb;
- /// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). \vr{[0..1023]}
+ /// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). {[0..1023]}
uint16_t srs_ConfigIndex;
- /// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). \vr{[0..7]} \note the specification sais it is an enumerated value.
+ /// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). {[0..7]} \note the specification sais it is an enumerated
+ /// value.
uint8_t cyclicShift;
// Parameter: internal implementation: UE SRS configured
uint8_t srsConfigDedicatedSetup;
@@ -414,15 +425,20 @@ typedef struct {
/// UplinkPowerControlDedicated Information Element from 36.331 RRC spec
typedef struct {
- /// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. \vr{[-8..7]}\n This field is applicable for non-persistent scheduling, only.
+ /// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. {[-8..7]}\n This field is applicable for
+ /// non-persistent scheduling, only.
int8_t p0_UE_PUSCH;
- /// Parameter: Ks, see TS 36.213 (5.1.1.1). \vr{[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1 corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the enumeration values do not correspond to the given values in the specification (en1 should be 1.25).
+ /// Parameter: Ks, see TS 36.213 (5.1.1.1). {[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1
+ /// corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the
+ /// enumeration values do not correspond to the given values in the specification (en1 should be 1.25).
uint8_t deltaMCS_Enabled;
- /// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). \vr{[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to "disabled".
+ /// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). {[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to
+ /// "disabled".
uint8_t accumulationEnabled;
- /// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. \vr{[-8..7]}
+ /// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. {[-8..7]}
int8_t p0_UE_PUCCH;
- /// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). \vr{[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value.
+ /// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). {[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual
+ /// parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value.
int8_t pSRS_Offset;
/// Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 (5.1.1.1).\details The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. \note the specification sais it is an enumerated value.
uint8_t filterCoefficient;
@@ -452,39 +468,46 @@ typedef enum {
/// UplinkPowerControlCommon Information Element from 36.331 RRC spec \note this structure does not currently make use of \ref deltaFList_PUCCH_t.
typedef struct {
- /// Parameter: \f$P_\text{0\_NOMINAL\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dBm. \vr{[-126..24]}\n This field is applicable for non-persistent scheduling, only.
+ /// Parameter: \f$P_\text{0\_NOMINAL\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dBm. {[-126..24]}\n This field is applicable for
+ /// non-persistent scheduling, only.
int8_t p0_NominalPUSCH;
/// Parameter: \f$\alpha\f$, see TS 36.213 (5.1.1.1) \warning the enumeration values do not correspond to the given values in the specification (al04 should be 0.4, ...)!
PUSCH_alpha_t alpha;
- /// Parameter: \f$P_\text{0\_NOMINAL\_PUCCH}\f$ See TS 36.213 (5.1.2.1), unit dBm. \vr{[-127..-96]}
+ /// Parameter: \f$P_\text{0\_NOMINAL\_PUCCH}\f$ See TS 36.213 (5.1.2.1), unit dBm. {[-127..-96]}
int8_t p0_NominalPUCCH;
- /// Parameter: \f$\Delta_\text{PREAMBLE\_Msg3}\f$ see TS 36.213 (5.1.1.1). \vr{[-1..6]}\n Actual value = IE value * 2 [dB].
+ /// Parameter: \f$\Delta_\text{PREAMBLE\_Msg3}\f$ see TS 36.213 (5.1.1.1). {[-1..6]}\n Actual value = IE value * 2 [dB].
int8_t deltaPreambleMsg3;
- /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value.
+ /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1, see TS 36.213 (5.1.2). {[0..2]} \warning check value range,
+ /// why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format1;
- /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1a, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value.
+ /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1a, see TS 36.213 (5.1.2). {[0..2]} \warning check value
+ /// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format1a;
- /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1b, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value.
+ /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 1b, see TS 36.213 (5.1.2). {[0..2]} \warning check value
+ /// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format1b;
- /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2, see TS 36.213 (5.1.2). \vr{[0..3]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value.
+ /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2, see TS 36.213 (5.1.2). {[0..3]} \warning check value range,
+ /// why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format2;
- /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2a, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value.
+ /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2a, see TS 36.213 (5.1.2). {[0..2]} \warning check value
+ /// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format2a;
- /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2b, see TS 36.213 (5.1.2). \vr{[0..2]} \warning check value range, why is this a long? \note the specification sais it is an enumerated value.
+ /// Parameter: \f$\Delta_\text{F\_PUCCH}(F)\f$ for the PUCCH format 2b, see TS 36.213 (5.1.2). {[0..2]} \warning check value
+ /// range, why is this a long? \note the specification sais it is an enumerated value.
long deltaF_PUCCH_Format2b;
} UL_POWER_CONTROL_CONFIG_COMMON;
/// Union for \ref TPC_PDCCH_CONFIG::tpc_Index.
typedef union {
- /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). \vr{[1..15]}
+ /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). {[1..15]}
uint8_t indexOfFormat3;
- /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). \vr{[1..31]}
+ /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). {[1..31]}
uint8_t indexOfFormat3A;
} TPC_INDEX_t;
/// TPC-PDCCH-Config Information Element from 36.331 RRC spec
typedef struct {
- /// RNTI for power control using DCI format 3/3A, see TS 36.212. \vr{[0..65535]}
+ /// RNTI for power control using DCI format 3/3A, see TS 36.212. {[0..65535]}
uint16_t rnti;
/// Index of N or M, see TS 36.212 (5.3.3.1.6 and 5.3.3.1.7), where N or M is dependent on the used DCI format (i.e. format 3 or 3a).
TPC_INDEX_t tpc_Index;
@@ -501,9 +524,9 @@ typedef enum {
/// SchedulingRequestConfig Information Element from 36.331 RRC spec
typedef struct {
- /// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). \vr{[0..2047]}
+ /// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t sr_PUCCH_ResourceIndex;
- /// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). \vr{[0..155]}
+ /// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). {[0..155]}
uint8_t sr_ConfigIndex;
/// Parameter for SR transmission in TS 36.321 (5.4.4). \details The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on.
DSR_TRANSMAX_t dsr_TransMax;
@@ -511,15 +534,17 @@ typedef struct {
/// CQI-ReportPeriodic
typedef struct {
- /// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). \vr{[0..1185]}, -1 indicates inactivity
+ /// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). {[0..1185]}, -1 indicates inactivity
int16_t cqi_PUCCH_ResourceIndex;
- /// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A and 7.2.2-1C). \vr{[0..1023]}
+ /// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A
+ /// and 7.2.2-1C). {[0..1023]}
int16_t cqi_PMI_ConfigIndex;
- /// Parameter: K, see 36.213 (4.2.2). \vr{[1..4]}
+ /// Parameter: K, see 36.213 (4.2.2). {[1..4]}
uint8_t K;
- /// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). \vr{[0..1023]}, -1 indicates inactivity
+ /// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). {[0..1023]}, -1 indicates inactivity
int16_t ri_ConfigIndex;
- /// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). \vr{[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and CQI is allowed.
+ /// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). {[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and
+ /// CQI is allowed.
uint8_t simultaneousAckNackAndCQI;
/// parameter computed from Tables 7.2.2-1A and 7.2.2-1C
uint16_t Npd;
@@ -540,7 +565,7 @@ typedef enum {
typedef struct {
/// Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1].
CQI_REPORTMODEAPERIODIC cqi_ReportModeAperiodic;
- /// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). \vr{[-1..6]}\n Actual value = IE value * 2 [dB].
+ /// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). {[-1..6]}\n Actual value = IE value * 2 [dB].
int8_t nomPDSCH_RS_EPRE_Offset;
CQI_REPORTPERIODIC CQI_ReportPeriodic;
} CQI_REPORT_CONFIG;
@@ -549,15 +574,25 @@ typedef struct {
typedef struct {
/// MBSFN subframe occurance. \details Radio-frames that contain MBSFN subframes occur when equation SFN mod radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. When fourFrames is used for subframeAllocation, the equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when fourFrames is used. \note the specification sais it is an enumerated value {n1, n2, n4, n8, n16, n32}.
int radioframeAllocationPeriod;
- /// MBSFN subframe occurance. \vr{[0..7]}\n Radio-frames that contain MBSFN subframes occur when equation SFN mod radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. When fourFrames is used for subframeAllocation, the equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when fourFrames is used.
+ /// MBSFN subframe occurance. {[0..7]}\n Radio-frames that contain MBSFN subframes occur when equation SFN mod
+ /// radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. When fourFrames is used for subframeAllocation, the
+ /// equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when
+ /// fourFrames is used.
int radioframeAllocationOffset;
- /// oneFrame or fourFrames. \vr{[0..1]}
+ /// oneFrame or fourFrames. {[0..1]}
int fourFrames_flag;
- /// Subframe configuration. \vr{[0..63]} (\ref fourFrames_flag == 0) or \vr{[0..16777215]} (\ref fourFrames_flag == 1)
+ /// Subframe configuration. {[0..63]} (\ref fourFrames_flag == 0) or {[0..16777215]} (\ref fourFrames_flag == 1)
/// \par fourFrames_flag == 0
- /// "1" denotes that the corresponding subframe is allocated for MBSFN. The following mapping applies:\n FDD: The first/leftmost bit defines the MBSFN allocation for subframe #1, the second bit for #2, third bit for #3 , fourth bit for #6, fifth bit for #7, sixth bit for #8.\n TDD: The first/leftmost bit defines the allocation for subframe #3, the second bit for #4, third bit for #7, fourth bit for #8, fifth bit for #9. Uplink subframes are not allocated. The last bit is not used.
- /// \par fourFrames_flag == 1
- /// A bit-map indicating MBSFN subframe allocation in four consecutive radio frames, "1" denotes that the corresponding subframe is allocated for MBSFN. The bitmap is interpreted as follows:\n FDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #1, #2, #3 , #6, #7, and #8 in the sequence of the four radio-frames.\n TDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #3, #4, #7, #8, and #9 in the sequence of the four radio-frames. The last four bits are not used. Uplink subframes are not allocated.
+ /// "1" denotes that the corresponding subframe is allocated for MBSFN. The following mapping applies:\n FDD: The first/leftmost
+ /// bit defines the MBSFN allocation for subframe #1, the second bit for #2, third bit for #3 , fourth bit for #6, fifth bit for
+ /// #7, sixth bit for #8.\n TDD: The first/leftmost bit defines the allocation for subframe #3, the second bit for #4, third bit
+ /// for #7, fourth bit for #8, fifth bit for #9. Uplink subframes are not allocated. The last bit is not used. \par
+ /// fourFrames_flag == 1 A bit-map indicating MBSFN subframe allocation in four consecutive radio frames, "1" denotes that the
+ /// corresponding subframe is allocated for MBSFN. The bitmap is interpreted as follows:\n FDD: Starting from the first radioframe
+ /// and from the first/leftmost bit in the bitmap, the allocation applies to subframes #1, #2, #3 , #6, #7, and #8 in the sequence
+ /// of the four radio-frames.\n TDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the
+ /// allocation applies to subframes #3, #4, #7, #8, and #9 in the sequence of the four radio-frames. The last four bits are not
+ /// used. Uplink subframes are not allocated.
int mbsfn_SubframeConfig;
} MBSFN_config_t;
diff --git a/openair1/PHY/impl_defs_lte_NB_IoT.h b/openair1/PHY/impl_defs_lte_NB_IoT.h
index 4389d51d78..50b66409ed 100644
--- a/openair1/PHY/impl_defs_lte_NB_IoT.h
+++ b/openair1/PHY/impl_defs_lte_NB_IoT.h
@@ -44,15 +44,15 @@ typedef enum {SF_DL_NB_IoT, SF_UL_NB_IoT, SF_S_NB_IoT} NB_IoT_subframe_t;
/////////////////////////
/// Union for \ref TPC_PDCCH_CONFIG::tpc_Index.
typedef union {
- /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). \vr{[1..15]}
+ /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). {[1..15]}
uint8_t indexOfFormat3;
- /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). \vr{[1..31]}
+ /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). {[1..31]}
uint8_t indexOfFormat3A;
} TPC_INDEX_NB_IoT_t;
/// TPC-PDCCH-Config Information Element from 36.331 RRC spec
typedef struct {
- /// RNTI for power control using DCI format 3/3A, see TS 36.212. \vr{[0..65535]}
+ /// RNTI for power control using DCI format 3/3A, see TS 36.212. {[0..65535]}
uint16_t rnti;
/// Index of N or M, see TS 36.212 (5.3.3.1.6 and 5.3.3.1.7), where N or M is dependent on the used DCI format (i.e. format 3 or 3a).
TPC_INDEX_NB_IoT_t tpc_Index;
@@ -72,22 +72,22 @@ typedef enum {
/// PUCCH-ConfigDedicated from 36.331 RRC spec
typedef struct {
- /// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). \vr{[0..1]}
+ /// Flag to indicate ACK NAK repetition activation, see TS 36.213 (10.1). {[0..1]}
uint8_t ackNackRepetition;
/// Parameter: \f$N_\text{ANRep}\f$, see TS 36.213 (10.1).
ACKNAKREP_NB_IoT_t repetitionFactor;
- /// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). \vr{[0..2047]}
+ /// Parameter: \f$n^{(1)}_\text{PUCCH,ANRep}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t n1PUCCH_AN_Rep;
/// Feedback mode, see TS 36.213 (7.3). \details Applied to both PUCCH and PUSCH feedback. For TDD, should always be set to bundling.
ANFBmode_NB_IoT_t tdd_AckNackFeedbackMode;
} PUCCH_CONFIG_DEDICATED_NB_IoT;
// UE specific PUSCH configuration.
typedef struct {
- /// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). \vr{[0..15]}
+ /// Parameter: \f$I^\text{HARQ-ACK}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-1). {[0..15]}
uint16_t betaOffset_ACK_Index;
- /// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). \vr{[0..15]}
+ /// Parameter: \f$I^{RI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-2). {[0..15]}
uint16_t betaOffset_RI_Index;
- /// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). \vr{[0..15]}
+ /// Parameter: \f$I^{CQI}_\text{offset}\f$, see TS 36.213 (Table 8.6.3-3). {[0..15]}
uint16_t betaOffset_CQI_Index;
} PUSCH_CONFIG_DEDICATED_NB_IoT;
/// Enumeration for Parameter \f$P_A\f$ \ref PDSCH_CONFIG_DEDICATED::p_a.
@@ -110,39 +110,46 @@ typedef struct {
/// UplinkPowerControlDedicated Information Element from 36.331 RRC spec
typedef struct {
- /// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. \vr{[-8..7]}\n This field is applicable for non-persistent scheduling, only.
+ /// Parameter: \f$P_\text{0\_UE\_PUSCH}(1)\f$, see TS 36.213 (5.1.1.1), unit dB. {[-8..7]}\n This field is applicable for
+ /// non-persistent scheduling, only.
int8_t p0_UE_PUSCH;
- /// Parameter: Ks, see TS 36.213 (5.1.1.1). \vr{[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1 corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the enumeration values do not correspond to the given values in the specification (en1 should be 1.25).
+ /// Parameter: Ks, see TS 36.213 (5.1.1.1). {[0..1]}\n en0 corresponds to value 0 corresponding to state “disabled”. en1
+ /// corresponds to value 1.25 corresponding to “enabled”. \note the specification sais it is an enumerated value. \warning the
+ /// enumeration values do not correspond to the given values in the specification (en1 should be 1.25).
uint8_t deltaMCS_Enabled;
- /// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). \vr{[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to "disabled".
+ /// Parameter: Accumulation-enabled, see TS 36.213 (5.1.1.1). {[0..1]} 1 corresponds to "enabled" whereas 0 corresponds to
+ /// "disabled".
uint8_t accumulationEnabled;
- /// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. \vr{[-8..7]}
+ /// Parameter: \f$P_\text{0\_UE\_PUCCH}(1)\f$, see TS 36.213 (5.1.2.1), unit dB. {[-8..7]}
int8_t p0_UE_PUCCH;
- /// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). \vr{[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value.
+ /// Parameter: \f$P_\text{SRS\_OFFSET}\f$, see TS 36.213 (5.1.3.1). {[0..15]}\n For Ks=1.25 (\ref deltaMCS_Enabled), the actual
+ /// parameter value is pSRS_Offset value - 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS_Offset value.
int8_t pSRS_Offset;
/// Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 (5.1.1.1).\details The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. \note the specification sais it is an enumerated value.
uint8_t filterCoefficient;
} UL_POWER_CONTROL_DEDICATED_NB_IoT;
/// Union for \ref TPC_PDCCH_CONFIG::tpc_Index.
-//typedef union {
- /// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). \vr{[1..15]}
- // uint8_t indexOfFormat3;
- /// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). \vr{[1..31]}
- // uint8_t indexOfFormat3A;
+// typedef union {
+/// Index of N when DCI format 3 is used. See TS 36.212 (5.3.3.1.6). {[1..15]}
+// uint8_t indexOfFormat3;
+/// Index of M when DCI format 3A is used. See TS 36.212 (5.3.3.1.7). {[1..31]}
+// uint8_t indexOfFormat3A;
//} TPC_INDEX_NB_IoT_t;
/// CQI-ReportPeriodic
typedef struct {
- /// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). \vr{[0..1185]}, -1 indicates inactivity
+ /// Parameter: \f$n^{(2)}_\text{PUCCH}\f$, see TS 36.213 (7.2). {[0..1185]}, -1 indicates inactivity
int16_t cqi_PUCCH_ResourceIndex;
- /// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A and 7.2.2-1C). \vr{[0..1023]}
+ /// Parameter: CQI/PMI Periodicity and Offset Configuration Index \f$I_\text{CQI/PMI}\f$, see TS 36.213 (tables 7.2.2-1A
+ /// and 7.2.2-1C). {[0..1023]}
int16_t cqi_PMI_ConfigIndex;
- /// Parameter: K, see 36.213 (4.2.2). \vr{[1..4]}
+ /// Parameter: K, see 36.213 (4.2.2). {[1..4]}
uint8_t K;
- /// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). \vr{[0..1023]}, -1 indicates inactivity
+ /// Parameter: RI Config Index \f$I_\text{RI}\f$, see TS 36.213 (7.2.2-1B). {[0..1023]}, -1 indicates inactivity
int16_t ri_ConfigIndex;
- /// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). \vr{[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and CQI is allowed.
+ /// Parameter: Simultaneous-AN-and-CQI, see TS 36.213 (10.1). {[0..1]} 1 indicates that simultaneous transmission of ACK/NACK and
+ /// CQI is allowed.
uint8_t simultaneousAckNackAndCQI;
/// parameter computed from Tables 7.2.2-1A and 7.2.2-1C
uint16_t Npd;
@@ -163,26 +170,29 @@ typedef enum {
typedef struct {
/// Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1].
CQI_REPORTMODEAPERIODIC_NB_IoT cqi_ReportModeAperiodic;
- /// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). \vr{[-1..6]}\n Actual value = IE value * 2 [dB].
+ /// Parameter: \f$\Delta_\text{offset}\f$, see TS 36.213 (7.2.3). {[-1..6]}\n Actual value = IE value * 2 [dB].
int8_t nomPDSCH_RS_EPRE_Offset;
CQI_REPORTPERIODIC_NB_IoT CQI_ReportPeriodic;
} CQI_REPORT_CONFIG_NB_IoT;
/// SoundingRS-UL-ConfigDedicated Information Element from 36.331 RRC spec
typedef struct {
- /// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). \vr{[0..3]} \note the specification sais it is an enumerated value.
+ /// Parameter: \f$B_\text{SRS}\f$, see TS 36.211 (table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4). {[0..3]} \note the
+ /// specification sais it is an enumerated value.
uint8_t srs_Bandwidth;
- /// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) \vr{[0..3]} \note the specification sais it is an enumerated value.
+ /// Parameter: SRS hopping bandwidth \f$b_\text{hop}\in\{0,1,2,3\}\f$, see TS 36.211 (5.5.3.2) {[0..3]} \note the specification
+ /// sais it is an enumerated value.
uint8_t srs_HoppingBandwidth;
- /// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). \vr{[0..23]}
+ /// Parameter: \f$n_\text{RRC}\f$, see TS 36.211 (5.5.3.2). {[0..23]}
uint8_t freqDomainPosition;
- /// Parameter: Duration, see TS 36.213 (8.2). \vr{[0..1]} 0 corresponds to "single" and 1 to "indefinite".
+ /// Parameter: Duration, see TS 36.213 (8.2). {[0..1]} 0 corresponds to "single" and 1 to "indefinite".
uint8_t duration;
- /// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). \vr{[0..1]}
+ /// Parameter: \f$k_\text{TC}\in\{0,1\}\f$, see TS 36.211 (5.5.3.2). {[0..1]}
uint8_t transmissionComb;
- /// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). \vr{[0..1023]}
+ /// Parameter: \f$I_\text{SRS}\f$, see TS 36.213 (table 8.2-1). {[0..1023]}
uint16_t srs_ConfigIndex;
- /// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). \vr{[0..7]} \note the specification sais it is an enumerated value.
+ /// Parameter: \f$n^\text{CS}_\text{SRS}\f$. See TS 36.211 (5.5.3.1). {[0..7]} \note the specification sais it is an enumerated
+ /// value.
uint8_t cyclicShift;
// Parameter: internal implementation: UE SRS configured
uint8_t srsConfigDedicatedSetup;
@@ -204,9 +214,9 @@ typedef enum {
/// SchedulingRequestConfig Information Element from 36.331 RRC spec
typedef struct {
- /// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). \vr{[0..2047]}
+ /// Parameter: \f$n^{(1)}_\text{PUCCH,SRI}\f$, see TS 36.213 (10.1). {[0..2047]}
uint16_t sr_PUCCH_ResourceIndex;
- /// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). \vr{[0..155]}
+ /// Parameter: \f$I_\text{SR}\f$, see TS 36.213 (10.1). {[0..155]}
uint8_t sr_ConfigIndex;
/// Parameter for SR transmission in TS 36.321 (5.4.4). \details The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on.
DSR_TRANSMAX_NB_IoT_t dsr_TransMax;
@@ -404,7 +414,7 @@ typedef struct {
typedef struct {
/// nprach_CP_Length_r13, for the CP length(unit us) only 66.7 and 266.7 is implemented
uint16_t nprach_CP_Length;
- /// The criterion for UEs to select a NPRACH resource. Up to 2 RSRP threshold values can be signalled. \vr{[1..2]}
+ /// The criterion for UEs to select a NPRACH resource. Up to 2 RSRP threshold values can be signalled. {[1..2]}
rsrp_ThresholdsNPrachInfoList *rsrp_ThresholdsPrachInfoList;
/// NPRACH Parameters List
NPRACH_List_NB_IoT_t nprach_ParametersList;
@@ -413,7 +423,7 @@ typedef struct {
/// NPDSCH-ConfigCommon from 36.331 RRC spec
typedef struct {
- ///see TS 36.213 (16.2). \vr{[-60..50]}\n Provides the downlink reference-signal EPRE. The actual value in dBm.
+ /// see TS 36.213 (16.2). {[-60..50]}\n Provides the downlink reference-signal EPRE. The actual value in dBm.
uint16_t nrs_Power;
} NPDSCH_CONFIG_COMMON;
@@ -433,11 +443,11 @@ typedef struct{
/// UL-ReferenceSignalsNPUSCH from 36.331 RRC spec
typedef struct {
- /// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). \vr{[0..1]}
+ /// Parameter: Group-hopping-enabled, see TS 36.211 (5.5.1.3). {[0..1]}
uint8_t groupHoppingEnabled;
- /// , see TS 36.211 (5.5.1.3). \vr{[0..29]}
+ /// , see TS 36.211 (5.5.1.3). {[0..29]}
uint8_t groupAssignmentNPUSCH;
- /// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). \vr{[0..7]}
+ /// Parameter: cyclicShift, see TS 36.211 (Table 5.5.2.1.1-2). {[0..7]}
uint8_t cyclicShift;
/// nPRS for cyclic shift of DRS \note not part of offical UL-ReferenceSignalsPUSCH ASN1 specification.
uint8_t nPRS[20];
@@ -454,7 +464,7 @@ typedef struct {
uint8_t ack_NACK_NumRepetitions_Msg4[3];
/// SRS SubframeConfiguration. See TS 36.211 [21, table 5.5.3.3-1]. Value sc0 corresponds to value 0, sc1 to value 1 and so on.
uint8_t srs_SubframeConfig;
- /// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). \vr{[0..98]}
+ /// Parameter: \f$N^{HO}_{RB}\f$, see TS 36.211 (5.3.4). {[0..98]}
DMRS_CONFIG_t dmrs_Config;
/// Ref signals configuration
UL_REFERENCE_SIGNALS_NPUSCH_t ul_ReferenceSignalsNPUSCH;
diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h
index b83800df86..5c461b27b0 100644
--- a/openair1/PHY/impl_defs_top.h
+++ b/openair1/PHY/impl_defs_top.h
@@ -37,6 +37,7 @@
* @{
* @defgroup _PHY_RF_INTERFACE_ PHY - RF Interface
+ * @{
* @ingroup _PHY_RF_INTERFACE_
* @{
* @defgroup _GENERIC_PHY_RF_INTERFACE_ Generic PHY - RF Interface
@@ -44,13 +45,13 @@
* @defgroup _BLADERF_PHY_RF_INTERFACE_ PHY - BLADERF RF Interface
* @defgroup _LMSSDR_PHY_RF_INTERFACE_ PHY - LMSSDR RF Interface
* @}
- *
+ * @}
* @ingroup _ref_implementation_
* @{
* This module is responsible for defining the generic interface between PHY and RF Target
* @}
-
- * @defgroup _openair1_ openair1 Reference Implementation
+
+ * @defgroup _openair1_ openair1 Reference Implementation
* @ingroup _ref_implementation_
* @{
diff --git a/openair1/PHY/impl_defs_top_NB_IoT.h b/openair1/PHY/impl_defs_top_NB_IoT.h
index 5966d04fc4..f9560cb228 100644
--- a/openair1/PHY/impl_defs_top_NB_IoT.h
+++ b/openair1/PHY/impl_defs_top_NB_IoT.h
@@ -33,352 +33,10 @@
#ifndef __PHY_IMPLEMENTATION_DEFS_NB_IOT_H__
#define __PHY_IMPLEMENTATION_DEFS_NB_IOT_H__
-
#include "common/openairinterface5g_limits.h"
-/** @defgroup _ref_implementation_ OpenAirInterface LTE Implementation
- * @{
-
- * @defgroup _PHY_RF_INTERFACE_ PHY - RF Interface
- * @ingroup _PHY_RF_INTERFACE_
- * @{
- * @defgroup _GENERIC_PHY_RF_INTERFACE_ Generic PHY - RF Interface
- * @defgroup _USRP_PHY_RF_INTERFACE_ PHY - USRP RF Interface
- * @defgroup _BLADERF_PHY_RF_INTERFACE_ PHY - BLADERF RF Interface
- * @defgroup _LMSSDR_PHY_RF_INTERFACE_ PHY - LMSSDR RF Interface
- * @}
- *
- * @ingroup _ref_implementation_
- * @{
- * This module is responsible for defining the generic interface between PHY and RF Target
- * @}
-
- * @defgroup _openair1_ openair1 Reference Implementation
- * @ingroup _ref_implementation_
- * @{
-
-
- * @defgroup _physical_layer_ref_implementation_ Physical Layer Reference Implementation
- * @ingroup _openair1_
- * @{
-
-
- * @defgroup _PHY_STRUCTURES_ Basic Structures and Memory Initialization
- * @ingroup _physical_layer_ref_implementation_
- * @{
- * This module is responsible for defining and initializing the PHY variables during static configuration of OpenAirInterface.
- * @}
-
- * @defgroup _PHY_DSP_TOOLS_ DSP Tools
- * @ingroup _physical_layer_ref_implementation_
- * @{
- * This module is responsible for basic signal processing related to inner-MODEM processing.
- * @}
-
- * @defgroup _PHY_MODULATION_ Modulation and Demodulation
- * @ingroup _physical_layer_ref_implementation_
- * @{
- * This module is responsible for procedures related to OFDMA modulation and demodulation.
- * @}
-
- * @defgroup _PHY_PARAMETER_ESTIMATION_BLOCKS_ Parameter Estimation
- * @ingroup _physical_layer_ref_implementation_
- * @{
- * This module is responsible for procedures related to OFDMA frequency-domain channel estimation for LTE Downlink Channels.
- * @}
-
- * @defgroup _PHY_CODING_BLOCKS_ Channel Coding/Decoding Functions
- * @ingroup _physical_layer_ref_implementation_
- * @{
- * This module is responsible for procedures related to channel coding/decoding, rate-matching, segementation and interleaving.
- * @}
-
- * @defgroup _PHY_TRANSPORT_ Transport/Physical Channel Processing
- * @ingroup _physical_layer_ref_implementation_
- * @{
- * This module is responsible for defining and processing the PHY procedures (TX/RX) related to transport and physical channels.
- * @}
-
- * @defgroup _PHY_PROCEDURES_ Physical Layer Procedures
- * @ingroup _physical_layer_ref_implementation_
- * @{
- * This module is responsible for defining and processing the PHY procedures (TX/RX) related to transport and physical channels.
- * @}
-
- * @}
- * @}
- * @}
- */
-
-//#include "types.h"
-
-/*
-
-
-#define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size)
-#define NUMBER_OF_SYMBOLS_PER_FRAME (frame_parms->symbols_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
-#define NUMBER_OF_USEFUL_CARRIERS (12*frame_parms->N_RB_DL)
-#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
-#define NUMBER_OF_USEFUL_CARRIERS_BYTES (NUMBER_OF_USEFUL_CARRIERS>>2)
-#define HALF_NUMBER_OF_USEFUL_CARRIERS (NUMBER_OF_USEFUL_CARRIERS>>1)
-#define HALF_NUMBER_OF_USEFUL_CARRIERS_BYTES (HALF_NUMBER_OF_USEFUL_CARRIERS>>2)
-#define FIRST_CARRIER_OFFSET (HALF_NUMBER_OF_USEFUL_CARRIERS+NUMBER_OF_ZERO_CARRIERS)
-#define NUMBER_OF_OFDM_SYMBOLS_PER_SLOT (NUMBER_OF_SYMBOLS_PER_FRAME/LTE_SLOTS_PER_FRAME)
-
-#ifdef EMOS
-#define EMOS_SCH_INDEX 1
-#endif //EMOS
-
-#define EXTENSION_TYPE (PHY_config->PHY_framing.Extension_type)
-
-#define NUMBER_OF_OFDM_CARRIERS_BYTES NUMBER_OF_OFDM_CARRIERS*4
-//#define NUMBER_OF_USEFUL_CARRIERS_BYTES NUMBER_OF_USEFUL_CARRIERS*4
-#define HALF_NUMBER_OF_USER_CARRIERS_BYTES NUMBER_OF_USEFUL_CARRIERS/2
-
-#define CYCLIC_PREFIX_LENGTH (frame_parms->nb_prefix_samples)
-#define CYCLIC_PREFIX_LENGTH_SAMPLES (CYCLIC_PREFIX_LENGTH*2)
-#define CYCLIC_PREFIX_LENGTH_BYTES (CYCLIC_PREFIX_LENGTH*4)
-#define CYCLIC_PREFIX_LENGTH0 (frame_parms->nb_prefix_samples0)
-#define CYCLIC_PREFIX_LENGTH_SAMPLES0 (CYCLIC_PREFIX_LENGTH0*2)
-#define CYCLIC_PREFIX_LENGTH_BYTES0 (CYCLIC_PREFIX_LENGTH0*4)
-
-#define OFDM_SYMBOL_SIZE_SAMPLES ((NUMBER_OF_OFDM_CARRIERS + CYCLIC_PREFIX_LENGTH)*2) // 16-bit units (i.e. real samples)
-#define OFDM_SYMBOL_SIZE_SAMPLES0 ((NUMBER_OF_OFDM_CARRIERS + CYCLIC_PREFIX_LENGTH0)*2) // 16-bit units (i.e. real samples)
-#define OFDM_SYMBOL_SIZE_SAMPLES_MAX 4096 // 16-bit units (i.e. real samples)
-#define OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES (OFDM_SYMBOL_SIZE_SAMPLES/2) // 32-bit units (i.e. complex samples)
-#define OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0 (OFDM_SYMBOL_SIZE_SAMPLES0/2) // 32-bit units (i.e. complex samples)
-#define OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX ((NUMBER_OF_OFDM_CARRIERS)*2)
-#define OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX (OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX/2)
-#define OFDM_SYMBOL_SIZE_BYTES (OFDM_SYMBOL_SIZE_SAMPLES*2)
-#define OFDM_SYMBOL_SIZE_BYTES0 (OFDM_SYMBOL_SIZE_SAMPLES0*2)
-#define OFDM_SYMBOL_SIZE_BYTES_NO_PREFIX (OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX*2)
-
-#define SLOT_LENGTH_BYTES (frame_parms->samples_per_tti<<1) // 4 bytes * samples_per_tti/2
-#define SLOT_LENGTH_BYTES_NO_PREFIX (OFDM_SYMBOL_SIZE_BYTES_NO_PREFIX * NUMBER_OF_OFDM_SYMBOLS_PER_SLOT)
-
-#define FRAME_LENGTH_COMPLEX_SAMPLES (frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
-#define FRAME_LENGTH_SAMPLES (FRAME_LENGTH_COMPLEX_SAMPLES*2)
-#define FRAME_LENGTH_SAMPLES_NO_PREFIX (NUMBER_OF_SYMBOLS_PER_FRAME*OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX)
-#define FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX (FRAME_LENGTH_SAMPLES_NO_PREFIX/2)
-
-#define NUMBER_OF_CARRIERS_PER_GROUP (NUMBER_OF_USEFUL_CARRIERS/NUMBER_OF_FREQUENCY_GROUPS)
-
-#define RX_PRECISION (16)
-#define LOG2_RX_PRECISION (4)
-#define RX_OUTPUT_SHIFT (4)
-
-
-#define SAMPLE_SIZE_BYTES 2 // 2 bytes/real sample
-
-#define FRAME_LENGTH_BYTES (FRAME_LENGTH_SAMPLES * SAMPLE_SIZE_BYTES) // frame size in bytes
-#define FRAME_LENGTH_BYTES_NO_PREFIX (FRAME_LENGTH_SAMPLES_NO_PREFIX * SAMPLE_SIZE_BYTES) // frame size in bytes
-
-
-#define FFT_SCALE_FACTOR 8 // Internal Scaling for FFT
-#define DMA_BLKS_PER_SLOT (SLOT_LENGTH_BYTES/2048) // Number of DMA blocks per slot
-#define SLOT_TIME_NS (SLOT_LENGTH_SAMPLES*(1e3)/7.68) // slot time in ns
-
-#define NB_ANTENNA_PORTS_ENB 6 // total number of eNB antenna ports
-
-#define TARGET_RX_POWER 50 // Target digital power for the AGC
-#define TARGET_RX_POWER_MAX 65 // Maximum digital power, such that signal does not saturate (value found by simulation)
-#define TARGET_RX_POWER_MIN 35 // Minimum digital power, anything below will be discarded (value found by simulation)
-
-//the min and max gains have to match the calibrated gain table
-//#define MAX_RF_GAIN 160
-//#define MIN_RF_GAIN 96
-#define MAX_RF_GAIN 200
-#define MIN_RF_GAIN 80
-
-#define PHY_SYNCH_OFFSET ((OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES)-1) // OFFSET of BEACON SYNCH
-#define PHY_SYNCH_MIN_POWER 1000
-#define PHY_SYNCH_THRESHOLD 100
-
-*/
-
#define ONE_OVER_SQRT2_Q15_NB_IoT 23170
-/*
-#define ONE_OVER_2_Q15 16384
-
-// QAM amplitude definitions
-
-/// First Amplitude for QAM16 (\f$ 2^{15} \times 2/\sqrt{10}\f$)
-#define QAM16_n1 20724
-/// Second Amplitude for QAM16 (\f$ 2^{15} \times 1/\sqrt{10}\f$)
-#define QAM16_n2 10362
-
-///First Amplitude for QAM64 (\f$ 2^{15} \times 4/\sqrt{42}\f$)
-#define QAM64_n1 20225
-///Second Amplitude for QAM64 (\f$ 2^{15} \times 2/\sqrt{42}\f$)
-#define QAM64_n2 10112
-///Third Amplitude for QAM64 (\f$ 2^{15} \times 1/\sqrt{42}\f$)
-#define QAM64_n3 5056
-
-/// First Amplitude for QAM16 for TM5 (\f$ 2^{15} \times 2/sqrt(20)\f$)
-#define QAM16_TM5_n1 14654
-/// Second Amplitude for QAM16 for TM5 Receiver (\f$ 2^{15} \times 1/\sqrt{20}\f$)
-#define QAM16_TM5_n2 7327
-
-///First Amplitude for QAM64 (\f$ 2^{15} \times 4/\sqrt{84}\f$)
-#define QAM64_TM5_n1 14301
-///Second Amplitude for QAM64 (\f$ 2^{15} \times 2/\sqrt{84}\f$)
-#define QAM64_TM5_n2 7150
-///Third Amplitude for QAM64 for TM5 Receiver (\f$ 2^{15} \times 1/\sqrt{84}\f$)
-#define QAM64_TM5_n3 3575
-
-
-#ifdef BIT8_RXMUX
-#define PERROR_SHIFT 0
-#else
-#define PERROR_SHIFT 10
-#endif
-
-#define BIT8_TX_SHIFT 2
-#define BIT8_TX_SHIFT_DB 12
-
-//#define CHBCH_RSSI_MIN -75
-
-#ifdef BIT8_TX
-#define AMP 128
-#else
-#define AMP 512//1024 //4096
-#endif
-
-#define AMP_OVER_SQRT2 ((AMP*ONE_OVER_SQRT2_Q15)>>15)
-#define AMP_OVER_2 (AMP>>1)
-
-/// Threshold for PUCCH Format 1 detection
-#define PUCCH1_THRES 0
-/// Threshold for PUCCH Format 1a/1b detection
-#define PUCCH1a_THRES 4
-
-/// Data structure for transmission.
-typedef struct {
- /// RAW TX sample buffer
- char *TX_DMA_BUFFER[2];
-} TX_VARS ;
-
-/// Data structure for reception.
-typedef struct {
- /// RAW TX sample buffer
- char *TX_DMA_BUFFER[2];
- /// RAW RX sample buffer
- int *RX_DMA_BUFFER[2];
-} TX_RX_VARS;
-
-//! \brief Extension Type /
-typedef enum {
- CYCLIC_PREFIX,
- CYCLIC_SUFFIX,
- ZEROS,
- NONE
-} Extension_t;
-
-/// Measurement Variables
-*/
#define NUMBER_OF_SUBBANDS_MAX_NB_IoT 13
-/*
-#define NUMBER_OF_HARQ_PID_MAX 8
-
-#define MAX_FRAME_NUMBER 0x400
-#include "common/openairinterface5g_limits.h"
-
-#define NUMBER_OF_RN_MAX 3
-typedef enum {no_relay=1,unicast_relay_type1,unicast_relay_type2, multicast_relay} relaying_type_t;
-
-typedef struct {
- //unsigned int rx_power[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; //! estimated received signal power (linear)
- //unsigned short rx_power_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; //! estimated received signal power (dB)
- //unsigned short rx_avg_power_dB[NUMBER_OF_CONNECTED_eNB_MAX]; //! estimated avg received signal power (dB)
-
- // RRC measurements
- uint32_t rssi;
- int n_adj_cells;
- unsigned int adj_cell_id[6];
- uint32_t rsrq[7];
- uint32_t rsrp[7];
- float rsrp_filtered[7]; // after layer 3 filtering
- float rsrq_filtered[7];
- // common measurements
- //! estimated noise power (linear)
- unsigned int n0_power[NB_ANTENNAS_RX];
- //! estimated noise power (dB)
- unsigned short n0_power_dB[NB_ANTENNAS_RX];
- //! total estimated noise power (linear)
- unsigned int n0_power_tot;
- //! total estimated noise power (dB)
- unsigned short n0_power_tot_dB;
- //! average estimated noise power (linear)
- unsigned int n0_power_avg;
- //! average estimated noise power (dB)
- unsigned short n0_power_avg_dB;
- //! total estimated noise power (dBm)
- short n0_power_tot_dBm;
-
- // UE measurements
- //! estimated received spatial signal power (linear)
- int rx_spatial_power[NUMBER_OF_CONNECTED_eNB_MAX][2][2];
- //! estimated received spatial signal power (dB)
- unsigned short rx_spatial_power_dB[NUMBER_OF_CONNECTED_eNB_MAX][2][2];
-
- /// estimated received signal power (sum over all TX antennas)
- //int wideband_cqi[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
- int rx_power[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
- /// estimated received signal power (sum over all TX antennas)
- //int wideband_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
- unsigned short rx_power_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
-
- /// estimated received signal power (sum over all TX/RX antennas)
- int rx_power_tot[NUMBER_OF_CONNECTED_eNB_MAX]; //NEW
- /// estimated received signal power (sum over all TX/RX antennas)
- unsigned short rx_power_tot_dB[NUMBER_OF_CONNECTED_eNB_MAX]; //NEW
-
- //! estimated received signal power (sum of all TX/RX antennas, time average)
- int rx_power_avg[NUMBER_OF_CONNECTED_eNB_MAX];
- //! estimated received signal power (sum of all TX/RX antennas, time average, in dB)
- unsigned short rx_power_avg_dB[NUMBER_OF_CONNECTED_eNB_MAX];
-
- /// SINR (sum of all TX/RX antennas, in dB)
- int wideband_cqi_tot[NUMBER_OF_CONNECTED_eNB_MAX];
- /// SINR (sum of all TX/RX antennas, time average, in dB)
- int wideband_cqi_avg[NUMBER_OF_CONNECTED_eNB_MAX];
-
- //! estimated rssi (dBm)
- short rx_rssi_dBm[NUMBER_OF_CONNECTED_eNB_MAX];
- //! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
- int rx_correlation[NUMBER_OF_CONNECTED_eNB_MAX][2];
- //! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
- int rx_correlation_dB[NUMBER_OF_CONNECTED_eNB_MAX][2];
-
- /// Wideband CQI (sum of all RX antennas, in dB, for precoded transmission modes (3,4,5,6), up to 4 spatial streams)
- int precoded_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX+1][4];
- /// Subband CQI per RX antenna (= SINR)
- int subband_cqi[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX];
- /// Total Subband CQI (= SINR)
- int subband_cqi_tot[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX];
- /// Subband CQI in dB (= SINR dB)
- int subband_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX];
- /// Total Subband CQI
- int subband_cqi_tot_dB[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX];
- /// Wideband PMI for each RX antenna
- int wideband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
- /// Wideband PMI for each RX antenna
- int wideband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
- ///Subband PMI for each RX antenna
- int subband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX];
- ///Subband PMI for each RX antenna
- int subband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX];
- /// chosen RX antennas (1=Rx antenna 1, 2=Rx antenna 2, 3=both Rx antennas)
- unsigned char selected_rx_antennas[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX];
- /// Wideband Rank indication
- unsigned char rank[NUMBER_OF_CONNECTED_eNB_MAX];
- /// Number of RX Antennas
- unsigned char nb_antennas_rx;
- /// DLSCH error counter
- // short dlsch_errors;
-
-} PHY_MEASUREMENTS;
-*/
typedef enum {no_relay_NB_IoT=1,unicast_relay_type1_NB_IoT,unicast_relay_type2_NB_IoT, multicast_relay_NB_IoT} relaying_type_t_NB_IoT;
typedef struct {
//unsigned int rx_power[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; //! estimated received signal power (linear)
@@ -526,10 +184,5 @@ typedef struct {
int subband_cqi_tot_dB[NUMBER_OF_UE_MAX_NB_IoT][100];
} PHY_MEASUREMENTS_eNB_NB_IoT;
-/*
-#define MCS_COUNT 28
-#define MCS_TABLE_LENGTH_MAX 64
-*/
-#endif //__PHY_IMPLEMENTATION_DEFS_H__
-/**@}
-*/
+
+#endif //__PHY_IMPLEMENTATION_DEFS_H__
diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c
index 0263f6f3cc..db19817265 100644
--- a/openair1/SCHED/phy_procedures_lte_common.c
+++ b/openair1/SCHED/phy_procedures_lte_common.c
@@ -19,16 +19,16 @@
* contact@openairinterface.org
*/
-/*! \file phy_procedures_lte_eNB.c
-* \brief Implementation of common utilities for eNB/UE procedures from 36.213 LTE specifications
-* \author R. Knopp, F. Kaltenberger
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
+/*! \file phy_procedures_lte_common.c
+ * \brief Implementation of common utilities for eNB/UE procedures from 36.213 LTE specifications
+ * \author R. Knopp, F. Kaltenberger
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
+ * \note
+ * \warning
+ */
#include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h"
#include "SCHED/sched_common_extern.h"
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index a9cba05d4d..cdd1837bb4 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file phy_procedures_lte_eNB.c
+/*! \file phy_procedures_lte_eNb.c
* \brief Implementation of eNB procedures from 36.213 LTE specifications / FeMBMS 36.231 LTE procedures v14.2
* \author R. Knopp, F. Kaltenberger, N. Nikaein, X. Foukas, J. Morgade
* \date 2011
diff --git a/openair1/SCHED/prach_procedures.c b/openair1/SCHED/prach_procedures.c
index fd78ed4bfb..e4d4bff17e 100644
--- a/openair1/SCHED/prach_procedures.c
+++ b/openair1/SCHED/prach_procedures.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file phy_procedures_lte_eNB.c
+/*! \file prach_procedures.c
* \brief Implementation of eNB procedures from 36.213 LTE specifications
* \author R. Knopp, F. Kaltenberger, N. Nikaein, X. Foukas
* \date 2011
diff --git a/openair1/SCHED/sched_eNB.h b/openair1/SCHED/sched_eNB.h
index efdb1bd199..50c6dc2efa 100644
--- a/openair1/SCHED/sched_eNB.h
+++ b/openair1/SCHED/sched_eNB.h
@@ -85,11 +85,9 @@ enum openair_HARQ_TYPE {
* @{
*/
-
-
/*! \brief Scheduling for eNB TX procedures in normal subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act
- @param abstraction_flag Indicator of PHY abstraction
+@param proc
@param do_meas Do inline timing measurement
*/
void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,int do_meas);
@@ -100,15 +98,9 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc,int d
*/
void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc);
-/*! \brief Scheduling for eNB TX procedures in TDD S-subframes.
- @param phy_vars_eNB Pointer to eNB variables on which to act
- @param proc Pointer to RXn-TXnp4 proc information
- @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying
-*/
-
/*! \brief Scheduling for eNB RX common procedures in normal subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act
- @param abstraction_flag Indicator of PHY abstraction
+ @param proc is context
*/
void phy_procedures_eNB_common_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc);
@@ -120,11 +112,12 @@ void phy_procedures_eNB_S_TX(PHY_VARS_eNB *phy_vars_eNB);
/*! \brief Scheduling for eNB RX procedures in TDD S-subframes.
@param phy_vars_eNB Pointer to eNB variables on which to act
+@param proc
*/
void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,L1_rxtx_proc_t *proc);
/*! \brief Scheduling for eNB PRACH RX procedures
- @param phy_vars_eNB Pointer to eNB variables on which to act
+ @param eNB Pointer to eNB variables on which to act
@param br_flag indicator for eMTC PRACH
*/
@@ -166,12 +159,6 @@ void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms,
*/
uint8_t get_Msg3_harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t current_subframe);
-/*! \brief Get ULSCH harq_pid from PHICH subframe
- @param frame_parms Pointer to DL Frame Parameters
- @param subframe subframe of PHICH
- @returns harq_pid (0 ... 7)
- */
-
/*! \brief Function to indicate failure of contention resolution or RA procedure. It places the UE back in PRACH mode.
@param Mod_id Instance index of UE
@param CC_id Component Carrier Index
@@ -181,6 +168,7 @@ void ra_failed(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
/*! \brief Indicates the SR TXOp in current subframe for eNB and particular UE index. Implements Table 10.1-5 from 36.213.
@param phy_vars_eNB Pointer to eNB variables
+@param proc
@param UE_id ID of UE which may be issuing the SR
@returns 1 if TXOp is active.
*/
@@ -218,8 +206,7 @@ int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subf
void compute_srs_pos(frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset);
void release_rnti_of_phy(module_id_t mod_id);
-/*@}*/
-
+/**@}*/
#endif
diff --git a/openair1/SCHED_NR/fapi_nr_l1.c b/openair1/SCHED_NR/fapi_nr_l1.c
index 9662780737..8d9a51d41a 100644
--- a/openair1/SCHED_NR/fapi_nr_l1.c
+++ b/openair1/SCHED_NR/fapi_nr_l1.c
@@ -161,7 +161,7 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO)
notifiedFIFO_elt_t *res=NULL;
processingData_L1tx_t *msgTx=NULL;
if (!gNB->reorder_thread_disable) {
- res = pullTpool(&gNB->L1_tx_free, &gNB->threadPool);
+ res = pullNotifiedFIFO(&gNB->L1_tx_free);
if (res == NULL)
return; // Tpool has been stopped, nothing to process
msgTx = (processingData_L1tx_t *)NotifiedFifoData(res);
diff --git a/openair1/SCHED_NR_UE/defs.h b/openair1/SCHED_NR_UE/defs.h
index 30da87a352..e999626bfd 100644
--- a/openair1/SCHED_NR_UE/defs.h
+++ b/openair1/SCHED_NR_UE/defs.h
@@ -94,7 +94,7 @@ typedef struct {
/*! \brief Scheduling for UE TX procedures in normal subframes.
@param ue Pointer to UE variables on which to act
@param proc Pointer to RXn-TXnp4 proc information
- @param eNB_id Local id of eNB on which to act
+@param phy_data
*/
void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data);
@@ -113,18 +113,15 @@ int phy_procedures_slot_parallelization_nrUE_RX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_p
void processSlotTX(void *arg);
/*! \brief UE PRACH procedures.
- @param
- @param
- @param
*/
void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc);
int8_t nr_find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
/*! \brief UL time alignment procedures for TA application
- @param PHY_VARS_NR_UE ue
- @param int slot_tx
- @param int frame_tx
+ @param ue
+ @param slot_tx
+ @param frame_tx
*/
void ue_ta_procedures(PHY_VARS_NR_UE *ue, int slot_tx, int frame_tx);
@@ -138,10 +135,6 @@ int is_ssb_in_slot(fapi_nr_config_request_t *config, int frame, int slot, NR_DL_
bool is_csi_rs_in_symbol(fapi_nr_dl_config_csirs_pdu_rel15_t csirs_config_pdu, int symbol);
/*! \brief This function prepares the dl indication to pass to the MAC
- @param
- @param
- @param
- @param
*/
void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind,
fapi_nr_dci_indication_t *dci_ind,
@@ -153,10 +146,6 @@ void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind,
/*@}*/
/*! \brief This function prepares the dl rx indication
- @param
- @param
- @param
- @param
*/
void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind,
uint8_t pdu_type,
@@ -192,4 +181,4 @@ int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t r
void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
#endif
-
+/** @}*/
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/defs.h b/openair1/SIMULATION/ETH_TRANSPORT/defs.h
index 5c4e5ad365..384f25e950 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/defs.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/defs.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file phy_emulation.h
+/*! \file defs.h
* \brief specifies the data structure and variable for phy emulation
* \author Navid Nikaein, Raymomd Knopp and Hicham Anouar
* \date 2011
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c
index 5ffea3d36e..281d42a7a6 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file multicast.h
+/*! \file multicast_link.c
* \brief
* \author Lionel Gauthier and Navid Nikaein
* \date 2011
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h
index 3c072e0e3c..fdea20455b 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file multicast.h
+/*! \file multicast_link.h
* \brief
* \author Lionel Gauthier and Navid Nikaein
* \date 2011
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 6d80ac619c..21a237785d 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -108,6 +108,10 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
return;
}
+void e1_bearer_context_setup(const e1ap_bearer_setup_req_t *req) { abort(); }
+void e1_bearer_context_modif(const e1ap_bearer_setup_req_t *req) { abort(); }
+void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd) { abort(); }
+
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
return 0;
}
diff --git a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
index bf1a60faf8..ed72823789 100644
--- a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
+++ b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
@@ -51,3 +51,7 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
const channel_t channel,
const uint8_t* pduP,
const sdu_size_t pdu_len) { return 0; }
+void *rrc_nrue(void *notUsed)
+{
+ return NULL;
+}
diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c
index 77a1d6d821..668c1cb633 100644
--- a/openair1/SIMULATION/NR_PHY/ulsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulsim.c
@@ -104,6 +104,10 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
return;
}
+void e1_bearer_context_setup(const e1ap_bearer_setup_req_t *req) { abort(); }
+void e1_bearer_context_modif(const e1ap_bearer_setup_req_t *req) { abort(); }
+void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd) { abort(); }
+
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
return 0;
}
diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c
index 80bb33fc6a..aeb6bdbc64 100644
--- a/openair1/SIMULATION/TOOLS/rangen_double.c
+++ b/openair1/SIMULATION/TOOLS/rangen_double.c
@@ -163,7 +163,7 @@ double nfix(void)
}
}
-/*!\Procedure to create tables for normal distribution kn,wn and fn. */
+/*!Procedure to create tables for normal distribution kn,wn and fn. */
void tableNor(unsigned long seed)
{
jsr = seed;
diff --git a/openair1/SIMULATION/TOOLS/sim.h b/openair1/SIMULATION/TOOLS/sim.h
index 7f6da31b7b..366e9c6c6e 100644
--- a/openair1/SIMULATION/TOOLS/sim.h
+++ b/openair1/SIMULATION/TOOLS/sim.h
@@ -349,14 +349,14 @@ void set_channeldesc_owner(channel_desc_t *cdesc, channelmod_moduleid_t module_i
/**
\brief This function set a model name to a model descriptor, can be later used to identify a allocated channel model
\param cdesc points to the model descriptor
-\param module_name is the C string to use as model name for the channel pointed by cdesc
+\param modelname is the C string to use as model name for the channel pointed by cdesc
*/
void set_channeldesc_name(channel_desc_t *cdesc,char *modelname);
/** \fn void get_cexp_doppler(struct complexd *cexp_doppler, channel_desc_t *chan_desc, const uint32_t length)
\brief This routine generates the complex exponential to apply the Doppler shift
\param cexp_doppler Output with the complex exponential of Doppler shift
-\param desc Pointer to the channel descriptor
+\param chan_desc Pointer to the channel descriptor
\param length Size of complex exponential of Doppler shift
*/
void get_cexp_doppler(struct complexd *cexp_doppler, channel_desc_t *chan_desc, const uint32_t length);
@@ -378,6 +378,7 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
\param ts sampling time
\param delay introduce delay in terms of number of samples
\param pdu_bit_map bitmap indicating presence of optional PDUs
+\param ptrs_bit_map
\param nb_antennas_rx number of receive antennas
*/
void add_noise(c16_t **rxdata,
@@ -467,9 +468,8 @@ void load_pbch_desc(FILE *pbch_file_fd);
*/
unsigned int taus(void);
-
/**
-\fn void set_taus_seed(unsigned int seed_init)
+\fn set_taus_seed
\brief Sets the seed for the Tausworthe generator.
@param seed_init 0 means generate based on CPU time, otherwise provide the seed
*/
diff --git a/openair2/COMMON/e1ap_messages_def.h b/openair2/COMMON/e1ap_messages_def.h
index 70533f8add..ea24ac9e18 100644
--- a/openair2/COMMON/e1ap_messages_def.h
+++ b/openair2/COMMON/e1ap_messages_def.h
@@ -20,6 +20,9 @@
*/
/* gNB_CUUP application layer -> E1AP messages */
+MESSAGE_DEF(E1AP_REGISTER_REQ, MESSAGE_PRIORITY_MED, e1ap_register_req_t, e1ap_register_req)
+
+/* E1AP messages -> RRC (CU-CP) */
MESSAGE_DEF(E1AP_SETUP_REQ , MESSAGE_PRIORITY_MED , e1ap_setup_req_t , e1ap_setup_req)
/* E1AP -> eNB_DU or eNB_CU_RRC -> E1AP application layer messages */
@@ -30,4 +33,7 @@ MESSAGE_DEF(E1AP_BEARER_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED , e1ap_bearer_s
MESSAGE_DEF(E1AP_BEARER_CONTEXT_SETUP_RESP , MESSAGE_PRIORITY_MED , e1ap_bearer_setup_resp_t , e1ap_bearer_setup_resp)
MESSAGE_DEF(E1AP_BEARER_CONTEXT_MODIFICATION_REQ , MESSAGE_PRIORITY_MED , e1ap_bearer_setup_req_t , e1ap_bearer_mod_req)
+MESSAGE_DEF(E1AP_BEARER_CONTEXT_MODIFICATION_RESP, MESSAGE_PRIORITY_MED, e1ap_bearer_modif_resp_t, e1ap_bearer_modif_resp)
+MESSAGE_DEF(E1AP_BEARER_CONTEXT_RELEASE_CMD, MESSAGE_PRIORITY_MED, e1ap_bearer_release_cmd_t, e1ap_bearer_release_cmd)
+MESSAGE_DEF(E1AP_BEARER_CONTEXT_RELEASE_CPLT, MESSAGE_PRIORITY_MED, e1ap_bearer_release_cplt_t, e1ap_bearer_release_cplt)
diff --git a/openair2/COMMON/e1ap_messages_types.h b/openair2/COMMON/e1ap_messages_types.h
index fba56ccb14..f98058b85c 100644
--- a/openair2/COMMON/e1ap_messages_types.h
+++ b/openair2/COMMON/e1ap_messages_types.h
@@ -32,6 +32,7 @@
#define E1AP_MAX_NUM_TRANSAC_IDS 4
#define E1AP_MAX_NUM_PLMNS 4
+#define E1AP_MAX_NUM_SLICES 1024
#define E1AP_MAX_NUM_CELL_GROUPS 4
#define E1AP_MAX_NUM_QOS_FLOWS 4
#define E1AP_MAX_NUM_NGRAN_DRB 4
@@ -40,11 +41,15 @@
#define E1AP_MAX_NUM_DRBS 4
#define E1AP_MAX_NUM_UP_PARAM 4
+#define E1AP_REGISTER_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_register_req
#define E1AP_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_req
#define E1AP_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_resp
#define E1AP_BEARER_CONTEXT_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_req
#define E1AP_BEARER_CONTEXT_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_resp
#define E1AP_BEARER_CONTEXT_MODIFICATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_req
+#define E1AP_BEARER_CONTEXT_MODIFICATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_modif_resp
+#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;
@@ -54,27 +59,39 @@ typedef struct PLMN_ID_s {
int mnc_digit_length;
} PLMN_ID_t;
-typedef struct e1ap_setup_req_s {
- uint64_t gNB_cu_up_id;
- char * gNB_cu_up_name;
- sctp_assoc_t assoc_id;
- uint64_t transac_id;
- int supported_plmns;
- PLMN_ID_t plmns[E1AP_MAX_NUM_PLMNS];
- uint16_t sctp_in_streams;
- uint16_t sctp_out_streams;
- uint16_t default_sctp_stream_id;
+typedef struct e1ap_nssai_t {
+ uint8_t sst;
+ uint32_t sd; // optional: "No SD" is 0xffffff, see 23.003 Sec 28.4.2
+} e1ap_nssai_t;
+
+typedef struct e1ap_net_config_t {
net_ip_address_t CUUP_e1_ip_address;
net_ip_address_t CUCP_e1_ip_address;
- long cn_support;
uint16_t remotePortF1U;
char* localAddressF1U;
uint16_t localPortF1U;
char* localAddressN3;
uint16_t localPortN3;
uint16_t remotePortN3;
+} e1ap_net_config_t;
+
+typedef struct e1ap_setup_req_s {
+ uint64_t gNB_cu_up_id;
+ char * gNB_cu_up_name;
+ uint64_t transac_id;
+ int supported_plmns;
+ struct {
+ PLMN_ID_t id;
+ int supported_slices;
+ e1ap_nssai_t *slice;
+ } plmn[E1AP_MAX_NUM_PLMNS];
} e1ap_setup_req_t;
+typedef struct e1ap_register_req_t {
+ e1ap_setup_req_t setup_req;
+ e1ap_net_config_t net_config;
+} e1ap_register_req_t;
+
typedef struct e1ap_setup_resp_s {
long transac_id;
} e1ap_setup_resp_t;
@@ -140,7 +157,7 @@ typedef struct DRB_nGRAN_to_setup_s {
typedef struct pdu_session_to_setup_s {
long sessionId;
long sessionType;
- int8_t sst;
+ e1ap_nssai_t nssai;
long integrityProtectionIndication;
long confidentialityProtectionIndication;
in_addr_t tlAddress;
@@ -165,8 +182,6 @@ typedef struct e1ap_bearer_setup_req_s {
long ueDlAggMaxBitRate;
PLMN_ID_t servingPLMNid;
long activityNotificationLevel;
- int numDRBs;
- drb_to_setup_t DRBList[E1AP_MAX_NUM_DRBS];
int numPDUSessions;
pdu_session_to_setup_t pduSession[E1AP_MAX_NUM_PDU_SESSIONS];
int numPDUSessionsMod;
@@ -180,13 +195,10 @@ typedef struct e1ap_bearer_release_cmd_s {
long cause;
} e1ap_bearer_release_cmd_t;
-typedef struct drb_setup_s {
- int drbId;
- in_addr_t tlAddress;
- int teId;
- int numUpParam;
- up_params_t UpParamList[E1AP_MAX_NUM_UP_PARAM];
-} drb_setup_t;
+typedef struct e1ap_bearer_release_cplt_s {
+ uint32_t gNB_cu_cp_ue_id;
+ uint32_t gNB_cu_up_ue_id;
+} e1ap_bearer_release_cplt_t;
typedef struct qos_flow_setup_s {
long id;
@@ -200,6 +212,10 @@ typedef struct DRB_nGRAN_setup_s {
qos_flow_setup_t qosFlows[E1AP_MAX_NUM_QOS_FLOWS];
} DRB_nGRAN_setup_t;
+typedef struct DRB_nGRAN_modified_s {
+ long id;
+} DRB_nGRAN_modified_t;
+
typedef struct DRB_nGRAN_failed_s {
long id;
long cause_type;
@@ -216,13 +232,25 @@ typedef struct pdu_session_setup_s {
DRB_nGRAN_failed_t DRBnGRanFailedList[E1AP_MAX_NUM_NGRAN_DRB];
} pdu_session_setup_t;
+typedef struct pdu_session_modif_s {
+ long id;
+ // setup as part of PDU session modification not supported yet
+ int numDRBModified;
+ DRB_nGRAN_modified_t DRBnGRanModList[E1AP_MAX_NUM_NGRAN_DRB];
+} pdu_session_modif_t;
+
typedef struct e1ap_bearer_setup_resp_s {
uint32_t gNB_cu_cp_ue_id;
uint32_t gNB_cu_up_ue_id;
- int numDRBs;
- drb_setup_t DRBList[E1AP_MAX_NUM_DRBS];
int numPDUSessions;
pdu_session_setup_t pduSession[E1AP_MAX_NUM_PDU_SESSIONS];
} e1ap_bearer_setup_resp_t;
+typedef struct e1ap_bearer_modif_resp_s {
+ uint32_t gNB_cu_cp_ue_id;
+ uint32_t gNB_cu_up_ue_id;
+ int numPDUSessionsMod;
+ pdu_session_modif_t pduSessionMod[E1AP_MAX_NUM_PDU_SESSIONS];
+} e1ap_bearer_modif_resp_t;
+
#endif /* E1AP_MESSAGES_TYPES_H */
diff --git a/openair2/COMMON/prs_nr_paramdef.h b/openair2/COMMON/prs_nr_paramdef.h
index a96e408673..3d747ca4b7 100644
--- a/openair2/COMMON/prs_nr_paramdef.h
+++ b/openair2/COMMON/prs_nr_paramdef.h
@@ -19,8 +19,8 @@
* contact@openairinterface.org
*/
-/*! \file openair2/COMMON/prs_nr_paramdef.f
- * \brief definition of configuration parameters for PRS
+/*! \file prs_nr_paramdef.h
+ * \brief definition of configuration parameters for PRS
* \author
* \date 2022
* \version 0.1
diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h
index 465c6c5342..037dfbe86c 100644
--- a/openair2/COMMON/rrc_messages_types.h
+++ b/openair2/COMMON/rrc_messages_types.h
@@ -403,13 +403,13 @@ typedef struct NbIoTRrcConfigurationReq_s {
// gNB: GNB_APP -> RRC messages
typedef struct NRRrcConfigurationReq_s {
- uint64_t cell_identity;
uint32_t tac;
uint16_t mcc[PLMN_LIST_MAX_SIZE];
uint16_t mnc[PLMN_LIST_MAX_SIZE];
uint8_t mnc_digit_length[PLMN_LIST_MAX_SIZE];
uint8_t num_plmn;
+ bool um_on_default_drb;
bool enable_sdap;
int drbs;
} gNB_RrcConfigurationReq;
diff --git a/openair2/E1AP/CMakeLists.txt b/openair2/E1AP/CMakeLists.txt
index 01a969de7e..c7657eed5a 100644
--- a/openair2/E1AP/CMakeLists.txt
+++ b/openair2/E1AP/CMakeLists.txt
@@ -1,7 +1,7 @@
add_subdirectory(MESSAGES)
-add_library(e1ap e1ap.c e1ap_common.c e1ap_api.c)
+add_library(e1ap e1ap.c e1ap_common.c)
target_link_libraries(e1ap
PUBLIC asn1_e1ap f1ap
- PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap UTIL e1_pdcp_if e1_if)
+ PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap UTIL e1_if)
target_include_directories(e1ap PUBLIC ${CMAKE_CURRENT_DIR})
diff --git a/openair2/E1AP/e1ap.c b/openair2/E1AP/e1ap.c
index 2390b23d2e..077c67ca98 100644
--- a/openair2/E1AP/e1ap.c
+++ b/openair2/E1AP/e1ap.c
@@ -23,7 +23,6 @@
#include "e1ap.h"
#include "e1ap_common.h"
-#include "e1ap_api.h"
#include "gnb_config.h"
#include "openair2/SDAP/nr_sdap/nr_sdap_entity.h"
#include "openair3/UTILS/conversions.h"
@@ -33,9 +32,10 @@
#include "openair2/F1AP/f1ap_common.h"
#include "e1ap_default_values.h"
#include "gtp_itf.h"
+#include "openair2/LAYER2/nr_pdcp/cucp_cuup_handler.h"
#define E1AP_NUM_MSG_HANDLERS 14
-typedef int (*e1ap_message_processing_t)(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *message_p);
+typedef int (*e1ap_message_processing_t)(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *message_p);
const e1ap_message_processing_t e1ap_message_processing[E1AP_NUM_MSG_HANDLERS][3] = {
{0, 0, 0}, /* Reset */
@@ -49,7 +49,9 @@ const e1ap_message_processing_t e1ap_message_processing[E1AP_NUM_MSG_HANDLERS][3
{e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE}, /* bearerContextSetup */
- {e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST, 0, 0}, /* bearerContextModification */
+ {e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST,
+ e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE,
+ 0}, /* bearerContextModification */
{0, 0, 0}, /* bearerContextModificationRequired */
{e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND, e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE, 0}, /* bearerContextRelease */
{0, 0, 0}, /* bearerContextReleaseRequired */
@@ -91,8 +93,8 @@ int e1ap_handle_message(instance_t instance, sctp_assoc_t assoc_id, const uint8_
ret=-1;
} else {
/* Calling the right handler */
- LOG_I(E1AP, "Calling handler with instance %ld\n",instance);
- ret = (*e1ap_message_processing[procedureCode][pdu.present - 1])(getCxtE1(instance), &pdu);
+ LOG_D(E1AP, "Calling handler with instance %ld\n",instance);
+ ret = (*e1ap_message_processing[procedureCode][pdu.present - 1])(assoc_id, getCxtE1(instance), &pdu);
}
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_E1AP_E1AP_PDU, &pdu);
@@ -109,18 +111,11 @@ void e1_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *sctp_dat
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
}
-void e1ap_itti_send_sctp_close_association(bool isCu, instance_t instance) {
- MessageDef *message = itti_alloc_new_message(TASK_S1AP, 0, SCTP_CLOSE_ASSOCIATION);
- sctp_close_association_t *sctp_close_association = &message->ittiMsg.sctp_close_association;
- sctp_close_association->assoc_id = e1ap_assoc_id(isCu,instance);
- itti_send_msg_to_task(TASK_SCTP, instance, message);
-}
-
-int e1ap_send_RESET(bool isCu, e1ap_setup_req_t *setupReq, E1AP_Reset_t *Reset)
+int e1ap_send_RESET(bool isCu, sctp_assoc_t assoc_id, E1AP_Reset_t *Reset)
{
AssertFatal(false,"Not implemented yet\n");
E1AP_E1AP_PDU_t pdu= {0};
- return e1ap_encode_send(isCu, setupReq, &pdu, 0, __func__);
+ return e1ap_encode_send(isCu, assoc_id, &pdu, 0, __func__);
}
int e1ap_send_RESET_ACKNOWLEDGE(instance_t instance, E1AP_Reset_t *Reset) {
@@ -177,7 +172,7 @@ static void fill_SETUP_REQUEST(e1ap_setup_req_t *setup, E1AP_E1AP_PDU_t *pdu)
ieC1->value.present = E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_TransactionID;
setup->transac_id = E1AP_get_next_transaction_identifier();
ieC1->value.choice.TransactionID = setup->transac_id;
- LOG_I(E1AP, "Transaction ID of setup request %ld\n", setup->transac_id);
+ LOG_D(E1AP, "Transaction ID of setup request %ld\n", setup->transac_id);
/* mandatory */
/* c2. GNB_CU_ID (integer value) */
asn1cSequenceAdd(e1SetupUP->protocolIEs.list, E1AP_GNB_CU_UP_E1SetupRequestIEs_t, ieC2);
@@ -185,13 +180,23 @@ static void fill_SETUP_REQUEST(e1ap_setup_req_t *setup, E1AP_E1AP_PDU_t *pdu)
ieC2->criticality = E1AP_Criticality_reject;
ieC2->value.present = E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_GNB_CU_UP_ID;
asn_int642INTEGER(&ieC2->value.choice.GNB_CU_UP_ID, setup->gNB_cu_up_id);
+
+ /* optional */
+ if (setup->gNB_cu_up_name) {
+ asn1cSequenceAdd(e1SetupUP->protocolIEs.list, E1AP_GNB_CU_UP_E1SetupRequestIEs_t, ieC3);
+ ieC3->id = E1AP_ProtocolIE_ID_id_gNB_CU_UP_Name;
+ ieC3->criticality = E1AP_Criticality_ignore;
+ ieC3->value.present = E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_GNB_CU_UP_Name;
+ OCTET_STRING_fromBuf(&ieC3->value.choice.GNB_CU_UP_Name, setup->gNB_cu_up_name, strlen(setup->gNB_cu_up_name));
+ }
+
/* mandatory */
/* c4. CN Support */
asn1cSequenceAdd(e1SetupUP->protocolIEs.list, E1AP_GNB_CU_UP_E1SetupRequestIEs_t, ieC4);
ieC4->id = E1AP_ProtocolIE_ID_id_CNSupport;
ieC4->criticality = E1AP_Criticality_reject;
ieC4->value.present = E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_CNSupport;
- ieC4->value.choice.CNSupport = setup->cn_support;
+ ieC4->value.choice.CNSupport = E1AP_CNSupport_c_5gc; /* only 5GC supported */
/* mandatory */
/* c5. Supported PLMNs */
@@ -205,7 +210,24 @@ static void fill_SETUP_REQUEST(e1ap_setup_req_t *setup, E1AP_E1AP_PDU_t *pdu)
for (int i=0; i < numSupportedPLMNs; i++) {
asn1cSequenceAdd(ieC5->value.choice.SupportedPLMNs_List.list, E1AP_SupportedPLMNs_Item_t, supportedPLMN);
/* 5.1 PLMN Identity */
- MCC_MNC_TO_PLMNID(setup->plmns[i].mcc, setup->plmns[i].mnc, setup->plmns[i].mnc_digit_length, &supportedPLMN->pLMN_Identity);
+ PLMN_ID_t *id = &setup->plmn[i].id;
+ MCC_MNC_TO_PLMNID(id->mcc, id->mnc, id->mnc_digit_length, &supportedPLMN->pLMN_Identity);
+
+ int n = setup->plmn[i].supported_slices;
+ if (setup->plmn[i].slice != NULL && n > 0) {
+ supportedPLMN->slice_Support_List = calloc(1, sizeof(*supportedPLMN->slice_Support_List));
+ AssertFatal(supportedPLMN->slice_Support_List != NULL, "out of memory\n");
+ for (int s = 0; s < n; ++s) {
+ asn1cSequenceAdd(supportedPLMN->slice_Support_List->list, E1AP_Slice_Support_Item_t, slice);
+ e1ap_nssai_t *nssai = &setup->plmn[i].slice[s];
+ INT8_TO_OCTET_STRING(nssai->sst, &slice->sNSSAI.sST);
+ if (nssai->sd != 0xffffff) {
+ slice->sNSSAI.sD = malloc(sizeof(*slice->sNSSAI.sD));
+ AssertFatal(slice->sNSSAI.sD != NULL, "out of memory\n");
+ INT24_TO_OCTET_STRING(nssai->sd, slice->sNSSAI.sD);
+ }
+ }
+ }
}
}
@@ -228,13 +250,11 @@ static void fill_SETUP_RESPONSE(const e1ap_setup_resp_t *e1ap_setup_resp, E1AP_E
ieC1->value.choice.TransactionID = e1ap_setup_resp->transac_id;
}
-void e1ap_send_SETUP_RESPONSE(instance_t inst, const e1ap_setup_resp_t *e1ap_setup_resp)
+void e1ap_send_SETUP_RESPONSE(sctp_assoc_t assoc_id, const e1ap_setup_resp_t *e1ap_setup_resp)
{
- AssertFatal(getCxtE1(inst), "");
- e1ap_setup_req_t *setupReq = &getCxtE1(inst)->setupReq;
E1AP_E1AP_PDU_t pdu = {0};
fill_SETUP_RESPONSE(e1ap_setup_resp, &pdu);
- e1ap_encode_send(getCxtE1(inst)->type, setupReq, &pdu, 0, __func__);
+ e1ap_encode_send(CPtype, assoc_id, &pdu, 0, __func__);
}
static void fill_SETUP_FAILURE(long transac_id, E1AP_E1AP_PDU_t *pdu)
@@ -264,19 +284,17 @@ static void fill_SETUP_FAILURE(long transac_id, E1AP_E1AP_PDU_t *pdu)
ieC2->value.choice.Cause.choice.radioNetwork = E1AP_CauseRadioNetwork_unspecified;
}
-void e1apCUCP_send_SETUP_FAILURE(e1ap_setup_req_t *setupReq, long transac_id)
+void e1apCUCP_send_SETUP_FAILURE(sctp_assoc_t assoc_id, long transac_id)
{
E1AP_E1AP_PDU_t pdu = {0};
fill_SETUP_FAILURE(transac_id, &pdu);
- e1ap_encode_send(CPtype, setupReq, &pdu, 0, __func__);
+ e1ap_encode_send(CPtype, assoc_id, &pdu, 0, __func__);
}
void extract_SETUP_REQUEST(const E1AP_E1AP_PDU_t *pdu,
e1ap_setup_req_t *req) {
E1AP_GNB_CU_UP_E1SetupRequestIEs_t *ie;
E1AP_GNB_CU_UP_E1SetupRequest_t *in = &pdu->choice.initiatingMessage->value.choice.GNB_CU_UP_E1SetupRequest;
- /* assoc_id */
- /* req->assoc_id = assoc_id; */
/* transac_id */
F1AP_FIND_PROTOCOLIE_BY_ID(E1AP_GNB_CU_UP_E1SetupRequestIEs_t, ie, in,
@@ -290,11 +308,21 @@ void extract_SETUP_REQUEST(const E1AP_E1AP_PDU_t *pdu,
asn_INTEGER2ulong(&ie->value.choice.GNB_CU_UP_ID, &req->gNB_cu_up_id);
LOG_D(E1AP, "gNB CU UP ID: %ld\n", req->gNB_cu_up_id);
+ /* gNB CU UP name */
+ F1AP_FIND_PROTOCOLIE_BY_ID(E1AP_GNB_CU_UP_E1SetupRequestIEs_t, ie, in,
+ E1AP_ProtocolIE_ID_id_gNB_CU_UP_Name, false);
+ req->gNB_cu_up_name = NULL;
+ if (ie != NULL) {
+ req->gNB_cu_up_name = calloc(ie->value.choice.GNB_CU_UP_Name.size + 1, sizeof(char));
+ AssertFatal(req->gNB_cu_up_name != NULL, "out of memory\n");
+ memcpy(req->gNB_cu_up_name, ie->value.choice.GNB_CU_UP_Name.buf, ie->value.choice.GNB_CU_UP_Name.size);
+ LOG_D(E1AP, "req->gNB_cu_up_name %s\n", req->gNB_cu_up_name);
+ }
+
/* CN Support */
F1AP_FIND_PROTOCOLIE_BY_ID(E1AP_GNB_CU_UP_E1SetupRequestIEs_t, ie, in,
E1AP_ProtocolIE_ID_id_CNSupport, true);
- req->cn_support = ie->value.choice.CNSupport;
- LOG_D(E1AP, "E1ap CN support: %ld\n", req->cn_support);
+ AssertFatal(ie->value.choice.CNSupport == E1AP_CNSupport_c_5gc, "only 5GC CN Support supported\n");
/* Supported PLMNs */
F1AP_FIND_PROTOCOLIE_BY_ID(E1AP_GNB_CU_UP_E1SetupRequestIEs_t, ie, in,
@@ -306,26 +334,41 @@ void extract_SETUP_REQUEST(const E1AP_E1AP_PDU_t *pdu,
E1AP_SupportedPLMNs_Item_t *supported_plmn_item = (E1AP_SupportedPLMNs_Item_t *)(ie->value.choice.SupportedPLMNs_List.list.array[i]);
/* PLMN Identity */
- PLMNID_TO_MCC_MNC(&supported_plmn_item->pLMN_Identity,
- req->plmns[i].mcc,
- req->plmns[i].mnc,
- req->plmns[i].mnc_digit_length);
- LOG_D(E1AP, "MCC: %d\nMNC: %d\n", req->plmns[i].mcc, req->plmns[i].mnc);
+ PLMN_ID_t *id = &req->plmn[i].id;
+ PLMNID_TO_MCC_MNC(&supported_plmn_item->pLMN_Identity, id->mcc, id->mnc, id->mnc_digit_length);
+ LOG_D(E1AP, "MCC %d MNC %d\n", id->mcc, id->mnc);
+
+ /* NSSAI */
+ if (supported_plmn_item->slice_Support_List) {
+ int n = supported_plmn_item->slice_Support_List->list.count;
+ req->plmn[i].supported_slices = n;
+ req->plmn[i].slice = calloc(n, sizeof(*req->plmn[i].slice));
+ AssertFatal(req->plmn[i].slice != NULL, "out of memory\n");
+ for (int s = 0; s < n; ++s) {
+ e1ap_nssai_t *slice = &req->plmn[i].slice[s];
+ const E1AP_SNSSAI_t *es = &supported_plmn_item->slice_Support_List->list.array[s]->sNSSAI;
+ OCTET_STRING_TO_INT8(&es->sST, slice->sst);
+ slice->sd = 0xffffff;
+ if (es->sD != NULL)
+ OCTET_STRING_TO_INT24(es->sD, slice->sd);
+ LOG_D(E1AP, "SST %d SD %06x\n", slice->sst, slice->sd);
+ }
+ }
}
}
-int e1apCUCP_handle_SETUP_REQUEST(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUCP_handle_SETUP_REQUEST(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
{
DevAssert(pdu != NULL);
- extract_SETUP_REQUEST(pdu, &inst->setupReq);
/* Create ITTI message and send to queue */
MessageDef *msg_p = itti_alloc_new_message(TASK_CUCP_E1, 0 /*unused by callee*/, E1AP_SETUP_REQ);
- memcpy(&E1AP_SETUP_REQ(msg_p), &inst->setupReq, sizeof(e1ap_setup_req_t));
+ extract_SETUP_REQUEST(pdu, &E1AP_SETUP_REQ(msg_p));
+ msg_p->ittiMsgHeader.originInstance = assoc_id;
- if (inst->setupReq.supported_plmns > 0) {
+ if (E1AP_SETUP_REQ(msg_p).supported_plmns > 0) {
itti_send_msg_to_task(TASK_RRC_GNB, 0 /*unused by callee*/, msg_p);
} else {
- e1apCUCP_send_SETUP_FAILURE(&inst->setupReq, inst->setupReq.transac_id);
+ e1apCUCP_send_SETUP_FAILURE(assoc_id, E1AP_SETUP_REQ(msg_p).transac_id);
itti_free(TASK_CUCP_E1, msg_p);
return -1;
}
@@ -333,7 +376,7 @@ int e1apCUCP_handle_SETUP_REQUEST(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t
return 0;
}
-int e1apCUUP_handle_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUUP_handle_SETUP_RESPONSE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
{
LOG_D(E1AP, "%s\n", __func__);
DevAssert(pdu->present == E1AP_E1AP_PDU_PR_successfulOutcome);
@@ -345,7 +388,7 @@ int e1apCUUP_handle_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t
/* transac_id */
long transaction_id;
- long old_transaction_id = inst->setupReq.transac_id;
+ long old_transaction_id = inst->cuup.setupReq.transac_id;
F1AP_FIND_PROTOCOLIE_BY_ID(E1AP_GNB_CU_UP_E1SetupResponseIEs_t, ie, in,
E1AP_ProtocolIE_ID_id_TransactionID, true);
transaction_id = ie->value.choice.TransactionID;
@@ -361,7 +404,7 @@ int e1apCUUP_handle_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t
return 0;
}
-int e1apCUUP_handle_SETUP_FAILURE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUUP_handle_SETUP_FAILURE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
{
E1AP_GNB_CU_UP_E1SetupFailureIEs_t *ie;
DevAssert(pdu != NULL);
@@ -428,26 +471,26 @@ static void fill_CONFIGURATION_UPDATE(E1AP_E1AP_PDU_t *pdu)
E1 configuration update: can be sent in both ways, to be refined
*/
-void e1apCUUP_send_CONFIGURATION_UPDATE(e1ap_setup_req_t *setupReq)
+void e1apCUUP_send_CONFIGURATION_UPDATE(sctp_assoc_t assoc_id)
{
E1AP_E1AP_PDU_t pdu = {0};
fill_CONFIGURATION_UPDATE(&pdu);
- e1ap_encode_send(UPtype, setupReq, &pdu, 0, __func__);
+ e1ap_encode_send(UPtype, assoc_id, &pdu, 0, __func__);
}
-int e1apCUCP_send_gNB_DU_CONFIGURATION_FAILURE(e1ap_setup_req_t *setupReq)
+int e1apCUCP_send_gNB_DU_CONFIGURATION_FAILURE(void)
{
AssertFatal(false,"Not implemented yet\n");
return -1;
}
-int e1apCUCP_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(e1ap_setup_req_t *setupReq)
+int e1apCUCP_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(void)
{
AssertFatal(false,"Not implemented yet\n");
return -1;
}
-int e1apCUCP_handle_CONFIGURATION_UPDATE(e1ap_setup_req_t *setupReq, E1AP_E1AP_PDU_t *pdu)
+int e1apCUCP_handle_CONFIGURATION_UPDATE(E1AP_E1AP_PDU_t *pdu)
{
/*
E1AP_GNB_CU_UP_E1SetupRequestIEs_t *ie;
@@ -459,8 +502,7 @@ int e1apCUCP_handle_CONFIGURATION_UPDATE(e1ap_setup_req_t *setupReq, E1AP_E1AP_P
return -1;
}
-int e1apCUUP_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(e1ap_setup_req_t *setupReq,
- sctp_assoc_t assoc_id,
+int e1apCUUP_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(sctp_assoc_t assoc_id,
uint32_t stream,
E1AP_E1AP_PDU_t *pdu)
{
@@ -468,8 +510,7 @@ int e1apCUUP_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(e1ap_setup_req_t *se
return -1;
}
-int e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE(e1ap_setup_req_t *setupReq,
- sctp_assoc_t assoc_id,
+int e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE(sctp_assoc_t assoc_id,
uint32_t stream,
E1AP_E1AP_PDU_t *pdu)
{
@@ -507,7 +548,7 @@ int e1ap_handle_RELEASE_ACKNOWLEDGE(instance_t instance, sctp_assoc_t assoc_id,
BEARER CONTEXT SETUP REQUEST
*/
-static int fill_BEARER_CONTEXT_SETUP_REQUEST(e1ap_setup_req_t *setup, e1ap_bearer_setup_req_t *const bearerCxt, E1AP_E1AP_PDU_t *pdu)
+static int fill_BEARER_CONTEXT_SETUP_REQUEST(e1ap_bearer_setup_req_t *const bearerCxt, E1AP_E1AP_PDU_t *pdu)
{
pdu->present = E1AP_E1AP_PDU_PR_initiatingMessage;
asn1cCalloc(pdu->choice.initiatingMessage, msg);
@@ -548,7 +589,7 @@ static int fill_BEARER_CONTEXT_SETUP_REQUEST(e1ap_setup_req_t *setup, e1ap_beare
ieC4->id = E1AP_ProtocolIE_ID_id_Serving_PLMN;
ieC4->criticality = E1AP_Criticality_ignore;
ieC4->value.present = E1AP_BearerContextSetupRequestIEs__value_PR_PLMN_Identity;
- PLMN_ID_t *servingPLMN = setup->plmns; // First PLMN is serving PLMN. TODO: Remove hard coding here
+ PLMN_ID_t *servingPLMN = &bearerCxt->servingPLMNid;
MCC_MNC_TO_PLMNID(servingPLMN->mcc, servingPLMN->mnc, servingPLMN->mnc_digit_length, &ieC4->value.choice.PLMN_Identity);
/* mandatory */
/* Activity Notification Level */
@@ -576,7 +617,12 @@ static int fill_BEARER_CONTEXT_SETUP_REQUEST(e1ap_setup_req_t *setup, e1ap_beare
ieC6_1->pDU_Session_ID = i->sessionId;
ieC6_1->pDU_Session_Type = i->sessionType;
- INT8_TO_OCTET_STRING(i->sst, &ieC6_1->sNSSAI.sST);
+ INT8_TO_OCTET_STRING(i->nssai.sst, &ieC6_1->sNSSAI.sST);
+ if (i->nssai.sd != 0xffffff) {
+ ieC6_1->sNSSAI.sD = malloc(sizeof(*ieC6_1->sNSSAI.sD));
+ AssertFatal(ieC6_1->sNSSAI.sD != NULL, "out of memory\n");
+ INT24_TO_OCTET_STRING(i->nssai.sd, ieC6_1->sNSSAI.sD);
+ }
ieC6_1->securityIndication.integrityProtectionIndication = i->integrityProtectionIndication;
ieC6_1->securityIndication.confidentialityProtectionIndication = i->confidentialityProtectionIndication;
@@ -633,21 +679,14 @@ static int fill_BEARER_CONTEXT_SETUP_REQUEST(e1ap_setup_req_t *setup, e1ap_beare
return 0;
}
-void e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance, e1ap_bearer_setup_req_t *const bearerCxt)
+void e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(sctp_assoc_t assoc_id, e1ap_bearer_setup_req_t *const bearerCxt)
{
- if (!getCxtE1(instance)) {
- LOG_E(E1AP, "Received a UE bearer to establish while no CU-UP is connected, response on NGAP to send failure is not developped\n");
- // Fixme: add response on NGAP to send failure
- return;
- }
-
E1AP_E1AP_PDU_t pdu = {0};
- e1ap_setup_req_t *setupReq = &getCxtE1(instance)->setupReq;
- fill_BEARER_CONTEXT_SETUP_REQUEST(setupReq, bearerCxt, &pdu);
- e1ap_encode_send(CPtype, setupReq, &pdu, 0, __func__);
+ fill_BEARER_CONTEXT_SETUP_REQUEST(bearerCxt, &pdu);
+ e1ap_encode_send(CPtype, assoc_id, &pdu, 0, __func__);
}
-static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const resp, E1AP_E1AP_PDU_t *pdu)
+static void fill_BEARER_CONTEXT_SETUP_RESPONSE(const e1ap_bearer_setup_resp_t *resp, E1AP_E1AP_PDU_t *pdu)
{
/* Create */
/* 0. pdu Type */
@@ -676,7 +715,7 @@ static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const r
ieC3->id = E1AP_ProtocolIE_ID_id_System_BearerContextSetupResponse;
ieC3->criticality = E1AP_Criticality_reject;
ieC3->value.present = E1AP_BearerContextSetupResponseIEs__value_PR_System_BearerContextSetupResponse;
- if (0) { // EUTRAN
+ /*if (0) { // EUTRAN
ieC3->value.choice.System_BearerContextSetupResponse.present = E1AP_System_BearerContextSetupResponse_PR_e_UTRAN_BearerContextSetupResponse;
E1AP_ProtocolIE_Container_4932P21_t *msgEUTRAN_list = calloc(1, sizeof(E1AP_ProtocolIE_Container_4932P21_t));
ieC3->value.choice.System_BearerContextSetupResponse.choice.e_UTRAN_BearerContextSetupResponse = (struct E1AP_ProtocolIE_Container *) msgEUTRAN_list;
@@ -703,7 +742,7 @@ static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const r
INT32_TO_OCTET_STRING(j->teId, &gTPTunnel->gTP_TEID);
}
}
- } else {
+ } else */{
ieC3->value.choice.System_BearerContextSetupResponse.present = E1AP_System_BearerContextSetupResponse_PR_nG_RAN_BearerContextSetupResponse;
E1AP_ProtocolIE_Container_4932P22_t *msgNGRAN_list = calloc(1, sizeof(E1AP_ProtocolIE_Container_4932P22_t));
ieC3->value.choice.System_BearerContextSetupResponse.choice.nG_RAN_BearerContextSetupResponse = (struct E1AP_ProtocolIE_Container *) msgNGRAN_list;
@@ -713,7 +752,7 @@ static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const r
msgNGRAN->value.present = E1AP_NG_RAN_BearerContextSetupResponse__value_PR_PDU_Session_Resource_Setup_List;
E1AP_PDU_Session_Resource_Setup_List_t *pduSetup = &msgNGRAN->value.choice.PDU_Session_Resource_Setup_List;
- for (pdu_session_setup_t *i=resp->pduSession; i < resp->pduSession+resp->numPDUSessions; i++) {
+ for (const pdu_session_setup_t *i=resp->pduSession; i < resp->pduSession+resp->numPDUSessions; i++) {
asn1cSequenceAdd(pduSetup->list, E1AP_PDU_Session_Resource_Setup_Item_t, ieC3_1);
ieC3_1->pDU_Session_ID = i->id;
@@ -722,11 +761,11 @@ static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const r
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(i->tlAddress, &gTPTunnel->transportLayerAddress);
INT32_TO_OCTET_STRING(i->teId, &gTPTunnel->gTP_TEID);
- for (DRB_nGRAN_setup_t *j=i->DRBnGRanList; j < i->DRBnGRanList+i->numDRBSetup; j++) {
+ for (const DRB_nGRAN_setup_t *j=i->DRBnGRanList; j < i->DRBnGRanList+i->numDRBSetup; j++) {
asn1cSequenceAdd(ieC3_1->dRB_Setup_List_NG_RAN.list, E1AP_DRB_Setup_Item_NG_RAN_t, ieC3_1_1);
ieC3_1_1->dRB_ID = j->id;
- for (up_params_t *k=j->UpParamList; k < j->UpParamList+j->numUpParam; k++) {
+ for (const up_params_t *k=j->UpParamList; k < j->UpParamList+j->numUpParam; k++) {
asn1cSequenceAdd(ieC3_1_1->uL_UP_Transport_Parameters.list, E1AP_UP_Parameters_Item_t, ieC3_1_1_1);
ieC3_1_1_1->uP_TNL_Information.present = E1AP_UP_TNL_Information_PR_gTPTunnel;
asn1cCalloc(ieC3_1_1_1->uP_TNL_Information.choice.gTPTunnel, gTPTunnel);
@@ -734,7 +773,7 @@ static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const r
INT32_TO_OCTET_STRING(k->teId, &gTPTunnel->gTP_TEID);
}
- for (qos_flow_setup_t *k=j->qosFlows; k < j->qosFlows+j->numQosFlowSetup; k++) {
+ for (const qos_flow_setup_t *k=j->qosFlows; k < j->qosFlows+j->numQosFlowSetup; k++) {
asn1cSequenceAdd(ieC3_1_1->flow_Setup_List.list, E1AP_QoS_Flow_Item_t, ieC3_1_1_1);
ieC3_1_1_1->qoS_Flow_Identifier = k->id;
}
@@ -743,7 +782,7 @@ static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const r
if (i->numDRBFailed > 0)
ieC3_1->dRB_Failed_List_NG_RAN = calloc(1, sizeof(E1AP_DRB_Failed_List_NG_RAN_t));
- for (DRB_nGRAN_failed_t *j=i->DRBnGRanFailedList; j < i->DRBnGRanFailedList+i->numDRBFailed; j++) {
+ for (const DRB_nGRAN_failed_t *j=i->DRBnGRanFailedList; j < i->DRBnGRanFailedList+i->numDRBFailed; j++) {
asn1cSequenceAdd(ieC3_1->dRB_Failed_List_NG_RAN->list, E1AP_DRB_Failed_Item_NG_RAN_t, ieC3_1_1);
ieC3_1_1->dRB_ID = j->id;
@@ -774,11 +813,11 @@ static void fill_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_bearer_setup_resp_t *const r
}
}
-void e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, e1ap_bearer_setup_resp_t *const resp)
+void e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, const e1ap_bearer_setup_resp_t *resp)
{
E1AP_E1AP_PDU_t pdu = {0};
fill_BEARER_CONTEXT_SETUP_RESPONSE(resp, &pdu);
- e1ap_encode_send(UPtype, &inst->setupReq, &pdu, 0, __func__);
+ e1ap_encode_send(UPtype, assoc_id, &pdu, 0, __func__);
}
int e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE(instance_t instance) {
@@ -791,7 +830,7 @@ void extract_BEARER_CONTEXT_SETUP_REQUEST(const E1AP_E1AP_PDU_t *pdu,
const E1AP_BearerContextSetupRequest_t *in = &pdu->choice.initiatingMessage->value.choice.BearerContextSetupRequest;
E1AP_BearerContextSetupRequestIEs_t *ie;
- LOG_I(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
+ LOG_D(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
for (int i=0; i < in->protocolIEs.list.count; i++) {
ie = in->protocolIEs.list.array[i];
@@ -862,7 +901,10 @@ void extract_BEARER_CONTEXT_SETUP_REQUEST(const E1AP_E1AP_PDU_t *pdu,
pdu_session->sessionId = pdu2Setup->pDU_Session_ID;
pdu_session->sessionType = pdu2Setup->pDU_Session_Type;
- OCTET_STRING_TO_INT8(&pdu2Setup->sNSSAI.sST, pdu_session->sst);
+ OCTET_STRING_TO_INT8(&pdu2Setup->sNSSAI.sST, pdu_session->nssai.sst);
+ pdu_session->nssai.sd = 0xffffff;
+ if (pdu2Setup->sNSSAI.sD != NULL)
+ OCTET_STRING_TO_INT24(pdu2Setup->sNSSAI.sD, pdu_session->nssai.sd);
pdu_session->integrityProtectionIndication = pdu2Setup->securityIndication.integrityProtectionIndication;
pdu_session->confidentialityProtectionIndication = pdu2Setup->securityIndication.confidentialityProtectionIndication;
@@ -946,7 +988,7 @@ void extract_BEARER_CONTEXT_SETUP_REQUEST(const E1AP_E1AP_PDU_t *pdu,
}
-int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
{
DevAssert(pdu != NULL);
DevAssert(pdu->present == E1AP_E1AP_PDU_PR_initiatingMessage);
@@ -956,7 +998,8 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(e1ap_upcp_inst_t *e1_inst, cons
e1ap_bearer_setup_req_t bearerCxt = {0};
extract_BEARER_CONTEXT_SETUP_REQUEST(pdu, &bearerCxt);
- process_e1_bearer_context_setup_req(e1_inst->instance, &bearerCxt);
+
+ e1_bearer_context_setup(&bearerCxt);
return 0;
}
@@ -965,7 +1008,7 @@ void extract_BEARER_CONTEXT_SETUP_RESPONSE(const E1AP_E1AP_PDU_t *pdu,
const E1AP_BearerContextSetupResponse_t *in = &pdu->choice.successfulOutcome->value.choice.BearerContextSetupResponse;
E1AP_BearerContextSetupResponseIEs_t *ie;
- LOG_I(E1AP, "Bearer context setup response number of IEs %d\n", in->protocolIEs.list.count);
+ LOG_D(E1AP, "Bearer context setup response number of IEs %d\n", in->protocolIEs.list.count);
for (int i=0; i < in->protocolIEs.list.count; i++) {
ie = in->protocolIEs.list.array[i];
@@ -1046,7 +1089,7 @@ void extract_BEARER_CONTEXT_SETUP_RESPONSE(const E1AP_E1AP_PDU_t *pdu,
}
}
-int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
{
DevAssert(pdu->present == E1AP_E1AP_PDU_PR_successfulOutcome);
DevAssert(pdu->choice.successfulOutcome->procedureCode == E1AP_ProcedureCode_id_bearerContextSetup);
@@ -1056,6 +1099,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const
MessageDef *msg = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_RESP);
e1ap_bearer_setup_resp_t *bearerCxt = &E1AP_BEARER_CONTEXT_SETUP_RESP(msg);
extract_BEARER_CONTEXT_SETUP_RESPONSE(pdu, bearerCxt);
+ msg->ittiMsgHeader.originInstance = assoc_id;
// Fixme: instance is the NGAP instance, no good way to set it here
instance_t instance = 0;
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg);
@@ -1063,7 +1107,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const
return 0;
}
-int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
{
AssertFatal(false,"Not implemented yet\n");
return -1;
@@ -1073,7 +1117,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(e1ap_upcp_inst_t *inst, const E
BEARER CONTEXT MODIFICATION REQUEST
*/
-static int fill_BEARER_CONTEXT_MODIFICATION_REQUEST(e1ap_setup_req_t *setupReq, e1ap_bearer_setup_req_t *const bearerCxt, E1AP_E1AP_PDU_t *pdu)
+static int fill_BEARER_CONTEXT_MODIFICATION_REQUEST(e1ap_bearer_setup_req_t *const bearerCxt, E1AP_E1AP_PDU_t *pdu)
{
pdu->present = E1AP_E1AP_PDU_PR_initiatingMessage;
asn1cCalloc(pdu->choice.initiatingMessage, msg);
@@ -1135,18 +1179,76 @@ static int fill_BEARER_CONTEXT_MODIFICATION_REQUEST(e1ap_setup_req_t *setupReq,
return 0;
}
-static void e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST(instance_t inst, e1ap_bearer_setup_req_t *const bearerCxt)
+static void e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, e1ap_bearer_setup_req_t *const bearerCxt)
{
- AssertFatal(getCxtE1(inst), "");
- e1ap_setup_req_t *setupReq = &getCxtE1(inst)->setupReq;
E1AP_E1AP_PDU_t pdu = {0};
- fill_BEARER_CONTEXT_MODIFICATION_REQUEST(setupReq, bearerCxt, &pdu);
- e1ap_encode_send(CPtype, setupReq, &pdu, 0, __func__);
+ fill_BEARER_CONTEXT_MODIFICATION_REQUEST(bearerCxt, &pdu);
+ e1ap_encode_send(CPtype, assoc_id, &pdu, 0, __func__);
}
-int e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
- AssertFatal(false,"Not implemented yet\n");
- return -1;
+static void fill_BEARER_CONTEXT_MODIFICATION_RESPONSE(const e1ap_bearer_modif_resp_t *resp, E1AP_E1AP_PDU_t *pdu)
+{
+ pdu->present = E1AP_E1AP_PDU_PR_successfulOutcome;
+ asn1cCalloc(pdu->choice.successfulOutcome, msg);
+ msg->procedureCode = E1AP_ProcedureCode_id_bearerContextModification;
+ msg->criticality = E1AP_Criticality_reject;
+ msg->value.present = E1AP_SuccessfulOutcome__value_PR_BearerContextModificationResponse;
+ E1AP_BearerContextModificationResponse_t *out = &pdu->choice.successfulOutcome->value.choice.BearerContextModificationResponse;
+
+ /* mandatory */
+ /* c1. gNB-CU-CP UE E1AP ID */
+ asn1cSequenceAdd(out->protocolIEs.list, E1AP_BearerContextModificationResponseIEs_t, ieCuCpId);
+ ieCuCpId->id = E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID;
+ ieCuCpId->criticality = E1AP_Criticality_reject;
+ ieCuCpId->value.present = E1AP_BearerContextModificationResponseIEs__value_PR_GNB_CU_CP_UE_E1AP_ID;
+ ieCuCpId->value.choice.GNB_CU_CP_UE_E1AP_ID = resp->gNB_cu_cp_ue_id;
+
+ /* mandatory */
+ /* c2. gNB-CU-UP UE E1AP ID */
+ asn1cSequenceAdd(out->protocolIEs.list, E1AP_BearerContextModificationResponseIEs_t, ieCuUpId);
+ ieCuUpId->id = E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID;
+ ieCuUpId->criticality = E1AP_Criticality_reject;
+ ieCuUpId->value.present = E1AP_BearerContextModificationResponseIEs__value_PR_GNB_CU_UP_UE_E1AP_ID;
+ ieCuUpId->value.choice.GNB_CU_UP_UE_E1AP_ID = resp->gNB_cu_up_ue_id;
+
+ /* optional */
+ /* PDU sessions that have been modified */
+ asn1cSequenceAdd(out->protocolIEs.list, E1AP_BearerContextModificationResponseIEs_t, ieSys);
+ ieSys->id = E1AP_ProtocolIE_ID_id_System_BearerContextModificationResponse;
+ ieSys->criticality = E1AP_Criticality_ignore;
+ ieSys->value.present = E1AP_BearerContextModificationResponseIEs__value_PR_System_BearerContextModificationResponse;
+
+ E1AP_System_BearerContextModificationResponse_t *sys = &ieSys->value.choice.System_BearerContextModificationResponse;
+ E1AP_ProtocolIE_Container_4932P29_t *piel = calloc(1, sizeof(*piel));
+ sys->present = E1AP_System_BearerContextModificationResponse_PR_nG_RAN_BearerContextModificationResponse;
+ sys->choice.nG_RAN_BearerContextModificationResponse = (struct E1AP_ProtocolIE_Container *)piel;
+ asn1cSequenceAdd(piel->list, E1AP_NG_RAN_BearerContextModificationResponse_t, ngran_bcmr);
+ ngran_bcmr->id = E1AP_ProtocolIE_ID_id_PDU_Session_Resource_Modified_List;
+ ngran_bcmr->criticality = E1AP_Criticality_reject;
+ ngran_bcmr->value.present = E1AP_NG_RAN_BearerContextModificationResponse__value_PR_PDU_Session_Resource_Modified_List;
+ E1AP_PDU_Session_Resource_Modified_List_t *pdu_mod_l = &ngran_bcmr->value.choice.PDU_Session_Resource_Modified_List;
+ for (int i = 0; i < resp->numPDUSessionsMod; ++i) {
+ const pdu_session_modif_t *pdu = &resp->pduSessionMod[i];
+ asn1cSequenceAdd(pdu_mod_l->list, E1AP_PDU_Session_Resource_Modified_Item_t, iePdu);
+ iePdu->pDU_Session_ID = pdu->id;
+ if (pdu->numDRBModified > 0) {
+ iePdu->dRB_Modified_List_NG_RAN = calloc(1, sizeof(*iePdu->dRB_Modified_List_NG_RAN));
+ AssertFatal(iePdu->dRB_Modified_List_NG_RAN != NULL, "out of memory\n");
+ E1AP_DRB_Modified_List_NG_RAN_t *drb_mod_l = iePdu->dRB_Modified_List_NG_RAN;
+ for (int j = 0; j < pdu->numDRBModified; ++j) {
+ const DRB_nGRAN_modified_t *drb = &pdu->DRBnGRanModList[j];
+ asn1cSequenceAdd(drb_mod_l->list, E1AP_DRB_Modified_Item_NG_RAN_t, drb_mod);
+ drb_mod->dRB_ID = drb->id;
+ }
+ }
+ }
+}
+
+static int e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_RESPONSE(sctp_assoc_t assoc_id, const e1ap_bearer_modif_resp_t *resp)
+{
+ E1AP_E1AP_PDU_t pdu = {0};
+ fill_BEARER_CONTEXT_MODIFICATION_RESPONSE(resp, &pdu);
+ return e1ap_encode_send(UPtype, assoc_id, &pdu, 0, __func__);
}
int e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_FAILURE(instance_t instance) {
@@ -1159,7 +1261,7 @@ void extract_BEARER_CONTEXT_MODIFICATION_REQUEST(const E1AP_E1AP_PDU_t *pdu,
const E1AP_BearerContextModificationRequest_t *in = &pdu->choice.initiatingMessage->value.choice.BearerContextModificationRequest;
E1AP_BearerContextModificationRequestIEs_t *ie;
- LOG_I(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
+ LOG_D(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
for (int i=0; i < in->protocolIEs.list.count; i++) {
ie = in->protocolIEs.list.array[i];
@@ -1232,7 +1334,7 @@ void extract_BEARER_CONTEXT_MODIFICATION_REQUEST(const E1AP_E1AP_PDU_t *pdu,
}
}
-int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST(e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
{
DevAssert(pdu != NULL);
DevAssert(pdu->present == E1AP_E1AP_PDU_PR_initiatingMessage);
@@ -1242,17 +1344,91 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST(e1ap_upcp_inst_t *e1_ins
e1ap_bearer_setup_req_t bearerCxt = {0};
extract_BEARER_CONTEXT_MODIFICATION_REQUEST(pdu, &bearerCxt);
- CUUP_process_bearer_context_mod_req(e1_inst->instance, &bearerCxt);
+
+ e1_bearer_context_modif(&bearerCxt);
return 0;
}
-int e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE(instance_t instance,
- sctp_assoc_t assoc_id,
- uint32_t stream,
- E1AP_E1AP_PDU_t *pdu)
+static void extract_BEARER_CONTEXT_MODIFICATION_RESPONSE(const E1AP_E1AP_PDU_t *pdu, e1ap_bearer_modif_resp_t *resp)
{
- AssertFatal(false,"Not implemented yet\n");
- return -1;
+ memset(resp, 0, sizeof(*resp));
+ const E1AP_BearerContextModificationResponse_t *in = &pdu->choice.successfulOutcome->value.choice.BearerContextModificationResponse;
+
+ for (int i = 0; i < in->protocolIEs.list.count; ++i) {
+ E1AP_BearerContextModificationResponseIEs_t *ie = in->protocolIEs.list.array[i];
+
+ switch (ie->id) {
+ case E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID:
+ DevAssert(ie->criticality == E1AP_Criticality_reject);
+ DevAssert(ie->value.present == E1AP_BearerContextModificationResponseIEs__value_PR_GNB_CU_CP_UE_E1AP_ID);
+ resp->gNB_cu_cp_ue_id = ie->value.choice.GNB_CU_CP_UE_E1AP_ID;
+ break;
+
+ case E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID:
+ DevAssert(ie->criticality == E1AP_Criticality_reject);
+ DevAssert(ie->value.present == E1AP_BearerContextModificationResponseIEs__value_PR_GNB_CU_UP_UE_E1AP_ID);
+ resp->gNB_cu_up_ue_id = ie->value.choice.GNB_CU_UP_UE_E1AP_ID;
+ break;
+
+ case E1AP_ProtocolIE_ID_id_System_BearerContextModificationResponse:
+ DevAssert(ie->criticality == E1AP_Criticality_ignore);
+ DevAssert(ie->value.present == E1AP_BearerContextModificationResponseIEs__value_PR_System_BearerContextModificationResponse);
+ DevAssert(ie->value.choice.System_BearerContextModificationResponse.present
+ == E1AP_System_BearerContextModificationResponse_PR_nG_RAN_BearerContextModificationResponse);
+ E1AP_ProtocolIE_Container_4932P29_t *msgNGRAN_list =
+ (E1AP_ProtocolIE_Container_4932P29_t *)
+ ie->value.choice.System_BearerContextModificationResponse.choice.nG_RAN_BearerContextModificationResponse;
+ DevAssert(msgNGRAN_list->list.count == 1);
+ E1AP_NG_RAN_BearerContextModificationResponse_t *msgNGRAN = msgNGRAN_list->list.array[0];
+ DevAssert(msgNGRAN->id == E1AP_ProtocolIE_ID_id_PDU_Session_Resource_Modified_List);
+ DevAssert(msgNGRAN->criticality == E1AP_Criticality_reject);
+ DevAssert(msgNGRAN->value.present == E1AP_NG_RAN_BearerContextModificationResponse__value_PR_PDU_Session_Resource_Modified_List);
+ E1AP_PDU_Session_Resource_Modified_List_t *pduModifiedList = &msgNGRAN->value.choice.PDU_Session_Resource_Modified_List;
+ resp->numPDUSessionsMod = pduModifiedList->list.count;
+
+ for (int i=0; i < pduModifiedList->list.count; i++) {
+ pdu_session_modif_t *pduModified = &resp->pduSessionMod[i];
+ E1AP_PDU_Session_Resource_Modified_Item_t *mod_it = pduModifiedList->list.array[i];
+ pduModified->id = mod_it->pDU_Session_ID;
+
+ AssertFatal(mod_it->nG_DL_UP_TNL_Information == NULL, "not implemented\n");
+ AssertFatal(mod_it->securityResult == NULL, "not implemented\n");
+ AssertFatal(mod_it->pDU_Session_Data_Forwarding_Information_Response == NULL, "not implemented\n");
+ AssertFatal(mod_it->dRB_Setup_List_NG_RAN == NULL, "not implemented\n");
+ AssertFatal(mod_it->dRB_Failed_List_NG_RAN == NULL, "not implemented\n");
+ AssertFatal(mod_it->dRB_Failed_To_Modify_List_NG_RAN == NULL, "not implemented\n");
+
+ pduModified->numDRBModified = mod_it->dRB_Modified_List_NG_RAN->list.count;
+ for (int j=0; j < mod_it->dRB_Modified_List_NG_RAN->list.count; j++) {
+ DRB_nGRAN_modified_t *drbModified = &pduModified->DRBnGRanModList[j];
+ E1AP_DRB_Modified_Item_NG_RAN_t *drb = mod_it->dRB_Modified_List_NG_RAN->list.array[j];
+
+ drbModified->id = drb->dRB_ID;
+
+ AssertFatal(drb->uL_UP_Transport_Parameters == NULL, "not implemented\n");
+ AssertFatal(drb->pDCP_SN_Status_Information == NULL, "not implemented\n");
+ AssertFatal(drb->flow_Setup_List == NULL, "not implemented\n");
+ AssertFatal(drb->flow_Failed_List == NULL, "not implemented\n");
+ }
+ }
+ break;
+ }
+ }
+}
+
+int e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
+{
+ DevAssert(pdu != NULL);
+ DevAssert(pdu->present == E1AP_E1AP_PDU_PR_successfulOutcome);
+ DevAssert(pdu->choice.successfulOutcome->procedureCode == E1AP_ProcedureCode_id_bearerContextModification);
+ DevAssert(pdu->choice.successfulOutcome->criticality == E1AP_Criticality_reject);
+ DevAssert(pdu->choice.successfulOutcome->value.present == E1AP_SuccessfulOutcome__value_PR_BearerContextModificationResponse);
+
+ MessageDef *msg = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_MODIFICATION_RESP);
+ e1ap_bearer_modif_resp_t *modif = &E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg);
+ extract_BEARER_CONTEXT_MODIFICATION_RESPONSE(pdu, modif);
+ itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
+ return 0;
}
int e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_FAILURE(instance_t instance,
@@ -1295,7 +1471,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM(instance_t instance,
BEARER CONTEXT RELEASE
*/
-static int fill_BEARER_CONTEXT_RELEASE_COMMAND(e1ap_setup_req_t *setupReq, e1ap_bearer_release_cmd_t *const cmd, E1AP_E1AP_PDU_t *pdu)
+static int fill_BEARER_CONTEXT_RELEASE_COMMAND(e1ap_bearer_release_cmd_t *const cmd, E1AP_E1AP_PDU_t *pdu)
{
pdu->present = E1AP_E1AP_PDU_PR_initiatingMessage;
asn1cCalloc(pdu->choice.initiatingMessage, msg);
@@ -1321,14 +1497,14 @@ static int fill_BEARER_CONTEXT_RELEASE_COMMAND(e1ap_setup_req_t *setupReq, e1ap_
return 0;
}
-int e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND(e1ap_setup_req_t *setupReq, e1ap_bearer_release_cmd_t *const cmd)
+int e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND(sctp_assoc_t assoc_id, e1ap_bearer_release_cmd_t *const cmd)
{
E1AP_E1AP_PDU_t pdu = {0};
- fill_BEARER_CONTEXT_RELEASE_COMMAND(setupReq, cmd, &pdu);
- return e1ap_encode_send(CPtype, setupReq, &pdu, 0, __func__);
+ fill_BEARER_CONTEXT_RELEASE_COMMAND(cmd, &pdu);
+ return e1ap_encode_send(CPtype, assoc_id, &pdu, 0, __func__);
}
-int fill_BEARER_CONTEXT_RELEASE_COMPLETE(e1ap_setup_req_t *setupReq, e1ap_bearer_release_cmd_t *const cmd, E1AP_E1AP_PDU_t *pdu)
+static int fill_BEARER_CONTEXT_RELEASE_COMPLETE(const e1ap_bearer_release_cplt_t *cplt, E1AP_E1AP_PDU_t *pdu)
{
pdu->present = E1AP_E1AP_PDU_PR_successfulOutcome;
asn1cCalloc(pdu->choice.successfulOutcome, msg);
@@ -1342,23 +1518,23 @@ int fill_BEARER_CONTEXT_RELEASE_COMPLETE(e1ap_setup_req_t *setupReq, e1ap_bearer
ieC1->id = E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID;
ieC1->criticality = E1AP_Criticality_reject;
ieC1->value.present = E1AP_BearerContextReleaseCompleteIEs__value_PR_GNB_CU_CP_UE_E1AP_ID;
- ieC1->value.choice.GNB_CU_CP_UE_E1AP_ID = cmd->gNB_cu_cp_ue_id;
+ ieC1->value.choice.GNB_CU_CP_UE_E1AP_ID = cplt->gNB_cu_cp_ue_id;
/* mandatory */
/* c2. gNB-CU-UP UE E1AP ID */
asn1cSequenceAdd(out->protocolIEs.list, E1AP_BearerContextReleaseCompleteIEs_t, ieC2);
ieC2->id = E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID;
ieC2->criticality = E1AP_Criticality_reject;
ieC2->value.present = E1AP_BearerContextReleaseCompleteIEs__value_PR_GNB_CU_UP_UE_E1AP_ID;
- ieC2->value.choice.GNB_CU_UP_UE_E1AP_ID = cmd->gNB_cu_cp_ue_id;
+ ieC2->value.choice.GNB_CU_UP_UE_E1AP_ID = cplt->gNB_cu_cp_ue_id;
return 0;
}
-int e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE(e1ap_upcp_inst_t *inst, e1ap_bearer_release_cmd_t *const cmd)
+int e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE(sctp_assoc_t assoc_id, const e1ap_bearer_release_cplt_t *cplt)
{
E1AP_E1AP_PDU_t pdu = {0};
- fill_BEARER_CONTEXT_RELEASE_COMPLETE(&inst->setupReq, cmd, &pdu);
- return e1ap_encode_send(CPtype, &inst->setupReq, &pdu, 0, __func__);
+ fill_BEARER_CONTEXT_RELEASE_COMPLETE(cplt, &pdu);
+ return e1ap_encode_send(CPtype, assoc_id, &pdu, 0, __func__);
}
int e1apCUUP_send_BEARER_CONTEXT_RELEASE_REQUEST(instance_t instance) {
@@ -1371,7 +1547,7 @@ void extract_BEARER_CONTEXT_RELEASE_COMMAND(const E1AP_E1AP_PDU_t *pdu,
const E1AP_BearerContextReleaseCommand_t *in = &pdu->choice.initiatingMessage->value.choice.BearerContextReleaseCommand;
E1AP_BearerContextReleaseCommandIEs_t *ie;
- LOG_I(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
+ LOG_D(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
for (int i=0; i < in->protocolIEs.list.count; i++) {
ie = in->protocolIEs.list.array[i];
@@ -1405,7 +1581,7 @@ void extract_BEARER_CONTEXT_RELEASE_COMMAND(const E1AP_E1AP_PDU_t *pdu,
}
}
-int e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND(e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
{
DevAssert(pdu != NULL);
DevAssert(pdu->present == E1AP_E1AP_PDU_PR_initiatingMessage);
@@ -1415,16 +1591,16 @@ int e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND(e1ap_upcp_inst_t *e1_inst, co
e1ap_bearer_release_cmd_t bearerCxt = {0};
extract_BEARER_CONTEXT_RELEASE_COMMAND(pdu, &bearerCxt);
- CUUP_process_bearer_release_command(e1_inst->instance, &bearerCxt);
+ e1_bearer_release_cmd(&bearerCxt);
return 0;
}
void extract_BEARER_CONTEXT_RELEASE_COMPLETE(const E1AP_E1AP_PDU_t *pdu,
- e1ap_bearer_release_cmd_t *bearerCxt) {
+ e1ap_bearer_release_cplt_t *bearerCxt) {
const E1AP_BearerContextReleaseComplete_t *in = &pdu->choice.successfulOutcome->value.choice.BearerContextReleaseComplete;
E1AP_BearerContextReleaseCompleteIEs_t *ie;
- LOG_I(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
+ LOG_D(E1AP, "Bearer context setup number of IEs %d\n", in->protocolIEs.list.count);
for (int i=0; i < in->protocolIEs.list.count; i++) {
ie = in->protocolIEs.list.array[i];
@@ -1449,7 +1625,7 @@ void extract_BEARER_CONTEXT_RELEASE_COMPLETE(const E1AP_E1AP_PDU_t *pdu,
}
}
-int e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE(e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
+int e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
{
DevAssert(pdu != NULL);
DevAssert(pdu->present == E1AP_E1AP_PDU_PR_successfulOutcome);
@@ -1457,9 +1633,12 @@ int e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE(e1ap_upcp_inst_t *e1_inst, c
DevAssert(pdu->choice.successfulOutcome->criticality == E1AP_Criticality_reject);
DevAssert(pdu->choice.successfulOutcome->value.present == E1AP_SuccessfulOutcome__value_PR_BearerContextReleaseComplete);
- e1ap_bearer_release_cmd_t bearerCxt = {0};
+ e1ap_bearer_release_cplt_t bearerCxt = {0};
extract_BEARER_CONTEXT_RELEASE_COMPLETE(pdu, &bearerCxt);
- //TODO: CUCP_process_bearer_release_complete(&beareCxt, instance);
+ MessageDef *msg = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_RELEASE_CPLT);
+ e1ap_bearer_release_cplt_t *cplt = &E1AP_BEARER_CONTEXT_RELEASE_CPLT(msg);
+ *cplt = bearerCxt;
+ itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
return 0;
}
@@ -1519,32 +1698,31 @@ static instance_t cuup_task_create_gtpu_instance_to_du(eth_params_t *IPaddrs) {
openAddr_t tmp= {0};
strncpy(tmp.originHost, IPaddrs->my_addr, sizeof(tmp.originHost)-1);
sprintf(tmp.originService, "%d", IPaddrs->my_portd);
+ sprintf(tmp.destinationService, "%d", IPaddrs->remote_portd);
return gtpv1Init(tmp);
}
-static void e1_task_send_sctp_association_req(long task_id, instance_t instance, e1ap_setup_req_t *e1ap_setup_req)
+static void e1_task_send_sctp_association_req(long task_id, instance_t instance, e1ap_net_config_t *e1ap_nc)
{
- DevAssert(e1ap_setup_req != NULL);
+ DevAssert(e1ap_nc != NULL);
getCxtE1(instance)->sockState = SCTP_STATE_CLOSED;
MessageDef *message_p = itti_alloc_new_message(task_id, 0, SCTP_NEW_ASSOCIATION_REQ);
sctp_new_association_req_t *sctp_new_req = &message_p->ittiMsg.sctp_new_association_req;
sctp_new_req->ulp_cnx_id = instance;
sctp_new_req->port = E1AP_PORT_NUMBER;
sctp_new_req->ppid = E1AP_SCTP_PPID;
- sctp_new_req->in_streams = e1ap_setup_req->sctp_in_streams;
- sctp_new_req->out_streams = e1ap_setup_req->sctp_out_streams;
// remote
- sctp_new_req->remote_address = e1ap_setup_req->CUCP_e1_ip_address;
+ sctp_new_req->remote_address = e1ap_nc->CUCP_e1_ip_address;
// local
- sctp_new_req->local_address = e1ap_setup_req->CUUP_e1_ip_address;
+ sctp_new_req->local_address = e1ap_nc->CUUP_e1_ip_address;
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
}
-static void e1apCUUP_send_SETUP_REQUEST(e1ap_setup_req_t *setup)
+static void e1apCUUP_send_SETUP_REQUEST(sctp_assoc_t assoc_id, e1ap_setup_req_t *setup)
{
E1AP_E1AP_PDU_t pdu = {0};
fill_SETUP_REQUEST(setup, &pdu);
- e1ap_encode_send(UPtype, setup, &pdu, 0, __func__);
+ e1ap_encode_send(UPtype, assoc_id, &pdu, 0, __func__);
}
static void e1_task_handle_sctp_association_resp(E1_t type, instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp)
@@ -1562,15 +1740,14 @@ static void e1_task_handle_sctp_association_resp(E1_t type, instance_t instance,
}
if (type == UPtype) {
- e1ap_setup_req_t *e1ap_cuup_setup_req = &getCxtE1(instance)->setupReq;
- e1ap_cuup_setup_req->assoc_id = sctp_new_association_resp->assoc_id;
- e1ap_cuup_setup_req->sctp_in_streams = sctp_new_association_resp->in_streams;
- e1ap_cuup_setup_req->sctp_out_streams = sctp_new_association_resp->out_streams;
- e1ap_cuup_setup_req->default_sctp_stream_id = 0;
+ e1ap_upcp_inst_t *inst = getCxtE1(instance);
+ inst->cuup.assoc_id = sctp_new_association_resp->assoc_id;
- eth_params_t IPaddr;
- IPaddr.my_addr = e1ap_cuup_setup_req->localAddressF1U;
- IPaddr.my_portd = e1ap_cuup_setup_req->localPortF1U;
+ e1ap_net_config_t *nc = &inst->net_config;
+ eth_params_t IPaddr = {0};
+ IPaddr.my_addr = nc->localAddressF1U;
+ IPaddr.my_portd = nc->localPortF1U;
+ IPaddr.remote_portd = nc->remotePortF1U;
if (getCxtE1(instance)->gtpInstF1U < 0)
getCxtE1(instance)->gtpInstF1U = cuup_task_create_gtpu_instance_to_du(&IPaddr);
if (getCxtE1(instance)->gtpInstF1U < 0)
@@ -1578,18 +1755,18 @@ static void e1_task_handle_sctp_association_resp(E1_t type, instance_t instance,
extern instance_t CUuniqInstance;
CUuniqInstance = getCxtE1(instance)->gtpInstF1U;
cuup_init_n3(instance);
- e1apCUUP_send_SETUP_REQUEST(&getCxtE1(instance)->setupReq);
+ e1apCUUP_send_SETUP_REQUEST(inst->cuup.assoc_id, &inst->cuup.setupReq);
}
}
void cuup_init_n3(instance_t instance)
{
if (getCxtE1(instance)->gtpInstN3 < 0) {
- e1ap_setup_req_t *setup = &getCxtE1(instance)->setupReq;
+ e1ap_net_config_t *nc = &getCxtE1(instance)->net_config;
openAddr_t tmp = {0};
- strcpy(tmp.originHost, setup->localAddressN3);
- sprintf(tmp.originService, "%d", setup->localPortN3);
- sprintf(tmp.destinationService, "%d", setup->remotePortN3);
+ strcpy(tmp.originHost, nc->localAddressN3);
+ sprintf(tmp.originService, "%d", nc->localPortN3);
+ sprintf(tmp.destinationService, "%d", nc->remotePortN3);
LOG_I(GTPU, "Configuring GTPu address : %s, port : %s\n", tmp.originHost, tmp.originService);
// Fixme: fully inconsistent instances management
// dirty global var is a bad fix
@@ -1623,24 +1800,19 @@ void cucp_task_send_sctp_init_req(instance_t instance, char *my_addr) {
void e1_task_handle_sctp_association_ind(E1_t type, instance_t instance, sctp_new_association_ind_t *sctp_new_ind)
{
- if (getCxtE1(instance))
- LOG_W(E1AP, "CUCP incoming call, re-use older socket context, finish implementation required\n");
- else
- createE1inst(type, instance, NULL);
- getCxtE1(instance)->sockState = SCTP_STATE_ESTABLISHED;
- getCxtE1(instance)->incoming_sock = true;
- e1ap_setup_req_t *setup_req = &getCxtE1(instance)->setupReq;
- setup_req->assoc_id = sctp_new_ind->assoc_id;
- setup_req->sctp_in_streams = sctp_new_ind->in_streams;
- setup_req->sctp_out_streams = sctp_new_ind->out_streams;
- setup_req->default_sctp_stream_id = 0;
+ if (!getCxtE1(instance))
+ createE1inst(type, instance, NULL, NULL);
+ e1ap_upcp_inst_t *inst = getCxtE1(instance);
+ inst->sockState = SCTP_STATE_ESTABLISHED;
+ if (type == UPtype)
+ inst->cuup.assoc_id = sctp_new_ind->assoc_id;
}
void e1apHandleTimer(instance_t myInstance)
{
LOG_W(E1AP, "Try to reconnect to CP\n");
if (getCxtE1(myInstance)->sockState != SCTP_STATE_ESTABLISHED)
- e1_task_send_sctp_association_req(TASK_CUUP_E1, myInstance, &getCxtE1(myInstance)->setupReq);
+ e1_task_send_sctp_association_req(TASK_CUUP_E1, myInstance, &getCxtE1(myInstance)->net_config);
}
void *E1AP_CUCP_task(void *arg) {
@@ -1653,7 +1825,8 @@ void *E1AP_CUCP_task(void *arg) {
itti_receive_msg(TASK_CUCP_E1, &msg);
instance_t myInstance=ITTI_MSG_DESTINATION_INSTANCE(msg);
const int msgType = ITTI_MSG_ID(msg);
- LOG_I(E1AP, "CUCP received %s for instance %ld\n", messages_info[msgType].name, myInstance);
+ LOG_D(E1AP, "CUCP received %s for instance %ld\n", messages_info[msgType].name, myInstance);
+ sctp_assoc_t assoc_id = msg->ittiMsgHeader.originInstance;
switch (ITTI_MSG_ID(msg)) {
case SCTP_NEW_ASSOCIATION_IND:
@@ -1664,29 +1837,37 @@ void *E1AP_CUCP_task(void *arg) {
e1_task_handle_sctp_association_resp(CPtype, ITTI_MSG_ORIGIN_INSTANCE(msg), &msg->ittiMsg.sctp_new_association_resp);
break;
- case E1AP_SETUP_REQ: {
- e1ap_setup_req_t *req = &E1AP_SETUP_REQ(msg);
- if (req->CUCP_e1_ip_address.ipv4 == 0) {
- LOG_E(E1AP, "No IPv4 address configured\n");
- return NULL;
- }
- cucp_task_send_sctp_init_req(0, req->CUCP_e1_ip_address.ipv4_address);
+ case E1AP_REGISTER_REQ: {
+ // note: we use E1AP_REGISTER_REQ only to set up sockets, the
+ // E1AP_SETUP_REQ is not used and comes through the socket from the
+ // CU-UP later!
+ e1ap_net_config_t *nc = &E1AP_REGISTER_REQ(msg).net_config;
+ AssertFatal(nc->CUCP_e1_ip_address.ipv4 != 0, "No IPv4 address configured\n");
+ cucp_task_send_sctp_init_req(0, nc->CUCP_e1_ip_address.ipv4_address);
} break;
+ case E1AP_SETUP_REQ:
+ AssertFatal(false, "should not receive E1AP_SETUP_REQ in CU-CP!\n");
+ break;
+
case SCTP_DATA_IND:
e1_task_handle_sctp_data_ind(myInstance, &msg->ittiMsg.sctp_data_ind);
break;
case E1AP_SETUP_RESP:
- e1ap_send_SETUP_RESPONSE(myInstance, &E1AP_SETUP_RESP(msg));
+ e1ap_send_SETUP_RESPONSE(assoc_id, &E1AP_SETUP_RESP(msg));
break;
case E1AP_BEARER_CONTEXT_SETUP_REQ:
- e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(myInstance, &E1AP_BEARER_CONTEXT_SETUP_REQ(msg));
+ e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(assoc_id, &E1AP_BEARER_CONTEXT_SETUP_REQ(msg));
break;
case E1AP_BEARER_CONTEXT_MODIFICATION_REQ:
- e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST(myInstance, &E1AP_BEARER_CONTEXT_SETUP_REQ(msg));
+ e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST(assoc_id, &E1AP_BEARER_CONTEXT_SETUP_REQ(msg));
+ break;
+
+ case E1AP_BEARER_CONTEXT_RELEASE_CMD:
+ e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND(assoc_id, &E1AP_BEARER_CONTEXT_RELEASE_CMD(msg));
break;
default:
@@ -1712,13 +1893,12 @@ void *E1AP_CUUP_task(void *arg) {
itti_receive_msg(TASK_CUUP_E1, &msg);
const instance_t myInstance = ITTI_MSG_DESTINATION_INSTANCE(msg);
const int msgType = ITTI_MSG_ID(msg);
- LOG_I(E1AP, "CUUP received %s for instance %ld\n", messages_info[msgType].name, myInstance);
+ LOG_D(E1AP, "CUUP received %s for instance %ld\n", messages_info[msgType].name, myInstance);
switch (msgType) {
- case E1AP_SETUP_REQ: {
- e1ap_setup_req_t *msgSetup = &E1AP_SETUP_REQ(msg);
- createE1inst(UPtype, myInstance, msgSetup);
-
- e1_task_send_sctp_association_req(TASK_CUUP_E1, myInstance, msgSetup);
+ case E1AP_REGISTER_REQ: {
+ e1ap_register_req_t *reg_req = &E1AP_REGISTER_REQ(msg);
+ createE1inst(UPtype, myInstance, ®_req->net_config, ®_req->setup_req);
+ e1_task_send_sctp_association_req(TASK_CUUP_E1, myInstance, ®_req->net_config);
} break;
case SCTP_NEW_ASSOCIATION_RESP:
@@ -1733,6 +1913,27 @@ void *E1AP_CUUP_task(void *arg) {
e1apHandleTimer(myInstance);
break;
+ case E1AP_BEARER_CONTEXT_SETUP_RESP: {
+ const e1ap_bearer_setup_resp_t *resp = &E1AP_BEARER_CONTEXT_SETUP_RESP(msg);
+ const e1ap_upcp_inst_t *inst = getCxtE1(myInstance);
+ AssertFatal(inst != NULL, "no E1 instance found for instance %ld\n", myInstance);
+ e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(inst->cuup.assoc_id, resp);
+ } break;
+
+ case E1AP_BEARER_CONTEXT_MODIFICATION_RESP: {
+ const e1ap_bearer_modif_resp_t *resp = &E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg);
+ const e1ap_upcp_inst_t *inst = getCxtE1(myInstance);
+ AssertFatal(inst != NULL, "no E1 instance found for instance %ld\n", myInstance);
+ e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_RESPONSE(inst->cuup.assoc_id, resp);
+ } break;
+
+ case E1AP_BEARER_CONTEXT_RELEASE_CPLT: {
+ const e1ap_bearer_release_cplt_t *cplt = &E1AP_BEARER_CONTEXT_RELEASE_CPLT(msg);
+ const e1ap_upcp_inst_t *inst = getCxtE1(myInstance);
+ AssertFatal(inst != NULL, "no E1 instance found for instance %ld\n", myInstance);
+ e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE(inst->cuup.assoc_id, cplt);
+ } break;
+
default:
LOG_E(E1AP, "Unknown message received in TASK_CUUP_E1\n");
break;
diff --git a/openair2/E1AP/e1ap.h b/openair2/E1AP/e1ap.h
index af1dcae363..b41559de09 100644
--- a/openair2/E1AP/e1ap.h
+++ b/openair2/E1AP/e1ap.h
@@ -28,27 +28,29 @@
#include "e1ap_asnc.h"
#include "openair2/E1AP/e1ap_common.h"
-int e1apCUCP_handle_SETUP_REQUEST(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUCP_handle_SETUP_REQUEST(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUUP_handle_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUUP_handle_SETUP_RESPONSE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUUP_handle_SETUP_FAILURE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUUP_handle_SETUP_FAILURE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-void e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(e1ap_upcp_inst_t *inst, e1ap_bearer_setup_resp_t *const resp);
+int e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+void e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, const e1ap_bearer_setup_resp_t *resp);
-int e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE(e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+int e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
-int e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE(e1ap_upcp_inst_t *inst, e1ap_bearer_release_cmd_t *const cmd);
+int e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu);
+
+int e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE(sctp_assoc_t assoc_id, const e1ap_bearer_release_cplt_t *cplt);
void *E1AP_CUUP_task(void *arg);
diff --git a/openair2/E1AP/e1ap_api.c b/openair2/E1AP/e1ap_api.c
deleted file mode 100644
index 9cec6b69f3..0000000000
--- a/openair2/E1AP/e1ap_api.c
+++ /dev/null
@@ -1,194 +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
- *
- * Author and copyright: Laurent Thomas, open-cells.com
- *
- * 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
- */
-
-#include
-#include "e1ap_api.h"
-
-#include "nr_pdcp/nr_pdcp_entity.h"
-#include "openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.h"
-#include "openair2/RRC/NR/cucp_cuup_if.h"
-#include "openair2/RRC/LTE/MESSAGES/asn1_msg.h"
-#include "openair3/SECU/key_nas_deriver.h"
-#include "openair3/ocp-gtpu/gtp_itf.h"
-#include "openair2/F1AP/f1ap_ids.h"
-#include "e1ap_asnc.h"
-#include "e1ap_common.h"
-#include "e1ap.h"
-
-struct NR_DRB_ToAddMod;
-static void fill_DRB_configList_e1(NR_DRB_ToAddModList_t *DRB_configList, pdu_session_to_setup_t *pdu) {
-
- for (int i=0; i < pdu->numDRB2Setup; i++) {
- DRB_nGRAN_to_setup_t *drb = pdu->DRBnGRanList + i;
- asn1cSequenceAdd(DRB_configList->list, struct NR_DRB_ToAddMod, ie);
- ie->drb_Identity = drb->id;
- ie->cnAssociation = CALLOC(1, sizeof(*ie->cnAssociation));
- ie->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config;
-
- // sdap_Config
- asn1cCalloc(ie->cnAssociation->choice.sdap_Config, sdap_config);
- sdap_config->pdu_Session = pdu->sessionId;
- sdap_config->sdap_HeaderDL = drb->sDAP_Header_DL;
- sdap_config->sdap_HeaderUL = drb->sDAP_Header_UL;
- sdap_config->defaultDRB = drb->defaultDRB;
-
- asn1cCalloc(sdap_config->mappedQoS_FlowsToAdd, FlowsToAdd);
- for (int j=0; j < drb->numQosFlow2Setup; j++) {
- asn1cSequenceAdd(FlowsToAdd->list, NR_QFI_t, qfi);
- *qfi = drb->qosFlows[j].fiveQI;
- }
- sdap_config->mappedQoS_FlowsToRelease = NULL;
-
- // pdcp_Config
- ie->reestablishPDCP = NULL;
- ie->recoverPDCP = NULL;
- asn1cCalloc(ie->pdcp_Config, pdcp_config);
- asn1cCalloc(pdcp_config->drb, drbCfg);
- asn1cCallocOne(drbCfg->discardTimer, drb->discardTimer);
- asn1cCallocOne(drbCfg->pdcp_SN_SizeUL, drb->pDCP_SN_Size_UL);
- asn1cCallocOne(drbCfg->pdcp_SN_SizeDL, drb->pDCP_SN_Size_DL);
- drbCfg->headerCompression.present = NR_PDCP_Config__drb__headerCompression_PR_notUsed;
- drbCfg->headerCompression.choice.notUsed = 0;
-
- drbCfg->integrityProtection = NULL;
- drbCfg->statusReportRequired = NULL;
- drbCfg->outOfOrderDelivery = NULL;
- pdcp_config->moreThanOneRLC = NULL;
-
- pdcp_config->t_Reordering = calloc(1, sizeof(*pdcp_config->t_Reordering));
- *pdcp_config->t_Reordering = drb->reorderingTimer;
- pdcp_config->ext1 = NULL;
-
- if (pdu->integrityProtectionIndication == 0 || // Required
- pdu->integrityProtectionIndication == 1) { // Preferred
- asn1cCallocOne(drbCfg->integrityProtection, NR_PDCP_Config__drb__integrityProtection_enabled);
- }
-
- if (pdu->confidentialityProtectionIndication == 2) { // Not Needed
- asn1cCalloc(pdcp_config->ext1, ext1);
- asn1cCallocOne(ext1->cipheringDisabled, NR_PDCP_Config__ext1__cipheringDisabled_true);
- }
- }
-}
-
-static int drb_config_N3gtpu_create(e1ap_bearer_setup_req_t * const req,
- gtpv1u_gnb_create_tunnel_resp_t *create_tunnel_resp,
- instance_t instance) {
-
- gtpv1u_gnb_create_tunnel_req_t create_tunnel_req={0};
-
- NR_DRB_ToAddModList_t DRB_configList = {0};
- for (int i=0; i < req->numPDUSessions; i++) {
- pdu_session_to_setup_t *const pdu = &req->pduSession[i];
- create_tunnel_req.pdusession_id[i] = pdu->sessionId;
- create_tunnel_req.incoming_rb_id[i] = pdu->DRBnGRanList[0].id; // taking only the first DRB. TODO:change this
- memcpy(&create_tunnel_req.dst_addr[i].buffer,
- &pdu->tlAddress,
- sizeof(uint8_t)*4);
- create_tunnel_req.dst_addr[i].length = 32; // 8bits * 4bytes
- create_tunnel_req.outgoing_teid[i] = pdu->teId;
- fill_DRB_configList_e1(&DRB_configList, pdu);
- }
- create_tunnel_req.num_tunnels = req->numPDUSessions;
- create_tunnel_req.ue_id = req->gNB_cu_cp_ue_id;
-
- // Create N3 tunnel
- int ret = gtpv1u_create_ngu_tunnel(instance, &create_tunnel_req, create_tunnel_resp, nr_pdcp_data_req_drb, sdap_data_req);
- if (ret != 0) {
- LOG_E(NR_RRC,
- "drb_config_N3gtpu_create=>gtpv1u_create_ngu_tunnel failed, cannot set up GTP tunnel for data transmissions of UE %ld\n",
- create_tunnel_req.ue_id);
- return ret;
- }
-
- // Configure DRBs
- nr_pdcp_e1_add_drbs(true, // set this to notify PDCP that his not UE
- create_tunnel_req.ue_id,
- &DRB_configList,
- (req->integrityProtectionAlgorithm << 4) | req->cipheringAlgorithm,
- (uint8_t *)req->encryptionKey,
- (uint8_t *)req->integrityProtectionKey);
- return ret;
-}
-
-void process_e1_bearer_context_setup_req(instance_t instance, e1ap_bearer_setup_req_t *const req)
-{
- e1ap_upcp_inst_t *inst = getCxtE1(instance);
- AssertFatal(inst, "");
- gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp_N3={0};
-
- uint32_t gNB_cu_up_ue_id = req ->gNB_cu_cp_ue_id;
- LOG_I(E1AP, "adding UE with CU-CP UE ID %d and CU-UP UE ID %d\n", req->gNB_cu_cp_ue_id, gNB_cu_up_ue_id);
- f1_ue_data_t ue_data = {.secondary_ue = req->gNB_cu_cp_ue_id};
- cu_add_f1_ue_data(gNB_cu_up_ue_id, &ue_data);
-
- // GTP tunnel for UL
- drb_config_N3gtpu_create(req, &create_tunnel_resp_N3, inst->gtpInstN3);
-
- MessageDef *msg = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_RESP);
- e1ap_bearer_setup_resp_t *resp = &E1AP_BEARER_CONTEXT_SETUP_RESP(msg);
-
- in_addr_t my_addr;
- if (inet_pton(AF_INET, inst->setupReq.localAddressF1U, &my_addr) != 1)
- LOG_E(E1AP, "can't use the F1-U local interface: %s\n", inst->setupReq.localAddressF1U);
- fill_e1ap_bearer_setup_resp(resp, req, inst->gtpInstF1U, req->gNB_cu_cp_ue_id, inst->setupReq.remotePortF1U, my_addr);
-
- resp->gNB_cu_cp_ue_id = req->gNB_cu_cp_ue_id;
- resp->gNB_cu_up_ue_id = gNB_cu_up_ue_id;
- resp->numPDUSessions = req->numPDUSessions;
- for (int i=0; i < req->numPDUSessions; i++) {
- pdu_session_setup_t *pduSetup = resp->pduSession + i;
- pdu_session_to_setup_t *pdu2Setup = req->pduSession + i;
-
- pduSetup->id = pdu2Setup->sessionId;
- if (inet_pton(AF_INET, inst->setupReq.localAddressN3, &pduSetup->tlAddress) != 1)
- LOG_E(E1AP, "can't use the N3 local interface: %s\n", inst->setupReq.localAddressN3);
- pduSetup->teId = create_tunnel_resp_N3.gnb_NGu_teid[i];
- pduSetup->numDRBSetup = pdu2Setup->numDRB2Setup;
-
- // At this point we don't have a way to know the DRBs that failed to setup
- // We assume all DRBs to setup have are setup successfully so we always send successful outcome in response
- // TODO: Modify nr_pdcp_add_drbs() to return DRB list that failed to setup to support E1AP
- pduSetup->numDRBFailed = 0;
- }
-
- e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(inst, resp);
-}
-
-void CUUP_process_bearer_context_mod_req(instance_t instance, e1ap_bearer_setup_req_t *const req)
-{
- e1ap_upcp_inst_t *inst = getCxtE1(instance);
- AssertFatal(inst, "");
- // assume we receive modification of F1-U but it is wrong, we can also get modification of N3 when HO will occur
- CU_update_UP_DL_tunnel(req, inst->gtpInstF1U, req->gNB_cu_cp_ue_id);
- // TODO: send bearer cxt mod response
-}
-
-void CUUP_process_bearer_release_command(instance_t instance, e1ap_bearer_release_cmd_t *const cmd)
-{
- e1ap_upcp_inst_t *inst = getCxtE1(instance);
- AssertFatal(inst, "");
- newGtpuDeleteAllTunnels(inst->gtpInstN3, cmd->gNB_cu_up_ue_id);
- newGtpuDeleteAllTunnels(inst->gtpInstF1U, cmd->gNB_cu_up_ue_id);
- e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE(inst, cmd);
-}
diff --git a/openair2/E1AP/e1ap_asnc.h b/openair2/E1AP/e1ap_asnc.h
index 00dbcc13f3..ed5d1817a8 100644
--- a/openair2/E1AP/e1ap_asnc.h
+++ b/openair2/E1AP/e1ap_asnc.h
@@ -47,10 +47,14 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
#include
+#include
+#include
#include
#include
#include
@@ -61,5 +65,7 @@
#include
#include
#include
+#include
+#include
#endif
diff --git a/openair2/E1AP/e1ap_common.c b/openair2/E1AP/e1ap_common.c
index caf97b680d..cf8982339d 100644
--- a/openair2/E1AP/e1ap_common.c
+++ b/openair2/E1AP/e1ap_common.c
@@ -37,18 +37,19 @@ e1ap_upcp_inst_t *getCxtE1(instance_t instance)
return e1ap_inst[instance];
}
-int e1ap_assoc_id(E1_t type, instance_t instance) {
- AssertFatal(e1ap_inst[instance] != NULL, "Trying to access uninitiated instance of CUCP\n");
- return e1ap_inst[instance]->setupReq.assoc_id;
-}
-
-void createE1inst(E1_t type, instance_t instance, e1ap_setup_req_t *req) {
+void createE1inst(E1_t type, instance_t instance, e1ap_net_config_t *nc, e1ap_setup_req_t *req)
+{
AssertFatal(e1ap_inst[instance] == NULL, "Double call to E1 instance %d\n", (int)instance);
e1ap_inst[instance] = calloc(1, sizeof(e1ap_upcp_inst_t));
e1ap_inst[instance]->type = type;
e1ap_inst[instance]->instance = instance;
- if (req)
- memcpy(&e1ap_inst[instance]->setupReq, req, sizeof(*req));
+ e1ap_inst[instance]->cuup.assoc_id = -1;
+ if (nc)
+ memcpy(&e1ap_inst[instance]->net_config, nc, sizeof(*nc));
+ if (req) {
+ AssertFatal(type == UPtype, "E1 setup request only to be stored for CU-UP\n");
+ memcpy(&e1ap_inst[instance]->cuup.setupReq, req, sizeof(*req));
+ }
e1ap_inst[instance]->gtpInstN3 = -1;
e1ap_inst[instance]->gtpInstF1U = -1;
}
@@ -59,8 +60,8 @@ void e1ap_common_init() {
srand(time(NULL));
}
-bool check_transac_id(E1AP_TransactionID_t id, int *freeIdx) {
-
+static bool check_transac_id(E1AP_TransactionID_t id, int *freeIdx)
+{
bool isFreeIdxSet = false;
for (int i=0; i < E1AP_MAX_NUM_TRANSAC_IDS; i++) {
if (id == transacID[i])
@@ -74,10 +75,10 @@ bool check_transac_id(E1AP_TransactionID_t id, int *freeIdx) {
return true;
}
-E1AP_TransactionID_t E1AP_get_next_transaction_identifier() {
+long E1AP_get_next_transaction_identifier() {
E1AP_TransactionID_t genTransacId;
bool isTransacIdValid = false;
- int freeIdx;
+ int freeIdx = 0;
while (!isTransacIdValid) {
genTransacId = rand() & 255;
@@ -89,7 +90,7 @@ E1AP_TransactionID_t E1AP_get_next_transaction_identifier() {
return genTransacId;
}
-void E1AP_free_transaction_identifier(E1AP_TransactionID_t id) {
+void E1AP_free_transaction_identifier(long id) {
for (int i=0; i < E1AP_MAX_NUM_TRANSAC_IDS; i++) {
if (id == transacID[i]) {
@@ -116,6 +117,9 @@ int e1ap_decode_initiating_message(E1AP_E1AP_PDU_t *pdu) {
case E1AP_ProcedureCode_id_bearerContextModification:
break;
+ case E1AP_ProcedureCode_id_bearerContextRelease:
+ break;
+
default:
LOG_E(E1AP, "Unsupported procedure code (%d) for initiating message\n",
(int)pdu->choice.initiatingMessage->procedureCode);
@@ -133,6 +137,12 @@ int e1ap_decode_successful_outcome(E1AP_E1AP_PDU_t *pdu) {
case E1AP_ProcedureCode_id_bearerContextSetup:
break;
+ case E1AP_ProcedureCode_id_bearerContextModification:
+ break;
+
+ case E1AP_ProcedureCode_id_bearerContextRelease:
+ break;
+
default:
LOG_E(E1AP, "Unsupported procedure code (%d) for successful message\n",
(int)pdu->choice.successfulOutcome->procedureCode);
@@ -195,7 +205,7 @@ int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t
return -1;
}
-int e1ap_encode_send(E1_t type, e1ap_setup_req_t *setupReq, E1AP_E1AP_PDU_t *pdu, uint16_t stream, const char *func)
+int e1ap_encode_send(E1_t type, sctp_assoc_t assoc_id, E1AP_E1AP_PDU_t *pdu, uint16_t stream, const char *func)
{
DevAssert(pdu != NULL);
@@ -223,11 +233,11 @@ int e1ap_encode_send(E1_t type, e1ap_setup_req_t *setupReq, E1AP_E1AP_PDU_t *pdu
}
MessageDef *message = itti_alloc_new_message((type == CPtype) ? TASK_CUCP_E1 : TASK_CUUP_E1, 0, SCTP_DATA_REQ);
sctp_data_req_t *s = &message->ittiMsg.sctp_data_req;
- s->assoc_id = setupReq->assoc_id;
+ s->assoc_id = assoc_id;
s->buffer = buffer;
s->buffer_length = encoded;
s->stream = stream;
- LOG_I(E1AP, "%s: Sending ITTI message to SCTP Task\n", func);
+ LOG_D(E1AP, "%s: Sending ITTI message to SCTP Task\n", func);
itti_send_msg_to_task(TASK_SCTP, 0 /*unused by callee*/, message);
return encoded;
diff --git a/openair2/E1AP/e1ap_common.h b/openair2/E1AP/e1ap_common.h
index cddf5b9ea6..e0aea6990f 100644
--- a/openair2/E1AP/e1ap_common.h
+++ b/openair2/E1AP/e1ap_common.h
@@ -24,41 +24,39 @@
#ifndef E1AP_COMMON_H_
#define E1AP_COMMON_H_
#include "openair2/COMMON/e1ap_messages_types.h"
-#include "e1ap_asnc.h"
#include "openair2/COMMON/sctp_messages_types.h"
#include "common/ngran_types.h"
typedef struct e1ap_upcp_inst_s {
- bool incoming_sock;
instance_t instance;
- bool same_process;
E1_t type;
enum sctp_state_e sockState;
- sctp_assoc_t assoc_id;
+ struct {
+ sctp_assoc_t assoc_id;
+ e1ap_setup_req_t setupReq;
+ } cuup;
instance_t gtpInstN3;
instance_t gtpInstF1U;
- e1ap_setup_req_t setupReq;
- e1ap_bearer_setup_req_t bearerSetupReq;
- e1ap_bearer_setup_resp_t bearerSetupResp;
+ e1ap_net_config_t net_config;
} e1ap_upcp_inst_t;
extern int asn1_xer_print;
-int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t length);
+// forward declaration so we don't require E1AP ASN.1 when including this
+// header
+struct E1AP_E1AP_PDU;
+int e1ap_decode_pdu(struct E1AP_E1AP_PDU *pdu, const uint8_t *const buffer, uint32_t length);
e1ap_upcp_inst_t *getCxtE1(instance_t instance);
-E1AP_TransactionID_t E1AP_get_next_transaction_identifier();
+long E1AP_get_next_transaction_identifier();
+void E1AP_free_transaction_identifier(long id);
-void createE1inst(E1_t type, instance_t instance, e1ap_setup_req_t *req);
+void createE1inst(E1_t type, instance_t instance, e1ap_net_config_t *nc, e1ap_setup_req_t *req);
-bool check_transac_id(E1AP_TransactionID_t id, int *freeIdx);
-
-int e1ap_assoc_id(E1_t type, instance_t instance);
-
-int e1ap_encode_send(E1_t type, e1ap_setup_req_t *setupReq, E1AP_E1AP_PDU_t *pdu, uint16_t stream, const char *func);
+int e1ap_encode_send(E1_t type, sctp_assoc_t assoc_id, struct E1AP_E1AP_PDU *pdu, uint16_t stream, const char *func);
void e1ap_common_init();
+void cuup_init_n3(instance_t instance);
-void E1AP_free_transaction_identifier(E1AP_TransactionID_t id);
#endif /* E1AP_COMMON_H_ */
diff --git a/openair2/E1AP/e1ap_setup.c b/openair2/E1AP/e1ap_setup.c
index da643636fc..f2b9d05503 100644
--- a/openair2/E1AP/e1ap_setup.c
+++ b/openair2/E1AP/e1ap_setup.c
@@ -68,7 +68,7 @@ static void get_NGU_S1U_addr(char **addr, uint16_t *port)
MessageDef *RCconfig_NR_CU_E1(bool separate_CUUP_process)
{
- MessageDef *msgConfig = itti_alloc_new_message(TASK_GNB_APP, 0, E1AP_SETUP_REQ);
+ MessageDef *msgConfig = itti_alloc_new_message(TASK_GNB_APP, 0, E1AP_REGISTER_REQ);
if (!msgConfig)
return NULL;
@@ -85,9 +85,11 @@ MessageDef *RCconfig_NR_CU_E1(bool separate_CUUP_process)
config_getlist(&GNBParamList, GNBParams, sizeofArray(GNBParams), NULL);
paramdef_t *gnbParms = GNBParamList.paramarray[0];
AssertFatal(gnbParms[GNB_GNB_ID_IDX].uptr != NULL, "gNB id %d is not defined in configuration file\n", 0);
- e1ap_setup_req_t *e1Setup = &E1AP_SETUP_REQ(msgConfig);
+ e1ap_setup_req_t *e1Setup = &E1AP_REGISTER_REQ(msgConfig).setup_req;
msgConfig->ittiMsgHeader.destinationInstance = 0;
e1Setup->gNB_cu_up_id = *(gnbParms[GNB_GNB_ID_IDX].uptr);
+ if (*gnbParms[GNB_GNB_NAME_IDX].strptr)
+ e1Setup->gNB_cu_up_name = *(gnbParms[GNB_GNB_NAME_IDX].strptr);
paramdef_t PLMNParams[] = GNBPLMNPARAMS_DESC;
paramlist_def_t PLMNParamList = {GNB_CONFIG_STRING_PLMN_LIST, NULL, 0};
@@ -102,27 +104,41 @@ MessageDef *RCconfig_NR_CU_E1(bool separate_CUUP_process)
e1Setup->supported_plmns = numPLMNs;
for (int I = 0; I < numPLMNs; I++) {
- e1Setup->plmns[I].mcc = *PLMNParamList.paramarray[I][GNB_MOBILE_COUNTRY_CODE_IDX].uptr;
- e1Setup->plmns[I].mnc = *PLMNParamList.paramarray[I][GNB_MOBILE_NETWORK_CODE_IDX].uptr;
- e1Setup->plmns[I].mnc = *PLMNParamList.paramarray[I][GNB_MNC_DIGIT_LENGTH].u8ptr;
+ e1Setup->plmn[I].id.mcc = *PLMNParamList.paramarray[I][GNB_MOBILE_COUNTRY_CODE_IDX].uptr;
+ e1Setup->plmn[I].id.mnc = *PLMNParamList.paramarray[I][GNB_MOBILE_NETWORK_CODE_IDX].uptr;
+ e1Setup->plmn[I].id.mnc_digit_length = *PLMNParamList.paramarray[I][GNB_MNC_DIGIT_LENGTH].uptr;
+
+ char snssaistr[MAX_OPTNAME_SIZE*2 + 8];
+ sprintf(snssaistr, "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_PLMN_LIST, I);
+ paramlist_def_t SNSSAIParamList = {GNB_CONFIG_STRING_SNSSAI_LIST, NULL, 0};
+ paramdef_t SNSSAIParams[] = GNBSNSSAIPARAMS_DESC;
+ config_getlist(&SNSSAIParamList, SNSSAIParams, sizeof(SNSSAIParams)/sizeof(paramdef_t), snssaistr);
+ e1Setup->plmn[I].supported_slices = SNSSAIParamList.numelt;
+ e1Setup->plmn[I].slice = calloc(SNSSAIParamList.numelt, sizeof(*e1Setup->plmn[I].slice));
+ AssertFatal(e1Setup->plmn[I].slice != NULL, "out of memory\n");
+ for (int s = 0; s < SNSSAIParamList.numelt; ++s) {
+ e1ap_nssai_t *slice = &e1Setup->plmn[I].slice[s];
+ slice->sst = *SNSSAIParamList.paramarray[s][GNB_SLICE_SERVICE_TYPE_IDX].uptr;
+ slice->sd = *SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr;
+ }
}
- e1Setup->remotePortF1U = *(GNBParamList.paramarray[0][GNB_REMOTE_S_PORTD_IDX].uptr);
- e1Setup->localAddressF1U = strdup(*(GNBParamList.paramarray[0][GNB_LOCAL_S_ADDRESS_IDX].strptr));
- e1Setup->localPortF1U = *(GNBParamList.paramarray[0][GNB_LOCAL_S_PORTD_IDX].uptr);
- get_NGU_S1U_addr(&e1Setup->localAddressN3, &e1Setup->localPortN3);
- e1Setup->remotePortN3 = e1Setup->localPortN3 ;
+ e1ap_net_config_t *e1ap_nc = &E1AP_REGISTER_REQ(msgConfig).net_config;
+ e1ap_nc->remotePortF1U = *(GNBParamList.paramarray[0][GNB_REMOTE_S_PORTD_IDX].uptr);
+ e1ap_nc->localAddressF1U = strdup(*(GNBParamList.paramarray[0][GNB_LOCAL_S_ADDRESS_IDX].strptr));
+ e1ap_nc->localPortF1U = *(GNBParamList.paramarray[0][GNB_LOCAL_S_PORTD_IDX].uptr);
+ get_NGU_S1U_addr(&e1ap_nc->localAddressN3, &e1ap_nc->localPortN3);
+ e1ap_nc->remotePortN3 = e1ap_nc->localPortN3 ;
if (separate_CUUP_process) {
paramlist_def_t GNBE1ParamList = {GNB_CONFIG_STRING_E1_PARAMETERS, NULL, 0};
paramdef_t GNBE1Params[] = GNBE1PARAMS_DESC;
config_getlist(&GNBE1ParamList, GNBE1Params, sizeofArray(GNBE1Params), aprefix);
paramdef_t *e1Parms = GNBE1ParamList.paramarray[0];
- strcpy(e1Setup->CUCP_e1_ip_address.ipv4_address, *(e1Parms[GNB_CONFIG_E1_IPV4_ADDRESS_CUCP].strptr));
- e1Setup->CUCP_e1_ip_address.ipv4 = 1;
- strcpy(e1Setup->CUUP_e1_ip_address.ipv4_address, *(e1Parms[GNB_CONFIG_E1_IPV4_ADDRESS_CUUP].strptr));
- e1Setup->CUUP_e1_ip_address.ipv4 = 1;
- e1Setup->cn_support = *e1Parms[GNB_CONFIG_E1_CN_SUPPORT].uptr;
+ strcpy(e1ap_nc->CUCP_e1_ip_address.ipv4_address, *(e1Parms[GNB_CONFIG_E1_IPV4_ADDRESS_CUCP].strptr));
+ e1ap_nc->CUCP_e1_ip_address.ipv4 = 1;
+ strcpy(e1ap_nc->CUUP_e1_ip_address.ipv4_address, *(e1Parms[GNB_CONFIG_E1_IPV4_ADDRESS_CUUP].strptr));
+ e1ap_nc->CUUP_e1_ip_address.ipv4 = 1;
}
}
return msgConfig;
diff --git a/openair2/ENB_APP/L1_paramdef.h b/openair2/ENB_APP/L1_paramdef.h
index 5e0ac8a43b..f6d83c33ee 100644
--- a/openair2/ENB_APP/L1_paramdef.h
+++ b/openair2/ENB_APP/L1_paramdef.h
@@ -19,8 +19,8 @@
* contact@openairinterface.org
*/
-/*! \file openair2/ENB_APP/L1_paramdef.f
- * \brief definition of configuration parameters for all eNodeB modules
+/*! \file L1_paramdef.h
+ * \brief definition of configuration parameters for all eNodeB modules
* \author Francois TABURET
* \date 2017
* \version 0.1
diff --git a/openair2/ENB_APP/MACRLC_paramdef.h b/openair2/ENB_APP/MACRLC_paramdef.h
index 298215c21a..3bd215c8df 100644
--- a/openair2/ENB_APP/MACRLC_paramdef.h
+++ b/openair2/ENB_APP/MACRLC_paramdef.h
@@ -19,8 +19,8 @@
* contact@openairinterface.org
*/
-/*! \file openair2/ENB_APP/MACRLC_paramdef.f
- * \brief definition of configuration parameters for all eNodeB modules
+/*! \file MACRLC_paramdef.h
+ * \brief definition of configuration parameters for all eNodeB modules
* \author Francois TABURET
* \date 2017
* \version 0.1
@@ -30,7 +30,6 @@
* \warning
*/
-
#ifndef __ENB_APP_MACRLC_PARAMDEF__H__
#define __ENB_APP_MACRLC_PARAMDEF__H__
diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c
index 2d47398d51..3d1f0b6aac 100644
--- a/openair2/F1AP/f1ap_cu_task.c
+++ b/openair2/F1AP/f1ap_cu_task.c
@@ -45,6 +45,7 @@ static instance_t cu_task_create_gtpu_instance(eth_params_t *IPaddrs) {
openAddr_t tmp= {0};
strncpy(tmp.originHost, IPaddrs->my_addr, sizeof(tmp.originHost)-1);
sprintf(tmp.originService, "%d", IPaddrs->my_portd);
+ sprintf(tmp.destinationService, "%d", IPaddrs->remote_portd);
return gtpv1Init(tmp);
}
diff --git a/openair2/F1AP/f1ap_ids.h b/openair2/F1AP/f1ap_ids.h
index 96b146f6ba..60d35de737 100644
--- a/openair2/F1AP/f1ap_ids.h
+++ b/openair2/F1AP/f1ap_ids.h
@@ -27,10 +27,13 @@
#include
#include
+#include
+#include
+#include
typedef struct f1_ue_data_t {
uint32_t secondary_ue;
- /* can be extended with F1-specific data also relevant for monolithic */
+ sctp_assoc_t e1_assoc_id;
} f1_ue_data_t;
void cu_init_f1_ue_data(void);
diff --git a/openair2/GNB_APP/L1_nr_paramdef.h b/openair2/GNB_APP/L1_nr_paramdef.h
index 933039cd16..dcd734847d 100644
--- a/openair2/GNB_APP/L1_nr_paramdef.h
+++ b/openair2/GNB_APP/L1_nr_paramdef.h
@@ -19,8 +19,8 @@
* contact@openairinterface.org
*/
-/*! \file openair2/GNB_APP/L1_nr_paramdef.f
- * \brief definition of configuration parameters for all eNodeB modules
+/*! \file L1_nr_paramdef.h
+ * \brief definition of configuration parameters for all eNodeB modules
* \author Francois TABURET, WEI-TAI CHEN
* \date 2018
* \version 0.1
diff --git a/openair2/GNB_APP/MACRLC_nr_paramdef.h b/openair2/GNB_APP/MACRLC_nr_paramdef.h
index 5d69fbc6f2..5d8dbf9239 100644
--- a/openair2/GNB_APP/MACRLC_nr_paramdef.h
+++ b/openair2/GNB_APP/MACRLC_nr_paramdef.h
@@ -19,8 +19,8 @@
* contact@openairinterface.org
*/
-/*! \file openair2/GNB_APP/MACRLC_nr_paramdef.f
- * \brief definition of configuration parameters for all gNodeB modules
+/*! \file MACRLC_nr_paramdef.h
+ * \brief definition of configuration parameters for all gNodeB modules
* \author Francois TABURET, WEI-TAI CHEN
* \date 2018
* \version 0.1
@@ -30,7 +30,6 @@
* \warning
*/
-
#ifndef __GNB_APP_MACRLC_NR_PARAMDEF__H__
#define __GNB_APP_MACRLC_NR_PARAMDEF__H__
diff --git a/openair2/GNB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c
index cd701f01f5..74a8a997bd 100644
--- a/openair2/GNB_APP/gnb_app.c
+++ b/openair2/GNB_APP/gnb_app.c
@@ -147,10 +147,10 @@ void *gNB_app_task(void *args_p)
if (itti_create_task(TASK_CUCP_E1, E1AP_CUCP_task, NULL) < 0)
AssertFatal(false, "Create task for E1AP CP failed\n");
MessageDef *msg = RCconfig_NR_CU_E1(true);
- if (msg)
- itti_send_msg_to_task(TASK_CUCP_E1, 0, msg);
- else
- AssertFatal(false, "Send inti to task for E1AP CP failed\n");
+ AssertFatal(msg != NULL, "Send inti to task for E1AP CP failed\n");
+ // this sends the E1AP_REGISTER_REQ to CU-CP so it sets up the socket
+ // it does NOT use the E1AP part
+ itti_send_msg_to_task(TASK_CUCP_E1, 0, msg);
}
if (node_type == ngran_gNB_CUUP) {
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index e190b21748..2368e5ab6b 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -970,16 +970,40 @@ static NR_ServingCellConfigCommon_t *get_scc_config(int minRXTXTIME)
fix_scc(scc, ssb_bitmap);
}
nr_rrc_config_ul_tda(scc, minRXTXTIME);
+
+ // the gNB uses the servingCellConfigCommon everywhere, even when it should use the servingCellConfigCommonSIB.
+ // previously (before this commit), the following fields were indirectly populated through get_SIB1_NR().
+ // since this might lead to memory problems (e.g., double frees), it has been moved here.
+ // note that the "right solution" would be to not populate the servingCellConfigCommon here, and use
+ // an "abstraction struct" that contains the corresponding values, from which SCC/SIB1/... is generated.
+ NR_PDCCH_ConfigCommon_t *pcc = scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon->choice.setup;
+ AssertFatal(pcc != NULL && pcc->commonSearchSpaceList == NULL, "memory leak\n");
+ pcc->commonSearchSpaceList = calloc_or_fail(1, sizeof(*pcc->commonSearchSpaceList));
+
+ NR_SearchSpace_t *ss1 = rrc_searchspace_config(true, 1, 0);
+ asn1cSeqAdd(&pcc->commonSearchSpaceList->list, ss1);
+ NR_SearchSpace_t *ss2 = rrc_searchspace_config(true, 2, 0);
+ asn1cSeqAdd(&pcc->commonSearchSpaceList->list, ss2);
+ NR_SearchSpace_t *ss3 = rrc_searchspace_config(true, 3, 0);
+ asn1cSeqAdd(&pcc->commonSearchSpaceList->list, ss3);
+
+ asn1cCallocOne(pcc->searchSpaceSIB1, 0);
+ asn1cCallocOne(pcc->ra_SearchSpace, 1);
+ asn1cCallocOne(pcc->pagingSearchSpace, 2);
+ asn1cCallocOne(pcc->searchSpaceOtherSystemInformation, 3);
+
return scc;
}
static NR_ServingCellConfig_t *get_scd_config(void)
{
- char aprefix[MAX_OPTNAME_SIZE*2 + 8];
NR_ServingCellConfig_t *scd = calloc(1, sizeof(*scd));
prepare_scd(scd);
paramdef_t SCDsParams[] = SCDPARAMS_DESC(scd);
paramlist_def_t SCDsParamList = {GNB_CONFIG_STRING_SERVINGCELLCONFIGDEDICATED, NULL, 0};
+
+ char aprefix[MAX_OPTNAME_SIZE * 2 + 8];
+ snprintf(aprefix, sizeof(aprefix), "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0);
config_getlist(&SCDsParamList, NULL, 0, aprefix);
if (SCDsParamList.numelt > 0) {
sprintf(aprefix, "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_SERVINGCELLCONFIGDEDICATED, 0);
@@ -1523,7 +1547,7 @@ void RCconfig_NRRRC(gNB_RRC_INST *rrc)
char aprefix[MAX_OPTNAME_SIZE*2 + 8];
sprintf(aprefix,"%s.[%u].%s",GNB_CONFIG_STRING_GNB_LIST,i,GNB_CONFIG_STRING_SCTP_CONFIG);
config_get(SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
- rrc->node_id = *(GNBParamList.paramarray[0][GNB_GNB_ID_IDX].uptr);
+ rrc->node_id = gnb_id;
LOG_I(GNB_APP,"F1AP: gNB_CU_id[%d] %d\n",k,rrc->node_id);
rrc->node_name = strdup(*(GNBParamList.paramarray[0][GNB_GNB_NAME_IDX].strptr));
LOG_I(GNB_APP,"F1AP: gNB_CU_name[%d] %s\n",k,rrc->node_name);
@@ -1541,7 +1565,6 @@ void RCconfig_NRRRC(gNB_RRC_INST *rrc)
rrc->nr_cellid = (uint64_t)*(GNBParamList.paramarray[i][GNB_NRCELLID_IDX].u64ptr);
- rrc->um_on_default_drb = *(GNBParamList.paramarray[i][GNB_UMONDEFAULTDRB_IDX].uptr);
if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_mac") == 0) {
} else if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "cudu") == 0) {
@@ -1575,7 +1598,6 @@ void RCconfig_NRRRC(gNB_RRC_INST *rrc)
for (int I = 0; I < sizeof(PLMNParams) / sizeof(paramdef_t); ++I)
PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]);
- nrrrc_config.cell_identity = gnb_id;
nrrrc_config.tac = *GNBParamList.paramarray[i][GNB_TRACKING_AREA_CODE_IDX].uptr;
AssertFatal(!GNBParamList.paramarray[i][GNB_MOBILE_COUNTRY_CODE_IDX_OLD].strptr
&& !GNBParamList.paramarray[i][GNB_MOBILE_NETWORK_CODE_IDX_OLD].strptr,
@@ -1606,6 +1628,7 @@ void RCconfig_NRRRC(gNB_RRC_INST *rrc)
nrrrc_config.enable_sdap = *GNBParamList.paramarray[i][GNB_ENABLE_SDAP_IDX].iptr;
LOG_I(GNB_APP, "SDAP layer is %s\n", nrrrc_config.enable_sdap ? "enabled" : "disabled");
nrrrc_config.drbs = *GNBParamList.paramarray[i][GNB_DRBS].iptr;
+ nrrrc_config.um_on_default_drb = *(GNBParamList.paramarray[i][GNB_UMONDEFAULTDRB_IDX].uptr);
LOG_I(GNB_APP, "Data Radio Bearer count %d\n", nrrrc_config.drbs);
}//
diff --git a/openair2/GNB_APP/gnb_paramdef.h b/openair2/GNB_APP/gnb_paramdef.h
index d59ecb9eb3..dac12ce70e 100644
--- a/openair2/GNB_APP/gnb_paramdef.h
+++ b/openair2/GNB_APP/gnb_paramdef.h
@@ -19,8 +19,8 @@
* contact@openairinterface.org
*/
-/*! \file openair2/GNB_APP/gnb_paramdef.f
- * \brief definition of configuration parameters for all gNodeB modules
+/*! \file gnb_paramdef.h
+ * \brief definition of configuration parameters for all gNodeB modules
* \author Francois TABURET, WEI-TAI CHEN
* \date 2018
* \version 0.1
@@ -161,7 +161,7 @@ typedef enum {
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, .u64ptr=NULL,.defint64val=1, TYPE_UINT64, 0}, \
{GNB_CONFIG_STRING_MINRXTXTIME, NULL, 0, .iptr=NULL, .defintval=2, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, .strptr=NULL,.defstrval="", TYPE_STRING, 0}, \
-{GNB_CONFIG_STRING_UMONDEFAULTDRB, NULL, 0, .uptr=NULL, .defuintval=0, TYPE_UINT, 0}, \
+{GNB_CONFIG_STRING_UMONDEFAULTDRB, NULL, PARAMFLAG_BOOL, .uptr=NULL, .defuintval=0, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_FORCE256QAMOFF, GNB_CONFIG_HLP_FORCE256QAMOFF, PARAMFLAG_BOOL, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_ENABLE_SDAP, GNB_CONFIG_HLP_STRING_ENABLE_SDAP, PARAMFLAG_BOOL,.iptr=NULL, .defintval=0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_DRBS, GNB_CONFIG_HLP_STRING_DRBS, 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
@@ -376,19 +376,16 @@ typedef enum {
#define GNB_CONFIG_E1_CU_TYPE_IDX 0
#define GNB_CONFIG_E1_IPV4_ADDRESS_CUCP 1
#define GNB_CONFIG_E1_IPV4_ADDRESS_CUUP 2
-#define GNB_CONFIG_E1_CN_SUPPORT 3
#define GNB_CONFIG_STRING_E1_CU_TYPE "type"
#define GNB_CONFIG_STRING_E1_IPV4_ADDRESS_CUCP "ipv4_cucp"
#define GNB_CONFIG_STRING_E1_IPV4_ADDRESS_CUUP "ipv4_cuup"
-#define GNB_CONFIG_STRING_E1_CN_SUPPORT "cn_support"
// clang-format off
#define GNBE1PARAMS_DESC { \
{GNB_CONFIG_STRING_E1_CU_TYPE, NULL, 0, .strptr=NULL, .defstrval=NULL, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_E1_IPV4_ADDRESS_CUCP, NULL, 0, .strptr=NULL, .defstrval=NULL, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_E1_IPV4_ADDRESS_CUUP, NULL, 0, .strptr=NULL, .defstrval=NULL, TYPE_STRING, 0}, \
- {GNB_CONFIG_STRING_E1_CN_SUPPORT, NULL, 0, .uptr =NULL, .defintval=1L, TYPE_UINT, 0} \
}
// clang-format on
/* L1 configuration section names */
diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c
index d23dc23ebf..b4d1b307b2 100644
--- a/openair2/LAYER2/MAC/config.c
+++ b/openair2/LAYER2/MAC/config.c
@@ -24,7 +24,7 @@
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
* \version 0.1
- * \email: navid.nikaein@eurecom.fr
+ * \email navid.nikaein@eurecom.fr
* @ingroup _mac
*/
diff --git a/openair2/LAYER2/MAC/defs_NB_IoT.h b/openair2/LAYER2/MAC/defs_NB_IoT.h
index a0edf9374e..92e267324e 100644
--- a/openair2/LAYER2/MAC/defs_NB_IoT.h
+++ b/openair2/LAYER2/MAC/defs_NB_IoT.h
@@ -1,9 +1,9 @@
-/*! \file defs_NB_IoT.c
+/*! \file defs_NB_IoT.h
* \brief MAC layer structures
* \author NTUST BMW Lab./
* \date 2017
- * \email:
+ * \email:
* \version 1.0
*
*/
diff --git a/openair2/LAYER2/MAC/l1_helpers.c b/openair2/LAYER2/MAC/l1_helpers.c
index 9b26413cb1..e7cd775dcd 100644
--- a/openair2/LAYER2/MAC/l1_helpers.c
+++ b/openair2/LAYER2/MAC/l1_helpers.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file l1_helper.c
+/*! \file l1_helpers.c
* \brief phy helper function
* \author Navid Nikaein, Raymond Knopp
* \date 2012 - 2014
diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h
index 702d0d6f56..3de061b07e 100644
--- a/openair2/LAYER2/MAC/mac.h
+++ b/openair2/LAYER2/MAC/mac.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file LAYER2/MAC/defs.h
+/*! \file mac.h
* \brief MAC data structures, constant, and function prototype
* \author Navid Nikaein and Raymond Knopp
* \date 2011
@@ -32,7 +32,7 @@
* @{
*/
-/*@}*/
+/**@}*/
#ifndef __LAYER2_MAC_DEFS_H__
#define __LAYER2_MAC_DEFS_H__
@@ -139,7 +139,7 @@
#define MIN_CQI_VALUE 0
/*!\brief maximum value for channel quality indicator */
#define MAX_CQI_VALUE 15
-/*!\briefmaximum number of supported bandwidth (1.4, 5, 10, 20 MHz) */
+/*!\brief maximum number of supported bandwidth (1.4, 5, 10, 20 MHz) */
#define MAX_SUPPORTED_BW 4
/*!\brief CQI values range from 1 to 15 (4 bits) */
#define CQI_VALUE_RANGE 16
@@ -467,7 +467,6 @@ typedef struct {
#define SHORT_BSR 29
/*!\brief LCID of long BSR for ULSCH */
#define LONG_BSR 30
-/*!\bitmaps for BSR Triggers */
#define BSR_TRIGGER_NONE (0) /* No BSR Trigger */
#define BSR_TRIGGER_REGULAR (1) /* For Regular and ReTxBSR Expiry Triggers */
#define BSR_TRIGGER_PERIODIC (2) /* For BSR Periodic Timer Expiry Trigger */
@@ -1680,5 +1679,5 @@ typedef struct {
#include "mac_proto.h"
-/*@}*/
+/**@}*/
#endif /*__LAYER2_MAC_DEFS_H__ */
diff --git a/openair2/LAYER2/MAC/mac_extern.h b/openair2/LAYER2/MAC/mac_extern.h
index e3cc8f3392..16ced80f48 100644
--- a/openair2/LAYER2/MAC/mac_extern.h
+++ b/openair2/LAYER2/MAC/mac_extern.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file extern.h
+/*! \file mac_extern.h
* \brief mac externs
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
diff --git a/openair2/LAYER2/MAC/mac_proto.h b/openair2/LAYER2/MAC/mac_proto.h
index 8a074b5ea8..1a8a1f98bc 100644
--- a/openair2/LAYER2/MAC/mac_proto.h
+++ b/openair2/LAYER2/MAC/mac_proto.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file LAYER2/MAC/proto.h
+/*! \file mac_proto.h
* \brief MAC functions prototypes for eNB and UE
* \author Navid Nikaein and Raymond Knopp
* \date 2010 - 2014
@@ -35,9 +35,9 @@
/** \fn void schedule_fembms_mib(module_id_t module_idP,frame_t frameP,sub_frame_t subframe);
\brief MIB scheduling for PBCH. This function requests the MIB from RRC and provides it to L1.
-@param Mod_id Instance ID of eNB
-@param frame Frame index
-@param subframe Subframe number on which to act
+@param module_idP Instance ID of eNB
+@param frameP Frame index
+@param subframeP Subframe number on which to act
*/
@@ -50,8 +50,8 @@ void schedule_fembms_mib(module_id_t module_idP,
/** \fn void schedule_mib(module_id_t module_idP,frame_t frameP,sub_frame_t subframe);
\brief MIB scheduling for PBCH. This function requests the MIB from RRC and provides it to L1.
-@param Mod_id Instance ID of eNB
-@param frame Frame index
+@param module_idP Instance ID of eNB
+@param frameP Frame index
@param subframe Subframe number on which to act
*/
@@ -59,81 +59,84 @@ void schedule_fembms_mib(module_id_t module_idP,
void schedule_mib(module_id_t module_idP,
frame_t frameP, sub_frame_t subframeP);
-/** \fn void schedule_RA(module_id_t module_idP,frame_t frameP,sub_frame_t subframe);
-\brief First stage of Random-Access Scheduling. Loops over the ras and checks if RAR, Msg3 or its retransmission are to be scheduled in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A)
-for the message.
-@param Mod_id Instance ID of eNB
-@param frame Frame index
+/** \fn void schedule_RA
+\brief First stage of Random-Access Scheduling. Loops over the ras and checks if RAR, Msg3 or its retransmission are to be scheduled
+in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the
+appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A) for the message.
+@param module_idP Instance ID of eNB
+@param frameP Frame index
@param subframe Subframe number on which to act
*/
-
void schedule_RA(module_id_t module_idP, frame_t frameP,
sub_frame_t subframe);
-/** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
-@param Mod_id Instance ID of eNB
-@param frame Frame index
-@param subframe Subframe number on which to act
+/** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a
+function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
+@param module_idP Instance ID of eNB
+@param frameP Frame index
+@param subframeP Subframe number on which to act
*/
void schedule_SI(module_id_t module_idP, frame_t frameP,
sub_frame_t subframeP);
-/** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
-@param Mod_id Instance ID of eNB
-@param frame Frame index
-@param subframe Subframe number on which to act
+/** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a
+function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
+@param module_idP Instance ID of eNB
+@param frameP Frame index
+@param subframeP Subframe number on which to act
*/
void schedule_SI_MBMS(module_id_t module_idP, frame_t frameP,
sub_frame_t subframeP);
-
-/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0;
-@param Mod_id Instance ID of eNB
-@param frame Frame index
+/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs
+from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0;
+@param module_idP Instance ID of eNB
+@param CC_id carrier
+@param frameP Frame index
@param subframe Subframe number on which to act
*/
int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sub_frame_t subframe);
-/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0;
-@param Mod_id Instance ID of eNB
-@param frame Frame index
+/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs
+from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0;
+@param module_idP Instance ID of eNB
+@param CC_id carrier index
+@param frameP Frame index
@param subframe Subframe number on which to act
*/
int schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_frame_t subframe);
-
/** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
+@param CC_id carrier index
@param mbsfn_sync_area index of mbsfn sync area
-@param[out] index of sf pattern
*/
int8_t get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id,
uint8_t mbsfn_sync_area);
/** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param mbsfn_sync_area index of mbsfn sync area
@param eNB_index index of eNB
-@param[out] index of sf pattern
*/
int8_t ue_get_mbsfn_sf_alloction(module_id_t module_idP,
uint8_t mbsfn_sync_area,
unsigned char eNB_index);
/** \brief top ULSCH Scheduling for TDD (config 1-6).
-@param Mod_id Instance ID of eNB
-@param frame Frame index
+@param module_idP Instance ID of eNB
+@param frameP Frame index
@param subframe Subframe number on which to act
*/
void schedule_ulsch(module_id_t module_idP, frame_t frameP,
sub_frame_t subframe);
/** \brief ULSCH Scheduling per RNTI
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param CC_id The component carrier to schedule
-@param frame Frame index
+@param frameP Frame index
@param subframe Subframe number on which to act
@param sched_subframe Subframe number where PUSCH is transmitted (for DAI lookup)
*/
@@ -147,9 +150,12 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
unsigned char sched_subframeP,
int *emtc_active);
-/** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of available PRBS), builds the MAC header (timing advance sent by default) and copies
-@param Mod_id Instance ID of eNB
-@param frame Frame index
+/** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate
+harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the
+same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of
+available PRBS), builds the MAC header (timing advance sent by default) and copies
+@param module_idP Instance ID of eNB
+@param frameP Frame index
@param subframe Subframe on which to act
@param mbsfn_flag Indicates that MCH/MCCH is in this subframe
@@ -167,21 +173,22 @@ void schedule_ue_spec_br(module_id_t module_idP,
void schedule_ue_spec_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,int *mbsfn_flag);
void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP);
-
/** \brief Function for UE/PHY to compute PUSCH transmit power in power-control procedure.
- @param Mod_id Module id of UE
+ @param module_idP Module id of UE
+ @param CC_id carrier component id of UE
@returns Po_NOMINAL_PUSCH (PREAMBLE_RECEIVED_TARGET_POWER+DELTA_PREAMBLE
*/
int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP, uint8_t CC_id);
/** \brief Function to compute DELTA_PREAMBLE from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy)
- @param Mod_id Module id of UE
+ @param module_idP Module id of UE
+ @param CC_id carrier component id of UE
@returns DELTA_PREAMBLE
*/
int8_t get_DELTA_PREAMBLE(module_id_t module_idP, int CC_id);
/** \brief Function for compute deltaP_rampup from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy)
- @param Mod_id Module id of UE
+ @param module_idP Module id of UE
@param CC_id carrier component id of UE
@returns deltaP_rampup
*/
@@ -202,7 +209,7 @@ int mac_top_init(int eMBMS_active, char *uecap_xer,
void mac_top_init_eNB(void);
-void mac_init_cell_params(int Mod_idP, int CC_idP);
+void mac_init_cell_params(int module_idPP, int CC_idP);
char layer2_init_UE(module_id_t module_idP);
@@ -218,14 +225,13 @@ void clear_nfapi_information(eNB_MAC_INST *eNB, int CC_idP,
// eNB functions
/* \brief This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param slice_idxP Slice instance index for the slice in which scheduling happens
@param frame Index of frame
@param subframe Index of current subframe
@param N_RBS Number of resource block groups
*/
-
void dlsch_scheduler_pre_processor(module_id_t module_idP,
int CC_id,
frame_t frameP,
@@ -233,14 +239,14 @@ void dlsch_scheduler_pre_processor(module_id_t module_idP,
/* \brief Function to trigger the eNB scheduling procedure. It is called by PHY at the beginning of each subframe, \f$n$\f
and generates all DLSCH allocations for subframe \f$n\f$ and ULSCH allocations for subframe \f$n+k$\f.
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param subframe Index of current subframe
@param calibration_flag Flag to indicate that eNB scheduler should schedule TDD auto-calibration PUSCH.
*/
void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP); //, int calibration_flag);
/* \brief Function to indicate a received preamble on PRACH. It initiates the RA procedure.
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param preamble_index index of the received RA request
@param timing_offset Offset in samples of the received PRACH w.r.t. eNB timing. This is used to
@param rnti RA rnti corresponding to this PRACH preamble
@@ -252,8 +258,9 @@ void initiate_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
uint8_t rach_resource_type
);
-/* \brief Function in eNB to fill RAR pdu when requested by PHY. This provides a single RAR SDU for the moment and returns the t-CRNTI.
-@param Mod_id Instance ID of eNB
+/* \brief Function in eNB to fill RAR pdu when requested by PHY. This provides a single RAR SDU for the moment and returns the
+t-CRNTI.
+@param module_idP Instance ID of eNB
@param dlsch_buffer Pointer to DLSCH input buffer
@param N_RB_UL Number of UL resource blocks
@returns t_CRNTI
@@ -274,9 +281,8 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
uint8_t *const dlsch_buffer,
const uint8_t ce_level);
-
/* \brief Function to indicate a failed RA response. It removes all temporary variables related to the initial connection of a UE
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param preamble_index index of the received RA request.
*/
void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
@@ -285,7 +291,7 @@ void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
/* \brief Function used by PHY to inform MAC that an uplink is scheduled
for Msg3 in given subframe. This is used so that the MAC
scheduler marks as busy the RBs used by the Msg3.
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param CC_id CC ID of eNB
@param frame current frame
@param subframe current subframe
@@ -296,14 +302,10 @@ void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
void clear_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP);
-void set_msg3_subframe(module_id_t Mod_id,
- int CC_id,
- int frame,
- int subframe,
- int rnti, int Msg3_frame, int Msg3_subframe);
+void set_msg3_subframe(module_id_t module_idP, int CC_id, int frame, int subframe, int rnti, int Msg3_frame, int Msg3_subframe);
/* \brief Function to indicate a received SDU on ULSCH.
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param CC_id Component carrier index
@param rnti RNTI of UE transmitting the SDU
@param sdu Pointer to received SDU
@@ -320,9 +322,8 @@ void rx_sdu(const module_id_t enb_mod_idP,
const uint16_t sdu_lenP,
const uint16_t timing_advance, const uint8_t ul_cqi);
-
/* \brief Function to indicate a scheduled schduling request (SR) was received by eNB.
-@param Mod_idP Instance ID of eNB
+@param module_idPP Instance ID of eNB
@param CC_idP CC_id of received SR
@param frameP of received SR
@param subframeP Index of subframe where SR was received
@@ -333,17 +334,16 @@ void SR_indication(module_id_t module_idP, int CC_id, frame_t frameP,
sub_frame_t subframe, rnti_t rnti, uint8_t ul_cqi);
/* \brief Function to indicate a UL failure was detected by eNB PHY.
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param CC_id Component carrier
@param frameP Frame index
@param rnti RNTI of UE transmitting the SR
@param subframe Index of subframe where SR was received
*/
-void UL_failure_indication(module_id_t Mod_id, int CC_id, frame_t frameP,
- rnti_t rnti, sub_frame_t subframe);
+void UL_failure_indication(module_id_t module_idP, int CC_id, frame_t frameP, rnti_t rnti, sub_frame_t subframe);
/* \brief Function to indicate an HARQ ACK/NAK.
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param CC_id Component carrier
@param frameP Frame index
@param subframeP subframe index
@@ -354,7 +354,7 @@ void harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
nfapi_harq_indication_pdu_t *harq_pdu);
/* \brief Function to indicate a received CQI pdu
-@param Mod_id Instance ID of eNB
+@param module_idP Instance ID of eNB
@param CC_id Component carrier
@param frameP Frame index
@param subframeP subframe index
@@ -369,19 +369,15 @@ void cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
uint8_t *get_dlsch_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
rnti_t rnti, uint8_t TBindex);
-/* \brief Function to retrieve MCH transport block and MCS used for MCH in this MBSFN subframe. Returns null if no MCH is to be transmitted
-@param Mod_id Instance ID of eNB
+/* \brief Function to retrieve MCH transport block and MCS used for MCH in this MBSFN subframe. Returns null if no MCH is to be
+transmitted
+@param module_idP Instance ID of eNB
@param frame Index of frame
@param subframe Index of current subframe
@param mcs Pointer to mcs used by PHY (to be filled by MAC)
@returns Pointer to MCH transport block and mcs for subframe
*/
-MCH_PDU *get_mch_sdu(module_id_t Mod_id, int CC_id, frame_t frame,
- sub_frame_t subframe);
-
-
-
-
+MCH_PDU *get_mch_sdu(module_id_t module_idP, int CC_id, frame_t frame, sub_frame_t subframe);
void ue_mac_reset(module_id_t module_idP, uint8_t eNB_index);
void ue_init_mac(module_id_t module_idP);
@@ -431,11 +427,11 @@ void set_ue_dai(sub_frame_t subframeP,
uint8_t CC_id, uint8_t tdd_config, UE_info_t *UE_info);
uint8_t frame_subframe2_dl_harq_pid(LTE_TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP);
-/** \brief First stage of PCH Scheduling. Gets a PCH SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
-@param Mod_id Instance ID of eNB
-@param frame Frame index
-@param subframe Subframe number on which to act
-@param paging_ue_index
+/** \brief First stage of PCH Scheduling. Gets a PCH SDU from RRC if available and computes the MCS required to transport it as a
+function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
+@param module_idP Instance ID of eNB
+@param frameP Frame index
+@param subframeP Subframe number on which to act
*/
void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP);
@@ -444,7 +440,8 @@ uint8_t find_num_active_UEs_in_cbagroup(module_id_t module_idP,
uint8_t UE_is_to_be_scheduled(module_id_t module_idP, int CC_id,
uint8_t UE_id);
/** \brief Round-robin scheduler for ULSCH traffic.
-@param Mod_id Instance ID for eNB
+@param module_idP Instance ID for eNB
+@param UE_id
@param subframe Subframe number on which to act
@returns UE index that is to be scheduled if needed/room
*/
@@ -463,13 +460,13 @@ uint32_t allocate_prbs(int UE_id, uint8_t nb_rb, int N_RB_DL,
/* \fn uint32_t req_new_ulsch(module_id_t module_idP)
\brief check for a new transmission in any drb
-@param Mod_id Instance id of UE in machine
+@param module_idP Instance id of UE in machine
@returns 1 for new transmission, 0 for none
*/
uint32_t req_new_ulsch(module_id_t module_idP);
/* \brief Get SR payload (0,1) from UE MAC
-@param Mod_id Instance id of UE in machine
+@param module_idP Instance id of UE in machine
@param CC_id Component Carrier index
@param eNB_id Index of eNB that UE is attached to
@param rnti C_RNTI of UE
@@ -508,7 +505,7 @@ void ue_send_sl_sdu(module_id_t module_idP,
);
/* \brief Called by PHY to transfer MCH transport block to ue MAC.
-@param Mod_id Index of module instance
+@param module_idP Index of module instance
@param frame Frame index
@param sdu Pointer to transport block
@param sdu_len Length of transport block
@@ -520,24 +517,34 @@ void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
uint8_t sync_area);
/*\brief Function to check if UE PHY needs to decode MCH for MAC.
-@param Mod_id Index of protocol instance
+@param module_idP Index of protocol instance
@param frame Index of frame
@param subframe Index of subframe
@param eNB_index index of eNB for this MCH
@param[out] sync_area return the sync area
@param[out] mcch_active flag indicating whether this MCCH is active in this SF
*/
-int ue_query_mch(module_id_t Mod_id, uint8_t CC_id, uint32_t frame,
- sub_frame_t subframe, uint8_t eNB_index,
- uint8_t *sync_area, uint8_t *mcch_active);
+int ue_query_mch(module_id_t module_idP,
+ uint8_t CC_id,
+ uint32_t frame,
+ sub_frame_t subframe,
+ uint8_t eNB_index,
+ uint8_t *sync_area,
+ uint8_t *mcch_active);
-int ue_query_mch_fembms(module_id_t Mod_id, uint8_t CC_id, uint32_t frame,
- sub_frame_t subframe, uint8_t eNB_index,
- uint8_t * sync_area, uint8_t * mcch_active);
+int ue_query_mch_fembms(module_id_t module_idP,
+ uint8_t CC_id,
+ uint32_t frame,
+ sub_frame_t subframe,
+ uint8_t eNB_index,
+ uint8_t *sync_area,
+ uint8_t *mcch_active);
-
-/* \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3 SDUs and generates header and forms the complete MAC SDU.
-@param Mod_id Instance id of UE in machine
+/* \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and
+DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and
+DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3
+SDUs and generates header and forms the complete MAC SDU.
+@param module_idP Instance id of UE in machine
@param eNB_id Index of eNB that UE is attached to
@param rnti C_RNTI of UE
@param subframe subframe number
@@ -548,7 +555,7 @@ void ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
uint8_t *access_mode);
/* \brief Called by PHY to get sdu for PSBCH/SSS/PSS transmission.
-@param Mod_id Instance id of UE in machine
+@param module_idP Instance id of UE in machine
@param frame_tx TX frame index
@param subframe_tx TX subframe index
@returns pointer to SLSS_t descriptor
@@ -556,7 +563,7 @@ void ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
SLSS_t *ue_get_slss(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe);
/* \brief Called by PHY to get sdu for PSDCH transmission.
-@param Mod_id Instance id of UE in machine
+@param module_idP Instance id of UE in machine
@param frame_tx TX frame index
@param subframe_tx TX subframe index
@returns pointer to SLDCH_t descriptor
@@ -564,16 +571,19 @@ SLSS_t *ue_get_slss(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_
SLDCH_t *ue_get_sldch(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe);
/* \brief Called by PHY to get sdu for PSSCH transmission.
-@param Mod_id Instance id of UE in machine
+@param module_idP Instance id of UE in machine
@param frame_tx TX frame index
@param subframe_tx TX subframe index
@returns pointer to SLSCH_t descriptor
*/
SLSCH_t *ue_get_slsch(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe);
-/* \brief Function called by PHY to retrieve information to be transmitted using the RA procedure. If the UE is not in PUSCH mode for a particular eNB index, this is assumed to be an Msg3 and MAC attempts to retrieves the CCCH message from RRC. If the UE is in PUSCH mode for a particular eNB index and PUCCH format 0 (Scheduling Request) is not activated, the MAC may use this resource for random-access to transmit a BSR along with the C-RNTI control element (see 5.1.4 from 36.321)
-@param Mod_id Index of UE instance
-@param Mod_id Component Carrier Index
+/* \brief Function called by PHY to retrieve information to be transmitted using the RA procedure. If the UE is not in PUSCH mode
+for a particular eNB index, this is assumed to be an Msg3 and MAC attempts to retrieves the CCCH message from RRC. If the UE is in
+PUSCH mode for a particular eNB index and PUCCH format 0 (Scheduling Request) is not activated, the MAC may use this resource for
+random-access to transmit a BSR along with the C-RNTI control element (see 5.1.4 from 36.321)
+@param module_idP Index of UE instance
+@param module_idP Component Carrier Index
@param New_Msg3 Flag to indicate this call is for a new Msg3
@param subframe Index of subframe for PRACH transmission (0 ... 9)
@returns A pointer to a PRACH_RESOURCES_t */
@@ -581,8 +591,9 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP, int CC_id,
frame_t frameP, uint8_t new_Msg3,
sub_frame_t subframe);
-/* \brief Function called by PHY to process the received RAR. It checks that the preamble matches what was sent by the eNB and provides the timing advance and t-CRNTI.
-@param Mod_id Index of UE instance
+/* \brief Function called by PHY to process the received RAR. It checks that the preamble matches what was sent by the eNB and
+provides the timing advance and t-CRNTI.
+@param module_idP Index of UE instance
@param CC_id Index to a component carrier
@param frame Frame index
@param ra_rnti RA_RNTI value
@@ -653,10 +664,10 @@ uint8_t *parse_ulsch_header(uint8_t *mac_header,
int to_prb(int);
int to_rbg(int);
int mac_init(void);
-int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti, int harq_pid, uint8_t rach_resource_type);
-int rrc_mac_remove_ue(module_id_t Mod_id, rnti_t rntiP);
+int add_new_ue(module_id_t module_idP, int CC_id, rnti_t rnti, int harq_pid, uint8_t rach_resource_type);
+int rrc_mac_remove_ue(module_id_t module_idP, rnti_t rntiP);
-void store_dlsch_buffer(module_id_t Mod_id, int CC_id, frame_t frameP, sub_frame_t subframeP);
+void store_dlsch_buffer(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t subframeP);
int prev(UE_list_t *listP, int nodeP);
void add_ue_list(UE_list_t *listP, int UE_id);
@@ -680,7 +691,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
frame_t sched_frameP,
sub_frame_t sched_subframeP);
-int phy_stats_exist(module_id_t Mod_id, int rnti);
+int phy_stats_exist(module_id_t module_idP, int rnti);
/*! \fn UE_L2_state_t ue_scheduler(const module_id_t module_idP,const frame_t frameP, const sub_frame_t subframe, const lte_subframe_t direction,const uint8_t eNB_index)
\brief UE scheduler where all the ue background tasks are done. This function performs the following: 1) Trigger PDCP every 5ms 2) Call RRC for link status return to PHY3) Perform SR/BSR procedures for scheduling feedback 4) Perform PHR procedures.
@@ -701,37 +712,34 @@ UE_L2_STATE_t ue_scheduler(const module_id_t module_idP,
const lte_subframe_t direction,
const uint8_t eNB_index, const int CC_id);
-/*! \fn int cba_access(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, uint8_t eNB_index,uint16_t buflen);
+/*! \fn int cba_access
\brief determine whether to use cba resource to transmit or not
-\param[in] Mod_id instance of the UE
-\param[in] frame the frame number
+\param[in] module_idP instance of the UE
+\param[in] frameP the frame number
\param[in] subframe the subframe number
\param[in] eNB_index instance of eNB
-\param[out] access(1) or postpone (0)
*/
int cba_access(module_id_t module_idP, frame_t frameP,
sub_frame_t subframe, uint8_t eNB_index, uint16_t buflen);
/*! \fn BSR_SHORT * get_bsr_short(module_id_t module_idP, uint8_t bsr_len)
\brief get short bsr level
-\param[in] Mod_id instance of the UE
+\param[in] module_idP instance of the UE
\param[in] bsr_len indicator for no, short, or long bsr
-\param[out] bsr_s pointer to short bsr
*/
BSR_SHORT *get_bsr_short(module_id_t module_idP, uint8_t bsr_len);
/*! \fn BSR_LONG * get_bsr_long(module_id_t module_idP, uint8_t bsr_len)
\brief get long bsr level
-\param[in] Mod_id instance of the UE
+\param[in] module_idP instance of the UE
\param[in] bsr_len indicator for no, short, or long bsr
-\param[out] bsr_l pointer to long bsr
*/
BSR_LONG *get_bsr_long(module_id_t module_idP, uint8_t bsr_len);
/*! \fn bool update_bsr(module_id_t module_idP, frame_t frameP,sub_frame_t subframeP)
\brief get the rlc stats and update the bsr level for each lcid
-\param[in] Mod_id instance of the UE
-\param[in] frame Frame index
+\param[in] module_idP instance of the UE
+\param[in] frameP Frame index
*/
bool update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, eNB_index_t eNB_index);
@@ -745,22 +753,20 @@ bool update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, e
uint8_t locate_BsrIndexByBufferSize(const uint32_t *table, int size,
int value);
-
/*! \fn int get_sf_periodicBSRTimer(uint8_t periodicBSR_Timer)
\brief get the number of subframe from the periodic BSR timer configured by the higher layers
-\param[in] periodicBSR_Timer timer for periodic BSR
\return the number of subframe
*/
int get_sf_periodicBSRTimer(uint8_t bucketSize);
/*! \fn int get_ms_bucketsizeduration(uint8_t bucketSize)
\brief get the time in ms form the bucket size duration configured by the higher layer
-\param[in] bucketSize the bucket size duration
+\param[in] bucketsizeduration the bucket size duration
\return the time in ms
*/
int get_ms_bucketsizeduration(uint8_t bucketsizeduration);
-/*! \fn int get_sf_retxBSRTimer(uint8_t retxBSR_Timer)
+/*! \fn get_sf_retxBSRTimer
\brief get the number of subframe form the bucket size duration configured by the higher layer
\param[in] retxBSR_Timer timer for regular BSR
\return the time in sf
@@ -790,8 +796,9 @@ int get_db_dl_PathlossChange(uint8_t dl_PathlossChange);
/*! \fn uint8_t get_phr_mapping (module_id_t module_idP, int CC_id,uint8_t eNB_index)
\brief get phr mapping as described in 36.313
-\param[in] Mod_id index of eNB
+\param[in] module_idP index of eNB
\param[in] CC_id Component Carrier Index
+\param[in] eNB_index
\return phr mapping
*/
uint8_t get_phr_mapping(module_id_t module_idP, int CC_id,
@@ -799,22 +806,25 @@ uint8_t get_phr_mapping(module_id_t module_idP, int CC_id,
/*! \fn void update_phr (module_id_t module_idP)
\brief update/reset the phr timers
-\param[in] Mod_id index of eNB
+\param[in] module_idP index of eNB
\param[in] CC_id Component carrier index
\return void
*/
void update_phr(module_id_t module_idP, int CC_id);
/*! \brief Function to indicate Msg3 transmission/retransmission which initiates/reset Contention Resolution Timer
-\param[in] Mod_id Instance index of UE
+\param[in] module_idP Instance index of UE
+\param[in] CC_id carrier component id of UE
+\param[in] frameP
\param[in] eNB_id Index of eNB
*/
void Msg3_tx(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
uint8_t eNB_id);
-
/*! \brief Function to indicate the transmission of msg1/rach
-\param[in] Mod_id Instance index of UE
+\param[in] module_idP Instance index of UE
+\param[in] CC_id carrier component id of UE
+\param[in] frameP
\param[in] eNB_id Index of eNB
*/
@@ -873,15 +883,18 @@ int generate_dlsch_header(unsigned char *mac_header,
unsigned char short_padding,
unsigned short post_padding);
-/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages.
-@param Mod_id Instance ID of eNB
+/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI),
+RRCConnectionSetup and RRCConnectionReconfiguration messages.
+@param module_idP Instance ID of eNB
@param CC_id Component Carrier of the eNB
@param mib Pointer to MIB
@param radioResourceConfigCommon Structure from SIB2 for common radio parameters (if NULL keep existing configuration)
-@param physicalConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if NULL keep existing configuration)
+@param physicalConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if
+NULL keep existing configuration)
@param measObj Structure from RRCConnectionReconfiguration for UE measurement procedures
-@param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep existing configuration)
+@param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep
+existing configuration)
@param logicalChannelIdentity Logical channel identity index of corresponding logical channel config
@param logicalChannelConfig Pointer to logical channel configuration
@param measGapConfig Measurement Gap configuration for MAC (if NULL keep existing configuration)
@@ -943,14 +956,18 @@ typedef struct {
int rrc_mac_config_req_eNB(const module_id_t module_idP, const rrc_mac_config_req_eNB_t *);
-/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages.
-@param Mod_id Instance ID of ue
+/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI),
+RRCConnectionSetup and RRCConnectionReconfiguration messages.
+@param module_idP Instance ID of ue
@param CC_id Component Carrier of the ue
-@param eNB_id Index of eNB
+@param eNB_index Index of eNB
@param radioResourceConfigCommon Structure from SIB2 for common radio parameters (if NULL keep existing configuration)
-@param physcialConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if NULL keep existing configuration)
+@param physicalConfigDedicated Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated PHY parameters (if
+NULL keep existing configuration)
+@param sCellToAddMod_r10
@param measObj Structure from RRCConnectionReconfiguration for UE measurement procedures
-@param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep existing configuration)
+@param mac_MainConfig Structure from RRCConnectionSetup or RRCConnectionReconfiguration for dedicated MAC parameters (if NULL keep
+existing configuration)
@param logicalChannelIdentity Logical channel identity index of corresponding logical channel config
@param logicalChannelConfig Pointer to logical channel configuration
@param measGapConfig Measurement Gap configuration for MAC (if NULL keep existing configuration)
@@ -958,10 +975,19 @@ int rrc_mac_config_req_eNB(const module_id_t module_idP, const rrc_mac_config_re
@param mobilityControlInfo mobility control info received for Handover
@param SIwindowsize SI Windowsize from SIB1 (if NULL keep existing configuration)
@param SIperiod SI Period from SIB1 (if NULL keep existing configuration)
+@param ul_CarrierFreq
+@param ul_Bandwidth
+@param additionalSpectrumEmission
@param MBMS_Flag indicates MBMS transmission
@param mbsfn_SubframeConfigList pointer to mbsfn subframe configuration list from SIB2
@param mbsfn_AreaInfoList pointer to MBSFN Area Info list from SIB13
@param pmch_InfoList pointer to PMCH_InfoList from MBSFNAreaConfiguration Message (MCCH Message)
+@param config_action
+@param sourceL2Id
+@param destinationL2Id
+@param FeMBMS_Flag
+@param nonMBSFN_SubframeConfig
+@param mbsfn_AreaInfoList_fembms
*/
int rrc_mac_config_req_ue(module_id_t module_idP,
int CC_id,
@@ -1205,7 +1231,7 @@ void pre_scd_nb_rbs_required( module_id_t module_idP,
/* DRX Configuration */
/* Configure local DRX timers and thresholds in UE context, following the drx_configuration input */
-void eNB_Config_Local_DRX(instance_t Mod_id, rrc_mac_drx_config_req_t *rrc_mac_drx_config_req);
+void eNB_Config_Local_DRX(instance_t module_idP, rrc_mac_drx_config_req_t *rrc_mac_drx_config_req);
/* from here: prototypes to get rid of compilation warnings: doc to be written by function author */
uint8_t ul_subframe2_k_phich(COMMON_channels_t *cc, sub_frame_t ul_subframe);
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index d7fd5d23dd..20b4da7b55 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -19,8 +19,7 @@
* contact@openairinterface.org
*/
-
-/*! \file asn1_msg.c
+/*! \file ue_procedures.c
* \brief primitives to build the asn1 messages / primitives to build FeMBMS asn1 messages
* \author Raymond Knopp, Navid Nikaein and Javier Morgade
* \date 2011 / 2019
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
index 438e2082af..60c64ead12 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h
+++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
@@ -121,19 +121,20 @@ void fill_scheduled_response(nr_scheduled_response_t *scheduled_response,
void *phy_data);
/*! \fn int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP);
- \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3 SDUs and generates header and forms the complete MAC SDU.
-\param[in] Mod_id Instance id of UE in machine
-\param[in] frameP subframe number
-\param[in] slotP slot number
+ \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and
+DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and
+DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3
+SDUs and generates header and forms the complete MAC SDU. \param[in] module_idP Instance id of UE in machine \param[in] frameP
+subframe number \param[in] slotP slot number
*/
int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP);
-/*! \fn bool update_bsr(module_id_t module_idP, frame_t frameP, slot_t slotP, uint8_t gNB_index)
+/*! \fn nr_update_bsr
\brief get the rlc stats and update the bsr level for each lcid
-\param[in] Mod_id instance of the UE
+\param[in] module_idP instance of the UE
\param[in] frameP Frame index
-\param[in] slot slotP number
-\param[in] uint8_t gNB_index
+\param[in] slotP number
+\param[in] gNB_index
*/
bool nr_update_bsr(module_id_t module_idP, frame_t frameP, slot_t slotP, uint8_t gNB_index);
@@ -424,4 +425,3 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
uint16_t rnti,
const nr_dci_format_t dci_format);
#endif
-/** @}*/
diff --git a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
index b4ec1cb9eb..77c6fd6c8d 100644
--- a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+++ b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
@@ -96,7 +96,7 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
fill_nr_noS1_bearer_config(&rbconfig, &rlc_rbconfig);
// set up PDCP, RLC, MAC
- nr_pdcp_layer_init();
+ nr_pdcp_layer_init(false);
nr_pdcp_add_drbs(ENB_FLAG_NO, nr_ue_mac_inst->crnti, rbconfig->drb_ToAddModList, 0, NULL, NULL);
nr_rlc_add_drb(nr_ue_mac_inst->crnti, rbconfig->drb_ToAddModList->list.array[0]->drb_Identity, rlc_rbconfig);
struct NR_CellGroupConfig__rlc_BearerToAddModList rlc_toadd_list;
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index c5fbda77de..66c86ca4b9 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -893,7 +893,6 @@ static int nr_ue_process_dci_dl_11(module_id_t module_id,
fapi_nr_dl_config_request_t *dl_config = get_dl_config_request(mac, slot);
fapi_nr_dl_config_request_pdu_t *dl_conf_req = &dl_config->dl_config_list[dl_config->number_pdus];
- dl_conf_req->pdu_type = FAPI_NR_DL_CONFIG_TYPE_DLSCH;
dl_conf_req->dlsch_config_pdu.rnti = dci_ind->rnti;
fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu = &dl_conf_req->dlsch_config_pdu.dlsch_config_rel15;
@@ -1114,12 +1113,6 @@ static int nr_ue_process_dci_dl_11(module_id_t module_id,
dci_ind->N_CCE,
frame,
slot);
-
- dl_conf_req->pdu_type = FAPI_NR_DL_CONFIG_TYPE_DLSCH;
- LOG_D(MAC, "(nr_ue_procedures.c) pdu_type=%d\n\n", dl_conf_req->pdu_type);
-
- dl_config->number_pdus++; // The DCI configuration is valid, we add it in the list
-
// send the ack/nack slot number to phy to indicate tx thread to wait for DLSCH decoding
dlsch_pdu->k1_feedback = feedback_ti;
@@ -1175,7 +1168,8 @@ static int nr_ue_process_dci_dl_11(module_id_t module_id,
}
}
// the prepared dci is valid, we add it in the list
- dl_config->number_pdus++;
+ dl_conf_req->pdu_type = FAPI_NR_DL_CONFIG_TYPE_DLSCH;
+ dl_config->number_pdus++; // The DCI configuration is valid, we add it in the list
return 0;
}
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
index 1e5de41ab3..9b6528d7b0 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
@@ -27,7 +27,6 @@
* \version 1.0
* \company Eurecom
* @ingroup _mac
-
*/
#include
@@ -586,6 +585,15 @@ bool nr_find_nb_rb(uint16_t Qm,
return *tbs >= bytes && *nb_rb <= nb_rb_max;
}
+const NR_DMRS_UplinkConfig_t *get_DMRS_UplinkConfig(const NR_PUSCH_Config_t *pusch_Config, const NR_tda_info_t *tda_info)
+{
+ if (pusch_Config == NULL)
+ return NULL;
+
+ return tda_info->mapping_type == typeA ? pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup
+ : pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
+}
+
NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
const NR_UE_UL_BWP_t *ul_bwp,
const NR_tda_info_t *tda_info,
@@ -623,8 +631,6 @@ NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
num_dmrs_symb += (dmrs.ul_dmrs_symb_pos >> i) & 1;
dmrs.num_dmrs_symb = num_dmrs_symb;
dmrs.N_PRB_DMRS = dmrs.num_dmrs_cdm_grps_no_data * (dmrs.dmrs_config_type == 0 ? 6 : 4);
-
- dmrs.NR_DMRS_UplinkConfig = NR_DMRS_UplinkConfig;
return dmrs;
}
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 2dc0bc89db..761bbf6535 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -2234,7 +2234,7 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot, n
/* FAPI: DMRS */
pusch_pdu->ul_dmrs_symb_pos = sched_pusch->dmrs_info.ul_dmrs_symb_pos;
pusch_pdu->dmrs_config_type = sched_pusch->dmrs_info.dmrs_config_type;
- const NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = sched_pusch->dmrs_info.NR_DMRS_UplinkConfig;
+ const NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig = get_DMRS_UplinkConfig(current_BWP->pusch_Config, &sched_pusch->tda_info);
if (pusch_pdu->transform_precoding) { // transform precoding disabled
long *scramblingid=NULL;
if (NR_DMRS_UplinkConfig && pusch_pdu->scid == 0)
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
index cc649a28f3..9f96a0d106 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
@@ -269,6 +269,8 @@ long get_K2(NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList,
int time_domain_assignment,
int mu);
+const NR_DMRS_UplinkConfig_t *get_DMRS_UplinkConfig(const NR_PUSCH_Config_t *pusch_Config, const NR_tda_info_t *tda_info);
+
NR_pusch_dmrs_t get_ul_dmrs_params(const NR_ServingCellConfigCommon_t *scc,
const NR_UE_UL_BWP_t *ul_bwp,
const NR_tda_info_t *tda_info,
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
index b90e490302..62a4ae0248 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
@@ -16,7 +16,7 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#ifndef MAC_RRC_UL_H
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
index 905b9255e4..ab3b7646e7 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
@@ -16,7 +16,7 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#include "nr_mac_gNB.h"
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c
index b98de08a0d..8ee2913e0c 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c
@@ -16,7 +16,7 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#include
diff --git a/openair2/LAYER2/NR_MAC_gNB/main.c b/openair2/LAYER2/NR_MAC_gNB/main.c
index d0ee9587ef..fba6dde507 100644
--- a/openair2/LAYER2/NR_MAC_gNB/main.c
+++ b/openair2/LAYER2/NR_MAC_gNB/main.c
@@ -271,7 +271,7 @@ void mac_top_init_gNB(ngran_node_t node_type,
AssertFatal(rlc_module_init(1) == 0,"Could not initialize RLC layer\n");
// These should be out of here later
- if (get_softmodem_params()->usim_test == 0 ) nr_pdcp_layer_init();
+ if (get_softmodem_params()->usim_test == 0 ) nr_pdcp_layer_init(false);
if(IS_SOFTMODEM_NOS1 && get_softmodem_params()->phy_test) {
// get default noS1 configuration
diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
index d051d93528..89f1dabc34 100644
--- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
@@ -378,7 +378,6 @@ typedef struct NR_pusch_dmrs {
uint16_t ul_dmrs_symb_pos;
uint8_t num_dmrs_cdm_grps_no_data;
nfapi_nr_dmrs_type_e dmrs_config_type;
- NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig;
} NR_pusch_dmrs_t;
typedef struct NR_sched_pusch {
@@ -857,3 +856,4 @@ typedef struct gNB_MAC_INST_s {
} gNB_MAC_INST;
#endif /*__LAYER2_NR_MAC_GNB_H__ */
+/** @}*/
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
index 1f1a9ae740..35bcd06308 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
@@ -336,16 +336,6 @@ void pdcp_add_UE(const protocol_ctxt_t *const ctxt_pP);
*/
bool pdcp_remove_UE(const protocol_ctxt_t *const ctxt_pP);
-/*! \fn void rrc_pdcp_config_release( const protocol_ctxt_t* const, rb_id_t)
-* \brief This functions is unused
-* \param[in] ctxt_pP Running context.
-* \param[in] rab_id Radio Bearer ID of relevant PDCP entity
-* \return none
-* \note None
-* @ingroup _pdcp
-*/
-//void rrc_pdcp_config_release ( const protocol_ctxt_t* const ctxt_pP, rb_id_t);
-
/*! \fn void pdcp_mbms_run(const protocol_ctxt_t* const ctxt_pP)
* \brief Runs PDCP entity to let it handle incoming/outgoing SDUs
* \param[in] ctxt_pP Running context.
@@ -506,4 +496,4 @@ extern notifiedFIFO_t pdcp_sdu_list;
extern hash_table_t *pdcp_coll_p;
#endif
-/*@}*/
+/** @}*/
diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h
index 84d4b89b1c..f61f9ca6c7 100644
--- a/openair2/LAYER2/RLC/rlc.h
+++ b/openair2/LAYER2/RLC/rlc.h
@@ -145,13 +145,12 @@ rlc_op_status_t rrc_rlc_config_asn1_req (
const uint32_t,
const uint32_t );
-/*! \fn rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const ctxtP)
+/*! \fn rrc_rlc_remove_ue
* \brief Remove all RLC protocol instances from all radio bearers allocated to a UE.
* \param[in] ctxtP Running context.
* \return A status about the processing, OK or error code.
-*/
-rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t *const);
-
+ */
+rlc_op_status_t rrc_rlc_remove_ue(const protocol_ctxt_t *const ctxtP);
/*! \fn rlc_op_status_t rrc_rlc_config_req (
const protocol_ctxt_t* const ctxtP,
@@ -166,23 +165,32 @@ rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t *const);
* \param[in] MBMS_flag Flag to indicate whether this is an MBMS service (1) or not (0)
* \param[in] actionP Action for this radio bearer (add, modify, remove).
* \param[in] rb_idP Radio bearer identifier.
-* \param[in] rlc_infoP RLC configuration parameters issued from Radio Resource Manager.
* \return A status about the processing, OK or error code.
*/
-rlc_op_status_t rrc_rlc_config_req(const protocol_ctxt_t *const, const srb_flag_t, const MBMS_flag_t, config_action_t, const rb_id_t);
+rlc_op_status_t rrc_rlc_config_req(const protocol_ctxt_t *const ctxtP,
+ const srb_flag_t srb_flagP,
+ const MBMS_flag_t MBMS_flag,
+ config_action_t actionP,
+ const rb_id_t rb_idP);
-/*! \fn rlc_op_status_t rrc_rlc_data_req (const protocol_ctxt_t* const ctxtP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP, mui_t muiP, confirm_t confirmP, sdu_size_t sdu_sizeP, char* sduP)
-* \brief Function for RRC to send a SDU through a Signalling Radio Bearer.
-* \param[in] ctxtP Running context.
-* \param[in] MBMS_flag Flag to indicate whether this is an MBMS service (1) or not (0)
-* \param[in] rb_idP Radio bearer identifier.
-* \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 rrc_rlc_data_req (const protocol_ctxt_t *const, const MBMS_flag_t, const rb_id_t, mui_t, confirm_t, sdu_size_t, char *);
+/*! \fn rrc_rlc_data_req
+ * \brief Function for RRC to send a SDU through a Signalling Radio Bearer.
+ * \param[in] ctxtP Running context.
+ * \param[in] MBMS_flag Flag to indicate whether this is an MBMS service (1) or not (0)
+ * \param[in] rb_idP Radio bearer identifier.
+ * \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 rrc_rlc_data_req(const protocol_ctxt_t *const ctxtP,
+ const MBMS_flag_t MBMS_flag,
+ const rb_id_t rb_idP,
+ mui_t muiP,
+ confirm_t confirmP,
+ sdu_size_t sdu_sizeP,
+ char *sduP);
//-----------------------------------------------------------------------------
// PUBLIC INTERFACE WITH MAC
@@ -236,17 +244,20 @@ mac_rlc_status_resp_t mac_rlc_status_ind (const module_id_t, const rnti_t, con
,const uint32_t destinationL2Id
);
-/*! \fn rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module_idP, const rnti_t rntiP, const eNB_index_t eNB_index, const frame_t frameP, const sub_frame_t subframeP,const eNB_flag_t enb_flagP, const logical_chan_id_t channel_idP)
-* \brief Interface with MAC layer, UE only: request and get the number of bytes scheduled for transmission by the RLC instance corresponding to the radio bearer identifier.
-* \param[in] mod_idP Virtualized module identifier.
-* \param[in] rntiP UE identifier.
-* \param[in] frameP Frame index.
-* \param[in] subframeP SubFrame index.
-* \param[in] eNB_flagP Flag to indicate eNB operation (1 true, 0 false)
-* \param[in] channel_idP Logical Channel identifier.
-* \return The maximum number of bytes that the RLC instance can send in the next transmission sequence.
-*/
-rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t, const rnti_t, const eNB_index_t, const frame_t, const sub_frame_t, const eNB_flag_t, const logical_chan_id_t );
+/*! \fn mac_rlc_get_buffer_occupancy_ind
+ * \brief Interface with MAC layer, UE only: request and get the number of bytes scheduled for transmission by the RLC instance
+ * corresponding to the radio bearer identifier. \param[in] mod_idP Virtualized module identifier. \param[in] rntiP UE
+ * identifier. \param[in] frameP Frame index. \param[in] subframeP SubFrame index. \param[in] eNB_flagP Flag
+ * to indicate eNB operation (1 true, 0 false) \param[in] channel_idP Logical Channel identifier. \return The maximum
+ * number of bytes that the RLC instance can send in the next transmission sequence.
+ */
+rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t mod_idP,
+ const rnti_t rntiP,
+ const eNB_index_t enb,
+ const frame_t frameP,
+ const sub_frame_t subframeP,
+ const eNB_flag_t eNB_flagP,
+ const logical_chan_id_t channel_idP);
//-----------------------------------------------------------------------------
// RLC methods
//-----------------------------------------------------------------------------
diff --git a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
new file mode 100644
index 0000000000..7e00b0ee8d
--- /dev/null
+++ b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
@@ -0,0 +1,280 @@
+/*
+ * 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
+ */
+
+#include "cucp_cuup_handler.h"
+
+#include "NR_DRB-ToAddModList.h"
+
+#include "platform_types.h"
+#include "intertask_interface.h"
+#include "openair2/COMMON/e1ap_messages_types.h"
+#include "openair3/ocp-gtpu/gtp_itf.h"
+#include "openair2/F1AP/f1ap_ids.h"
+#include "nr_pdcp_oai_api.h"
+#include "cuup_cucp_if.h"
+#include "common/utils/oai_asn1.h"
+#include "openair2/SDAP/nr_sdap/nr_sdap.h"
+#include "openair2/E1AP/e1ap_common.h"
+#include "openair2/F1AP/f1ap_common.h"
+
+static void fill_DRB_configList_e1(NR_DRB_ToAddModList_t *DRB_configList, const pdu_session_to_setup_t *pdu)
+{
+ for (int i=0; i < pdu->numDRB2Setup; i++) {
+ const DRB_nGRAN_to_setup_t *drb = pdu->DRBnGRanList + i;
+ asn1cSequenceAdd(DRB_configList->list, struct NR_DRB_ToAddMod, ie);
+ ie->drb_Identity = drb->id;
+ ie->cnAssociation = CALLOC(1, sizeof(*ie->cnAssociation));
+ ie->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config;
+
+ // sdap_Config
+ asn1cCalloc(ie->cnAssociation->choice.sdap_Config, sdap_config);
+ sdap_config->pdu_Session = pdu->sessionId;
+ sdap_config->sdap_HeaderDL = drb->sDAP_Header_DL;
+ sdap_config->sdap_HeaderUL = drb->sDAP_Header_UL;
+ sdap_config->defaultDRB = drb->defaultDRB;
+
+ asn1cCalloc(sdap_config->mappedQoS_FlowsToAdd, FlowsToAdd);
+ for (int j=0; j < drb->numQosFlow2Setup; j++) {
+ asn1cSequenceAdd(FlowsToAdd->list, NR_QFI_t, id);
+ *id = drb->qosFlows[j].id;
+ }
+ sdap_config->mappedQoS_FlowsToRelease = NULL;
+
+ // pdcp_Config
+ ie->reestablishPDCP = NULL;
+ ie->recoverPDCP = NULL;
+ asn1cCalloc(ie->pdcp_Config, pdcp_config);
+ asn1cCalloc(pdcp_config->drb, drbCfg);
+ asn1cCallocOne(drbCfg->discardTimer, drb->discardTimer);
+ asn1cCallocOne(drbCfg->pdcp_SN_SizeUL, drb->pDCP_SN_Size_UL);
+ asn1cCallocOne(drbCfg->pdcp_SN_SizeDL, drb->pDCP_SN_Size_DL);
+ drbCfg->headerCompression.present = NR_PDCP_Config__drb__headerCompression_PR_notUsed;
+ drbCfg->headerCompression.choice.notUsed = 0;
+
+ drbCfg->integrityProtection = NULL;
+ drbCfg->statusReportRequired = NULL;
+ drbCfg->outOfOrderDelivery = NULL;
+ pdcp_config->moreThanOneRLC = NULL;
+
+ pdcp_config->t_Reordering = calloc(1, sizeof(*pdcp_config->t_Reordering));
+ *pdcp_config->t_Reordering = drb->reorderingTimer;
+ pdcp_config->ext1 = NULL;
+
+ if (pdu->integrityProtectionIndication == 0 || // Required
+ pdu->integrityProtectionIndication == 1) { // Preferred
+ asn1cCallocOne(drbCfg->integrityProtection, NR_PDCP_Config__drb__integrityProtection_enabled);
+ }
+
+ if (pdu->confidentialityProtectionIndication == 2) { // Not Needed
+ asn1cCalloc(pdcp_config->ext1, ext1);
+ asn1cCallocOne(ext1->cipheringDisabled, NR_PDCP_Config__ext1__cipheringDisabled_true);
+ }
+ }
+}
+
+static int drb_gtpu_create(instance_t instance,
+ uint32_t ue_id,
+ int incoming_id,
+ int outgoing_id,
+ int qfi,
+ in_addr_t tlAddress, // only IPv4 now
+ teid_t outgoing_teid,
+ gtpCallback callBack,
+ gtpCallbackSDAP callBackSDAP,
+ gtpv1u_gnb_create_tunnel_resp_t *create_tunnel_resp)
+{
+ gtpv1u_gnb_create_tunnel_req_t create_tunnel_req = {0};
+ create_tunnel_req.incoming_rb_id[0] = incoming_id;
+ create_tunnel_req.pdusession_id[0] = outgoing_id;
+ memcpy(&create_tunnel_req.dst_addr[0].buffer, &tlAddress, sizeof(uint8_t) * 4);
+ create_tunnel_req.dst_addr[0].length = 32;
+ create_tunnel_req.outgoing_teid[0] = outgoing_teid;
+ create_tunnel_req.outgoing_qfi[0] = qfi;
+ create_tunnel_req.num_tunnels = 1;
+ create_tunnel_req.ue_id = ue_id;
+
+ // we use gtpv1u_create_ngu_tunnel because it returns the interface
+ // address and port of the interface; apart from that, we also might call
+ // newGtpuCreateTunnel() directly
+ return gtpv1u_create_ngu_tunnel(instance, &create_tunnel_req, create_tunnel_resp, callBack, callBackSDAP);
+}
+
+static instance_t get_n3_gtp_instance(void)
+{
+ const e1ap_upcp_inst_t *inst = getCxtE1(0);
+ AssertFatal(inst != NULL, "need to have E1 instance\n");
+ return inst->gtpInstN3;
+}
+
+static instance_t get_f1_gtp_instance(void)
+{
+ const f1ap_cudu_inst_t *inst = getCxt(0);
+ if (!inst)
+ return -1; // means no F1
+ return inst->gtpInst;
+}
+
+void e1_bearer_context_setup(const e1ap_bearer_setup_req_t *req)
+{
+ /* mirror the CU-CP UE ID for CU-UP */
+ uint32_t cu_up_ue_id = req->gNB_cu_cp_ue_id;
+ f1_ue_data_t ued = {.secondary_ue = req->gNB_cu_cp_ue_id};
+ cu_add_f1_ue_data(cu_up_ue_id, &ued);
+ LOG_I(E1AP, "adding UE with CU-CP UE ID %d and CU-UP UE ID %d\n", req->gNB_cu_cp_ue_id, cu_up_ue_id);
+
+ instance_t n3inst = get_n3_gtp_instance();
+ instance_t f1inst = get_f1_gtp_instance();
+
+ e1ap_bearer_setup_resp_t resp = {
+ .gNB_cu_cp_ue_id = req->gNB_cu_cp_ue_id,
+ .gNB_cu_up_ue_id = cu_up_ue_id,
+ };
+ resp.numPDUSessions = req->numPDUSessions;
+ for (int i = 0; i < resp.numPDUSessions; ++i) {
+ pdu_session_setup_t *resp_pdu = resp.pduSession + i;
+ const pdu_session_to_setup_t *req_pdu = req->pduSession + i;
+ resp_pdu->id = req_pdu->sessionId;
+
+ AssertFatal(req_pdu->numDRB2Modify == 0, "DRB modification not implemented\n");
+ AssertFatal(req_pdu->numDRB2Setup == 1, "can only handle one DRB per PDU session\n");
+ resp_pdu->numDRBSetup = req_pdu->numDRB2Setup;
+ const DRB_nGRAN_to_setup_t *req_drb = &req_pdu->DRBnGRanList[0];
+ DRB_nGRAN_setup_t *resp_drb = &resp_pdu->DRBnGRanList[0];
+ resp_drb->id = req_drb->id;
+ resp_drb->numQosFlowSetup = req_drb->numQosFlow2Setup;
+ for (int k = 0; k < resp_drb->numQosFlowSetup; k++)
+ resp_drb->qosFlows[k].id = req_drb->qosFlows[k].id;
+
+ // GTP tunnel for N3/to core
+ gtpv1u_gnb_create_tunnel_resp_t resp_n3 = {0};
+ int qfi = 0; // put PDU session marker
+ int ret = drb_gtpu_create(n3inst,
+ cu_up_ue_id,
+ req_drb->id,
+ req_pdu->sessionId,
+ qfi,
+ req_pdu->tlAddress,
+ req_pdu->teId,
+ nr_pdcp_data_req_drb,
+ sdap_data_req,
+ &resp_n3);
+ AssertFatal(ret >= 0, "Unable to create GTP Tunnel for NG-U\n");
+ AssertFatal(resp_n3.num_tunnels == req->numPDUSessions, "could not create all tunnels\n");
+ resp_pdu->teId = resp_n3.gnb_NGu_teid[i];
+ memcpy(&resp_pdu->tlAddress, &resp_n3.gnb_addr.buffer, 4);
+
+ // create PDCP bearers. This will also create SDAP bearers
+ NR_DRB_ToAddModList_t DRB_configList = {0};
+ fill_DRB_configList_e1(&DRB_configList, req_pdu);
+ nr_pdcp_add_drbs(true, // set this to notify PDCP that his not UE
+ cu_up_ue_id,
+ &DRB_configList,
+ (req->integrityProtectionAlgorithm << 4) | req->cipheringAlgorithm,
+ (uint8_t *)req->encryptionKey,
+ (uint8_t *)req->integrityProtectionKey);
+
+ if (f1inst >= 0) { /* we have F1(-U) */
+ teid_t dummy_teid = 0xffff; // we will update later with answer from DU
+ in_addr_t dummy_address = {0}; // IPv4, updated later with answer from DU
+ gtpv1u_gnb_create_tunnel_resp_t resp_f1 = {0};
+ int qfi = -1; // don't put PDU session marker in GTP
+ int ret = drb_gtpu_create(f1inst,
+ cu_up_ue_id,
+ req_drb->id,
+ req_drb->id,
+ qfi,
+ dummy_address,
+ dummy_teid,
+ cu_f1u_data_req,
+ NULL,
+ &resp_f1);
+ resp_drb->numUpParam = 1;
+ AssertFatal(ret >= 0, "Unable to create GTP Tunnel for F1-U\n");
+ memcpy(&resp_drb->UpParamList[0].tlAddress, &resp_f1.gnb_addr.buffer, 4);
+ resp_drb->UpParamList[0].teId = resp_f1.gnb_NGu_teid[0];
+ }
+
+ // We assume all DRBs to setup have been setup successfully, so we always
+ // send successful outcome in response and no failed DRBs
+ resp_pdu->numDRBFailed = 0;
+ }
+
+ get_e1_if()->bearer_setup_response(&resp);
+}
+
+void e1_bearer_context_modif(const e1ap_bearer_setup_req_t *req)
+{
+ AssertFatal(req->numPDUSessionsMod > 0, "need at least one PDU session to modify\n");
+
+ e1ap_bearer_modif_resp_t modif = {
+ .gNB_cu_cp_ue_id = req->gNB_cu_cp_ue_id,
+ .gNB_cu_up_ue_id = req->gNB_cu_up_ue_id,
+ .numPDUSessionsMod = req->numPDUSessionsMod,
+ };
+
+ instance_t f1inst = get_f1_gtp_instance();
+
+ for (int i=0; i < req->numPDUSessionsMod; i++) {
+ LOG_I(E1AP,
+ "UE %d: updating PDU session ID %ld (%ld bearers)\n",
+ req->gNB_cu_up_ue_id,
+ req->pduSessionMod[i].sessionId,
+ req->pduSessionMod[i].numDRB2Modify);
+ modif.pduSessionMod[i].id = req->pduSessionMod[i].sessionId;
+ modif.pduSessionMod[i].numDRBModified = req->pduSessionMod[i].numDRB2Modify;
+ for (int j=0; j < req->pduSessionMod[i].numDRB2Modify; j++) {
+ const DRB_nGRAN_to_setup_t *to_modif = &req->pduSessionMod[i].DRBnGRanModList[j];
+ DRB_nGRAN_modified_t *modified = &modif.pduSessionMod[i].DRBnGRanModList[j];
+ modified->id = to_modif->id;
+
+ if (f1inst < 0) // no F1-U?
+ continue; // nothing to do
+
+ in_addr_t addr = {0};
+ memcpy(&addr, &to_modif->DlUpParamList[0].tlAddress, sizeof(in_addr_t));
+
+ GtpuUpdateTunnelOutgoingAddressAndTeid(f1inst, req->gNB_cu_cp_ue_id, to_modif->id, addr, to_modif->DlUpParamList[0].teId);
+ }
+ }
+
+ get_e1_if()->bearer_modif_response(&modif);
+}
+
+void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd)
+{
+ instance_t n3inst = get_n3_gtp_instance();
+ instance_t f1inst = get_f1_gtp_instance();
+
+ LOG_I(E1AP, "releasing UE %d\n", cmd->gNB_cu_up_ue_id);
+
+ newGtpuDeleteAllTunnels(n3inst, cmd->gNB_cu_up_ue_id);
+ if (f1inst >= 0) // is there F1-U?
+ newGtpuDeleteAllTunnels(f1inst, cmd->gNB_cu_up_ue_id);
+ nr_pdcp_remove_UE(cmd->gNB_cu_up_ue_id);
+ cu_remove_f1_ue_data(cmd->gNB_cu_up_ue_id);
+
+ e1ap_bearer_release_cplt_t cplt = {
+ .gNB_cu_cp_ue_id = cmd->gNB_cu_cp_ue_id,
+ .gNB_cu_up_ue_id = cmd->gNB_cu_up_ue_id,
+ };
+
+ get_e1_if()->bearer_release_complete(&cplt);
+}
diff --git a/openair2/E1AP/e1ap_api.h b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.h
similarity index 66%
rename from openair2/E1AP/e1ap_api.h
rename to openair2/LAYER2/nr_pdcp/cucp_cuup_handler.h
index 1b9f219fcc..7290043371 100644
--- a/openair2/E1AP/e1ap_api.h
+++ b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.h
@@ -9,8 +9,6 @@
*
* http://www.openairinterface.org/?page_id=698
*
- * Author and copyright: Laurent Thomas, open-cells.com
- *
* 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.
@@ -21,15 +19,17 @@
* contact@openairinterface.org
*/
-#ifndef E1AP_API_H
-#define E1AP_API_H
+#ifndef CUCP_CUUP_HANDLER_H
+#define CUCP_CUUP_HANDLER_H
-#include "platform_types.h"
-#include "openair2/COMMON/e1ap_messages_types.h"
-#include "openair2/E1AP/e1ap_common.h"
-void cuup_init_n3(instance_t instance);
-void process_e1_bearer_context_setup_req(instance_t, e1ap_bearer_setup_req_t *const req);
-void CUUP_process_bearer_context_mod_req(instance_t, e1ap_bearer_setup_req_t *const req);
+#include
-void CUUP_process_bearer_release_command(instance_t, e1ap_bearer_release_cmd_t *const cmd);
-#endif
+void nr_pdcp_e1_if_init(bool uses_e1);
+
+struct e1ap_bearer_setup_req_s;
+struct e1ap_bearer_release_cmd_s;
+void e1_bearer_context_setup(const struct e1ap_bearer_setup_req_s *req);
+void e1_bearer_context_modif(const struct e1ap_bearer_setup_req_s *req);
+void e1_bearer_release_cmd(const struct e1ap_bearer_release_cmd_s *cmd);
+
+#endif /* CUCP_CUUP_HANDLER_H */
diff --git a/openair2/LAYER2/nr_pdcp/cuup_cucp_direct.c b/openair2/LAYER2/nr_pdcp/cuup_cucp_direct.c
new file mode 100644
index 0000000000..b6ad66e18c
--- /dev/null
+++ b/openair2/LAYER2/nr_pdcp/cuup_cucp_direct.c
@@ -0,0 +1,55 @@
+/*
+ * 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
+ */
+
+#include "cuup_cucp_if.h"
+#include "e1ap_messages_types.h"
+#include "intertask_interface.h"
+
+static void bearer_setup_response_direct(const e1ap_bearer_setup_resp_t *resp)
+{
+ MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, E1AP_BEARER_CONTEXT_SETUP_RESP);
+ e1ap_bearer_setup_resp_t *msg_resp = &E1AP_BEARER_CONTEXT_SETUP_RESP(msg);
+ *msg_resp = *resp;
+ itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
+}
+
+static void bearer_modif_response_direct(const e1ap_bearer_modif_resp_t *resp)
+{
+ MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, E1AP_BEARER_CONTEXT_MODIFICATION_RESP);
+ e1ap_bearer_modif_resp_t *msg_resp = &E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg);
+ *msg_resp = *resp;
+ itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
+}
+
+static void bearer_release_complete_direct(const e1ap_bearer_release_cplt_t *cplt)
+{
+ MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, E1AP_BEARER_CONTEXT_RELEASE_CPLT);
+ e1ap_bearer_release_cplt_t *msg_cplt = &E1AP_BEARER_CONTEXT_RELEASE_CPLT(msg);
+ *msg_cplt = *cplt;
+ itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
+}
+
+void cuup_cucp_init_direct(e1_if_t *iface)
+{
+ iface->bearer_setup_response = bearer_setup_response_direct;
+ iface->bearer_modif_response = bearer_modif_response_direct;
+ iface->bearer_release_complete = bearer_release_complete_direct;
+}
diff --git a/openair2/LAYER2/nr_pdcp/cuup_cucp_e1ap.c b/openair2/LAYER2/nr_pdcp/cuup_cucp_e1ap.c
new file mode 100644
index 0000000000..8454d5a7d8
--- /dev/null
+++ b/openair2/LAYER2/nr_pdcp/cuup_cucp_e1ap.c
@@ -0,0 +1,55 @@
+/*
+ * 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
+ */
+
+#include "cuup_cucp_if.h"
+#include "intertask_interface.h"
+#include "e1ap_messages_types.h"
+
+static void bearer_setup_response_e1ap(const e1ap_bearer_setup_resp_t *resp)
+{
+ MessageDef *msg_p = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_RESP);
+ e1ap_bearer_setup_resp_t *bearer_resp = &E1AP_BEARER_CONTEXT_SETUP_RESP(msg_p);
+ *bearer_resp = *resp;
+ itti_send_msg_to_task (TASK_CUUP_E1, 0, msg_p);
+}
+
+static void bearer_modif_response_e1ap(const e1ap_bearer_modif_resp_t *resp)
+{
+ MessageDef *msg_p = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_MODIFICATION_RESP);
+ e1ap_bearer_modif_resp_t *modif_resp = &E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg_p);
+ *modif_resp = *resp;
+ itti_send_msg_to_task (TASK_CUUP_E1, 0, msg_p);
+}
+
+static void bearer_release_complete_e1ap(const e1ap_bearer_release_cplt_t *cplt)
+{
+ MessageDef *msg_p = itti_alloc_new_message(TASK_CUUP_E1, 0, E1AP_BEARER_CONTEXT_RELEASE_CPLT);
+ e1ap_bearer_release_cplt_t *msg_cplt = &E1AP_BEARER_CONTEXT_RELEASE_CPLT(msg_p);
+ *msg_cplt = *cplt;
+ itti_send_msg_to_task (TASK_CUUP_E1, 0, msg_p);
+}
+
+void cuup_cucp_init_e1ap(e1_if_t *iface)
+{
+ iface->bearer_setup_response = bearer_setup_response_e1ap;
+ iface->bearer_modif_response = bearer_modif_response_e1ap;
+ iface->bearer_release_complete = bearer_release_complete_e1ap;
+}
diff --git a/openair2/LAYER2/nr_pdcp/cuup_cucp_if.c b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.c
new file mode 100644
index 0000000000..ddeb59205e
--- /dev/null
+++ b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.c
@@ -0,0 +1,37 @@
+/*
+ * 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
+ */
+
+#include "cuup_cucp_if.h"
+
+static e1_if_t e1_if;
+
+e1_if_t *get_e1_if(void)
+{
+ return &e1_if;
+}
+
+void nr_pdcp_e1_if_init(bool uses_e1)
+{
+ if (uses_e1)
+ cuup_cucp_init_e1ap(&e1_if);
+ else
+ cuup_cucp_init_direct(&e1_if);
+}
diff --git a/openair2/LAYER2/nr_pdcp/cuup_cucp_if.h b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.h
new file mode 100644
index 0000000000..c33694dac3
--- /dev/null
+++ b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.h
@@ -0,0 +1,46 @@
+/*
+ * 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
+ */
+
+#ifndef CUUP_CUCP_IF_H
+#define CUUP_CUCP_IF_H
+
+#include
+
+struct e1ap_bearer_setup_resp_s;
+struct e1ap_bearer_modif_resp_s;
+struct e1ap_bearer_release_cplt_s;
+typedef void (*e1_bearer_setup_response_func_t)(const struct e1ap_bearer_setup_resp_s *resp);
+typedef void (*e1_bearer_modif_response_func_t)(const struct e1ap_bearer_modif_resp_s *resp);
+typedef void (*e1_bearer_release_complete_func_t)(const struct e1ap_bearer_release_cplt_s *cplt);
+
+typedef struct e1_if_t {
+ e1_bearer_setup_response_func_t bearer_setup_response;
+ e1_bearer_modif_response_func_t bearer_modif_response;
+ e1_bearer_release_complete_func_t bearer_release_complete;
+} e1_if_t;
+
+e1_if_t *get_e1_if(void);
+void nr_pdcp_e1_if_init(bool uses_e1);
+
+void cuup_cucp_init_direct(e1_if_t *iface);
+void cuup_cucp_init_e1ap(e1_if_t *iface);
+
+#endif /* CUUP_CUCP_IF_H */
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c
deleted file mode 100644
index c7c91a38a0..0000000000
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.c
+++ /dev/null
@@ -1,54 +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
- */
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include "nr_pdcp_e1_api.h"
-
-void e1_add_drb(int is_gnb,
- uint64_t ue_id,
- struct NR_DRB_ToAddMod *s,
- int ciphering_algorithm,
- int integrity_algorithm,
- unsigned char *ciphering_key,
- unsigned char *integrity_key)
-{
- add_drb(is_gnb, ue_id, s, ciphering_algorithm, integrity_algorithm, ciphering_key, integrity_key);
- LOG_I(PDCP, "%s:%s:%d: added DRB for UE ID %ld\n", __FILE__, __FUNCTION__, __LINE__, ue_id);
-}
-
-void nr_pdcp_e1_add_drbs(eNB_flag_t enb_flag,
- uint64_t ue_id,
- NR_DRB_ToAddModList_t *const drb2add_list,
- const uint8_t security_modeP,
- uint8_t *const kUPenc,
- uint8_t *const kUPint) {
-
- if (drb2add_list != NULL) {
- for (int i = 0; i < drb2add_list->list.count; i++) {
- e1_add_drb(enb_flag, ue_id, drb2add_list->list.array[i],
- security_modeP & 0x0f, (security_modeP >> 4) & 0x0f,
- kUPenc, kUPint);
- }
- } else
- LOG_W(PDCP, "%s with void list\n", __FUNCTION__);
-}
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.h
deleted file mode 100644
index 3c16996126..0000000000
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.h
+++ /dev/null
@@ -1,53 +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
- */
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include "common/utils/oai_asn1.h"
-#include "NR_RadioBearerConfig.h"
-
-#include "nr_pdcp_oai_api.h"
-#include "LAYER2/nr_rlc/nr_rlc_oai_api.h"
-#include
-#include "openair2/SDAP/nr_sdap/nr_sdap.h"
-
-void e1_add_drb(int is_gnb,
- uint64_t ue_id,
- struct NR_DRB_ToAddMod *s,
- int ciphering_algorithm,
- int integrity_algorithm,
- unsigned char *ciphering_key,
- unsigned char *integrity_key);
-
-void nr_pdcp_e1_add_drbs(eNB_flag_t enb_flag,
- uint64_t ue_id,
- NR_DRB_ToAddModList_t *const drb2add_list,
- const uint8_t security_modeP,
- uint8_t *const kUPenc,
- uint8_t *const kUPint);
-
-void add_drb_am(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_DRB_ToAddMod *s,
- int ciphering_algorithm,
- int integrity_algorithm,
- unsigned char *ciphering_key,
- unsigned char *integrity_key);
-
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
index 21331ee607..eb1367c724 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
@@ -39,9 +39,9 @@
#include "openair2/F1AP/f1ap_ids.h"
#include
#include "openair2/SDAP/nr_sdap/nr_sdap.h"
-#include "nr_pdcp_e1_api.h"
#include "gnb_config.h"
#include "executables/softmodem-common.h"
+#include "cuup_cucp_if.h"
#define TODO do { \
printf("%s:%d:%s: todo\n", __FILE__, __LINE__, __FUNCTION__); \
@@ -538,7 +538,7 @@ void pdcp_layer_init(void)
abort();
}
-void nr_pdcp_layer_init(void)
+void nr_pdcp_layer_init(bool uses_e1)
{
/* hack: be sure to initialize only once */
static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
@@ -559,6 +559,7 @@ void nr_pdcp_layer_init(void)
init_nr_rlc_data_req_queue();
}
+ nr_pdcp_e1_if_init(uses_e1);
init_nr_pdcp_data_ind_queue();
nr_pdcp_init_timer_thread(nr_pdcp_ue_manager);
}
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
index 6035e34bf4..85e2c4b46b 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
@@ -25,7 +25,7 @@
#include "pdcp.h"
#include "nr_pdcp_ue_manager.h"
-void nr_pdcp_layer_init(void);
+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,
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c
index 5d28872854..782ba1dbf9 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c
@@ -45,7 +45,13 @@ nr_pdcp_ue_manager_t *new_nr_pdcp_ue_manager(int enb_flag)
exit(1);
}
- if (pthread_mutex_init(&ret->lock, NULL)) abort();
+ pthread_mutexattr_t Attr;
+ pthread_mutexattr_init(&Attr);
+ // We need to be recursive because pdcp locks before forwarding, and calls in same thread,
+ // so, if same thread wants to send something back, and there is no itti intermediate thread, we deadlock on ourselves
+ pthread_mutexattr_settype(&Attr, PTHREAD_MUTEX_RECURSIVE);
+ if (pthread_mutex_init(&ret->lock, &Attr))
+ abort();
ret->enb_flag = enb_flag;
return ret;
diff --git a/openair2/M2AP/m2ap_MCE_handler.h b/openair2/M2AP/m2ap_MCE_handler.h
index 164efe171e..42dc81f436 100644
--- a/openair2/M2AP/m2ap_MCE_handler.h
+++ b/openair2/M2AP/m2ap_MCE_handler.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file m2ap_handler.h
+/*! \file m2ap_MCE_handler.h
* \brief m2ap handler procedures for MCE
* \author Javier Morgade
* \date 2019
diff --git a/openair2/M2AP/m2ap_common.h b/openair2/M2AP/m2ap_common.h
index 92e3274c81..266b303518 100644
--- a/openair2/M2AP/m2ap_common.h
+++ b/openair2/M2AP/m2ap_common.h
@@ -138,5 +138,6 @@ ssize_t m2ap_generate_unsuccessfull_outcome(
@returns void
**/
void m2ap_handle_criticality(M2AP_Criticality_t criticality);
+/** @}*/
#endif /* M2AP_COMMON_H_ */
diff --git a/openair2/M2AP/m2ap_eNB_handler.h b/openair2/M2AP/m2ap_eNB_handler.h
index 1954d20de9..0055d385d8 100644
--- a/openair2/M2AP/m2ap_eNB_handler.h
+++ b/openair2/M2AP/m2ap_eNB_handler.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file m2ap_handler.h
+/*! \file m2ap_eNB_handler.h
* \brief m2ap handler procedures for eNB
* \author Javier Morgade
* \date 2019
diff --git a/openair2/M2AP/m2ap_itti_messaging.c b/openair2/M2AP/m2ap_itti_messaging.c
index 9c9528c349..5ffecbc7cf 100644
--- a/openair2/M2AP/m2ap_itti_messaging.c
+++ b/openair2/M2AP/m2ap_itti_messaging.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file m2ap_eNB_itti_messaging.c
+/*! \file m2ap_itti_messaging.c
* \brief m2ap tasks for eNB
* \author Javier Morgade
* \date 2019
diff --git a/openair2/MCE_APP/mce_config.h b/openair2/MCE_APP/mce_config.h
index 858f09db17..1fbe81a627 100644
--- a/openair2/MCE_APP/mce_config.h
+++ b/openair2/MCE_APP/mce_config.h
@@ -65,6 +65,4 @@ int RCconfig_m2_mcch(m2ap_setup_resp_t * m2ap_setup_resp, uint32_t i);
int RCconfig_M2_SCHEDULING(MessageDef *msg_p, uint32_t i);
int RCconfig_m2_scheduling(m2ap_mbms_scheduling_information_t *m2ap_mbms_scheduling_information, uint32_t i);
-
#endif /* MCE_CONFIG_H_ */
-/** @} */
diff --git a/openair2/PHY_INTERFACE/phy_interface.h b/openair2/PHY_INTERFACE/phy_interface.h
index f275e91ec1..09e95988a4 100644
--- a/openair2/PHY_INTERFACE/phy_interface.h
+++ b/openair2/PHY_INTERFACE/phy_interface.h
@@ -19,13 +19,13 @@
* contact@openairinterface.org
*/
-/*! \file PHY_INTERFACE/defs.h
-* \brief mac phy interface primitives
-* \author Raymond Knopp and Navid Nikaein
-* \date 2011
-* \version 0.5
-* \mail navid.nikaein@eurecom.fr or openair_tech@eurecom.fr
-*/
+/*! \file phy_interface.h
+ * \brief mac phy interface primitives
+ * \author Raymond Knopp and Navid Nikaein
+ * \date 2011
+ * \version 0.5
+ * \mail navid.nikaein@eurecom.fr or openair_tech@eurecom.fr
+ */
#ifndef __PHY_INTERFACE_H__
# define __PHY_INTERFACE_H__
@@ -47,9 +47,4 @@ do {
mac_xface->macphy_exit(temp); \
} while(0)
-
-
#endif
-
-
-/** @} */
diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
index 270436b029..8210811862 100644
--- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
+++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
@@ -19,14 +19,14 @@
* contact@openairinterface.org
*/
-/*! \file l2_interface.c
-* \brief layer 2 interface
-* \author Navid Nikaein and Raymond Knopp
-* \date 2011
-* \version 1.0
-* \company Eurecom
-* \email: navid.nikaein@eurecom.fr,raymond.knopp@eurecom.fr
-*/
+/*! \file openair_rrc_L2_interface.h
+ * \brief layer 2 interface
+ * \author Navid Nikaein and Raymond Knopp
+ * \date 2011
+ * \version 1.0
+ * \company Eurecom
+ * \email: navid.nikaein@eurecom.fr,raymond.knopp@eurecom.fr
+ */
#ifndef __OPENAIR_RRC_L2_INTERFACE_H__
#define __OPENAIR_RRC_L2_INTERFACE_H__
diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c
index 2ce9221317..bc333bdcd6 100644
--- a/openair2/RRC/LTE/L2_interface.c
+++ b/openair2/RRC/LTE/L2_interface.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file l2_interface.c
+/*! \file L2_interface.c
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein
* \date 2010-2014
@@ -28,15 +28,14 @@
* \email: raymond.knopp@eurecom.fr
*/
-/*! \file l2_interface.c
- * \brief layer 2 interface, added support for FeMBMS RRC sublayer
+/*! \file L2_interface.c
+ * \brief layer 2 interface, added support for FeMBMS RRC sublayer
* \author Javier Morgade
* \date 2020
* \version 1.0
* \email: javier.morgade@ieee.org
*/
-
#include "platform_types.h"
#include "rrc_defs.h"
#include "rrc_extern.h"
diff --git a/openair2/RRC/LTE/L2_interface_common.c b/openair2/RRC/LTE/L2_interface_common.c
index 6a0830e6df..86fccddcf6 100644
--- a/openair2/RRC/LTE/L2_interface_common.c
+++ b/openair2/RRC/LTE/L2_interface_common.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file l2_interface.c
+/*! \file L2_interface_common.c
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein
* \date 2010-2014
diff --git a/openair2/RRC/LTE/L2_interface_ue.c b/openair2/RRC/LTE/L2_interface_ue.c
index e7f18d355f..d1128c66ee 100644
--- a/openair2/RRC/LTE/L2_interface_ue.c
+++ b/openair2/RRC/LTE/L2_interface_ue.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file l2_interface_ue.c
+/*! \file L2_interface_ue.c
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein
* \date 2010-2014
@@ -28,8 +28,7 @@
* \email: raymond.knopp@eurecom.fr
*/
-
-/*! \file l2_interface_ue.c
+/*! \file L2_interface_ue.c
* \brief layer 2 interface, added support for FeMBMS RRC sublayer
* \author J. Morgade
* \date 2020
@@ -37,7 +36,6 @@
* \email: javier.morgade@ieee.org
*/
-
#include "platform_types.h"
#include "rrc_defs.h"
#include "rrc_extern.h"
diff --git a/openair2/RRC/LTE/extern_NB_IoT.h b/openair2/RRC/LTE/extern_NB_IoT.h
index 24934f4bf1..773acf9d4f 100644
--- a/openair2/RRC/LTE/extern_NB_IoT.h
+++ b/openair2/RRC/LTE/extern_NB_IoT.h
@@ -19,14 +19,14 @@
* contact@openairinterface.org
*/
-/*! \file vars.h
-* \brief rrc external vars
-* \author Navid Nikaein and Raymond Knopp, Michele Paffetti
-* \date 2011-2017
-* \version 1.0
-* \company Eurecom
-* \email: navid.nikaein@eurecom.fr, michele.paffetti@studio.unibo.it
-*/
+/*! \file extern_NB_IoT.h
+ * \brief rrc external vars
+ * \author Navid Nikaein and Raymond Knopp, Michele Paffetti
+ * \date 2011-2017
+ * \version 1.0
+ * \company Eurecom
+ * \email: navid.nikaein@eurecom.fr, michele.paffetti@studio.unibo.it
+ */
#ifndef __OPENAIR_RRC_EXTERN_NB_IOT_H__
#define __OPENAIR_RRC_EXTERN_NB_IOT_H__
diff --git a/openair2/RRC/LTE/proto_NB_IoT.h b/openair2/RRC/LTE/proto_NB_IoT.h
index e5c5d8056b..9d12de0d90 100644
--- a/openair2/RRC/LTE/proto_NB_IoT.h
+++ b/openair2/RRC/LTE/proto_NB_IoT.h
@@ -29,7 +29,8 @@
/** \addtogroup _rrc
* @{
*/
-
+#ifndef __PROTO_NB_IOT_H
+#define __PROTO_NB_IOT_H
#include "RRC/LTE/defs_NB_IoT.h"
#include "pdcp.h"
#include "rlc.h"
@@ -137,12 +138,13 @@ char openair_rrc_eNB_configuration_NB_IoT(
//-----------------------------
/**\brief RRC eNB task. (starting of the RRC state machine)
- \param void *args_p Pointer on arguments to start the task. */
+ \param args_p Pointer on arguments to start the task. */
void *rrc_enb_task_NB_IoT(void *args_p);
/**\brief Entry routine to decode a UL-CCCH-Message-NB. Invokes PER decoder and parses message.
\param ctxt_pP Running context
- \param Srb_info Pointer to SRB0 information structure (buffer, etc.)*/
+ \param Srb_info Pointer to SRB0 information structure (buffer, etc.)
+\param CC_id*/
int rrc_eNB_decode_ccch_NB_IoT(
protocol_ctxt_t* const ctxt_pP,
const SRB_INFO_NB_IoT* const Srb_info,
@@ -151,8 +153,9 @@ int rrc_eNB_decode_ccch_NB_IoT(
/**\brief Entry routine to decode a UL-DCCH-Message-NB. Invokes PER decoder and parses message.
\param ctxt_pP Context
+\param Srb_id
\param Rx_sdu Pointer Received Message
- \param sdu_size Size of incoming SDU*/
+ \param sdu_sizeP Size of incoming SDU*/
int rrc_eNB_decode_dcch_NB_IoT(
const protocol_ctxt_t* const ctxt_pP,
const rb_id_t Srb_id,
@@ -256,5 +259,5 @@ int8_t mac_rrc_data_req_eNB_NB_IoT(
uint8_t flag
);
-
-
+/** @}*/
+#endif
diff --git a/openair2/RRC/LTE/rrc_defs.h b/openair2/RRC/LTE/rrc_defs.h
index b233cd502d..35303cd4f8 100644
--- a/openair2/RRC/LTE/rrc_defs.h
+++ b/openair2/RRC/LTE/rrc_defs.h
@@ -16,17 +16,17 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
-/*! \file RRC/LTE/defs.h
-* \brief RRC struct definitions and function prototypes
-* \author Navid Nikaein and Raymond Knopp
-* \date 2010 - 2014
-* \version 1.0
-* \company Eurecom
-* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr
-*/
+/*! \file rrc_defs.h
+ * \brief RRC struct definitions and function prototypes
+ * \author Navid Nikaein and Raymond Knopp
+ * \date 2010 - 2014
+ * \version 1.0
+ * \company Eurecom
+ * \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr
+ */
#ifndef __OPENAIR_RRC_DEFS_H__
#define __OPENAIR_RRC_DEFS_H__
@@ -49,7 +49,7 @@
#include "LAYER2/MAC/mac.h"
#include "openair2/RRC/common.h"
-//for D2D
+// for D2D
#define DEBUG_CTRL_SOCKET
#define CONTROL_SOCKET_PORT_NO 8888
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index f8455d76d8..245a899410 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -3244,8 +3244,8 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
//-----------------------------------------------------------------------------
/**
- * @fn :encode_CG_ConfigInfo
- * @param :enc_buf to store the encoded bits
+ * @fn encode_CG_ConfigInfo
+ * @param :buffer to store the encoded bits
* @param :ue_context_pP ue context used to fill CG-ConfigInfo
* @param :enc_size to store thre size of encoded size
* this api is to fill and encode CG-ConfigInfo
diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c
index 8265602106..4ec1b9383d 100644
--- a/openair2/RRC/LTE/rrc_eNB_S1AP.c
+++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c
@@ -335,13 +335,10 @@ get_next_ue_initial_id(
return ue_initial_id[mod_id];
}
-
-
-
-/*! \fn uint8_t get_UE_index_from_s1ap_ids(uint8_t mod_id, uint16_t ue_initial_id, uint32_t eNB_ue_s1ap_id)
+/*! \fn rrc_eNB_get_ue_context_from_s1ap_ids
*\brief retrieve UE index in the eNB from the UE initial ID if not equal to UE_INDEX_INVALID or
*\brief from the eNB_ue_s1ap_id previously transmitted by S1AP.
- *\param mod_id Instance ID of eNB.
+ *\param instanceP Instance ID of eNB.
*\param ue_initial_id The UE initial ID sent to S1AP.
*\param eNB_ue_s1ap_id The value sent by S1AP.
*\return the UE index or UE_INDEX_INVALID if not found.
diff --git a/openair2/RRC/LTE/rrc_extern.h b/openair2/RRC/LTE/rrc_extern.h
index 644512a686..199e5df52c 100644
--- a/openair2/RRC/LTE/rrc_extern.h
+++ b/openair2/RRC/LTE/rrc_extern.h
@@ -19,14 +19,14 @@
* contact@openairinterface.org
*/
-/*! \file vars.h
-* \brief rrc external vars
-* \author Navid Nikaein and Raymond Knopp
-* \date 2011
-* \version 1.0
-* \company Eurecom
-* \email: navid.nikaein@eurecom.fr
-*/
+/*! \file rrc_extern.h
+ * \brief rrc external vars
+ * \author Navid Nikaein and Raymond Knopp
+ * \date 2011
+ * \version 1.0
+ * \company Eurecom
+ * \email: navid.nikaein@eurecom.fr
+ */
#ifndef __OPENAIR_RRC_EXTERN_H__
#define __OPENAIR_RRC_EXTERN_H__
diff --git a/openair2/RRC/LTE/rrc_proto.h b/openair2/RRC/LTE/rrc_proto.h
index a54a7a7336..a5f8463c47 100644
--- a/openair2/RRC/LTE/rrc_proto.h
+++ b/openair2/RRC/LTE/rrc_proto.h
@@ -65,7 +65,6 @@ void rrc_top_cleanup(void);
/** \brief Function to update eNB timers every subframe.
@param ctxt_pP running context
-@param enb_index
@param CC_id
*/
RRC_status_t
@@ -97,8 +96,9 @@ int rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const SRB_INFO *co
/** \brief Decodes a DL-DCCH message and invokes appropriate routine to handle the message
\param ctxt_pP Running context
\param Srb_id Index of Srb (1,2)
- \param buffer_pP Pointer to received SDU
- \param eNB_index Index of corresponding eNB/CH*/
+ \param Buffer Pointer to received SDU
+ \param Buffer_size
+ \param eNB_indexP Index of corresponding eNB/CH*/
void
rrc_ue_decode_dcch(
const protocol_ctxt_t *const ctxt_pP,
@@ -136,7 +136,7 @@ rrc_ue_process_rrcConnectionReconfiguration(
/** \brief Establish SRB1 based on configuration in SRB_ToAddMod structure. Configures RLC/PDCP accordingly
\param module_idP Instance ID of UE
- \param frame Frame index
+ \param frameP Frame index
\param eNB_index Index of corresponding eNB/CH
\param SRB_config Pointer to SRB_ToAddMod IE from configuration
@returns 0 on success*/
@@ -144,7 +144,7 @@ int32_t rrc_ue_establish_srb1(module_id_t module_idP,frame_t frameP,uint8_t eNB
/** \brief Establish SRB2 based on configuration in SRB_ToAddMod structure. Configures RLC/PDCP accordingly
\param module_idP Instance ID of UE
- \param frame Frame index
+ \param frameP Frame index
\param eNB_index Index of corresponding eNB/CH
\param SRB_config Pointer to SRB_ToAddMod IE from configuration
@returns 0 on success*/
@@ -152,6 +152,7 @@ int32_t rrc_ue_establish_srb2(module_id_t module_idP,frame_t frameP, uint8_t eN
/** \brief Establish a DRB according to DRB_ToAddMod structure
\param module_idP Instance ID of UE
+ \param frameP Frame index
\param eNB_index Index of corresponding CH/eNB
\param DRB_config Pointer to DRB_ToAddMod IE from configuration
@returns 0 on success */
@@ -230,8 +231,9 @@ int rrc_eNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
/**\brief Entry routine to decode a UL-DCCH-Message. Invokes PER decoder and parses message.
\param ctxt_pP Context
+\param Srb_id
\param Rx_sdu Pointer Received Message
- \param sdu_size Size of incoming SDU*/
+ \param sdu_sizeP Size of incoming SDU*/
int
rrc_eNB_decode_dcch(
const protocol_ctxt_t *const ctxt_pP,
@@ -242,7 +244,8 @@ rrc_eNB_decode_dcch(
/**\brief Generate the RRCConnectionSetup based on information coming from RRM
\param ctxt_pP Running context
- \param ue_context_pP UE context*/
+ \param ue_context_pP UE context
+ \param CC_id*/
void
rrc_eNB_generate_RRCConnectionSetup(
const protocol_ctxt_t *const ctxt_pP,
@@ -275,7 +278,6 @@ rrc_eNB_process_RRCConnectionSetupComplete(
/**\brief Process the RRCConnectionReconfigurationComplete based on information coming from UE
\param ctxt_pP Running context
\param ue_context_pP RRC UE context
- \param rrcConnectionReconfigurationComplete Pointer to RRCConnectionReconfigurationComplete message
\param xid the transaction id for the rrcconnectionreconfiguration procedure
*/
void
@@ -324,7 +326,11 @@ rrc_eNB_generate_dedeicatedRRCConnectionReconfiguration(
/**\brief release Data Radio Bearer between ENB and UE
\param ctxt_pP Running context
- \param ue_context_pP UE context of UE receiving the message*/
+ \param ue_context_pP UE context of UE receiving the message
+\param xid
+\param nas_length
+\param nas_buffer
+*/
void
rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_release(
const protocol_ctxt_t *const ctxt_pP,
@@ -344,15 +350,15 @@ void rrc_enb_init(void);
void *rrc_enb_process_itti_msg(void *);
/**\brief RRC eNB task.
- \param void *args_p Pointer on arguments to start the task. */
+ \param args_p Pointer on arguments to start the task. */
void *rrc_enb_task(void *args_p);
/**\brief RRC UE task.
- \param void *args_p Pointer on arguments to start the task. */
+ \param args_p Pointer on arguments to start the task. */
void *rrc_ue_task(void *args_p);
/**\brief RRC NSA UE task.
- \param void *args_p Pointer on arguments to start the task. */
+ \param args_p Pointer on arguments to start the task. */
void *recv_msgs_from_nr_ue(void *args_p);
void init_connections_with_nr_ue(void);
@@ -366,9 +372,7 @@ void rrc_eNB_process_handoverPreparationInformation(int mod_id, x2ap_handover_re
void rrc_eNB_process_ENDC_x2_setup_request(int mod_id, x2ap_ENDC_setup_req_t *m);
/**\brief Generate/decode the handover RRCConnectionReconfiguration at eNB
- \param module_idP Instance ID for eNB/CH
- \param frame Frame index
- \param ue_module_idP Index of UE transmitting the messages*/
+ */
void
rrc_eNB_generate_RRCConnectionReconfiguration_handover(
const protocol_ctxt_t *const ctxt_pP,
@@ -392,6 +396,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
/** \brief process the received SidelinkUEInformation message at eNB
\param ctxt_pP Running context
+ \param ue_context_pP RRC UE context
\param sidelinkUEInformation sidelinkUEInformation message from UE*/
uint8_t
rrc_eNB_process_SidelinkUEInformation(
diff --git a/openair2/RRC/NAS/nas_config.h b/openair2/RRC/NAS/nas_config.h
index de84a854ca..97a6dd5976 100644
--- a/openair2/RRC/NAS/nas_config.h
+++ b/openair2/RRC/NAS/nas_config.h
@@ -34,7 +34,7 @@
/*! \fn void void nas_getparams(void)(void)
* \brief This function get parameters used to configure network interface when running in noS1 mode
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
void nas_getparams(void);
@@ -46,7 +46,7 @@ void nas_getparams(void);
* \param[in] broadcastAddress, the broadcast address for the subnet, e.g. 10.0.1.255
* \return 0 on success, otherwise 1, if couldn't open a socket and 2 if the ioctl fails
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
int NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *broadcastAddress);
@@ -59,7 +59,7 @@ int NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *br
* \param[in] fourth octet of the ip address e.g. for the 10.1.2.3 address would be 3
* \return 0 on success, otherwise 1, if couldn't open a socket and 2 if the ioctl fails
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
int nas_config(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix);
@@ -72,7 +72,7 @@ int nas_config(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix
* \param[in] fourth octet of the ip address e.g. for the 10.1.2.3 address would be 3
* \return 0 on success, otherwise 1, if couldn't open a socket and 2 if the ioctl fails
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
int nas_config_mbms(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix);
@@ -85,12 +85,10 @@ int nas_config_mbms(int interface_id, int thirdOctet, int fourthOctet, char *ifs
* \param[in] fourth octet of the ip address e.g. for the 10.1.2.3 address would be 3
* \return 0 on success, otherwise 1, if couldn't open a socket and 2 if the ioctl fails
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
int nas_config_mbms_s1(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix);
-
-
/*! \fn int blocking_NAS_config(char*, char*, char*, char*)
* \brief This function initializes the nasmesh interface, in a blocking way,
* the system calls are interrupted
@@ -100,7 +98,7 @@ int nas_config_mbms_s1(int interface_id, int thirdOctet, int fourthOctet, char *
* \param[in] broadcastAddress, the broadcast address for the subnet, e.g. 10.0.1.255
* \return 0 on success, otherwise 1
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
int blocking_NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *broadcastAddress);
@@ -113,7 +111,7 @@ int blocking_NAS_config(char *interfaceName, char *ipAddress, char *networkMask,
* SIOCSIFBRDADDR, SIOCSIFFLAGS), e.g. SIOCSIFBRDADDR
* \return 0 on success, otherwise 1, if couldn't open a socket and 2 if the ioctl fails
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
int setInterfaceParameter(char *interfaceName, char *settingAddress, int operation);
@@ -123,7 +121,7 @@ int setInterfaceParameter(char *interfaceName, char *settingAddress, int operati
* \param[in] address, the address of the gateway, e.g. 10.0.1.2
* \return 0 on success, otherwise 1, if couldn't open a socket and 2 if the ioctl fails
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
int set_gateway(char *interfaceName, char *gateway);
@@ -131,7 +129,7 @@ int set_gateway(char *interfaceName, char *gateway);
* \brief This function sets the basic network address used
* \param[in] baseAddr, the new basic address e.g.for 10.0.1.2, would be 10.0
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
void setBaseNetAddress(char *baseAddr);
@@ -139,7 +137,7 @@ void setBaseNetAddress(char *baseAddr);
* \brief This function returns the basic network address used
* \return the basic network address in use
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
char *getBaseNetAddress(void);
@@ -147,7 +145,7 @@ char *getBaseNetAddress(void);
* \brief This function sets the new default network mask used
* \param[in] newNetworkMask, the new network mask e.g.for 255.255.0.0
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
void setNetMask(char *baseAddr);
@@ -155,7 +153,7 @@ void setNetMask(char *baseAddr);
* \brief This function returns the network mask address in use
* \return the network mask in use
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
char *getNetMask(void);
@@ -163,7 +161,7 @@ char *getNetMask(void);
* \brief This function sets the new broadcast address used
* \param[in] newNetworkMask, the new broadcast address e.g.for 10.0.255.255
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
void setBroadcastAddress(char *baseAddr);
@@ -171,7 +169,7 @@ void setBroadcastAddress(char *baseAddr);
* \brief This function returns the broadcast address in use
* \return the broadcast address in use
* \note
- * @ingroup ?????
+ * @ingroup _nas
*/
char *getBroadcastAddress(void);
diff --git a/openair2/RRC/NR/L2_nr_interface.c b/openair2/RRC/NR/L2_nr_interface.c
index 090486cf65..2a652081f2 100644
--- a/openair2/RRC/NR/L2_nr_interface.c
+++ b/openair2/RRC/NR/L2_nr_interface.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file l2_nr_interface.c
+/*! \file L2_nr_interface.c
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein, WEI-TAI CHEN
* \date 2010-2014, 2018
diff --git a/openair2/RRC/NR/cucp_cuup_direct.c b/openair2/RRC/NR/cucp_cuup_direct.c
index 485edc08a4..ee3555a14b 100644
--- a/openair2/RRC/NR/cucp_cuup_direct.c
+++ b/openair2/RRC/NR/cucp_cuup_direct.c
@@ -16,204 +16,35 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
-#include
-
#include "cucp_cuup_if.h"
-#include "platform_types.h"
+
#include "nr_rrc_defs.h"
-
-#include "softmodem-common.h"
-#include "nr_rrc_proto.h"
-#include "nr_rrc_extern.h"
#include "openair2/COMMON/e1ap_messages_types.h"
-#include "openair3/SECU/key_nas_deriver.h"
+#include "openair2/LAYER2/nr_pdcp/cucp_cuup_handler.h"
-#include "nr_pdcp/nr_pdcp_entity.h"
-#include "openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.h"
-#include
-#include "openair3/ocp-gtpu/gtp_itf.h"
-#include "rrc_gNB_GTPV1U.h"
-#include "common/ran_context.h"
-#include "openair2/F1AP/f1ap_common.h"
-#include "openair2/E1AP/e1ap_common.h"
-
-extern RAN_CONTEXT_t RC;
-
-void fill_e1ap_bearer_setup_resp(e1ap_bearer_setup_resp_t *resp,
- e1ap_bearer_setup_req_t *const req,
- instance_t gtpInst,
- ue_id_t ue_id,
- int remote_port,
- in_addr_t my_addr) {
-
- resp->numPDUSessions = req->numPDUSessions;
- transport_layer_addr_t dummy_address = {0};
- dummy_address.length = 32; // IPv4
- for (int i=0; i < req->numPDUSessions; i++) {
- resp->pduSession[i].numDRBSetup = req->pduSession[i].numDRB2Setup;
- for (int j=0; j < req->pduSession[i].numDRB2Setup; j++) {
- DRB_nGRAN_to_setup_t *drb2Setup = req->pduSession[i].DRBnGRanList + j;
- DRB_nGRAN_setup_t *drbSetup = resp->pduSession[i].DRBnGRanList + j;
-
- drbSetup->numUpParam = 1;
- drbSetup->UpParamList[0].tlAddress = my_addr;
- drbSetup->UpParamList[0].teId = newGtpuCreateTunnel(gtpInst,
- ue_id,
- drb2Setup->id,
- drb2Setup->id,
- 0xFFFF, // We will set the right value from DU answer
- -1, // no qfi
- dummy_address, // We will set the right value from DU answer
- remote_port,
- cu_f1u_data_req,
- NULL);
- drbSetup->id = drb2Setup->id;
-
- drbSetup->numQosFlowSetup = drb2Setup->numQosFlow2Setup;
- for (int k=0; k < drbSetup->numQosFlowSetup; k++) {
- drbSetup->qosFlows[k].id = drb2Setup->qosFlows[k].id;
- }
- }
- }
-}
-
-void CU_update_UP_DL_tunnel(e1ap_bearer_setup_req_t *const req, instance_t instance, ue_id_t ue_id) {
- for (int i=0; i < req->numPDUSessionsMod; i++) {
- for (int j=0; j < req->pduSessionMod[i].numDRB2Modify; j++) {
- DRB_nGRAN_to_setup_t *drb_p = req->pduSessionMod[i].DRBnGRanModList + j;
-
- in_addr_t addr = {0};
- memcpy(&addr, &drb_p->DlUpParamList[0].tlAddress, sizeof(in_addr_t));
-
- GtpuUpdateTunnelOutgoingAddressAndTeid(instance,
- (ue_id & 0xFFFF),
- (ebi_t)drb_p->id,
- addr,
- drb_p->DlUpParamList[0].teId);
- }
- }
-}
-
-static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
- rrc_gNB_ue_context_t *ue_context_p,
- e1ap_bearer_setup_req_t *const req,
- NR_DRB_ToAddModList_t *DRB_configList,
- instance_t instance)
+static void cucp_cuup_bearer_context_setup_direct(sctp_assoc_t assoc_id, const e1ap_bearer_setup_req_t *req)
{
- gtpv1u_gnb_create_tunnel_req_t create_tunnel_req={0};
- gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp={0};
- gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
- LOG_W(NR_RRC, "recreate existing tunnels, while adding new ones\n");
- for (int i = 0; i < UE->nb_of_pdusessions; i++) {
- rrc_pdu_session_param_t *pdu = UE->pduSession + i;
- create_tunnel_req.pdusession_id[i] = pdu->param.pdusession_id;
- create_tunnel_req.incoming_rb_id[i] = i + 1;
- create_tunnel_req.outgoing_qfi[i] = req->pduSession[i].DRBnGRanList[0].qosFlows[0].id;
- memcpy(&create_tunnel_req.dst_addr[i].buffer, &pdu->param.upf_addr.buffer, sizeof(create_tunnel_req.dst_addr[0].buffer));
- create_tunnel_req.dst_addr[i].length = pdu->param.upf_addr.length;
- create_tunnel_req.outgoing_teid[i] = pdu->param.gtp_teid;
- }
- create_tunnel_req.num_tunnels = UE->nb_of_pdusessions;
- create_tunnel_req.ue_id = UE->rrc_ue_id;
- int ret = gtpv1u_create_ngu_tunnel(getCxtE1(instance)->gtpInstN3,
- &create_tunnel_req,
- &create_tunnel_resp,
- nr_pdcp_data_req_drb,
- sdap_data_req);
-
- if (ret != 0) {
- LOG_E(NR_RRC,
- "drb_config_gtpu_create=>gtpv1u_create_ngu_tunnel failed, cannot set up GTP tunnel for data transmissions of UE %ld\n",
- create_tunnel_req.ue_id);
- return ret;
- }
-
- nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(ctxt_p, &create_tunnel_resp, 0);
-
- uint8_t kRRCenc[16] = {0};
- uint8_t kRRCint[16] = {0};
- uint8_t kUPenc[16] = {0};
- uint8_t kUPint[16] = {0};
- /* Derive the keys from kgnb */
- if (DRB_configList != NULL) {
- nr_derive_key(UP_ENC_ALG, UE->ciphering_algorithm, UE->kgnb, kUPenc);
- nr_derive_key(UP_INT_ALG, UE->integrity_algorithm, UE->kgnb, kUPint);
- }
-
- nr_derive_key(RRC_ENC_ALG, UE->ciphering_algorithm, UE->kgnb, kRRCenc);
- nr_derive_key(RRC_INT_ALG, UE->integrity_algorithm, UE->kgnb, kRRCint);
-
- /* Refresh SRBs/DRBs */
-
- LOG_D(NR_RRC, "Configuring PDCP DRBs for UE %x\n", UE->rnti);
- nr_pdcp_add_drbs(ctxt_p->enb_flag,
- UE->rrc_ue_id,
- DRB_configList,
- (UE->integrity_algorithm << 4) | UE->ciphering_algorithm,
- kUPenc,
- kUPint);
-
- return ret;
+ AssertFatal(assoc_id == -1, "illegal assoc_id %d, impossible for integrated CU\n", assoc_id);
+ e1_bearer_context_setup(req);
}
-static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const req, instance_t instance)
+static void cucp_cuup_bearer_context_modif_direct(sctp_assoc_t assoc_id, const e1ap_bearer_setup_req_t *req)
{
- rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], req->gNB_cu_cp_ue_id);
- gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
- protocol_ctxt_t ctxt = {0};
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, UE->rrc_ue_id, 0, 0, 0);
-
- e1ap_bearer_setup_resp_t resp = {0};
- resp.numPDUSessions = req->numPDUSessions;
- for (int i = 0; i < resp.numPDUSessions; ++i) {
- resp.pduSession[i].numDRBSetup = req->pduSession[i].numDRB2Setup;
- for (int j = 0; j < req->pduSession[i].numDRB2Setup; j++) {
- DRB_nGRAN_to_setup_t *req_drb = req->pduSession[i].DRBnGRanList + j;
- DRB_nGRAN_setup_t *resp_drb = resp.pduSession[i].DRBnGRanList + j;
- resp_drb->id = req_drb->id;
- resp_drb->numQosFlowSetup = req_drb->numQosFlow2Setup;
- for (int k = 0; k < resp_drb->numQosFlowSetup; k++)
- resp_drb->qosFlows[k].id = req_drb->qosFlows[k].id;
- }
- }
-
- gNB_RRC_INST *rrc = RC.nrrrc[ctxt.module_id];
- // GTP tunnel for UL
- NR_DRB_ToAddModList_t *DRB_configList = fill_DRB_configList(UE);
- int ret = drb_config_gtpu_create(&ctxt, ue_context_p, req, DRB_configList, rrc->e1_inst);
- if (ret < 0) AssertFatal(false, "Unable to configure DRB or to create GTP Tunnel\n");
- // the code is very badly organized, it is not possible here to call freeDRBlist()
- ASN_STRUCT_FREE(asn_DEF_NR_DRB_ToAddModList,DRB_configList );
-
- // Used to store teids: if monolithic, will simply be NULL
- if(!NODE_IS_CU(RC.nrrrc[ctxt.module_id]->node_type)) {
- // intentionally empty
- } else {
- int remote_port = RC.nrrrc[ctxt.module_id]->eth_params_s.remote_portd;
- in_addr_t my_addr = inet_addr(RC.nrrrc[ctxt.module_id]->eth_params_s.my_addr);
- instance_t gtpInst = getCxt(instance)->gtpInst;
- // GTP tunnel for DL
- fill_e1ap_bearer_setup_resp(&resp, req, gtpInst, UE->rrc_ue_id, remote_port, my_addr);
- }
- // actually, we should receive the corresponding context setup response
- // message at the RRC and always react to this one. So in the following, we
- // just call the corresponding message handler
- prepare_and_send_ue_context_modification_f1(ue_context_p, &resp);
+ AssertFatal(assoc_id == -1, "illegal assoc_id %d, impossible for integrated CU\n", assoc_id);
+ e1_bearer_context_modif(req);
}
-static void cucp_cuup_bearer_context_mod_direct(e1ap_bearer_setup_req_t *const req, instance_t instance)
+static void cucp_cuup_bearer_context_release_cmd_direct(sctp_assoc_t assoc_id, const e1ap_bearer_release_cmd_t *cmd)
{
- // only update GTP tunnels if it is really a CU
- if (!NODE_IS_CU(RC.nrrrc[0]->node_type))
- return;
- instance_t gtpInst = getCxt(instance)->gtpInst;
- CU_update_UP_DL_tunnel(req, gtpInst, req->gNB_cu_cp_ue_id);
+ AssertFatal(assoc_id == -1, "illegal assoc_id %d, impossible for integrated CU\n", assoc_id);
+ e1_bearer_release_cmd(cmd);
}
void cucp_cuup_message_transfer_direct_init(gNB_RRC_INST *rrc) {
rrc->cucp_cuup.bearer_context_setup = cucp_cuup_bearer_context_setup_direct;
- rrc->cucp_cuup.bearer_context_mod = cucp_cuup_bearer_context_mod_direct;
+ rrc->cucp_cuup.bearer_context_mod = cucp_cuup_bearer_context_modif_direct;
+ rrc->cucp_cuup.bearer_context_release = cucp_cuup_bearer_context_release_cmd_direct;
}
diff --git a/openair2/RRC/NR/cucp_cuup_e1ap.c b/openair2/RRC/NR/cucp_cuup_e1ap.c
index 200729ec11..fb099178d4 100644
--- a/openair2/RRC/NR/cucp_cuup_e1ap.c
+++ b/openair2/RRC/NR/cucp_cuup_e1ap.c
@@ -16,44 +16,49 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#include "cucp_cuup_if.h"
-#include
-
-#include "platform_types.h"
#include "nr_rrc_defs.h"
#include "nr_rrc_proto.h"
#include "nr_rrc_extern.h"
#include "cucp_cuup_if.h"
-#include "openair2/COMMON/e1ap_messages_types.h"
-#include "openair3/SECU/secu_defs.h"
-#include
-#include "common/ran_context.h"
-
-extern RAN_CONTEXT_t RC;
-
-static void cucp_cuup_bearer_context_setup_e1ap(e1ap_bearer_setup_req_t *const req, instance_t instance)
+static void cucp_cuup_bearer_context_setup_e1ap(sctp_assoc_t assoc_id, const e1ap_bearer_setup_req_t *req)
{
- MessageDef *msg_p = itti_alloc_new_message(TASK_CUCP_E1, instance, E1AP_BEARER_CONTEXT_SETUP_REQ);
+ AssertFatal(assoc_id > 0, "illegal assoc_id %d\n", assoc_id);
+ MessageDef *msg_p = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_REQ);
+ msg_p->ittiMsgHeader.originInstance = assoc_id;
e1ap_bearer_setup_req_t *bearer_req = &E1AP_BEARER_CONTEXT_SETUP_REQ(msg_p);
memcpy(bearer_req, req, sizeof(e1ap_bearer_setup_req_t));
- itti_send_msg_to_task (TASK_CUCP_E1, instance, msg_p);
+ itti_send_msg_to_task (TASK_CUCP_E1, 0, msg_p);
}
-static void cucp_cuup_bearer_context_mod_e1ap(e1ap_bearer_setup_req_t *const req, instance_t instance)
+static void cucp_cuup_bearer_context_mod_e1ap(sctp_assoc_t assoc_id, const e1ap_bearer_setup_req_t *req)
{
- MessageDef *msg = itti_alloc_new_message(TASK_CUCP_E1, instance, E1AP_BEARER_CONTEXT_MODIFICATION_REQ);
+ AssertFatal(assoc_id > 0, "illegal assoc_id %d\n", assoc_id);
+ MessageDef *msg = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_MODIFICATION_REQ);
+ msg->ittiMsgHeader.originInstance = assoc_id;
e1ap_bearer_setup_req_t *req_msg = &E1AP_BEARER_CONTEXT_SETUP_REQ(msg);
memcpy(req_msg, req, sizeof(*req));
- itti_send_msg_to_task(TASK_CUCP_E1, instance, msg);
+ itti_send_msg_to_task(TASK_CUCP_E1, 0, msg);
+}
+
+static void cucp_cuup_bearer_context_release_cmd_e1ap(sctp_assoc_t assoc_id, const e1ap_bearer_release_cmd_t *cmd)
+{
+ AssertFatal(assoc_id > 0, "illegal assoc_id %d\n", assoc_id);
+ MessageDef *msg = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_RELEASE_CMD);
+ msg->ittiMsgHeader.originInstance = assoc_id;
+ e1ap_bearer_release_cmd_t *cmd_msg = &E1AP_BEARER_CONTEXT_RELEASE_CMD(msg);
+ memcpy(cmd_msg, cmd, sizeof(*cmd));
+ itti_send_msg_to_task(TASK_CUCP_E1, 0, msg);
}
void cucp_cuup_message_transfer_e1ap_init(gNB_RRC_INST *rrc) {
rrc->cucp_cuup.bearer_context_setup = cucp_cuup_bearer_context_setup_e1ap;
rrc->cucp_cuup.bearer_context_mod = cucp_cuup_bearer_context_mod_e1ap;
+ rrc->cucp_cuup.bearer_context_release = cucp_cuup_bearer_context_release_cmd_e1ap;
}
diff --git a/openair2/RRC/NR/cucp_cuup_if.h b/openair2/RRC/NR/cucp_cuup_if.h
index 079a32e850..cbf84a289e 100644
--- a/openair2/RRC/NR/cucp_cuup_if.h
+++ b/openair2/RRC/NR/cucp_cuup_if.h
@@ -16,27 +16,26 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#ifndef CUCP_CUUP_IF_H
#define CUCP_CUUP_IF_H
#include
+#include
+#include
+#include
#include "platform_types.h"
struct e1ap_bearer_setup_req_s;
struct e1ap_bearer_setup_resp_s;
-typedef void (*cucp_cuup_bearer_context_setup_func_t)(struct e1ap_bearer_setup_req_s *const req, instance_t instance);
+struct e1ap_bearer_release_cmd_s;
+typedef void (*cucp_cuup_bearer_context_setup_func_t)(sctp_assoc_t assoc_id, const struct e1ap_bearer_setup_req_s *req);
+typedef void (*cucp_cuup_bearer_context_release_func_t)(sctp_assoc_t assoc_id, const struct e1ap_bearer_release_cmd_s *cmd);
struct gNB_RRC_INST_s;
void cucp_cuup_message_transfer_direct_init(struct gNB_RRC_INST_s *rrc);
void cucp_cuup_message_transfer_e1ap_init(struct gNB_RRC_INST_s *rrc);
-void fill_e1ap_bearer_setup_resp(struct e1ap_bearer_setup_resp_s *resp,
- struct e1ap_bearer_setup_req_s *const req,
- instance_t gtpInst,
- ue_id_t ue_id,
- int remote_port,
- in_addr_t my_addr);
-void CU_update_UP_DL_tunnel(struct e1ap_bearer_setup_req_s *const req, instance_t instance, ue_id_t ue_id);
+
#endif
diff --git a/openair2/RRC/NR/mac_rrc_dl.h b/openair2/RRC/NR/mac_rrc_dl.h
index 9fc75b3073..6e43212f5e 100644
--- a/openair2/RRC/NR/mac_rrc_dl.h
+++ b/openair2/RRC/NR/mac_rrc_dl.h
@@ -16,7 +16,7 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#ifndef MAC_RRC_DL_H
diff --git a/openair2/RRC/NR/mac_rrc_dl_direct.c b/openair2/RRC/NR/mac_rrc_dl_direct.c
index c18a33954c..ee9a29c6ae 100644
--- a/openair2/RRC/NR/mac_rrc_dl_direct.c
+++ b/openair2/RRC/NR/mac_rrc_dl_direct.c
@@ -16,7 +16,7 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#include "nr_rrc_defs.h"
diff --git a/openair2/RRC/NR/mac_rrc_dl_f1ap.c b/openair2/RRC/NR/mac_rrc_dl_f1ap.c
index 6ead51e3da..951e9639c5 100644
--- a/openair2/RRC/NR/mac_rrc_dl_f1ap.c
+++ b/openair2/RRC/NR/mac_rrc_dl_f1ap.c
@@ -16,7 +16,7 @@
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
- * conmnc_digit_lengtht@openairinterface.org
+ * contact@openairinterface.org
*/
#include
diff --git a/openair2/RRC/NR/nr_rrc_common.c b/openair2/RRC/NR/nr_rrc_common.c
index 99873998f0..b64ea7d13f 100644
--- a/openair2/RRC/NR/nr_rrc_common.c
+++ b/openair2/RRC/NR/nr_rrc_common.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file nr_ rrc_common.c
+/*! \file nr_rrc_common.c
* \brief rrc common procedures for gNB
* \author Navid Nikaein and Raymond Knopp, WEI-TAI CHEN
* \date 2011 - 2014, 2018
diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c
index 5eaaf7eeac..5c3f44bd7e 100644
--- a/openair2/RRC/NR/nr_rrc_config.c
+++ b/openair2/RRC/NR/nr_rrc_config.c
@@ -41,7 +41,117 @@
const uint8_t slotsperframe[5] = {10, 20, 40, 80, 160};
-static NR_SearchSpace_t *rrc_searchspace_config(bool is_common, int searchspaceid, int coresetid)
+static NR_BWP_t clone_generic_parameters(const NR_BWP_t *gp)
+{
+ NR_BWP_t clone = {0};
+ clone.locationAndBandwidth = gp->locationAndBandwidth;
+ clone.subcarrierSpacing = gp->subcarrierSpacing;
+ if (gp->cyclicPrefix) {
+ asn1cCallocOne(clone.cyclicPrefix, *gp->cyclicPrefix);
+ }
+ return clone;
+}
+
+static NR_SetupRelease_RACH_ConfigCommon_t *clone_rach_configcommon(const NR_SetupRelease_RACH_ConfigCommon_t *rcc)
+{
+ if (rcc == NULL || rcc->present == NR_SetupRelease_RACH_ConfigCommon_PR_NOTHING)
+ return NULL;
+ NR_SetupRelease_RACH_ConfigCommon_t *clone = calloc_or_fail(1, sizeof(*clone));
+ clone->present = rcc->present;
+ if (clone->present == NR_SetupRelease_RACH_ConfigCommon_PR_release)
+ return clone;
+
+ uint8_t buf[1024];
+ asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_RACH_ConfigCommon, NULL, rcc->choice.setup, buf, sizeof(buf));
+ AssertFatal(enc_rval.encoded > 0 && enc_rval.encoded < sizeof(buf), "could not clone NR_RACH_ConfigCommon: problem while encoding\n");
+ asn_dec_rval_t dec_rval = uper_decode(NULL, &asn_DEF_NR_RACH_ConfigCommon, (void **)&clone->choice.setup, buf, enc_rval.encoded, 0, 0);
+ AssertFatal(dec_rval.code == RC_OK && dec_rval.consumed == enc_rval.encoded, "could not clone NR_RACH_ConfigCommon: problem while decoding\n");
+ return clone;
+}
+
+static NR_SetupRelease_PUSCH_ConfigCommon_t *clone_pusch_configcommon(const NR_SetupRelease_PUSCH_ConfigCommon_t *pcc)
+{
+ if (pcc == NULL || pcc->present == NR_SetupRelease_PUSCH_ConfigCommon_PR_NOTHING)
+ return NULL;
+ NR_SetupRelease_PUSCH_ConfigCommon_t *clone = calloc_or_fail(1, sizeof(*clone));
+ clone->present = pcc->present;
+ if (clone->present == NR_SetupRelease_PUSCH_ConfigCommon_PR_release)
+ return clone;
+
+ uint8_t buf[1024];
+ asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_PUSCH_ConfigCommon, NULL, pcc->choice.setup, buf, sizeof(buf));
+ AssertFatal(enc_rval.encoded > 0 && enc_rval.encoded < sizeof(buf), "could not clone NR_PUSCH_ConfigCommon: problem while encoding\n");
+ asn_dec_rval_t dec_rval = uper_decode(NULL, &asn_DEF_NR_PUSCH_ConfigCommon, (void **)&clone->choice.setup, buf, enc_rval.encoded, 0, 0);
+ AssertFatal(dec_rval.code == RC_OK && dec_rval.consumed == enc_rval.encoded, "could not clone NR_PUSCH_ConfigCommon: problem while decoding\n");
+ return clone;
+}
+
+static NR_SetupRelease_PUCCH_ConfigCommon_t *clone_pucch_configcommon(const NR_SetupRelease_PUCCH_ConfigCommon_t *pcc)
+{
+ if (pcc == NULL || pcc->present == NR_SetupRelease_PUCCH_ConfigCommon_PR_NOTHING)
+ return NULL;
+ NR_SetupRelease_PUCCH_ConfigCommon_t *clone = calloc_or_fail(1, sizeof(*clone));
+ clone->present = pcc->present;
+ if (clone->present == NR_SetupRelease_PUCCH_ConfigCommon_PR_release)
+ return clone;
+
+ uint8_t buf[1024];
+ asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_PUCCH_ConfigCommon, NULL, pcc->choice.setup, buf, sizeof(buf));
+ AssertFatal(enc_rval.encoded > 0 && enc_rval.encoded < sizeof(buf), "could not clone NR_PUCCH_ConfigCommon: problem while encoding\n");
+ asn_dec_rval_t dec_rval = uper_decode(NULL, &asn_DEF_NR_PUCCH_ConfigCommon, (void **)&clone->choice.setup, buf, enc_rval.encoded, 0, 0);
+ AssertFatal(dec_rval.code == RC_OK && dec_rval.consumed == enc_rval.encoded, "could not clone NR_PUCCH_ConfigCommon: problem while decoding\n");
+ return clone;
+}
+
+static NR_SetupRelease_PDCCH_ConfigCommon_t *clone_pdcch_configcommon(const NR_SetupRelease_PDCCH_ConfigCommon_t *pcc)
+{
+ if (pcc == NULL || pcc->present == NR_SetupRelease_PDCCH_ConfigCommon_PR_NOTHING)
+ return NULL;
+ NR_SetupRelease_PDCCH_ConfigCommon_t *clone = calloc(1, sizeof(*clone));
+ clone->present = pcc->present;
+ if (clone->present == NR_SetupRelease_PDCCH_ConfigCommon_PR_release)
+ return clone;
+
+ uint8_t buf[1024];
+ asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_PDCCH_ConfigCommon, NULL, pcc->choice.setup, buf, sizeof(buf));
+ AssertFatal(enc_rval.encoded > 0 && enc_rval.encoded < sizeof(buf), "could not clone NR_PDCCH_ConfigCommon: problem while encoding\n");
+ asn_dec_rval_t dec_rval = uper_decode(NULL, &asn_DEF_NR_PDCCH_ConfigCommon, (void **)&clone->choice.setup, buf, enc_rval.encoded, 0, 0);
+ AssertFatal(dec_rval.code == RC_OK && dec_rval.consumed == enc_rval.encoded, "could not clone NR_PDCCH_ConfigCommon: problem while decoding\n");
+ return clone;
+}
+
+static NR_SetupRelease_PDSCH_ConfigCommon_t *clone_pdsch_configcommon(const NR_SetupRelease_PDSCH_ConfigCommon_t *pcc)
+{
+ if (pcc == NULL || pcc->present == NR_SetupRelease_PDSCH_ConfigCommon_PR_NOTHING)
+ return NULL;
+ NR_SetupRelease_PDSCH_ConfigCommon_t *clone = calloc_or_fail(1, sizeof(*clone));
+ clone->present = pcc->present;
+ if (clone->present == NR_SetupRelease_PDSCH_ConfigCommon_PR_release)
+ return clone;
+
+ uint8_t buf[1024];
+ asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_PDSCH_ConfigCommon, NULL, pcc->choice.setup, buf, sizeof(buf));
+ AssertFatal(enc_rval.encoded > 0 && enc_rval.encoded < sizeof(buf), "could not clone NR_PDSCH_ConfigCommon: problem while encoding\n");
+ asn_dec_rval_t dec_rval = uper_decode(NULL, &asn_DEF_NR_PDSCH_ConfigCommon, (void **)&clone->choice.setup, buf, enc_rval.encoded, 0, 0);
+ AssertFatal(dec_rval.code == RC_OK && dec_rval.consumed == enc_rval.encoded, "could not clone NR_PDSCH_ConfigCommon: problem while decoding\n");
+ return clone;
+}
+
+static NR_PUSCH_Config_t *clone_pusch_config(const NR_PUSCH_Config_t *pc)
+{
+ if (pc == NULL)
+ return NULL;
+
+ uint8_t buf[1024];
+ asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_PUSCH_Config, NULL, pc, buf, sizeof(buf));
+ AssertFatal(enc_rval.encoded > 0 && enc_rval.encoded < sizeof(buf), "could not clone NR_PUSCH_Config: problem while encoding\n");
+ NR_PUSCH_Config_t *clone = NULL;
+ asn_dec_rval_t dec_rval = uper_decode(NULL, &asn_DEF_NR_PUSCH_Config, (void **)&clone, buf, enc_rval.encoded, 0, 0);
+ AssertFatal(dec_rval.code == RC_OK && dec_rval.consumed == enc_rval.encoded, "could not clone NR_PUSCH_Config: problem while decoding\n");
+ return clone;
+}
+
+NR_SearchSpace_t *rrc_searchspace_config(bool is_common, int searchspaceid, int coresetid)
{
NR_SearchSpace_t *ss = calloc(1,sizeof(*ss));
@@ -224,7 +334,7 @@ static void config_csirs(const NR_ServingCellConfigCommon_t *servingcellconfigco
csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList = calloc(1,sizeof(*csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList));
NR_NZP_CSI_RS_Resource_t *nzpcsi0 = calloc(1,sizeof(*nzpcsi0));
nzpcsi0->nzp_CSI_RS_ResourceId = id;
- NR_CSI_RS_ResourceMapping_t resourceMapping;
+ NR_CSI_RS_ResourceMapping_t resourceMapping = {0};
switch (num_dl_antenna_ports) {
case 1:
resourceMapping.frequencyDomainAllocation.present = NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row2;
@@ -1232,10 +1342,13 @@ static void config_downlinkBWP(NR_BWP_Downlink_t *bwp,
bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList = calloc(1,sizeof(*bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList));
bwp->bwp_Dedicated->pdcch_Config->choice.setup->controlResourceSetToAddModList = calloc(1,sizeof(*bwp->bwp_Dedicated->pdcch_Config->choice.setup->controlResourceSetToAddModList));
- asn1cSeqAdd(&bwp->bwp_Dedicated->pdcch_Config->choice.setup->controlResourceSetToAddModList->list, coreset);
+ // coreset2 is identical to coreset above, but reallocated to prevent double
+ // frees
+ NR_ControlResourceSet_t *coreset2 = get_coreset_config(bwp->bwp_Id, curr_bwp, ssb_bitmap);
+ asn1cSeqAdd(&bwp->bwp_Dedicated->pdcch_Config->choice.setup->controlResourceSetToAddModList->list, coreset2);
bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList = calloc(1,sizeof(*bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList));
- NR_SearchSpace_t *ss2 = rrc_searchspace_config(false, 10+bwp->bwp_Id, coreset->controlResourceSetId);
+ NR_SearchSpace_t *ss2 = rrc_searchspace_config(false, 10+bwp->bwp_Id, coreset2->controlResourceSetId);
asn1cSeqAdd(&bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToAddModList->list, ss2);
bwp->bwp_Dedicated->pdcch_Config->choice.setup->searchSpacesToReleaseList = NULL;
@@ -1271,17 +1384,16 @@ static void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
}
int curr_bwp = NRRIV2BW(ubwp->bwp_Common->genericParameters.locationAndBandwidth,MAX_BWP_SIZE);
-
- ubwp->bwp_Common->rach_ConfigCommon = is_SA ? NULL : scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon;
- ubwp->bwp_Common->pusch_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon;
+ ubwp->bwp_Common->rach_ConfigCommon = is_SA ? NULL : clone_rach_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon);
+ ubwp->bwp_Common->pusch_ConfigCommon = clone_pusch_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon);
ubwp->bwp_Common->pucch_ConfigCommon = CALLOC(1,sizeof(struct NR_SetupRelease_PUCCH_ConfigCommon));
ubwp->bwp_Common->pucch_ConfigCommon->present= NR_SetupRelease_PUCCH_ConfigCommon_PR_setup;
ubwp->bwp_Common->pucch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PUCCH_ConfigCommon));
struct NR_PUCCH_ConfigCommon *pucch_ConfigCommon = ubwp->bwp_Common->pucch_ConfigCommon->choice.setup;
pucch_ConfigCommon->pucch_ResourceCommon = NULL; // for BWP != 0 as per 38.213 section 9.2.1
pucch_ConfigCommon->pucch_GroupHopping = scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_GroupHopping;
- pucch_ConfigCommon->hoppingId = scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId;
- pucch_ConfigCommon->p0_nominal = scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup->p0_nominal;
+ asn1cCallocOne(pucch_ConfigCommon->hoppingId, *scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId);
+ asn1cCallocOne(pucch_ConfigCommon->p0_nominal, *scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup->p0_nominal);
if (!ubwp->bwp_Dedicated) {
ubwp->bwp_Dedicated = calloc(1,sizeof(*ubwp->bwp_Dedicated));
@@ -1304,7 +1416,8 @@ static void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
NR_PUSCH_Config_t *pusch_Config = NULL;
if(servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList &&
bwp_loop < servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count) {
- pusch_Config = servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_loop]->bwp_Dedicated->pusch_Config->choice.setup;
+ pusch_Config = clone_pusch_config(servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[bwp_loop]
+ ->bwp_Dedicated->pusch_Config->choice.setup);
}
ubwp->bwp_Dedicated->pusch_Config = config_pusch(pusch_Config, scc, configuration->force_256qam_off ? NULL : uecap);
@@ -1811,7 +1924,7 @@ NR_BCCH_DL_SCH_Message_t *get_SIB1_NR(const NR_ServingCellConfigCommon_t *scc, c
// servingCellConfigCommon
asn1cCalloc(sib1->servingCellConfigCommon, ServCellCom);
NR_BWP_DownlinkCommon_t *initialDownlinkBWP = &ServCellCom->downlinkConfigCommon.initialDownlinkBWP;
- initialDownlinkBWP->genericParameters = scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters;
+ initialDownlinkBWP->genericParameters = clone_generic_parameters(&scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters);
const NR_FrequencyInfoDL_t *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
for (int i = 0; i < frequencyInfoDL->frequencyBandList.list.count; i++) {
@@ -1838,26 +1951,19 @@ NR_BCCH_DL_SCH_Message_t *get_SIB1_NR(const NR_ServingCellConfigCommon_t *scc, c
frequencyInfoDL->scs_SpecificCarrierList.list.array[i]);
}
- initialDownlinkBWP->pdcch_ConfigCommon = scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon;
- initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList =
- CALLOC(1, sizeof(struct NR_PDCCH_ConfigCommon__commonSearchSpaceList));
- AssertFatal(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList != NULL, "out of memory\n");
+ initialDownlinkBWP->pdcch_ConfigCommon = clone_pdcch_configcommon(scc->downlinkConfigCommon->initialDownlinkBWP->pdcch_ConfigCommon);
+ AssertFatal(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList != NULL,
+ "expected commonSearchSpaceList to be populated through SCC\n");
+ AssertFatal(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->searchSpaceSIB1 != NULL,
+ "expected searchSpaceSIB1 to be populated through SCC\n");
+ AssertFatal(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace != NULL,
+ "expected ra_SearchSpace to be populated through SCC\n");
+ AssertFatal(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->pagingSearchSpace != NULL,
+ "expected pagingSearchSpace to be populated through SCC\n");
+ AssertFatal(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->searchSpaceOtherSystemInformation != NULL,
+ "expected searchSpaceOtherSystemInformation to be populated through SCC\n");
- NR_SearchSpace_t *ss1 = rrc_searchspace_config(true, 1, 0);
- asn1cSeqAdd(&initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList->list, ss1);
-
- NR_SearchSpace_t *ss2 = rrc_searchspace_config(true, 2, 0);
- asn1cSeqAdd(&initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList->list, ss2);
-
- NR_SearchSpace_t *ss3 = rrc_searchspace_config(true, 3, 0);
- asn1cSeqAdd(&initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->commonSearchSpaceList->list, ss3);
-
- asn1cCallocOne(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->searchSpaceSIB1, 0);
- asn1cCallocOne(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->searchSpaceOtherSystemInformation, 3);
- asn1cCallocOne(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->pagingSearchSpace, 2);
- asn1cCallocOne(initialDownlinkBWP->pdcch_ConfigCommon->choice.setup->ra_SearchSpace, 1);
-
- initialDownlinkBWP->pdsch_ConfigCommon = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon;
+ initialDownlinkBWP->pdsch_ConfigCommon = clone_pdsch_configcommon(scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon);
ServCellCom->downlinkConfigCommon.bcch_Config.modificationPeriodCoeff = NR_BCCH_Config__modificationPeriodCoeff_n2;
ServCellCom->downlinkConfigCommon.pcch_Config.defaultPagingCycle = NR_PagingCycle_rf256;
ServCellCom->downlinkConfigCommon.pcch_Config.nAndPagingFrameOffset.present = NR_PCCH_Config__nAndPagingFrameOffset_PR_quarterT;
@@ -1897,12 +2003,13 @@ NR_BCCH_DL_SCH_Message_t *get_SIB1_NR(const NR_ServingCellConfigCommon_t *scc, c
}
}
- UL->initialUplinkBWP.genericParameters = scc->uplinkConfigCommon->initialUplinkBWP->genericParameters;
- UL->initialUplinkBWP.rach_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon;
- UL->initialUplinkBWP.pusch_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon;
+ UL->initialUplinkBWP.genericParameters = clone_generic_parameters(&scc->uplinkConfigCommon->initialUplinkBWP->genericParameters);
+ UL->initialUplinkBWP.rach_ConfigCommon = clone_rach_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon);
+ UL->initialUplinkBWP.pusch_ConfigCommon = clone_pusch_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon);
+ free(UL->initialUplinkBWP.pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding);
UL->initialUplinkBWP.pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = NULL;
- UL->initialUplinkBWP.pucch_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon;
+ UL->initialUplinkBWP.pucch_ConfigCommon = clone_pucch_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon);
UL->timeAlignmentTimerCommon = NR_TimeAlignmentTimer_infinity;
@@ -2635,8 +2742,8 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
NR_PUSCH_Config_t *pusch_Config = NULL;
if (servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList) {
- pusch_Config =
- servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup;
+ pusch_Config = clone_pusch_config(
+ servingcellconfigdedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[0]->bwp_Dedicated->pusch_Config->choice.setup);
}
initialUplinkBWP->pusch_Config = config_pusch(pusch_Config, servingcellconfigcommon, uecap);
diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h
index 802d57428c..1db2d4a2f1 100644
--- a/openair2/RRC/NR/nr_rrc_config.h
+++ b/openair2/RRC/NR/nr_rrc_config.h
@@ -43,6 +43,7 @@ void nr_rrc_config_dl_tda(struct NR_PDSCH_TimeDomainResourceAllocationList *pdsc
NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon,
int curr_bwp);
void nr_rrc_config_ul_tda(NR_ServingCellConfigCommon_t *scc, int min_fb_delay);
+NR_SearchSpace_t *rrc_searchspace_config(bool is_common, int searchspaceid, int coresetid);
void prepare_sim_uecap(NR_UE_NR_Capability_t *cap,
NR_ServingCellConfigCommon_t *scc,
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
index c37979598a..2d5e00b3fc 100644
--- a/openair2/RRC/NR/nr_rrc_defs.h
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -330,11 +330,6 @@ typedef struct {
uint8_t *SIB23;
uint8_t sizeof_SIB23;
- NR_SIB2_t *sib2;
- NR_SIB3_t *sib3;
- NR_BCCH_DL_SCH_Message_t systemInformation; // SIB23
- NR_CellGroupConfig_t *secondaryCellGroup[MAX_NR_RRC_UE_CONTEXTS];
-
} rrc_gNB_carrier_data_t;
//---------------------------------------------------
@@ -367,6 +362,7 @@ typedef struct nr_mac_rrc_dl_if_s {
typedef struct cucp_cuup_if_s {
cucp_cuup_bearer_context_setup_func_t bearer_context_setup;
cucp_cuup_bearer_context_setup_func_t bearer_context_mod;
+ cucp_cuup_bearer_context_release_func_t bearer_context_release;
} cucp_cuup_if_t;
typedef struct nr_rrc_du_container_t {
@@ -376,6 +372,14 @@ typedef struct nr_rrc_du_container_t {
NR_SIB1_t *sib1;
} nr_rrc_du_container_t;
+typedef struct nr_rrc_cuup_container_t {
+ /* Tree-related data */
+ RB_ENTRY(nr_rrc_cuup_container_t) entries;
+
+ e1ap_setup_req_t *setup_req;
+ sctp_assoc_t assoc_id;
+} nr_rrc_cuup_container_t;
+
//---NR---(completely change)---------------------
typedef struct gNB_RRC_INST_s {
@@ -396,24 +400,6 @@ typedef struct gNB_RRC_INST_s {
// gNB N3 GTPU instance
instance_t e1_inst;
- // other PLMN parameters
- /// Mobile country code
- int mcc;
- /// Mobile network code
- int mnc;
- /// number of mnc digits
- int mnc_digit_length;
-
- // other RAN parameters
- int srb1_timer_poll_retransmit;
- int srb1_poll_pdu;
- int srb1_poll_byte;
- int srb1_max_retx_threshold;
- int srb1_timer_reordering;
- int srb1_timer_status_prohibit;
- int um_on_default_drb;
- int srs_enable[MAX_NUM_CCs];
-
char *uecap_file;
// security configuration (preferred algorithms)
@@ -423,10 +409,11 @@ typedef struct gNB_RRC_INST_s {
cucp_cuup_if_t cucp_cuup;
nr_rrc_du_container_t *du;
+ RB_HEAD(rrc_cuup_tree, nr_rrc_cuup_container_t) cuups; // CU-UPs, indexed by assoc_id
+ size_t num_cuups;
} gNB_RRC_INST;
#include "nr_rrc_proto.h" //should be put here otherwise compilation error
#endif
-/** @} */
diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h
index 510e058495..e5cf454b76 100644
--- a/openair2/RRC/NR/nr_rrc_proto.h
+++ b/openair2/RRC/NR/nr_rrc_proto.h
@@ -99,7 +99,7 @@ rrc_gNB_generate_RRCRelease(
);
/**\brief RRC eNB task.
- \param void *args_p Pointer on arguments to start the task. */
+ \param args_p Pointer on arguments to start the task. */
void *rrc_gnb_task(void *args_p);
/**\ Function to set or overwrite PTRS DL RRC parameters.
@@ -132,6 +132,10 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
void rrc_gNB_generate_dedicatedRRCReconfiguration(const protocol_ctxt_t *const ctxt_pP, rrc_gNB_ue_context_t *ue_context_pP);
+sctp_assoc_t get_existing_cuup_for_ue(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue);
+sctp_assoc_t get_new_cuup_for_ue(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue, int sst, int sd);
+int rrc_gNB_process_e1_setup_req(sctp_assoc_t assoc_id, e1ap_setup_req_t *req);
+
void bearer_context_setup_direct(e1ap_bearer_setup_req_t *req,
instance_t instance);
@@ -144,8 +148,6 @@ void ue_cxt_mod_send_e1ap(MessageDef *msg,
void ue_cxt_mod_direct(MessageDef *msg,
instance_t instance);
-NR_DRB_ToAddModList_t *fill_DRB_configList(gNB_RRC_UE_t *ue);
-
void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_context_p,
e1ap_bearer_setup_resp_t *e1ap_resp);
void nr_pdcp_add_srbs(eNB_flag_t enb_flag, ue_id_t rntiMaybeUEid, NR_SRB_ToAddModList_t *const srb2add_list, const uint8_t security_modeP, uint8_t *const kRRCenc, uint8_t *const kUPint);
@@ -160,5 +162,5 @@ void nr_pdcp_add_drbs(eNB_flag_t enb_flag,
int rrc_gNB_generate_pcch_msg(uint32_t tmsi, uint8_t paging_drx, instance_t instance, uint8_t CC_id);
void nr_rrc_transfer_protected_rrc_message(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue_p, uint8_t srb_id, const uint8_t* buffer, int size);
-
+/** @}*/
#endif
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index b057d023b3..027fc69862 100644
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -93,7 +93,6 @@
#include
#include
#include
-#include "openair2/LAYER2/nr_pdcp/nr_pdcp_e1_api.h"
#include "openair2/F1AP/f1ap_common.h"
#include "openair2/F1AP/f1ap_ids.h"
#include "openair2/SDAP/nr_sdap/nr_sdap_entity.h"
@@ -337,6 +336,7 @@ void openair_rrc_gNB_configuration(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *c
rrc_gNB_CU_DU_init(rrc);
uid_linear_allocator_init(&rrc->uid_allocator);
RB_INIT(&rrc->rrc_ue_head);
+ RB_INIT(&rrc->cuups);
rrc->configuration = *configuration;
/// System Information INIT
init_NR_SI(rrc);
@@ -575,7 +575,6 @@ static void rrc_gNB_generate_defaultRRCReconfiguration(const protocol_ctxt_t *co
dedicatedNAS_MessageList,
ue_p->masterCellGroup);
AssertFatal(size > 0, "cannot encode RRCReconfiguration in %s()\n", __func__);
- LOG_W(NR_RRC, "do_RRCReconfiguration(): size %d\n", size);
free_defaultMeasConfig(measconfig);
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
@@ -1041,6 +1040,7 @@ static void rrc_gNB_generate_RRCReestablishment(rrc_gNB_ue_context_t *ue_context
}
}
+ // TODO: should send E1 UE Bearer Modification with PDCP Reestablishment flag
nr_pdcp_reestablishment(ue_p->rrc_ue_id);
f1_ue_data_t ue_data = cu_get_f1_ue_data(ue_p->rrc_ue_id);
@@ -2033,8 +2033,6 @@ static void rrc_CU_process_ue_context_release_complete(MessageDef *msg_p)
}
gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
- nr_pdcp_remove_UE(UE->rrc_ue_id);
- newGtpuDeleteAllTunnels(instance, 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);
@@ -2055,10 +2053,13 @@ static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, i
if (resp->drbs_to_be_setup_length > 0) {
e1ap_bearer_setup_req_t req = {0};
+ // TODO: bug: we receive the DRBs, but we don't associate to a PDU session
+ // -> we are not sure which PDU session this is, and fill "all"
req.numPDUSessionsMod = UE->nb_of_pdusessions;
req.gNB_cu_cp_ue_id = UE->rrc_ue_id;
req.gNB_cu_up_ue_id = UE->rrc_ue_id;
for (int i = 0; i < req.numPDUSessionsMod; i++) {
+ req.pduSessionMod[i].sessionId = UE->pduSession[i].param.pdusession_id;
req.pduSessionMod[i].numDRB2Modify = resp->drbs_to_be_setup_length;
for (int j = 0; j < resp->drbs_to_be_setup_length; j++) {
f1ap_drb_to_be_setup_t *drb_f1 = resp->drbs_to_be_setup + j;
@@ -2073,7 +2074,8 @@ static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, i
// send the F1 response message up to update F1-U tunnel info
// it seems the rrc transaction id (xid) is not needed here
- rrc->cucp_cuup.bearer_context_mod(&req, instance);
+ sctp_assoc_t assoc_id = get_existing_cuup_for_ue(rrc, UE);
+ rrc->cucp_cuup.bearer_context_mod(assoc_id, &req);
}
if (resp->du_to_cu_rrc_information != NULL && resp->du_to_cu_rrc_information->cellGroupConfig != NULL) {
@@ -2314,47 +2316,42 @@ static int get_dl_mimo_layers(const f1ap_served_cell_info_t *cell_info, const NR
return(1);
}
-int rrc_gNB_process_e1_setup_req(e1ap_setup_req_t *req, instance_t instance) {
-
- AssertFatal(req->supported_plmns <= PLMN_LIST_MAX_SIZE, "Supported PLMNs is more than PLMN_LIST_MAX_SIZE\n");
- gNB_RRC_INST *rrc = RC.nrrrc[0]; //TODO: remove hardcoding of RC index here
- MessageDef *msg_p = itti_alloc_new_message(TASK_RRC_GNB, instance, E1AP_SETUP_RESP);
-
- e1ap_setup_resp_t *resp = &E1AP_SETUP_RESP(msg_p);
- resp->transac_id = req->transac_id;
-
- for (int i=0; i < req->supported_plmns; i++) {
- if (rrc->configuration.mcc[i] == req->plmns[i].mcc &&
- rrc->configuration.mnc[i] == req->plmns[i].mnc) {
- LOG_E(NR_RRC, "PLMNs received from CUUP (mcc:%d, mnc:%d) did not match with PLMNs in RRC (mcc:%d, mnc:%d)\n",
- req->plmns[i].mcc, req->plmns[i].mnc, rrc->configuration.mcc[i], rrc->configuration.mnc[i]);
- return -1;
- }
- }
-
- itti_send_msg_to_task(TASK_CUCP_E1, instance, msg_p);
-
- return 0;
-}
-
-void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_context_p, e1ap_bearer_setup_resp_t *e1ap_resp)
+void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp, instance_t instance)
{
- /* Generate a UE context modification request message towards the DU to
- * instruct the DU for SRB2 and DRB configuration and get the updates on
- * master cell group config from the DU*/
-
gNB_RRC_INST *rrc = RC.nrrrc[0];
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(rrc, resp->gNB_cu_cp_ue_id);
+ AssertFatal(ue_context_p != NULL, "did not find UE with CU UE ID %d\n", resp->gNB_cu_cp_ue_id);
gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
+ // currently: we don't have "infrastructure" to save the CU-UP UE ID, so we
+ // assume (and below check) that CU-UP UE ID == CU-CP UE ID
+ AssertFatal(resp->gNB_cu_cp_ue_id == resp->gNB_cu_up_ue_id,
+ "cannot handle CU-UP UE ID different from CU-CP UE ID (%d vs %d)\n",
+ resp->gNB_cu_cp_ue_id,
+ resp->gNB_cu_up_ue_id);
+
+ // save the tunnel address for the PDU sessions
+ for (int i=0; i < resp->numPDUSessions; i++) {
+ pdu_session_setup_t *e1_pdu = &resp->pduSession[i];
+ rrc_pdu_session_param_t *rrc_pdu = find_pduSession(UE, e1_pdu->id, false);
+ if (rrc_pdu == NULL) {
+ LOG_W(RRC, "E1: received setup for PDU session %ld, but has not been requested\n", e1_pdu->id);
+ continue;
+ }
+ rrc_pdu->param.gNB_teid_N3 = e1_pdu->teId;
+ memcpy(&rrc_pdu->param.gNB_addr_N3.buffer, &e1_pdu->tlAddress, sizeof(uint8_t) * 4);
+ rrc_pdu->param.gNB_addr_N3.length = sizeof(in_addr_t);
+ }
+
/* Instruction towards the DU for DRB configuration and tunnel creation */
- int nb_drb = e1ap_resp->pduSession[0].numDRBSetup;
+ int nb_drb = resp->pduSession[0].numDRBSetup;
f1ap_drb_to_be_setup_t drbs[nb_drb];
for (int i = 0; i < nb_drb; i++) {
- drbs[i].drb_id = e1ap_resp->pduSession[0].DRBnGRanList[i].id;
- drbs[i].rlc_mode = rrc->um_on_default_drb ? RLC_MODE_UM : RLC_MODE_AM;
- drbs[i].up_ul_tnl[0].tl_address = e1ap_resp->pduSession[0].DRBnGRanList[i].UpParamList[0].tlAddress;
+ drbs[i].drb_id = resp->pduSession[0].DRBnGRanList[i].id;
+ drbs[i].rlc_mode = rrc->configuration.um_on_default_drb ? RLC_MODE_UM : RLC_MODE_AM;
+ drbs[i].up_ul_tnl[0].tl_address = resp->pduSession[0].DRBnGRanList[i].UpParamList[0].tlAddress;
drbs[i].up_ul_tnl[0].port = rrc->eth_params_s.my_portd;
- drbs[i].up_ul_tnl[0].teid = e1ap_resp->pduSession[0].DRBnGRanList[i].UpParamList[0].teId;
+ drbs[i].up_ul_tnl[0].teid = resp->pduSession[0].DRBnGRanList[i].UpParamList[0].teId;
drbs[i].up_ul_tnl_length = 1;
}
@@ -2368,6 +2365,7 @@ void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_contex
srbs[0].lcid = 2;
}
+ /* Gather UE capability if present */
cu_to_du_rrc_information_t cu2du = {0};
cu_to_du_rrc_information_t *cu2du_p = NULL;
if (UE->ue_cap_buffer.len > 0 && UE->ue_cap_buffer.buf != NULL) {
@@ -2394,36 +2392,29 @@ void prepare_and_send_ue_context_modification_f1(rrc_gNB_ue_context_t *ue_contex
rrc->mac_rrc.ue_context_modification_request(&ue_context_modif_req);
}
-void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp, instance_t instance) {
- // Find the UE context from UE ID and send ITTI message to F1AP to send UE context modification message to DU
-
- rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], resp->gNB_cu_cp_ue_id);
- AssertFatal(ue_context_p != NULL, "did not find UE with CU UE ID %d\n", resp->gNB_cu_cp_ue_id);
- protocol_ctxt_t ctxt = {0};
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, resp->gNB_cu_cp_ue_id, 0, 0, 0);
-
- // currently: we don't have "infrastructure" to save the CU-UP UE ID, so we
- // assume (and below check) that CU-UP UE ID == CU-CP UE ID
- AssertFatal(resp->gNB_cu_cp_ue_id == resp->gNB_cu_up_ue_id,
- "cannot handle CU-UP UE ID different from CU-CP UE ID (%d vs %d)\n",
- resp->gNB_cu_cp_ue_id,
- resp->gNB_cu_up_ue_id);
-
- gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp={0};
- create_tunnel_resp.num_tunnels = resp->numPDUSessions;
- for (int i=0; i < resp->numPDUSessions; i++) {
- create_tunnel_resp.pdusession_id[i] = resp->pduSession[i].id;
- create_tunnel_resp.gnb_NGu_teid[i] = resp->pduSession[i].teId;
- memcpy(create_tunnel_resp.gnb_addr.buffer,
- &resp->pduSession[i].tlAddress,
- sizeof(in_addr_t));
- create_tunnel_resp.gnb_addr.length = sizeof(in_addr_t); // IPv4 byte length
+void rrc_gNB_process_e1_bearer_context_modif_resp(const e1ap_bearer_modif_resp_t *resp)
+{
+ gNB_RRC_INST *rrc = RC.nrrrc[0];
+ rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(rrc, resp->gNB_cu_cp_ue_id);
+ if (ue_context_p == NULL) {
+ LOG_E(RRC, "no UE with CU-CP UE ID %d found\n", resp->gNB_cu_cp_ue_id);
+ return;
}
- nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(&ctxt, &create_tunnel_resp, 0);
+ // there is not really anything to do here as of now
+ for (int i = 0; i < resp->numPDUSessionsMod; ++i) {
+ const pdu_session_modif_t *pdu = &resp->pduSessionMod[i];
+ LOG_I(RRC, "UE %d: PDU session ID %ld modified %d bearers\n", resp->gNB_cu_cp_ue_id, pdu->id, pdu->numDRBModified);
+ }
+}
- // TODO: SV: combine e1ap_bearer_setup_req_t and e1ap_bearer_setup_resp_t and minimize assignments
- prepare_and_send_ue_context_modification_f1(ue_context_p, resp);
+void rrc_gNB_process_e1_bearer_context_release_cplt(const e1ap_bearer_release_cplt_t *cplt)
+{
+ // there is not really anything to do here as of now
+ // note that we don't check for the UE: it does not exist anymore if the F1
+ // UE context release complete arrived from the DU first, after which we free
+ // the UE context
+ LOG_I(RRC, "UE %d: received bearer release complete\n", cplt->gNB_cu_cp_ue_id);
}
static void rrc_CU_process_f1_lost_connection(gNB_RRC_INST *rrc, f1ap_lost_connection_t *lc, sctp_assoc_t assoc_id)
@@ -2553,8 +2544,6 @@ static void write_rrc_stats(const gNB_RRC_INST *rrc)
fclose(f);
}
-///---------------------------------------------------------------------------------------------------------------///
-///---------------------------------------------------------------------------------------------------------------///
void *rrc_gnb_task(void *args_p) {
MessageDef *msg_p;
instance_t instance;
@@ -2698,11 +2687,20 @@ void *rrc_gnb_task(void *args_p) {
break;
case E1AP_SETUP_REQ:
- rrc_gNB_process_e1_setup_req(&E1AP_SETUP_REQ(msg_p), instance);
+ rrc_gNB_process_e1_setup_req(msg_p->ittiMsgHeader.originInstance, &E1AP_SETUP_REQ(msg_p));
break;
case E1AP_BEARER_CONTEXT_SETUP_RESP:
rrc_gNB_process_e1_bearer_context_setup_resp(&E1AP_BEARER_CONTEXT_SETUP_RESP(msg_p), instance);
+ break;
+
+ case E1AP_BEARER_CONTEXT_MODIFICATION_RESP:
+ rrc_gNB_process_e1_bearer_context_modif_resp(&E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg_p));
+ break;
+
+ case E1AP_BEARER_CONTEXT_RELEASE_CPLT:
+ rrc_gNB_process_e1_bearer_context_release_cplt(&E1AP_BEARER_CONTEXT_RELEASE_CPLT(msg_p));
+ break;
case NGAP_PAGING_IND:
rrc_gNB_process_PAGING_IND(msg_p, instance);
@@ -2855,6 +2853,13 @@ rrc_gNB_generate_RRCRelease(
deliver_ue_ctxt_release_data_t data = {.rrc = rrc, .release_cmd = &ue_context_release_cmd};
nr_pdcp_data_req_srb(ctxt_pP->rntiMaybeUEid, DCCH, rrc_gNB_mui++, size, buffer, rrc_deliver_ue_ctxt_release_cmd, &data);
+ sctp_assoc_t assoc_id = get_existing_cuup_for_ue(rrc, UE);
+ e1ap_bearer_release_cmd_t cmd = {
+ .gNB_cu_cp_ue_id = UE->rrc_ue_id,
+ .gNB_cu_up_ue_id = UE->rrc_ue_id,
+ };
+ rrc->cucp_cuup.bearer_context_release(assoc_id, &cmd);
+
/* UE will be freed after UE context release complete */
}
@@ -2936,7 +2941,8 @@ void rrc_gNB_trigger_new_bearer(int rnti)
ue->xids[xid] = RRC_PDUSESSION_MODIFY;
ue->pduSession[0].xid = xid; // hack: fake xid for ongoing PDU session
LOG_W(RRC, "trigger new bearer %ld for UE %04x xid %d\n", drb->id, ue->rnti, xid);
- rrc->cucp_cuup.bearer_context_setup(&bearer_req, 0);
+ sctp_assoc_t assoc_id = get_existing_cuup_for_ue(rrc, ue);
+ rrc->cucp_cuup.bearer_context_setup(assoc_id, &bearer_req);
}
void rrc_gNB_trigger_release_bearer(int rnti)
diff --git a/openair2/RRC/NR/rrc_gNB_GTPV1U.c b/openair2/RRC/NR/rrc_gNB_GTPV1U.c
index 3ef3e62d51..6c8627aa09 100644
--- a/openair2/RRC/NR/rrc_gNB_GTPV1U.c
+++ b/openair2/RRC/NR/rrc_gNB_GTPV1U.c
@@ -75,35 +75,3 @@ int rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ctxt_
return 0;
}
-
-int nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ctxt_pP, const gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp_pP, int offset)
-{
- if (!create_tunnel_resp_pP) {
- LOG_E(NR_RRC, "create_tunnel_resp_pP error\n");
- return -1;
- }
-
- LOG_D(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT " RX CREATE_TUNNEL_RESP num tunnels %u \n", PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP), create_tunnel_resp_pP->num_tunnels);
- /* we look up by CU UE ID! Do NOT change back to RNTI! */
- rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rntiMaybeUEid);
- if (!ue_context_p) {
- LOG_E(NR_RRC, "UE table error\n");
- return -1;
- }
-
- for (int i = 0; i < create_tunnel_resp_pP->num_tunnels; i++) {
- ue_context_p->ue_context.pduSession[i + offset].param.gNB_teid_N3 = create_tunnel_resp_pP->gnb_NGu_teid[i];
- ue_context_p->ue_context.pduSession[i + offset].param.gNB_addr_N3 = create_tunnel_resp_pP->gnb_addr;
- AssertFatal(ue_context_p->ue_context.pduSession[i + offset].param.pdusession_id == create_tunnel_resp_pP->pdusession_id[i], "");
- LOG_I(NR_RRC,
- PROTOCOL_NR_RRC_CTXT_UE_FMT
- " nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP tunnel (%u) bearer UE context index %u, id %u, gtp addr len %d \n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
- create_tunnel_resp_pP->gnb_NGu_teid[i],
- i,
- create_tunnel_resp_pP->pdusession_id[i],
- create_tunnel_resp_pP->gnb_addr.length);
- }
-
- return 0;
-}
diff --git a/openair2/RRC/NR/rrc_gNB_GTPV1U.h b/openair2/RRC/NR/rrc_gNB_GTPV1U.h
index d538127d76..d7d1013db8 100644
--- a/openair2/RRC/NR/rrc_gNB_GTPV1U.h
+++ b/openair2/RRC/NR/rrc_gNB_GTPV1U.h
@@ -38,6 +38,4 @@ rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(
uint8_t *inde_list
);
-int nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ctxt_pP, const gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp_pP, int offset_in_rrc);
-
#endif
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c
index cac6884631..49d3ccad99 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.c
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.c
@@ -378,6 +378,9 @@ int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t
uint8_t nb_pdusessions_tosetup = req->nb_of_pdusessions;
if (nb_pdusessions_tosetup) {
AssertFatal(false, "PDU sessions in Initial context setup request not handled by E1 yet\n");
+ /* this code should pass by E1: commenting here for future reference, but
+ * already handled in E1 for the "normal case" of a separate request for
+ * PDU session setup.
gtpv1u_gnb_create_tunnel_req_t create_tunnel_req = {0};
for (int i = 0; i < nb_pdusessions_tosetup; i++) {
UE->nb_of_pdusessions++;
@@ -404,6 +407,7 @@ int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t
}
nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(&ctxt, &create_tunnel_resp, 0);
+ */
}
/* NAS PDU */
@@ -757,6 +761,8 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins
UE->amf_ue_ngap_id = msg->amf_ue_ngap_id;
e1ap_bearer_setup_req_t bearer_req = {0};
+
+ e1ap_nssai_t cuup_nssai = {0};
for (int i = 0; i < msg->nb_pdusessions_tosetup; i++) {
rrc_pdu_session_param_t *pduSession = find_pduSession(UE, msg->pdusession_setup_params[i].pdusession_id, true);
pdusession_t *session = &pduSession->param;
@@ -775,7 +781,13 @@ 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;
- pdu->sst = msg->allowed_nssai[i].sST;
+ ngap_allowed_NSSAI_t *nssai = &msg->allowed_nssai[i];
+ pdu->nssai.sst = nssai->sST;
+ pdu->nssai.sd = 0xffffff;
+ if (nssai->sD_flag)
+ pdu->nssai.sd = nssai->sD[0] << 16 | nssai->sD[1] << 8 | nssai->sD[2];
+ 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;
pdu->confidentialityProtectionIndication = rrc->security.do_drb_ciphering ? E1AP_ConfidentialityProtectionIndication_required : E1AP_ConfidentialityProtectionIndication_not_needed;
@@ -787,7 +799,7 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins
drb->id = i + j + UE->nb_of_pdusessions;
- drb->defaultDRB = E1AP_DefaultDRB_true;
+ drb->defaultDRB = true;
drb->sDAP_Header_UL = !(rrc->configuration.enable_sdap);
drb->sDAP_Header_DL = !(rrc->configuration.enable_sdap);
@@ -823,7 +835,13 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins
}
int xid = rrc_gNB_get_next_transaction_identifier(instance);
UE->xids[xid] = RRC_PDUSESSION_ESTABLISH;
- rrc->cucp_cuup.bearer_context_setup(&bearer_req, instance);
+ /* Limitation: we assume one fixed CU-UP per UE. We base the selection on
+ * NSSAI, but the UE might have multiple PDU sessions with differing slices,
+ * in which we might need to select different CU-UPs. In this case, we would
+ * actually need to group the E1 bearer context setup for the different
+ * CU-UPs, and send them to the different CU-UPs. */
+ sctp_assoc_t assoc_id = get_new_cuup_for_ue(rrc, UE, cuup_nssai.sst, cuup_nssai.sd);
+ rrc->cucp_cuup.bearer_context_setup(assoc_id, &bearer_req);
return;
}
diff --git a/openair2/RRC/NR/rrc_gNB_cuup.c b/openair2/RRC/NR/rrc_gNB_cuup.c
new file mode 100644
index 0000000000..3ab6dfe7bb
--- /dev/null
+++ b/openair2/RRC/NR/rrc_gNB_cuup.c
@@ -0,0 +1,174 @@
+/*
+ * 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
+ */
+
+#include "common/ran_context.h"
+#include "nr_rrc_defs.h"
+#include "openair2/F1AP/f1ap_ids.h"
+
+static int cuup_compare(const nr_rrc_cuup_container_t *a, const nr_rrc_cuup_container_t *b)
+{
+ if (a->assoc_id > b->assoc_id)
+ return 1;
+ if (a->assoc_id == b->assoc_id)
+ return 0;
+ return -1; /* a->assoc_id < b->assoc_id */
+}
+
+/* Tree management functions */
+RB_GENERATE/*_STATIC*/(rrc_cuup_tree, nr_rrc_cuup_container_t, entries, cuup_compare);
+
+static const nr_rrc_cuup_container_t *select_cuup_slice(const struct rrc_cuup_tree *t, const gNB_RRC_UE_t *ue, int sst, int sd)
+{
+ nr_rrc_cuup_container_t *second_best_match = NULL; /* if no NSSAI matches exactly */
+ nr_rrc_cuup_container_t *cuup = NULL;
+ RB_FOREACH(cuup, rrc_cuup_tree, (struct rrc_cuup_tree *)&t) {
+ e1ap_setup_req_t *sr = cuup->setup_req;
+ for (int p = 0; p < sr->supported_plmns; ++p) {
+ /* actually we should also check that the PLMN selected by the UE matches */
+ 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);
+ 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);
+ second_best_match = cuup; /* only the SST matches -> "good enough" */
+ }
+ }
+ }
+ }
+ return second_best_match;
+}
+
+static const nr_rrc_cuup_container_t *select_cuup_round_robin(size_t n_t, const struct rrc_cuup_tree *t, const gNB_RRC_UE_t *ue)
+{
+ /* pick the CU-UP following a "round-robin" fashion: select CU-UP M = RRC UE
+ * ID % N with N number of CU-UPs */
+ int m = (ue->rrc_ue_id - 1) % n_t;
+ 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);
+ return cuup;
+ }
+ m--;
+ }
+ /* this should not happen: no CU-UP available? */
+ return NULL;
+}
+
+sctp_assoc_t get_existing_cuup_for_ue(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue)
+{
+ f1_ue_data_t ue_data = cu_get_f1_ue_data(ue->rrc_ue_id);
+ if (ue_data.e1_assoc_id == 0) {
+ LOG_W(RRC, "UE %d should be associated to CU-UP, but is not\n", ue->rrc_ue_id);
+ /* we could possibly check the SST/SD from the PDU session */
+ return get_new_cuup_for_ue(rrc, ue, 0, 0);
+ }
+ LOG_D(RRC, "UE %d using CU-UP assoc_id %d\n", ue->rrc_ue_id, ue_data.e1_assoc_id);
+ return ue_data.e1_assoc_id;
+}
+
+sctp_assoc_t get_new_cuup_for_ue(const gNB_RRC_INST *rrc, const gNB_RRC_UE_t *ue, int sst, int sd)
+{
+ /* check if there is already a UE associated */
+ f1_ue_data_t ue_data = cu_get_f1_ue_data(ue->rrc_ue_id);
+ if (ue_data.e1_assoc_id != 0) {
+ LOG_I(RRC, "UE %d using CU-UP assoc_id %d\n", ue->rrc_ue_id, ue_data.e1_assoc_id);
+ return ue_data.e1_assoc_id;
+ }
+
+ /* it is zero -> no CUUP for this UE yet, get the (only) CU-UP that is
+ * connected */
+ if (RB_EMPTY(&rrc->cuups)) {
+ LOG_W(RRC, "no CU-UPs connected: UE %d cannot have a DRB\n", ue->rrc_ue_id);
+ return 0; /* no CUUP connected */
+ }
+
+ const nr_rrc_cuup_container_t *selected = NULL;
+ if (sst != 0) /* only do if there is slice information */
+ selected = select_cuup_slice(&rrc->cuups, ue, sst, sd);
+ if (selected == NULL) /* nothing found yet */
+ selected = select_cuup_round_robin(rrc->num_cuups, &rrc->cuups, ue);
+ if (selected == NULL) {
+ selected = RB_ROOT(&rrc->cuups);
+ }
+ AssertFatal(selected != NULL, "logic error: could not select CU-UP, is one connected?\n");
+
+ /* update the association for the UE so it will be picked up later */
+ ue_data.e1_assoc_id = selected->assoc_id;
+ cu_remove_f1_ue_data(ue->rrc_ue_id);
+ cu_add_f1_ue_data(ue->rrc_ue_id, &ue_data);
+ LOG_I(RRC, "UE %d associating to CU-UP assoc_id %d out of %ld CU-UPs\n", ue->rrc_ue_id, ue_data.e1_assoc_id, rrc->num_cuups);
+
+ return ue_data.e1_assoc_id;
+}
+
+int rrc_gNB_process_e1_setup_req(sctp_assoc_t assoc_id, e1ap_setup_req_t *req)
+{
+ AssertFatal(req->supported_plmns <= PLMN_LIST_MAX_SIZE, "Supported PLMNs is more than PLMN_LIST_MAX_SIZE\n");
+ gNB_RRC_INST *rrc = RC.nrrrc[0];
+
+ nr_rrc_cuup_container_t *c = NULL;
+ RB_FOREACH(c, rrc_cuup_tree, &rrc->cuups) {
+ if (req->gNB_cu_up_id == c->setup_req->gNB_cu_up_id) {
+ LOG_E(NR_RRC,
+ "Connecting CU-UP ID %ld name %s (assoc_id %d) has same ID as existing CU-UP ID %ld name %s (assoc_id %d)\n",
+ req->gNB_cu_up_id,
+ req->gNB_cu_up_name,
+ assoc_id,
+ c->setup_req->gNB_cu_up_id,
+ c->setup_req->gNB_cu_up_name,
+ c->assoc_id);
+ return -1;
+ }
+ }
+
+ for (int i = 0; i < req->supported_plmns; i++) {
+ PLMN_ID_t *id = &req->plmn[i].id;
+ if (rrc->configuration.mcc[i] != id->mcc || rrc->configuration.mnc[i] != id->mnc) {
+ LOG_E(NR_RRC,
+ "PLMNs received from CUUP (mcc:%d, mnc:%d) did not match with PLMNs in RRC (mcc:%d, mnc:%d)\n",
+ id->mcc,
+ id->mnc,
+ rrc->configuration.mcc[i],
+ rrc->configuration.mnc[i]);
+ return -1;
+ }
+ }
+
+ LOG_I(RRC, "Accepting new CU-UP ID %ld name %s (assoc_id %d)\n", req->gNB_cu_up_id, req->gNB_cu_up_name, assoc_id);
+ nr_rrc_cuup_container_t *cuup = malloc(sizeof(*cuup));
+ AssertFatal(cuup, "out of memory\n");
+ cuup->setup_req = malloc(sizeof(*cuup->setup_req));
+ *cuup->setup_req = *req;
+ cuup->assoc_id = assoc_id;
+ RB_INSERT(rrc_cuup_tree, &rrc->cuups, cuup);
+ rrc->num_cuups++;
+
+ MessageDef *msg_p = itti_alloc_new_message(TASK_RRC_GNB, 0, E1AP_SETUP_RESP);
+ msg_p->ittiMsgHeader.originInstance = assoc_id;
+ e1ap_setup_resp_t *resp = &E1AP_SETUP_RESP(msg_p);
+ resp->transac_id = req->transac_id;
+ itti_send_msg_to_task(TASK_CUCP_E1, 0, msg_p);
+
+ return 0;
+}
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index 709ffa50e4..b8a55e71e3 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -1729,172 +1729,193 @@ void nr_rrc_handle_ra_indication(unsigned int mod_id, bool ra_succeeded)
// reconfigurationWithSync is included in spCellConfig
}
}
-
void *rrc_nrue_task(void *args_p)
{
- MessageDef *msg_p;
- instance_t instance;
- unsigned int ue_mod_id;
- int result;
- protocol_ctxt_t ctxt;
- itti_mark_task_ready(TASK_RRC_NRUE);
+ itti_mark_task_ready(TASK_RRC_NRUE);
- while(1) {
- // Wait for a message
- itti_receive_msg (TASK_RRC_NRUE, &msg_p);
- instance = ITTI_MSG_DESTINATION_INSTANCE (msg_p);
- ue_mod_id = UE_INSTANCE_TO_MODULE_ID(instance);
-
- switch (ITTI_MSG_ID(msg_p)) {
- case TERMINATE_MESSAGE:
- LOG_W(NR_RRC, " *** Exiting RRC thread\n");
- itti_exit_task ();
- break;
-
- case MESSAGE_TEST:
- LOG_D(NR_RRC, "[UE %d] Received %s\n", ue_mod_id, ITTI_MSG_NAME (msg_p));
- break;
-
- case NR_RRC_MAC_SYNC_IND:
- LOG_D(NR_RRC, "[UE %d] Received %s: frame %d\n",
- ue_mod_id,
- ITTI_MSG_NAME (msg_p),
- NR_RRC_MAC_SYNC_IND (msg_p).frame);
- nr_sync_msg_t sync_msg = NR_RRC_MAC_SYNC_IND (msg_p).in_sync ?
- IN_SYNC : OUT_OF_SYNC;
- NR_UE_Timers_Constants_t *tac = &NR_UE_rrc_inst[ue_mod_id].timers_and_constants;
- handle_rlf_sync(tac, sync_msg);
- break;
-
- case NRRRC_FRAME_PROCESS:
- LOG_D(NR_RRC, "[UE %d] Received %s: frame %d\n",
- ue_mod_id, ITTI_MSG_NAME (msg_p), NRRRC_FRAME_PROCESS (msg_p).frame);
- // increase the timers every 10ms (every new frame)
- NR_UE_Timers_Constants_t *timers = &NR_UE_rrc_inst[ue_mod_id].timers_and_constants;
- nr_rrc_handle_timers(timers);
- NR_UE_RRC_SI_INFO *SInfo = &NR_UE_rrc_inst[ue_mod_id].SInfo[NRRRC_FRAME_PROCESS (msg_p).gnb_id];
- nr_rrc_SI_timers(SInfo);
- break;
-
- case NR_RRC_MAC_MSG3_IND:
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_MSG3_IND (msg_p).rnti, 0, 0);
- LOG_D(NR_RRC, "[UE %d] Received %s for RNTI %d\n",
- ue_mod_id,
- ITTI_MSG_NAME (msg_p),
- NR_RRC_MAC_MSG3_IND (msg_p).rnti);
- nr_rrc_ue_generate_ra_msg(ue_mod_id, NR_RRC_MAC_MSG3_IND (msg_p).rnti);
- break;
-
- case NR_RRC_MAC_RA_IND:
- LOG_D(NR_RRC, "[UE %d] Received %s: frame %d RA %s\n",
- ue_mod_id,
- ITTI_MSG_NAME (msg_p),
- NR_RRC_MAC_RA_IND (msg_p).frame,
- NR_RRC_MAC_RA_IND (msg_p).RA_succeeded ? "successful" : "failed");
- nr_rrc_handle_ra_indication(ue_mod_id, NR_RRC_MAC_RA_IND (msg_p).RA_succeeded);
- break;
-
- case NR_RRC_MAC_BCCH_DATA_IND:
- LOG_D(NR_RRC, "[UE %d] Received %s: gNB %d\n", ue_mod_id, ITTI_MSG_NAME (msg_p),
- NR_RRC_MAC_BCCH_DATA_IND (msg_p).gnb_index);
- NRRrcMacBcchDataInd *bcch = &NR_RRC_MAC_BCCH_DATA_IND (msg_p);
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, GNB_FLAG_NO, NOT_A_RNTI, bcch->frame, 0, bcch->gnb_index);
- if (bcch->is_bch)
- nr_rrc_ue_decode_NR_BCCH_BCH_Message(ue_mod_id,
- bcch->gnb_index,
- bcch->sdu,
- bcch->sdu_size);
- else
- nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(ctxt.module_id,
- bcch->gnb_index,
- bcch->sdu,
- bcch->sdu_size,
- bcch->rsrq,
- bcch->rsrp);
- break;
-
- case NR_RRC_MAC_CCCH_DATA_IND:
- PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_CCCH_DATA_IND (msg_p).rnti, 0, 0);
- nr_rrc_ue_decode_ccch(&ctxt,
- NR_RRC_MAC_CCCH_DATA_IND (msg_p).sdu,
- NR_RRC_MAC_CCCH_DATA_IND (msg_p).sdu_size,
- /* gNB_index = */ 0);
- break;
-
- /* PDCP messages */
- case NR_RRC_DCCH_DATA_IND:
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt,
- NR_RRC_DCCH_DATA_IND (msg_p).module_id,
- GNB_FLAG_NO,
- NR_RRC_DCCH_DATA_IND (msg_p).rnti,
- NR_RRC_DCCH_DATA_IND (msg_p).frame,
- 0,
- NR_RRC_DCCH_DATA_IND (msg_p).gNB_index);
- LOG_D(NR_RRC, "[UE %d] Received %s: frameP %d, DCCH %d, gNB %d\n",
- NR_RRC_DCCH_DATA_IND (msg_p).module_id,
- ITTI_MSG_NAME (msg_p),
- NR_RRC_DCCH_DATA_IND (msg_p).frame,
- NR_RRC_DCCH_DATA_IND (msg_p).dcch_index,
- NR_RRC_DCCH_DATA_IND (msg_p).gNB_index);
- LOG_D(NR_RRC, PROTOCOL_RRC_CTXT_UE_FMT"Received %s DCCH %d, gNB %d\n",
- PROTOCOL_NR_RRC_CTXT_UE_ARGS(&ctxt),
- ITTI_MSG_NAME (msg_p),
- NR_RRC_DCCH_DATA_IND (msg_p).dcch_index,
- NR_RRC_DCCH_DATA_IND (msg_p).gNB_index);
- nr_rrc_ue_decode_dcch (
- &ctxt,
- NR_RRC_DCCH_DATA_IND (msg_p).dcch_index,
- NR_RRC_DCCH_DATA_IND (msg_p).sdu_p,
- NR_RRC_DCCH_DATA_IND (msg_p).sdu_size,
- NR_RRC_DCCH_DATA_IND (msg_p).gNB_index);
- break;
-
- case NAS_KENB_REFRESH_REQ:
- memcpy((void *)NR_UE_rrc_inst[ue_mod_id].kgnb, (void *)NAS_KENB_REFRESH_REQ(msg_p).kenb, sizeof(NR_UE_rrc_inst[ue_mod_id].kgnb));
- LOG_D(RRC, "[UE %d] Received %s: refreshed RRC::KgNB = "
- "%02x%02x%02x%02x"
- "%02x%02x%02x%02x"
- "%02x%02x%02x%02x"
- "%02x%02x%02x%02x"
- "%02x%02x%02x%02x"
- "%02x%02x%02x%02x"
- "%02x%02x%02x%02x"
- "%02x%02x%02x%02x\n",
- ue_mod_id, ITTI_MSG_NAME (msg_p),
- NR_UE_rrc_inst[ue_mod_id].kgnb[0], NR_UE_rrc_inst[ue_mod_id].kgnb[1], NR_UE_rrc_inst[ue_mod_id].kgnb[2], NR_UE_rrc_inst[ue_mod_id].kgnb[3],
- NR_UE_rrc_inst[ue_mod_id].kgnb[4], NR_UE_rrc_inst[ue_mod_id].kgnb[5], NR_UE_rrc_inst[ue_mod_id].kgnb[6], NR_UE_rrc_inst[ue_mod_id].kgnb[7],
- NR_UE_rrc_inst[ue_mod_id].kgnb[8], NR_UE_rrc_inst[ue_mod_id].kgnb[9], NR_UE_rrc_inst[ue_mod_id].kgnb[10], NR_UE_rrc_inst[ue_mod_id].kgnb[11],
- NR_UE_rrc_inst[ue_mod_id].kgnb[12], NR_UE_rrc_inst[ue_mod_id].kgnb[13], NR_UE_rrc_inst[ue_mod_id].kgnb[14], NR_UE_rrc_inst[ue_mod_id].kgnb[15],
- NR_UE_rrc_inst[ue_mod_id].kgnb[16], NR_UE_rrc_inst[ue_mod_id].kgnb[17], NR_UE_rrc_inst[ue_mod_id].kgnb[18], NR_UE_rrc_inst[ue_mod_id].kgnb[19],
- NR_UE_rrc_inst[ue_mod_id].kgnb[20], NR_UE_rrc_inst[ue_mod_id].kgnb[21], NR_UE_rrc_inst[ue_mod_id].kgnb[22], NR_UE_rrc_inst[ue_mod_id].kgnb[23],
- NR_UE_rrc_inst[ue_mod_id].kgnb[24], NR_UE_rrc_inst[ue_mod_id].kgnb[25], NR_UE_rrc_inst[ue_mod_id].kgnb[26], NR_UE_rrc_inst[ue_mod_id].kgnb[27],
- NR_UE_rrc_inst[ue_mod_id].kgnb[28], NR_UE_rrc_inst[ue_mod_id].kgnb[29], NR_UE_rrc_inst[ue_mod_id].kgnb[30], NR_UE_rrc_inst[ue_mod_id].kgnb[31]);
- break;
-
- case NAS_UPLINK_DATA_REQ: {
- uint32_t length;
- uint8_t *buffer;
- LOG_I(NR_RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, ITTI_MSG_NAME (msg_p), NAS_UPLINK_DATA_REQ (msg_p).UEid);
- /* Create message for PDCP (ULInformationTransfer_t) */
- length = do_NR_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.data);
- /* Transfer data to PDCP */
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, GNB_FLAG_NO, NR_UE_rrc_inst[ue_mod_id].rnti, 0, 0,0);
- // check if SRB2 is created, if yes request data_req on SRB2
- rb_id_t srb_id = NR_UE_rrc_inst[ue_mod_id].Srb[0][2].status == RB_ESTABLISHED ? 2 : 1;
- nr_pdcp_data_req_srb(ctxt.rntiMaybeUEid, srb_id, nr_rrc_mui++, length, buffer, deliver_pdu_srb_rlc, NULL);
- break;
- }
-
- default:
- LOG_E(NR_RRC, "[UE %d] Received unexpected message %s\n", ue_mod_id, ITTI_MSG_NAME (msg_p));
- break;
- }
- LOG_D(NR_RRC, "[UE %d] RRC Status %d\n", ue_mod_id, NR_UE_rrc_inst[ue_mod_id].nrRrcState);
- result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
- AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
- msg_p = NULL;
+ while (1) {
+ rrc_nrue(NULL);
}
}
+
+void *rrc_nrue(void *notUsed)
+{
+ protocol_ctxt_t ctxt;
+
+ MessageDef *msg_p = NULL;
+ itti_receive_msg(TASK_RRC_NRUE, &msg_p);
+ instance_t instance = ITTI_MSG_DESTINATION_INSTANCE(msg_p);
+ unsigned int ue_mod_id = UE_INSTANCE_TO_MODULE_ID(instance);
+
+ switch (ITTI_MSG_ID(msg_p)) {
+ case TERMINATE_MESSAGE:
+ LOG_W(NR_RRC, " *** Exiting RRC thread\n");
+ itti_exit_task();
+ break;
+
+ case MESSAGE_TEST:
+ LOG_D(NR_RRC, "[UE %d] Received %s\n", ue_mod_id, ITTI_MSG_NAME(msg_p));
+ break;
+
+ case NR_RRC_MAC_SYNC_IND:
+ LOG_D(NR_RRC, "[UE %d] Received %s: frame %d\n", ue_mod_id, ITTI_MSG_NAME(msg_p), NR_RRC_MAC_SYNC_IND(msg_p).frame);
+ nr_sync_msg_t sync_msg = NR_RRC_MAC_SYNC_IND(msg_p).in_sync ? IN_SYNC : OUT_OF_SYNC;
+ NR_UE_Timers_Constants_t *tac = &NR_UE_rrc_inst[ue_mod_id].timers_and_constants;
+ handle_rlf_sync(tac, sync_msg);
+ break;
+
+ case NRRRC_FRAME_PROCESS:
+ LOG_D(NR_RRC, "[UE %d] Received %s: frame %d\n", ue_mod_id, ITTI_MSG_NAME(msg_p), NRRRC_FRAME_PROCESS(msg_p).frame);
+ // increase the timers every 10ms (every new frame)
+ NR_UE_Timers_Constants_t *timers = &NR_UE_rrc_inst[ue_mod_id].timers_and_constants;
+ nr_rrc_handle_timers(timers);
+ NR_UE_RRC_SI_INFO *SInfo = &NR_UE_rrc_inst[ue_mod_id].SInfo[NRRRC_FRAME_PROCESS(msg_p).gnb_id];
+ nr_rrc_SI_timers(SInfo);
+ break;
+
+ case NR_RRC_MAC_MSG3_IND:
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_MSG3_IND(msg_p).rnti, 0, 0);
+ LOG_D(NR_RRC, "[UE %d] Received %s for RNTI %d\n", ue_mod_id, ITTI_MSG_NAME(msg_p), NR_RRC_MAC_MSG3_IND(msg_p).rnti);
+ nr_rrc_ue_generate_ra_msg(ue_mod_id, NR_RRC_MAC_MSG3_IND(msg_p).rnti);
+ break;
+
+ case NR_RRC_MAC_RA_IND:
+ LOG_D(NR_RRC,
+ "[UE %d] Received %s: frame %d RA %s\n",
+ ue_mod_id,
+ ITTI_MSG_NAME(msg_p),
+ NR_RRC_MAC_RA_IND(msg_p).frame,
+ NR_RRC_MAC_RA_IND(msg_p).RA_succeeded ? "successful" : "failed");
+ nr_rrc_handle_ra_indication(ue_mod_id, NR_RRC_MAC_RA_IND(msg_p).RA_succeeded);
+ break;
+
+ case NR_RRC_MAC_BCCH_DATA_IND:
+ LOG_D(NR_RRC, "[UE %d] Received %s: gNB %d\n", ue_mod_id, ITTI_MSG_NAME(msg_p), NR_RRC_MAC_BCCH_DATA_IND(msg_p).gnb_index);
+ NRRrcMacBcchDataInd *bcch = &NR_RRC_MAC_BCCH_DATA_IND(msg_p);
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, GNB_FLAG_NO, NOT_A_RNTI, bcch->frame, 0, bcch->gnb_index);
+ if (bcch->is_bch)
+ nr_rrc_ue_decode_NR_BCCH_BCH_Message(ue_mod_id, bcch->gnb_index, bcch->sdu, bcch->sdu_size);
+ else
+ nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(ctxt.module_id,
+ bcch->gnb_index,
+ bcch->sdu,
+ bcch->sdu_size,
+ bcch->rsrq,
+ bcch->rsrp);
+ break;
+
+ case NR_RRC_MAC_CCCH_DATA_IND:
+ PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_CCCH_DATA_IND(msg_p).rnti, 0, 0);
+ nr_rrc_ue_decode_ccch(&ctxt,
+ NR_RRC_MAC_CCCH_DATA_IND(msg_p).sdu,
+ NR_RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size,
+ /* gNB_index = */ 0);
+ break;
+
+ /* PDCP messages */
+ case NR_RRC_DCCH_DATA_IND:
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt,
+ NR_RRC_DCCH_DATA_IND(msg_p).module_id,
+ GNB_FLAG_NO,
+ NR_RRC_DCCH_DATA_IND(msg_p).rnti,
+ NR_RRC_DCCH_DATA_IND(msg_p).frame,
+ 0,
+ NR_RRC_DCCH_DATA_IND(msg_p).gNB_index);
+ LOG_D(NR_RRC,
+ "[UE %d] Received %s: frameP %d, DCCH %d, gNB %d\n",
+ NR_RRC_DCCH_DATA_IND(msg_p).module_id,
+ ITTI_MSG_NAME(msg_p),
+ NR_RRC_DCCH_DATA_IND(msg_p).frame,
+ NR_RRC_DCCH_DATA_IND(msg_p).dcch_index,
+ NR_RRC_DCCH_DATA_IND(msg_p).gNB_index);
+ LOG_D(NR_RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT "Received %s DCCH %d, gNB %d\n",
+ PROTOCOL_NR_RRC_CTXT_UE_ARGS(&ctxt),
+ ITTI_MSG_NAME(msg_p),
+ NR_RRC_DCCH_DATA_IND(msg_p).dcch_index,
+ NR_RRC_DCCH_DATA_IND(msg_p).gNB_index);
+ nr_rrc_ue_decode_dcch(&ctxt,
+ NR_RRC_DCCH_DATA_IND(msg_p).dcch_index,
+ NR_RRC_DCCH_DATA_IND(msg_p).sdu_p,
+ NR_RRC_DCCH_DATA_IND(msg_p).sdu_size,
+ NR_RRC_DCCH_DATA_IND(msg_p).gNB_index);
+ break;
+
+ case NAS_KENB_REFRESH_REQ:
+ memcpy((void *)NR_UE_rrc_inst[ue_mod_id].kgnb,
+ (void *)NAS_KENB_REFRESH_REQ(msg_p).kenb,
+ sizeof(NR_UE_rrc_inst[ue_mod_id].kgnb));
+ LOG_D(RRC,
+ "[UE %d] Received %s: refreshed RRC::KgNB = "
+ "%02x%02x%02x%02x"
+ "%02x%02x%02x%02x"
+ "%02x%02x%02x%02x"
+ "%02x%02x%02x%02x"
+ "%02x%02x%02x%02x"
+ "%02x%02x%02x%02x"
+ "%02x%02x%02x%02x"
+ "%02x%02x%02x%02x\n",
+ ue_mod_id,
+ ITTI_MSG_NAME(msg_p),
+ NR_UE_rrc_inst[ue_mod_id].kgnb[0],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[1],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[2],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[3],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[4],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[5],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[6],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[7],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[8],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[9],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[10],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[11],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[12],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[13],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[14],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[15],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[16],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[17],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[18],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[19],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[20],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[21],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[22],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[23],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[24],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[25],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[26],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[27],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[28],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[29],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[30],
+ NR_UE_rrc_inst[ue_mod_id].kgnb[31]);
+ break;
+
+ case NAS_UPLINK_DATA_REQ: {
+ uint32_t length;
+ uint8_t *buffer;
+ LOG_I(NR_RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, ITTI_MSG_NAME(msg_p), NAS_UPLINK_DATA_REQ(msg_p).UEid);
+ /* Create message for PDCP (ULInformationTransfer_t) */
+ length =
+ do_NR_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ(msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ(msg_p).nasMsg.data);
+ /* Transfer data to PDCP */
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, GNB_FLAG_NO, NR_UE_rrc_inst[ue_mod_id].rnti, 0, 0, 0);
+ // check if SRB2 is created, if yes request data_req on SRB2
+ rb_id_t srb_id = NR_UE_rrc_inst[ue_mod_id].Srb[0][2].status == RB_ESTABLISHED ? 2 : 1;
+ nr_pdcp_data_req_srb(ctxt.rntiMaybeUEid, srb_id, nr_rrc_mui++, length, buffer, deliver_pdu_srb_rlc, NULL);
+ break;
+ }
+
+ default:
+ LOG_E(NR_RRC, "[UE %d] Received unexpected message %s\n", ue_mod_id, ITTI_MSG_NAME(msg_p));
+ break;
+ }
+ LOG_D(NR_RRC, "[UE %d] RRC Status %d\n", ue_mod_id, NR_UE_rrc_inst[ue_mod_id].nrRrcState);
+ int result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
+ AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
+ return NULL;
+}
+
void nr_rrc_ue_process_sidelink_radioResourceConfig(
module_id_t Mod_idP,
uint8_t gNB_index,
diff --git a/openair2/RRC/NR_UE/rrc_defs.h b/openair2/RRC/NR_UE/rrc_defs.h
index c2d2c1a0de..b4d967d304 100644
--- a/openair2/RRC/NR_UE/rrc_defs.h
+++ b/openair2/RRC/NR_UE/rrc_defs.h
@@ -238,4 +238,3 @@ typedef struct NR_UE_RRC_INST_s {
} NR_UE_RRC_INST_t;
#endif
-/** @} */
diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h
index 335b9ba84d..c9d0e40221 100644
--- a/openair2/RRC/NR_UE/rrc_proto.h
+++ b/openair2/RRC/NR_UE/rrc_proto.h
@@ -114,6 +114,7 @@ int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index);
/**\brief RRC UE task.
\param void *args_p Pointer on arguments to start the task. */
void *rrc_nrue_task(void *args_p);
+void *rrc_nrue(void *args_p);
void nr_rrc_handle_timers(NR_UE_Timers_Constants_t *timers);
@@ -155,6 +156,5 @@ void nr_rrc_manage_rlc_bearers(const NR_CellGroupConfig_t *cellGroupConfig,
int rnti);
int configure_NR_SL_Preconfig(int sync_source);
-/** @}*/
#endif
diff --git a/openair2/UTIL/MATH/oml.h b/openair2/UTIL/MATH/oml.h
index abdc8fbf09..7c3c65c123 100644
--- a/openair2/UTIL/MATH/oml.h
+++ b/openair2/UTIL/MATH/oml.h
@@ -41,14 +41,12 @@
#define PI 3.14159265
-
-/*! \fn void set_taus_seed(unsigned int seed_type);
-* \brief initialize seeds used for the generation of taus random values
-* \param[in] initial value
-* \param[out]
-* \note
-* @ingroup _oml
-*/
+/*! \fn set_taus_seed
+ * \brief initialize seeds used for the generation of taus random values
+ * \param[in] seed_type initial value
+ * \note
+ * @ingroup _oml
+ */
void set_taus_seed(unsigned int seed_type);
/*! \fn inline unsigned int taus(unsigned int comp);
diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c
index 94150164e8..bc70742373 100644
--- a/openair2/UTIL/OPT/probe.c
+++ b/openair2/UTIL/OPT/probe.c
@@ -41,12 +41,10 @@
There is different modules:
- OAI Address
- OAI Components
-- \ref _frame
numbering:
-# OAI Address
-# OAI Components
--# \ref _frame
The following diagram is based on graphviz (http://www.graphviz.org/), you need to install the package to view the diagram.
*
@@ -73,11 +71,6 @@ Doxygen help and commands can be found at http://www.stack.nl/~dimitri/doxygen/c
\section _arch Architecture
-You need to set the IMAGE_PATH in your Doxyfile
-
-\image html arch.png "Architecture"
-\image latex arch.eps "Architecture"
-
\subsection _mac MAC
thisis the mac
\subsection _rlc RLC
@@ -641,4 +634,4 @@ void terminate_opt(void) {
break;
}
}
-
+/** @}*/
diff --git a/openair2/UTIL/OTG/otg_defs.h b/openair2/UTIL/OTG/otg_defs.h
index 3f4f31e63b..8aea71d443 100644
--- a/openair2/UTIL/OTG/otg_defs.h
+++ b/openair2/UTIL/OTG/otg_defs.h
@@ -185,9 +185,9 @@ typedef enum {
} VOIP_STATE;
/**
- * \enum ALPHABET
+ * \enum ALPHABET_GEN
*
- *\brief ALPHABET Alphabet type to generate random string
+ *\brief ALPHABET_GEN Alphabet type to generate random string
*
*/
typedef enum {
@@ -218,21 +218,6 @@ typedef enum {
TCP_IPV6,
} HEADER_TYPE;
-/**
- * \enum TRAFFIC_TYPE
- *
- * \brief HEADER_TYPE alows to identify the traffic type no specific type, m2m,etc.
- *
- */
-
-/*
-typedef enum {
-NO_TYPE=0,
-M2M_TYPE,
-}TRAFFIC_TYPE;
- */
-
-
/*
otg_models: definitions and structures,
see otg_models.c for a detailed description
@@ -333,8 +318,9 @@ typedef struct {
*/
typedef struct {
int max_nb_frames; /*!< \brief Max Number of frames*/
- int application_type[NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB][NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB][MAX_NUM_APPLICATION]; /*!\brief It identify the application of the simulated traffic, could be cbr, m2m, gaming,etc*/
- /*!\header info */
+ int application_type[NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB][NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB]
+ [MAX_NUM_APPLICATION]; /*!\brief It identify the application of the simulated traffic, could be cbr, m2m,
+ gaming,etc*/
int trans_proto[NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB][NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB][MAX_NUM_APPLICATION]; /*!\brief Transport Protocol*/
int ip_v[NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB][NUMBER_OF_eNB_MAX + MAX_MOBILES_PER_ENB][MAX_NUM_APPLICATION]; /*!\brief Ip version */
//int header_compression; /*!\brief Specify if header compression is used or not */
diff --git a/openair2/UTIL/OTG/otg_rx.h b/openair2/UTIL/OTG/otg_rx.h
index 770d053ada..357eeb3123 100644
--- a/openair2/UTIL/OTG/otg_rx.h
+++ b/openair2/UTIL/OTG/otg_rx.h
@@ -92,12 +92,11 @@ float owd_const_mobile_core(void);
*/
float owd_const_IP_backbone(void);
-/*! \fn float owd_const_applicatione();
-*\brief compute the one way delay introduced in LTE/LTE-A network REF PAPER: "Latency for Real-Time Machine-to-Machine Communication in LTE-Based System Architecture"
-*\param[out] float: application delay constant
-*\note
-*@ingroup _otg
-*/
+/*! \fn owd_const_application
+ *\brief compute the one way delay introduced in LTE/LTE-A network REF PAPER: "Latency for Real-Time Machine-to-Machine
+ *Communication in LTE-Based System Architecture" \note
+ *@ingroup _otg
+ */
float owd_const_application(void);
diff --git a/openair2/UTIL/OTG/otg_tx.h b/openair2/UTIL/OTG/otg_tx.h
index 355294a8f4..fdd6350481 100644
--- a/openair2/UTIL/OTG/otg_tx.h
+++ b/openair2/UTIL/OTG/otg_tx.h
@@ -130,9 +130,8 @@ unsigned char *header_gen(const int hdr_size);
*/
unsigned char *payload_pkts(const int payload_size);
-
-/*! \fn
-char * serialize_buffer(char* const header, char* const payload, const unsigned int buffer_size, const int flag, const int flow_id, const int ctime, const int seq_num, const int hdr_type, const int state)
+/*! \fn char * serialize_buffer(char* const header, char* const payload, const unsigned int buffer_size, const int flag, const int
+flow_id, const int ctime, const int seq_num, const int hdr_type, const int state)
* \brief serilize the packet and add otg control information
* \param[in] char* header pointer to the header
* \param[in] char* payload pointer to the payload
@@ -173,14 +172,6 @@ unsigned char * serialize_buffer(
*/
int adjust_size(int size);
-
-/*! \fn int header_size_genint src();
-* \brief return the header size corresponding to ip version and transport protocol
-* \param[in] the sender (src)
-* \param[out] size of packet header
-* \note
-* @ingroup _otg
-*/
void header_size_gen(const int src, const int dst, const int application);
void init_predef_multicast_traffic(void);
diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h
index f42ec6bc4c..81880cb71c 100644
--- a/openair2/X2AP/x2ap_common.h
+++ b/openair2/X2AP/x2ap_common.h
@@ -132,5 +132,6 @@ ssize_t x2ap_generate_unsuccessfull_outcome(
@returns void
**/
void x2ap_handle_criticality(X2AP_Criticality_t criticality);
+/** @}*/
#endif /* X2AP_COMMON_H_ */
diff --git a/openair2/X2AP/x2ap_eNB.c b/openair2/X2AP/x2ap_eNB.c
index 831cad4742..1eac6b6fd7 100644
--- a/openair2/X2AP/x2ap_eNB.c
+++ b/openair2/X2AP/x2ap_eNB.c
@@ -548,9 +548,10 @@ void x2ap_gNB_trigger_sgNB_add_req_ack(instance_t instance,
}
/**
- * @fn : Function triggers sgnb reconfiguration complete
+ * @fn x2ap_eNB_trigger_sgnb_reconfiguration_complete
+ *\brief: Function triggers sgnb reconfiguration complete
* @param : IN instance, IN x2ap_reconf_complete
-**/
+ **/
static
void x2ap_eNB_trigger_sgnb_reconfiguration_complete(instance_t instance,
x2ap_ENDC_reconf_complete_t *x2ap_reconf_complete)
diff --git a/openair3/M3AP/m3ap_MCE.h b/openair3/M3AP/m3ap_MCE.h
index 3a617776e3..06ef1dc498 100644
--- a/openair3/M3AP/m3ap_MCE.h
+++ b/openair3/M3AP/m3ap_MCE.h
@@ -19,11 +19,10 @@
* contact@openairinterface.org
*/
-/*! \file m3ap_eNB.h
+/*! \file m3ap_MCE.h
* \brief m3ap tasks for eNB
- * \author Konstantinos Alexandris , Cedric Roux , Navid Nikaein
- * \date 2018
- * \version 1.0
+ * \author Konstantinos Alexandris , Cedric Roux , Navid Nikaein
+ * \date 2018 \version 1.0
*/
#include
diff --git a/openair3/M3AP/m3ap_MCE_handler.c b/openair3/M3AP/m3ap_MCE_handler.c
index e791b2a47c..f490caf325 100644
--- a/openair3/M3AP/m3ap_MCE_handler.c
+++ b/openair3/M3AP/m3ap_MCE_handler.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file m3ap_eNB_handler.c
+/*! \file m3ap_MCE_handler.c
* \brief m3ap handler procedures for eNB
* \author Javier Morgade
* \date 2019
diff --git a/openair3/M3AP/m3ap_MME_handler.c b/openair3/M3AP/m3ap_MME_handler.c
index a459d1000c..8a3e38820f 100644
--- a/openair3/M3AP/m3ap_MME_handler.c
+++ b/openair3/M3AP/m3ap_MME_handler.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file m3ap_eNB_handler.c
+/*! \file m3ap_MME_handler.c
* \brief m3ap handler procedures for eNB
* \author Javier Morgade
* \date 2019
diff --git a/openair3/M3AP/m3ap_MME_management_procedures.h b/openair3/M3AP/m3ap_MME_management_procedures.h
index b5a75f8a23..f45c856cb8 100644
--- a/openair3/M3AP/m3ap_MME_management_procedures.h
+++ b/openair3/M3AP/m3ap_MME_management_procedures.h
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file m3ap_eNB_management_procedures.h
+/*! \file m3ap_MME_management_procedures.h
* \brief m3ap tasks for eNB
* \author Javier Morgade
* \date 2019
diff --git a/openair3/M3AP/m3ap_common.h b/openair3/M3AP/m3ap_common.h
index d59407c2ec..7c8ea18a5d 100644
--- a/openair3/M3AP/m3ap_common.h
+++ b/openair3/M3AP/m3ap_common.h
@@ -140,5 +140,6 @@ ssize_t m3ap_generate_unsuccessfull_outcome(
@returns void
**/
void m3ap_handle_criticality(M3AP_Criticality_t criticality);
+/** @}*/
#endif /* M3AP_COMMON_H_ */
diff --git a/openair3/M3AP/m3ap_handler.h b/openair3/M3AP/m3ap_handler.h
index 5dcc71204e..f736d45b25 100644
--- a/openair3/M3AP/m3ap_handler.h
+++ b/openair3/M3AP/m3ap_handler.h
@@ -19,15 +19,15 @@
* contact@openairinterface.org
*/
-/*! \file m2ap_handler.h
- * \brief m2ap handler procedures for eNB
+/*! \file m3ap_handler.h
+ * \brief m3ap handler procedures for eNB
* \author Javier Morgade
* \date 2019
* \version 0.1
*/
-#ifndef M2AP_MCE_OLD_HANDLERS_H_
-#define M2AP_MCE_OLD_HANDLERS_H_
+#ifndef M3AP_MCE_OLD_HANDLERS_H_
+#define M3AP_MCE_OLD_HANDLERS_H_
#include "m2ap_eNB_defs.h"
@@ -43,4 +43,4 @@ int m3ap_handle_message(instance_t instance,
const uint8_t *const data,
const uint32_t data_length);
-#endif /* M2AP_MCE_HANDLERS_H_ */
+#endif
diff --git a/openair3/M3AP/m3ap_itti_messaging.c b/openair3/M3AP/m3ap_itti_messaging.c
index 83b51f0091..70183f86ff 100644
--- a/openair3/M3AP/m3ap_itti_messaging.c
+++ b/openair3/M3AP/m3ap_itti_messaging.c
@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
-/*! \file m3ap_MCE_itti_messaging.c
+/*! \file m3ap_itti_messaging.c
* \brief m3ap tasks for MCE
* \author Javier Morgade
* \date 2019
diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
index 59ff269edd..015b2a8f9e 100644
--- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c
+++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
@@ -57,7 +57,7 @@ uint8_t *registration_request_buf;
uint32_t registration_request_len;
extern char *baseNetAddress;
extern uint16_t NB_UE_INST;
-static nr_ue_nas_t nr_ue_nas;
+static nr_ue_nas_t nr_ue_nas = {0};
static int nas_protected_security_header_encode(
char *buffer,
@@ -416,6 +416,8 @@ void derive_ue_keys(uint8_t *buf, nr_ue_nas_t *nas) {
nr_ue_nas_t *get_ue_nas_info(module_id_t module_id)
{
DevAssert(module_id == 0);
+ if (!nr_ue_nas.uicc)
+ nr_ue_nas.uicc = checkUicc(0);
return &nr_ue_nas;
}
@@ -912,97 +914,105 @@ static void send_nas_uplink_data_req(instance_t instance, const as_nas_info_t *i
void *nas_nrue_task(void *args_p)
{
- MessageDef *msg_p;
- instance_t instance;
- int result;
- uint8_t msg_type = 0;
- uint8_t *pdu_buffer = NULL;
-
-
nr_ue_nas.uicc = checkUicc(0);
- nr_ue_nas_t *nas = get_ue_nas_info(0);
- itti_mark_task_ready (TASK_NAS_NRUE);
-
- while(1) {
- // Wait for a message or an event
- itti_receive_msg (TASK_NAS_NRUE, &msg_p);
+ while (1) {
+ nas_nrue(NULL);
+ }
+}
- if (msg_p != NULL) {
- instance = msg_p->ittiMsgHeader.originInstance;
- AssertFatal(instance == 0, "cannot handle more than one UE!\n");
+void *nas_nrue(void *args_p)
+{
+ // Wait for a message or an event
+ nr_ue_nas.uicc = checkUicc(0);
+ MessageDef *msg_p;
+ itti_receive_msg(TASK_NAS_NRUE, &msg_p);
- switch (ITTI_MSG_ID(msg_p)) {
- case INITIALIZE_MESSAGE:
+ if (msg_p != NULL) {
+ instance_t instance = msg_p->ittiMsgHeader.originInstance;
+ AssertFatal(instance == 0, "cannot handle more than one UE!\n");
- break;
+ switch (ITTI_MSG_ID(msg_p)) {
+ case INITIALIZE_MESSAGE:
- case TERMINATE_MESSAGE:
- itti_exit_task();
- break;
+ break;
- case MESSAGE_TEST:
- break;
+ case TERMINATE_MESSAGE:
+ itti_exit_task();
+ break;
- case NAS_CELL_SELECTION_CNF:
- LOG_I(NAS,
- "[UE %ld] Received %s: errCode %u, cellID %u, tac %u\n",
- instance,
- ITTI_MSG_NAME(msg_p),
- NAS_CELL_SELECTION_CNF(msg_p).errCode,
- NAS_CELL_SELECTION_CNF(msg_p).cellID,
- NAS_CELL_SELECTION_CNF(msg_p).tac);
- // as_stmsi_t s_tmsi={0, 0};
- // as_nas_info_t nas_info;
- // plmn_t plmnID={0, 0, 0, 0};
- // generateRegistrationRequest(&nas_info);
- // nr_nas_itti_nas_establish_req(0, AS_TYPE_ORIGINATING_SIGNAL, s_tmsi, plmnID, nas_info.data, nas_info.length, 0);
- break;
+ case MESSAGE_TEST:
+ break;
- case NAS_CELL_SELECTION_IND:
- LOG_I(NAS, "[UE %ld] Received %s: cellID %u, tac %u\n", instance, ITTI_MSG_NAME(msg_p), NAS_CELL_SELECTION_IND(msg_p).cellID, NAS_CELL_SELECTION_IND(msg_p).tac);
+ case NAS_CELL_SELECTION_CNF:
+ LOG_I(NAS,
+ "[UE %ld] Received %s: errCode %u, cellID %u, tac %u\n",
+ instance,
+ ITTI_MSG_NAME(msg_p),
+ NAS_CELL_SELECTION_CNF(msg_p).errCode,
+ NAS_CELL_SELECTION_CNF(msg_p).cellID,
+ NAS_CELL_SELECTION_CNF(msg_p).tac);
+ // as_stmsi_t s_tmsi={0, 0};
+ // as_nas_info_t nas_info;
+ // plmn_t plmnID={0, 0, 0, 0};
+ // generateRegistrationRequest(&nas_info);
+ // nr_nas_itti_nas_establish_req(0, AS_TYPE_ORIGINATING_SIGNAL, s_tmsi, plmnID, nas_info.data, nas_info.length, 0);
+ break;
- /* TODO not processed by NAS currently */
- break;
+ case NAS_CELL_SELECTION_IND:
+ LOG_I(NAS,
+ "[UE %ld] Received %s: cellID %u, tac %u\n",
+ instance,
+ ITTI_MSG_NAME(msg_p),
+ NAS_CELL_SELECTION_IND(msg_p).cellID,
+ NAS_CELL_SELECTION_IND(msg_p).tac);
- case NAS_PAGING_IND:
- LOG_I(NAS, "[UE %ld] Received %s: cause %u\n", instance, ITTI_MSG_NAME(msg_p), NAS_PAGING_IND(msg_p).cause);
+ /* TODO not processed by NAS currently */
+ break;
- /* TODO not processed by NAS currently */
- break;
+ case NAS_PAGING_IND:
+ LOG_I(NAS, "[UE %ld] Received %s: cause %u\n", instance, ITTI_MSG_NAME(msg_p), NAS_PAGING_IND(msg_p).cause);
- case NAS_CONN_ESTABLI_CNF: {
- LOG_I(NAS, "[UE %ld] Received %s: errCode %u, length %u\n", instance, ITTI_MSG_NAME(msg_p), NAS_CONN_ESTABLI_CNF(msg_p).errCode, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
+ /* TODO not processed by NAS currently */
+ break;
- pdu_buffer = NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.data;
- msg_type = get_msg_type(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
+ case NAS_CONN_ESTABLI_CNF: {
+ LOG_I(NAS,
+ "[UE %ld] Received %s: errCode %u, length %u\n",
+ instance,
+ ITTI_MSG_NAME(msg_p),
+ NAS_CONN_ESTABLI_CNF(msg_p).errCode,
+ NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
- if (msg_type == REGISTRATION_ACCEPT) {
- LOG_I(NAS, "[UE] Received REGISTRATION ACCEPT message\n");
- decodeRegistrationAccept(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length, nas);
+ uint8_t *pdu_buffer = NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.data;
+ int msg_type = get_msg_type(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
- as_nas_info_t initialNasMsg = {0};
- generateRegistrationComplete(nas, &initialNasMsg, NULL);
- if (initialNasMsg.length > 0) {
- send_nas_uplink_data_req(instance, &initialNasMsg);
- LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(RegistrationComplete)\n");
- }
+ if (msg_type == REGISTRATION_ACCEPT) {
+ LOG_I(NAS, "[UE] Received REGISTRATION ACCEPT message\n");
+ nr_ue_nas_t *nas = get_ue_nas_info(0);
+ decodeRegistrationAccept(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length, nas);
- as_nas_info_t pduEstablishMsg = {0};
- generatePduSessionEstablishRequest(nas, &pduEstablishMsg);
- if (pduEstablishMsg.length > 0) {
- send_nas_uplink_data_req(instance, &pduEstablishMsg);
- LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(PduSessionEstablishRequest)\n");
- }
- } else if (msg_type == FGS_PDU_SESSION_ESTABLISHMENT_ACC) {
- capture_pdu_session_establishment_accept_msg(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
+ as_nas_info_t initialNasMsg = {0};
+ generateRegistrationComplete(nas, &initialNasMsg, NULL);
+ if (initialNasMsg.length > 0) {
+ send_nas_uplink_data_req(instance, &initialNasMsg);
+ LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(RegistrationComplete)\n");
}
- break;
+ as_nas_info_t pduEstablishMsg = {0};
+ generatePduSessionEstablishRequest(nas, &pduEstablishMsg);
+ if (pduEstablishMsg.length > 0) {
+ send_nas_uplink_data_req(instance, &pduEstablishMsg);
+ LOG_I(NAS, "Send NAS_UPLINK_DATA_REQ message(PduSessionEstablishRequest)\n");
+ }
+ } else if (msg_type == FGS_PDU_SESSION_ESTABLISHMENT_ACC) {
+ capture_pdu_session_establishment_accept_msg(pdu_buffer, NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length);
+ }
+
+ 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);
+ 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
@@ -1012,45 +1022,48 @@ void *nas_nrue_task(void *args_p)
break;
case NAS_UPLINK_DATA_CNF:
- LOG_I(NAS, "[UE %ld] Received %s: UEid %u, errCode %u\n", instance, ITTI_MSG_NAME (msg_p),
- NAS_UPLINK_DATA_CNF (msg_p).UEid, NAS_UPLINK_DATA_CNF (msg_p).errCode);
+ LOG_I(NAS,
+ "[UE %ld] Received %s: UEid %u, errCode %u\n",
+ instance,
+ ITTI_MSG_NAME(msg_p),
+ NAS_UPLINK_DATA_CNF(msg_p).UEid,
+ NAS_UPLINK_DATA_CNF(msg_p).errCode);
break;
case NAS_DEREGISTRATION_REQ: {
- LOG_I(NAS, "[UE %ld] Received %s\n", instance, ITTI_MSG_NAME(msg_p));
- if (nas->guti) {
- nas_deregistration_req_t *req = &NAS_DEREGISTRATION_REQ(msg_p);
- as_nas_info_t initialNasMsg = {0};
- generateDeregistrationRequest(nas, &initialNasMsg, req);
- send_nas_uplink_data_req(instance, &initialNasMsg);
- } else {
- LOG_E(NAS, "no GUTI, cannot trigger deregistration request\n");
- }
+ LOG_I(NAS, "[UE %ld] Received %s\n", instance, ITTI_MSG_NAME(msg_p));
+ nr_ue_nas_t *nas = get_ue_nas_info(0);
+ if (nas->guti) {
+ nas_deregistration_req_t *req = &NAS_DEREGISTRATION_REQ(msg_p);
+ as_nas_info_t initialNasMsg = {0};
+ generateDeregistrationRequest(nas, &initialNasMsg, req);
+ send_nas_uplink_data_req(instance, &initialNasMsg);
+ } else {
+ LOG_E(NAS, "no GUTI, cannot trigger deregistration request\n");
}
- break;
+ } break;
- case NAS_DOWNLINK_DATA_IND:
- {
+ case NAS_DOWNLINK_DATA_IND: {
LOG_I(NAS,
"[UE %ld] Received %s: length %u , buffer %p\n",
instance,
ITTI_MSG_NAME(msg_p),
NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.length,
NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.data);
- as_nas_info_t initialNasMsg={0};
+ as_nas_info_t initialNasMsg = {0};
- pdu_buffer = NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.data;
- msg_type = get_msg_type(pdu_buffer, NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.length);
-
- switch(msg_type){
+ uint8_t *pdu_buffer = NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.data;
+ int msg_type = get_msg_type(pdu_buffer, NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.length);
+ nr_ue_nas_t *nas = get_ue_nas_info(0);
+ switch (msg_type) {
case FGS_IDENTITY_REQUEST:
generateIdentityResponse(&initialNasMsg, *(pdu_buffer + 3), nas->uicc);
- break;
+ break;
case FGS_AUTHENTICATION_REQUEST:
- generateAuthenticationResp(nas, &initialNasMsg, pdu_buffer);
- break;
+ generateAuthenticationResp(nas, &initialNasMsg, pdu_buffer);
+ break;
case FGS_SECURITY_MODE_COMMAND:
nas_itti_kgnb_refresh_req(nas->security.kgnb);
generateSecurityModeComplete(nas, &initialNasMsg);
@@ -1109,28 +1122,23 @@ void *nas_nrue_task(void *args_p)
}
offset++;
}
- }
- break;
+ } break;
default:
- LOG_W(NR_RRC,"unknown message type %d\n",msg_type);
- break;
+ LOG_W(NR_RRC, "unknown message type %d\n", msg_type);
+ break;
}
- if (initialNasMsg.length > 0)
- send_nas_uplink_data_req(instance, &initialNasMsg);
- }
- break;
+ if (initialNasMsg.length > 0)
+ send_nas_uplink_data_req(instance, &initialNasMsg);
+ } break;
default:
- LOG_E(NAS, "[UE %ld] Received unexpected message %s\n", instance, ITTI_MSG_NAME (msg_p));
+ LOG_E(NAS, "[UE %ld] Received unexpected message %s\n", instance, ITTI_MSG_NAME(msg_p));
break;
- }
-
- result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
- AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
- msg_p = NULL;
}
- }
+ int result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
+ AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
+ }
return NULL;
}
diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.h b/openair3/NAS/NR_UE/nr_nas_msg_sim.h
index fbf0362949..fa4911c738 100644
--- a/openair3/NAS/NR_UE/nr_nas_msg_sim.h
+++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.h
@@ -174,6 +174,7 @@ typedef struct {
nr_ue_nas_t *get_ue_nas_info(module_id_t module_id);
void generateRegistrationRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas);
void *nas_nrue_task(void *args_p);
+void *nas_nrue(void *args_p);
#endif /* __NR_NAS_MSG_SIM_H__*/
diff --git a/openair3/NAS/UE/EMM/IdleMode.c b/openair3/NAS/UE/EMM/IdleMode.c
index 50a318355c..33e291931f 100644
--- a/openair3/NAS/UE/EMM/IdleMode.c
+++ b/openair3/NAS/UE/EMM/IdleMode.c
@@ -107,7 +107,7 @@ static IdleMode_callback_t _emm_indication_notify;
***************************************************************************/
void IdleMode_initialize(nas_user_t *user, IdleMode_callback_t cb)
{
- emm_plmn_list_t *emm_plmn_list = calloc_or_fail( sizeof(emm_plmn_list_t));
+ emm_plmn_list_t *emm_plmn_list = calloc_or_fail(1, sizeof(emm_plmn_list_t));
user->emm_plmn_list = emm_plmn_list;
/* Initialize the list of available PLMNs */
emm_plmn_list->n_plmns = 0;
diff --git a/openair3/NAS/UE/EMM/emm_main.c b/openair3/NAS/UE/EMM/emm_main.c
index 74676c8b36..ec5babc540 100644
--- a/openair3/NAS/UE/EMM/emm_main.c
+++ b/openair3/NAS/UE/EMM/emm_main.c
@@ -135,7 +135,7 @@ void _emm_detach_initialize(emm_detach_data_t *emm_detach) {
void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const char *imei)
{
LOG_FUNC_IN;
- user->emm_data = calloc_or_fail(sizeof(emm_data_t));
+ user->emm_data = calloc_or_fail(1, sizeof(emm_data_t));
/* USIM validity indicator */
user->emm_data->usim_is_valid = false;
/* The IMEI read from the UE's non-volatile memory */
@@ -433,19 +433,19 @@ void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const c
/*
* Initialize EMM timers
*/
- user->emm_data->emm_timers = calloc_or_fail(sizeof(emm_timers_t));
+ user->emm_data->emm_timers = calloc_or_fail(1, sizeof(emm_timers_t));
_emm_timers_initialize(user->emm_data->emm_timers);
/*
* Initialize Internal data used for detach procedure
*/
- user->emm_data->emm_detach_data = calloc_or_fail(sizeof(emm_detach_data_t));
+ user->emm_data->emm_detach_data = calloc_or_fail(1, sizeof(emm_detach_data_t));
_emm_detach_initialize(user->emm_data->emm_detach_data);
/*
* Initialize Internal data used for attach procedure
*/
- user->emm_data->emm_attach_data = calloc_or_fail(sizeof(emm_attach_data_t));
+ user->emm_data->emm_attach_data = calloc_or_fail(1, sizeof(emm_attach_data_t));
_emm_attach_initialize(user->emm_data->emm_attach_data);
/*
diff --git a/openair3/NAS/UE/ESM/esm_ebr.c b/openair3/NAS/UE/ESM/esm_ebr.c
index 4c6b56cec9..58cd4a4056 100644
--- a/openair3/NAS/UE/ESM/esm_ebr.c
+++ b/openair3/NAS/UE/ESM/esm_ebr.c
@@ -119,7 +119,7 @@ esm_ebr_data_t *esm_ebr_initialize(void)
LOG_FUNC_IN;
int i;
- esm_ebr_data_t *esm_ebr_data = calloc_or_fail(sizeof(esm_ebr_data_t));
+ esm_ebr_data_t *esm_ebr_data = calloc_or_fail(1, sizeof(esm_ebr_data_t));
esm_ebr_data->index = 0;
diff --git a/openair3/NAS/UE/ESM/esm_main.c b/openair3/NAS/UE/ESM/esm_main.c
index 895e463726..92b8075f24 100644
--- a/openair3/NAS/UE/ESM/esm_main.c
+++ b/openair3/NAS/UE/ESM/esm_main.c
@@ -79,7 +79,7 @@ void esm_main_initialize(nas_user_t *user, esm_indication_callback_t cb)
int i;
- esm_data_t *esm_data = calloc_or_fail(sizeof(esm_data_t));
+ esm_data_t *esm_data = calloc_or_fail(1, sizeof(esm_data_t));
user->esm_data = esm_data;
default_eps_bearer_context_data_t *default_eps_bearer_context = calloc(1, sizeof(default_eps_bearer_context_data_t));
diff --git a/openair3/NAS/UE/ESM/esm_pt.c b/openair3/NAS/UE/ESM/esm_pt.c
index d9f593fb57..4c76850c94 100644
--- a/openair3/NAS/UE/ESM/esm_pt.c
+++ b/openair3/NAS/UE/ESM/esm_pt.c
@@ -88,7 +88,7 @@ static int _esm_pt_get_available_entry(esm_pt_data_t *esm_pt_data);
esm_pt_data_t *esm_pt_initialize(void)
{
LOG_FUNC_IN;
- esm_pt_data_t *esm_pt_data = calloc_or_fail(sizeof(esm_pt_data_t));
+ esm_pt_data_t *esm_pt_data = calloc_or_fail(1, sizeof(esm_pt_data_t));
int i;
esm_pt_data->index = 0;
diff --git a/openair3/NAS/UE/nas_proc.c b/openair3/NAS/UE/nas_proc.c
index 41230696a4..81e11c87ec 100644
--- a/openair3/NAS/UE/nas_proc.c
+++ b/openair3/NAS/UE/nas_proc.c
@@ -97,8 +97,8 @@ void nas_proc_initialize(nas_user_t *user, emm_indication_callback_t emm_cb,
user->proc.rsrq = NAS_PROC_RSRQ_UNKNOWN;
user->proc.rsrp = NAS_PROC_RSRP_UNKNOWN;
- user->authentication_data = calloc_or_fail(sizeof(authentication_data_t));
- user->security_data = calloc_or_fail( sizeof(security_data_t));
+ user->authentication_data = calloc_or_fail(1, sizeof(authentication_data_t));
+ user->security_data = calloc_or_fail(1, sizeof(security_data_t));
/* Initialize the EMM procedure manager */
emm_main_initialize(user, emm_cb, imei);
diff --git a/openair3/NAS/UE/nas_ue_task.c b/openair3/NAS/UE/nas_ue_task.c
index 308d5b1f7f..fbd7a1365e 100644
--- a/openair3/NAS/UE/nas_ue_task.c
+++ b/openair3/NAS/UE/nas_ue_task.c
@@ -67,7 +67,7 @@ static bool nas_ue_process_events(nas_user_container_t *users, struct epoll_even
// Initialize user api id and port number
void nas_user_api_id_initialize(nas_user_t *user) {
- user_api_id_t *user_api_id = calloc_or_fail(sizeof(user_api_id_t));
+ user_api_id_t *user_api_id = calloc_or_fail(1, sizeof(user_api_id_t));
user->user_api_id = user_api_id;
char *port = make_port_str_from_ueid(NAS_PARSER_DEFAULT_USER_PORT_NUMBER, user->ueid);
if ( port == NULL ) {
@@ -130,9 +130,9 @@ void *nas_ue_task(void *args_p)
/* Initialize user interface (to exchange AT commands with user process) */
nas_user_api_id_initialize(user);
/* allocate needed structures */
- user->user_at_commands = calloc_or_fail(sizeof(user_at_commands_t));
- user->at_response = calloc_or_fail(sizeof(at_response_t));
- user->lowerlayer_data = calloc_or_fail(sizeof(lowerlayer_data_t));
+ user->user_at_commands = calloc_or_fail(1, sizeof(user_at_commands_t));
+ user->at_response = calloc_or_fail(1, sizeof(at_response_t));
+ user->lowerlayer_data = calloc_or_fail(1, sizeof(lowerlayer_data_t));
/* Initialize NAS user */
nas_user_initialize(user, &user_api_emm_callback, &user_api_esm_callback, FIRMWARE_VERSION);
}
@@ -170,9 +170,9 @@ void *nas_ue_task(void *args_p)
/* Initialize user interface (to exchange AT commands with user process) */
nas_user_api_id_initialize(user);
/* allocate needed structures */
- user->user_at_commands = calloc_or_fail(sizeof(user_at_commands_t));
- user->at_response = calloc_or_fail(sizeof(at_response_t));
- user->lowerlayer_data = calloc_or_fail(sizeof(lowerlayer_data_t));
+ user->user_at_commands = calloc_or_fail(1, sizeof(user_at_commands_t));
+ user->at_response = calloc_or_fail(1, sizeof(at_response_t));
+ user->lowerlayer_data = calloc_or_fail(1, sizeof(lowerlayer_data_t));
/* Initialize NAS user */
nas_user_initialize(user, &user_api_emm_callback, &user_api_esm_callback, FIRMWARE_VERSION);
user->ueid = 0;
diff --git a/openair3/NAS/UE/nas_user.c b/openair3/NAS/UE/nas_user.c
index ab32c216e5..fba70e1db4 100644
--- a/openair3/NAS/UE/nas_user.c
+++ b/openair3/NAS/UE/nas_user.c
@@ -154,7 +154,7 @@ void nas_user_initialize(nas_user_t *user, emm_indication_callback_t emm_cb,
{
LOG_FUNC_IN;
- user->nas_user_nvdata = calloc_or_fail(sizeof(user_nvdata_t));
+ user->nas_user_nvdata = calloc_or_fail(1, sizeof(user_nvdata_t));
/* Get UE data stored in the non-volatile memory device */
int rc = memory_read(user->user_nvdata_store, user->nas_user_nvdata, sizeof(user_nvdata_t));
@@ -163,7 +163,7 @@ void nas_user_initialize(nas_user_t *user, emm_indication_callback_t emm_cb,
abort();
}
- user->nas_user_context = calloc_or_fail(sizeof(nas_user_context_t));
+ user->nas_user_context = calloc_or_fail(1, sizeof(nas_user_context_t));
_nas_user_context_initialize(user->nas_user_context, version);
/* Initialize the internal NAS processing data */
diff --git a/openair3/NGAP/ngap_common.h b/openair3/NGAP/ngap_common.h
index 8c66a11cd0..4b845690c6 100644
--- a/openair3/NGAP/ngap_common.h
+++ b/openair3/NGAP/ngap_common.h
@@ -134,5 +134,6 @@ typedef int (*ngap_message_decoded_callback)(sctp_assoc_t assoc_id, uint32_t str
@returns void
**/
void ngap_handle_criticality(NGAP_Criticality_t criticality);
+/** @}*/
#endif /* NGAP_COMMON_H_ */
diff --git a/openair3/NGAP/ngap_gNB.h b/openair3/NGAP/ngap_gNB.h
index 2aa0080cd1..9a838009c6 100644
--- a/openair3/NGAP/ngap_gNB.h
+++ b/openair3/NGAP/ngap_gNB.h
@@ -31,7 +31,7 @@
#include
#include
-/** @defgroup _ngap_impl_ NGAP Layer Reference Implementation for gNB
+/** @defgroup _ngap_impl_ NGAP Layer Reference Implementation
* @ingroup _ref_implementation_
* @{
*/
diff --git a/openair3/S1AP/s1ap_common.h b/openair3/S1AP/s1ap_common.h
index a452d284e5..797bc7be8a 100644
--- a/openair3/S1AP/s1ap_common.h
+++ b/openair3/S1AP/s1ap_common.h
@@ -94,5 +94,5 @@ typedef int (*s1ap_message_decoded_callback)(sctp_assoc_t assoc_id, uint32_t str
@returns void
**/
void s1ap_handle_criticality(S1AP_Criticality_t criticality);
-
+/** @}*/
#endif /* S1AP_COMMON_H_ */
diff --git a/openair3/S1AP/s1ap_eNB.h b/openair3/S1AP/s1ap_eNB.h
index 2183587214..203dbc790e 100644
--- a/openair3/S1AP/s1ap_eNB.h
+++ b/openair3/S1AP/s1ap_eNB.h
@@ -22,7 +22,7 @@
#include
#include
-/** @defgroup _s1ap_impl_ S1AP Layer Reference Implementation for eNB
+/** @defgroup _s1ap_impl_ S1AP Layer Reference Implementation
* @ingroup _ref_implementation_
* @{
*/
diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp
index 4367222404..d542dd4b30 100644
--- a/openair3/ocp-gtpu/gtp_itf.cpp
+++ b/openair3/ocp-gtpu/gtp_itf.cpp
@@ -510,7 +510,7 @@ static int udpServerSocket(openAddr_s addr) {
freeaddrinfo(servinfo); // all done with this structure
- if (strlen(addr.destinationHost)>1) {
+ if (false) {
struct addrinfo hints;
memset(&hints,0,sizeof(hints));
hints.ai_family=AF_UNSPEC;
diff --git a/radio/COMMON/common_lib.h b/radio/COMMON/common_lib.h
index 4c21e91ec2..d735fab4f0 100644
--- a/radio/COMMON/common_lib.h
+++ b/radio/COMMON/common_lib.h
@@ -457,33 +457,31 @@ struct openair0_device_t {
@param timestamp The timestamp at whicch the first sample MUST be sent
@param buff Buffer which holds the samples (1 dimensional)
@param nsamps number of samples to be sent
- @param antenna_id index of the antenna if the device has multiple anteannas
@param flags flags must be set to true if timestamp parameter needs to be applied
*/
int (*trx_write_func2)(openair0_device *device, openair0_timestamp timestamp, void **buff, int fd_ind,int nsamps, int flags,int nant);
/*! \brief Receive samples from hardware.
- * Read \ref nsamps samples from each channel to buffers. buff[0] is the array for
+ * Read nsamps samples from each channel to buffers. buff[0] is the array for
* the first channel. *ptimestamp is the time at which the first sample
* was received.
* \param device the hardware to use
* \param[out] ptimestamp the time at which the first sample was received.
- * \param[out] buff An array of pointers to buffers for received samples. The buffers must be large enough to hold the number of samples \ref nsamps.
- * \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte.
- * \param num_antennas number of antennas from which to receive samples
- * \returns the number of sample read
+ * \param[out] buff An array of pointers to buffers for received samples. The buffers must be large enough to hold the number of
+ * samples nsamps. \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte. \param num_antennas number of
+ * antennas from which to receive samples \returns the number of sample read
*/
int (*trx_read_func)(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps,int num_antennas);
/*! \brief Receive samples from hardware, this version provides a single antenna at a time and returns.
- * Read \ref nsamps samples from each channel to buffers. buff[0] is the array for
+ * Read nsamps samples from each channel to buffers. buff[0] is the array for
* the first channel. *ptimestamp is the time at which the first sample
* was received.
* \param device the hardware to use
* \param[out] ptimestamp the time at which the first sample was received.
- * \param[out] buff A pointer to a buffer[ant_id][] for received samples. The buffer[ant_id] must be large enough to hold the number of samples \ref nsamps * the number of packets.
- * \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte.
+ * \param[out] buff A pointer to a buffer[ant_id][] for received samples. The buffer[ant_id] must be large enough to hold the
+ * number of samples nsamps * the number of packets. \param nsamps Number of samples. One sample is 2 byte I + 2 byte Q => 4 byte.
* \param packet_idx offset into
* \param antenna_id Index of antenna from which samples were received
* \returns the number of sample read
@@ -628,8 +626,9 @@ openair0_timestamp get_usrp_time(openair0_device *device);
* \returns 0 in success
*/
int openair0_set_rx_frequencies(openair0_device *device, openair0_config_t *openair0_cfg);
-/*! \brief read the iq record/player configuration */
+/*! \brief read the iq record-player configuration */
extern int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_state);
+
/*! \brief store recorded iqs from memory to file. */
extern void iqrecorder_end(openair0_device *device);
@@ -638,9 +637,7 @@ extern void iqrecorder_end(openair0_device *device);
#ifndef gettid
#define gettid() syscall(__NR_gettid)
#endif
-/*@}*/
-
-
+/**@}*/
#ifdef __cplusplus
}
diff --git a/radio/COMMON/record_player.c b/radio/COMMON/record_player.c
index 2041ab29e1..485c5c7228 100644
--- a/radio/COMMON/record_player.c
+++ b/radio/COMMON/record_player.c
@@ -37,7 +37,7 @@
/*! \brief read the oai recorder or player configuration, called from common device code
* \param recplay_conf: store parameters
- * recplay_state: store recorder or player data while the device runs
+ * \param recplay_state: store recorder or player data while the device runs
*/
int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_state) {
*recplay_conf = calloc(sizeof(recplay_conf_t),1);
@@ -76,7 +76,7 @@ int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_
/*! \brief Terminate operation of the oai iq recorder. to be called by any device
* used in record mode
- * \param device, the hardware used
+ * \param device the hardware used
*/
void iqrecorder_end(openair0_device *device) {
if (device->recplay_state != NULL) { // subframes store
diff --git a/radio/ETHERNET/ethernet_lib.h b/radio/ETHERNET/ethernet_lib.h
index 873ef26e12..3ec8b93d9d 100644
--- a/radio/ETHERNET/ethernet_lib.h
+++ b/radio/ETHERNET/ethernet_lib.h
@@ -87,8 +87,8 @@ typedef struct {
/*!\brief timeout ms */
unsigned int tx_timeout_ms;
/*!\brief runtime flags */
- uint32_t flags;
- /*!\compression enalbe */
+ uint32_t flags;
+ /*!\brief compression enable */
uint32_t compression;
/*!\ time offset between transmiter timestamp and receiver timestamp */
double tdiff;
@@ -239,25 +239,23 @@ void *udp_read_thread(void *arg);
void *udp_write_thread(void *arg);
/*! \fn int ethernet_tune (openair0_device *device, unsigned int option, int value);
-* \brief this function allows you to configure certain ethernet parameters in socket or device level
-* \param[in] openair0 device which bears the socket
-* \param[in] name of parameter to configure
-* \return 0 on success, otherwise -1
-* \note
-* @ingroup _oai
-*/
+ * \brief this function allows you to configure certain ethernet parameters in socket or device level
+ * \param[in] device device which bears the socket
+ * \param[in] option of parameter to configure
+ * \param[in] value of parameter to configure
+ * \return 0 on success, otherwise -1
+ * \note
+ * @ingroup _oai
+ */
int ethernet_tune(openair0_device *device, unsigned int option, int value);
-
-
/*! \fn int eth_socket_init_udp(openair0_device *device)
-* \brief initialization of UDP Socket to communicate with one destination
-* \param[in] *device openair device for which the socket will be created
-* \param[out]
-* \return 0 on success, otherwise -1
-* \note
-* @ingroup _oai
-*/
+ * \brief initialization of UDP Socket to communicate with one destination
+ * \param[in] device openair device for which the socket will be created
+ * \return 0 on success, otherwise -1
+ * \note
+ * @ingroup _oai
+ */
int eth_socket_init_udp(openair0_device *device);
int trx_eth_write_udp(openair0_device *device, openair0_timestamp timestamp, void **buf, int fd_ind, int nsamps, int flags,int nant);
int trx_eth_read_udp(openair0_device *device, openair0_timestamp *timestamp, uint32_t **buff, int nsamps);
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band78.fr1.106PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band78.fr1.106PRB.usrpx310.conf
index 01259ac5a6..aa3e5de456 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band78.fr1.106PRB.usrpx310.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb0.prs.band78.fr1.106PRB.usrpx310.conf
@@ -6,7 +6,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb1.prs.band78.fr1.106PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb1.prs.band78.fr1.106PRB.usrpx310.conf
index c2fa1bb623..65a2a49d50 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb1.prs.band78.fr1.106PRB.usrpx310.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb1.prs.band78.fr1.106PRB.usrpx310.conf
@@ -6,7 +6,7 @@ gNBs =
(
{
////////// Identification parameters:
- gNB_CU_ID = 0xe00;
+ gNB_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";