Merge branch 'develop_integration_2019_w21' into 'develop'
See merge request oai/openairinterface5g!595 The following Merge Requests are included: * MR 544: RRC Inactivity Timer testing * MR 581: Remove deprecated build options * MR 583: RRC: add an option to enable measurement reports * MR 590: bugfix UE realtime bug
This commit is contained in:
@@ -360,6 +360,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -178,6 +178,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -18,6 +18,9 @@ eNBs =
|
||||
|
||||
tr_s_preference = "local_mac"
|
||||
|
||||
// In seconds
|
||||
rrc_inactivity_threshold = 30;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
component_carriers = (
|
||||
@@ -178,6 +181,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
@@ -241,8 +246,8 @@ THREAD_STRUCT = (
|
||||
NETWORK_CONTROLLER :
|
||||
{
|
||||
FLEXRAN_ENABLED = "no";
|
||||
FLEXRAN_INTERFACE_NAME = "lo";
|
||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
||||
FLEXRAN_INTERFACE_NAME = "eth0";
|
||||
FLEXRAN_IPV4_ADDRESS = "CI_MME_IP_ADDR";
|
||||
FLEXRAN_PORT = 2210;
|
||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||
FLEXRAN_AWAIT_RECONF = "no";
|
||||
|
||||
@@ -186,6 +186,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -181,6 +181,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -178,6 +178,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -144,6 +144,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -144,6 +144,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -144,6 +144,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -181,6 +181,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -181,6 +181,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -181,6 +181,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -179,6 +179,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
+256
-8
@@ -1,3 +1,4 @@
|
||||
# /*
|
||||
# * 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.
|
||||
@@ -144,6 +145,9 @@ class SSHConnection():
|
||||
self.UELogFile = ''
|
||||
self.Build_OAI_UE_args = ''
|
||||
self.Initialize_OAI_UE_args = ''
|
||||
self.flexranCtrlInstalled = False
|
||||
self.flexranCtrlStarted = False
|
||||
self.expectedNbOfConnectedUEs = 0
|
||||
|
||||
def open(self, ipaddress, username, password):
|
||||
count = 0
|
||||
@@ -461,6 +465,37 @@ class SSHConnection():
|
||||
self.close()
|
||||
self.CreateHtmlTestRow(self.EPCType, 'OK', ALL_PROCESSES_OK)
|
||||
|
||||
def CheckFlexranCtrlInstallation(self):
|
||||
if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '':
|
||||
return
|
||||
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
||||
self.command('ls -ls /opt/flexran_rtc/*/rt_controller', '\$', 5)
|
||||
result = re.search('/opt/flexran_rtc/build/rt_controller', str(self.ssh.before))
|
||||
if result is not None:
|
||||
self.flexranCtrlInstalled = True
|
||||
logging.debug('Flexran Controller is installed')
|
||||
self.close()
|
||||
|
||||
def InitializeFlexranCtrl(self):
|
||||
if self.flexranCtrlInstalled == False:
|
||||
return
|
||||
if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '':
|
||||
Usage()
|
||||
sys.exit('Insufficient Parameter')
|
||||
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
||||
self.command('cd /opt/flexran_rtc', '\$', 5)
|
||||
self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f log/*.log', '\$', 5)
|
||||
self.command('echo ' + self.EPCPassword + ' | sudo -S echo "build/rt_controller -c log_config/basic_log" > ./my-flexran-ctl.sh', '\$', 5)
|
||||
self.command('echo ' + self.EPCPassword + ' | sudo -S chmod 755 ./my-flexran-ctl.sh', '\$', 5)
|
||||
self.command('echo ' + self.EPCPassword + ' | sudo -S daemon --unsafe --name=flexran_rtc_daemon --chdir=/opt/flexran_rtc -o /opt/flexran_rtc/log/flexranctl_' + self.testCase_id + '.log ././my-flexran-ctl.sh', '\$', 5)
|
||||
self.command('ps -aux | grep --color=never rt_controller', '\$', 5)
|
||||
result = re.search('rt_controller -c ', str(self.ssh.before))
|
||||
if result is not None:
|
||||
logging.debug('\u001B[1m Initialize FlexRan Controller Completed\u001B[0m')
|
||||
self.flexranCtrlStarted = True
|
||||
self.close()
|
||||
self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
|
||||
|
||||
def InitializeeNB(self):
|
||||
if self.eNBIPAddress == '' or self.eNBUserName == '' or self.eNBPassword == '' or self.eNBSourceCodePath == '':
|
||||
Usage()
|
||||
@@ -524,6 +559,10 @@ class SSHConnection():
|
||||
self.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
|
||||
self.command('sed -i -e \'s/CI_MME_IP_ADDR/' + self.EPCIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||
self.command('sed -i -e \'s/CI_ENB_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||
if self.flexranCtrlInstalled and self.flexranCtrlStarted:
|
||||
self.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "yes";/\' ' + ci_full_config_file, '\$', 2);
|
||||
else:
|
||||
self.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "no";/\' ' + ci_full_config_file, '\$', 2);
|
||||
# Launch eNB with the modified config file
|
||||
self.command('source oaienv', '\$', 5)
|
||||
self.command('cd cmake_targets', '\$', 5)
|
||||
@@ -591,6 +630,9 @@ class SSHConnection():
|
||||
logging.debug('send adb commands')
|
||||
try:
|
||||
self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
|
||||
# enable data service
|
||||
self.command('stdbuf -o0 adb -s ' + device_id + ' shell svc data enable', '\$', 60)
|
||||
|
||||
# The following commands are deprecated since we no longer work on Android 7+
|
||||
# self.command('stdbuf -o0 adb -s ' + device_id + ' shell settings put global airplane_mode_on 1', '\$', 10)
|
||||
# self.command('stdbuf -o0 adb -s ' + device_id + ' shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true', '\$', 60)
|
||||
@@ -1172,6 +1214,54 @@ class SSHConnection():
|
||||
job.join()
|
||||
self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
|
||||
|
||||
def DataDisableUE_common(self, device_id):
|
||||
try:
|
||||
self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
|
||||
# enable data service
|
||||
self.command('stdbuf -o0 adb -s ' + device_id + ' shell svc data disable', '\$', 60)
|
||||
logging.debug('\u001B[1mUE (' + device_id + ') Disabled Data Service\u001B[0m')
|
||||
self.close()
|
||||
except:
|
||||
os.kill(os.getppid(),signal.SIGUSR1)
|
||||
|
||||
def DataDisableUE(self):
|
||||
if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
|
||||
Usage()
|
||||
sys.exit('Insufficient Parameter')
|
||||
multi_jobs = []
|
||||
for device_id in self.UEDevices:
|
||||
p = Process(target = self.DataDisableUE_common, args = (device_id,))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
multi_jobs.append(p)
|
||||
for job in multi_jobs:
|
||||
job.join()
|
||||
self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
|
||||
|
||||
def DataEnableUE_common(self, device_id):
|
||||
try:
|
||||
self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
|
||||
# enable data service
|
||||
self.command('stdbuf -o0 adb -s ' + device_id + ' shell svc data enable', '\$', 60)
|
||||
logging.debug('\u001B[1mUE (' + device_id + ') Enabled Data Service\u001B[0m')
|
||||
self.close()
|
||||
except:
|
||||
os.kill(os.getppid(),signal.SIGUSR1)
|
||||
|
||||
def DataEnableUE(self):
|
||||
if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
|
||||
Usage()
|
||||
sys.exit('Insufficient Parameter')
|
||||
multi_jobs = []
|
||||
for device_id in self.UEDevices:
|
||||
p = Process(target = self.DataEnableUE_common, args = (device_id,))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
multi_jobs.append(p)
|
||||
for job in multi_jobs:
|
||||
job.join()
|
||||
self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
|
||||
|
||||
def GetAllUEDevices(self, terminate_ue_flag):
|
||||
if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
|
||||
Usage()
|
||||
@@ -1198,6 +1288,118 @@ class SSHConnection():
|
||||
sys.exit(1)
|
||||
self.close()
|
||||
|
||||
def CheckUEStatus_common(self, lock, device_id, statusQueue):
|
||||
try:
|
||||
self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
|
||||
self.command('stdbuf -o0 adb -s ' + device_id + ' shell dumpsys telephony.registry', '\$', 15)
|
||||
result = re.search('mServiceState=(?P<serviceState>[0-9]+)', str(self.ssh.before))
|
||||
serviceState = 'Service State: UNKNOWN'
|
||||
if result is not None:
|
||||
lServiceState = int(result.group('serviceState'))
|
||||
if lServiceState == 3:
|
||||
serviceState = 'Service State: RADIO_POWERED_OFF'
|
||||
if lServiceState == 1:
|
||||
serviceState = 'Service State: OUT_OF_SERVICE'
|
||||
if lServiceState == 0:
|
||||
serviceState = 'Service State: IN_SERVICE'
|
||||
if lServiceState == 2:
|
||||
serviceState = 'Service State: EMERGENCY_ONLY'
|
||||
result = re.search('mDataConnectionState=(?P<dataConnectionState>[0-9]+)', str(self.ssh.before))
|
||||
dataConnectionState = 'Data State: UNKNOWN'
|
||||
if result is not None:
|
||||
lDataConnectionState = int(result.group('dataConnectionState'))
|
||||
if lDataConnectionState == 0:
|
||||
dataConnectionState = 'Data State: DISCONNECTED'
|
||||
if lDataConnectionState == 1:
|
||||
dataConnectionState = 'Data State: CONNECTING'
|
||||
if lDataConnectionState == 2:
|
||||
dataConnectionState = 'Data State: CONNECTED'
|
||||
if lDataConnectionState == 3:
|
||||
dataConnectionState = 'Data State: SUSPENDED'
|
||||
result = re.search('mDataConnectionReason=(?P<dataConnectionReason>[0-9a-zA-Z_]+)', str(self.ssh.before))
|
||||
dataConnectionReason = 'Data Reason: UNKNOWN'
|
||||
if result is not None:
|
||||
dataConnectionReason = 'Data Reason: ' + result.group('dataConnectionReason')
|
||||
lock.acquire()
|
||||
logging.debug('\u001B[1;37;44m Status Check (' + str(device_id) + ') \u001B[0m')
|
||||
logging.debug('\u001B[1;34m ' + serviceState + '\u001B[0m')
|
||||
logging.debug('\u001B[1;34m ' + dataConnectionState + '\u001B[0m')
|
||||
logging.debug('\u001B[1;34m ' + dataConnectionReason + '\u001B[0m')
|
||||
statusQueue.put(0)
|
||||
statusQueue.put(device_id)
|
||||
qMsg = serviceState + '\n' + dataConnectionState + '\n' + dataConnectionReason
|
||||
statusQueue.put(qMsg)
|
||||
lock.release()
|
||||
self.close()
|
||||
except:
|
||||
os.kill(os.getppid(),signal.SIGUSR1)
|
||||
|
||||
def CheckStatusUE(self):
|
||||
if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
|
||||
Usage()
|
||||
sys.exit('Insufficient Parameter')
|
||||
check_eNB = True
|
||||
check_OAI_UE = False
|
||||
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE)
|
||||
if (pStatus < 0):
|
||||
self.CreateHtmlTestRow('N/A', 'KO', pStatus)
|
||||
self.CreateHtmlTabFooter(False)
|
||||
sys.exit(1)
|
||||
multi_jobs = []
|
||||
lock = Lock()
|
||||
status_queue = SimpleQueue()
|
||||
for device_id in self.UEDevices:
|
||||
p = Process(target = self.CheckUEStatus_common, args = (lock,device_id,status_queue,))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
multi_jobs.append(p)
|
||||
for job in multi_jobs:
|
||||
job.join()
|
||||
if self.flexranCtrlInstalled and self.flexranCtrlStarted:
|
||||
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
||||
self.command('cd /opt/flexran_rtc', '\$', 5)
|
||||
self.command('curl http://localhost:9999/stats | jq \'.\' > log/check_status_' + self.testCase_id + '.log 2>&1', '\$', 5)
|
||||
self.command('cat log/check_status_' + self.testCase_id + '.log | jq \'.eNB_config[0].UE\' | grep -c rnti | sed -e "s#^#Nb Connected UE = #"', '\$', 5)
|
||||
result = re.search('Nb Connected UE = (?P<nb_ues>[0-9]+)', str(self.ssh.before))
|
||||
passStatus = True
|
||||
if result is not None:
|
||||
nb_ues = int(result.group('nb_ues'))
|
||||
htmlOptions = 'Nb Connected UE(s) to eNB = ' + str(nb_ues)
|
||||
logging.debug('\u001B[1;37;44m ' + htmlOptions + ' \u001B[0m')
|
||||
if self.expectedNbOfConnectedUEs > -1:
|
||||
if nb_ues != self.expectedNbOfConnectedUEs:
|
||||
passStatus = False
|
||||
else:
|
||||
htmlOptions = 'N/A'
|
||||
self.close()
|
||||
else:
|
||||
passStatus = True
|
||||
htmlOptions = 'N/A'
|
||||
|
||||
if (status_queue.empty()):
|
||||
self.CreateHtmlTestRow(htmlOptions, 'KO', ALL_PROCESSES_OK)
|
||||
self.AutoTerminateUEandeNB()
|
||||
self.CreateHtmlTabFooter(False)
|
||||
sys.exit(1)
|
||||
else:
|
||||
check_status = True
|
||||
html_queue = SimpleQueue()
|
||||
while (not status_queue.empty()):
|
||||
count = status_queue.get()
|
||||
if (count < 0):
|
||||
check_status = False
|
||||
device_id = status_queue.get()
|
||||
message = status_queue.get()
|
||||
html_cell = '<pre style="background-color:white">UE (' + device_id + ')\n' + message + '</pre>'
|
||||
html_queue.put(html_cell)
|
||||
if check_status and passStatus:
|
||||
self.CreateHtmlTestRowQueue(htmlOptions, 'OK', len(self.UEDevices), html_queue)
|
||||
else:
|
||||
self.CreateHtmlTestRowQueue(htmlOptions, 'KO', len(self.UEDevices), html_queue)
|
||||
self.AutoTerminateUEandeNB()
|
||||
self.CreateHtmlTabFooter(False)
|
||||
sys.exit(1)
|
||||
|
||||
def GetAllUEIPAddresses(self):
|
||||
if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
|
||||
Usage()
|
||||
@@ -1320,6 +1522,12 @@ class SSHConnection():
|
||||
except:
|
||||
os.kill(os.getppid(),signal.SIGUSR1)
|
||||
|
||||
def PingNoS1_wrong_exit(self, qMsg):
|
||||
html_queue = SimpleQueue()
|
||||
html_cell = '<pre style="background-color:white">OAI UE ping result\n' + qMsg + '</pre>'
|
||||
html_queue.put(html_cell)
|
||||
self.CreateHtmlTestRowQueue(self.ping_args, 'KO', len(self.UEDevices), html_queue)
|
||||
|
||||
def PingNoS1(self):
|
||||
check_eNB = True
|
||||
check_OAI_UE = True
|
||||
@@ -1352,21 +1560,25 @@ class SSHConnection():
|
||||
if ping_status < 0:
|
||||
message = 'Ping with OAI UE crashed due to TIMEOUT!'
|
||||
logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m')
|
||||
self.PingNoS1_wrong_exit(message)
|
||||
return
|
||||
result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', str(self.ssh.before))
|
||||
if result is None:
|
||||
message = 'Packet Loss Not Found!'
|
||||
logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m')
|
||||
self.PingNoS1_wrong_exit(message)
|
||||
return
|
||||
packetloss = result.group('packetloss')
|
||||
if float(packetloss) == 100:
|
||||
message = 'Packet Loss is 100%'
|
||||
logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m')
|
||||
self.PingNoS1_wrong_exit(message)
|
||||
return
|
||||
result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', str(self.ssh.before))
|
||||
if result is None:
|
||||
message = 'Ping RTT_Min RTT_Avg RTT_Max Not Found!'
|
||||
logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m')
|
||||
self.PingNoS1_wrong_exit(message)
|
||||
return
|
||||
rtt_min = result.group('rtt_min')
|
||||
rtt_avg = result.group('rtt_avg')
|
||||
@@ -2164,6 +2376,8 @@ class SSHConnection():
|
||||
if logStatus < 0:
|
||||
result = logStatus
|
||||
self.eNBLogFile = ''
|
||||
if self.flexranCtrlInstalled and self.flexranCtrlStarted:
|
||||
self.TerminateFlexranCtrl()
|
||||
return result
|
||||
|
||||
def CheckOAIUEProcessExist(self, initialize_OAI_UE_flag):
|
||||
@@ -2330,7 +2544,7 @@ class SSHConnection():
|
||||
result = re.search('LTE_RRCConnectionSetupComplete from UE', str(line))
|
||||
if result is not None:
|
||||
rrcSetupComplete += 1
|
||||
result = re.search('Generate LTE_RRCConnectionRelease', str(line))
|
||||
result = re.search('Generate LTE_RRCConnectionRelease|Generate RRCConnectionRelease', str(line))
|
||||
if result is not None:
|
||||
rrcReleaseRequest += 1
|
||||
result = re.search('Generate LTE_RRCConnectionReconfiguration', str(line))
|
||||
@@ -2719,9 +2933,25 @@ class SSHConnection():
|
||||
self.close()
|
||||
self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
|
||||
|
||||
def TerminateFlexranCtrl(self):
|
||||
if self.flexranCtrlInstalled == False or self.flexranCtrlStarted == False:
|
||||
return
|
||||
if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '':
|
||||
Usage()
|
||||
sys.exit('Insufficient Parameter')
|
||||
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
||||
self.command('echo ' + self.EPCPassword + ' | sudo -S daemon --name=flexran_rtc_daemon --stop', '\$', 5)
|
||||
time.sleep(1)
|
||||
self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGKILL rt_controller', '\$', 5)
|
||||
time.sleep(1)
|
||||
self.close()
|
||||
self.flexranCtrlStarted = False
|
||||
self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
|
||||
|
||||
def TerminateUE_common(self, device_id):
|
||||
try:
|
||||
self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
|
||||
# back in airplane mode on (ie radio off)
|
||||
self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/off', '\$', 60)
|
||||
logging.debug('\u001B[1mUE (' + device_id + ') Detach Completed\u001B[0m')
|
||||
|
||||
@@ -3324,7 +3554,7 @@ def Usage():
|
||||
print('------------------------------------------------------------')
|
||||
|
||||
def CheckClassValidity(action,id):
|
||||
if action != 'Build_eNB' and action != 'Initialize_eNB' and action != 'Terminate_eNB' and action != 'Initialize_UE' and action != 'Terminate_UE' and action != 'Attach_UE' and action != 'Detach_UE' and action != 'Build_OAI_UE' and action != 'Initialize_OAI_UE' and action != 'Terminate_OAI_UE' and action != 'Ping' and action != 'Iperf' and action != 'Reboot_UE' and action != 'Initialize_HSS' and action != 'Terminate_HSS' and action != 'Initialize_MME' and action != 'Terminate_MME' and action != 'Initialize_SPGW' and action != 'Terminate_SPGW' and action != 'Initialize_CatM_module' and action != 'Terminate_CatM_module' and action != 'Attach_CatM_module' and action != 'Detach_CatM_module' and action != 'Ping_CatM_module' and action != 'IdleSleep':
|
||||
if action != 'Build_eNB' and action != 'Initialize_eNB' and action != 'Terminate_eNB' and action != 'Initialize_UE' and action != 'Terminate_UE' and action != 'Attach_UE' and action != 'Detach_UE' and action != 'Build_OAI_UE' and action != 'Initialize_OAI_UE' and action != 'Terminate_OAI_UE' and action != 'DataDisable_UE' and action != 'DataEnable_UE' and action != 'CheckStatusUE' and action != 'Ping' and action != 'Iperf' and action != 'Reboot_UE' and action != 'Initialize_FlexranCtrl' and action != 'Terminate_FlexranCtrl' and action != 'Initialize_HSS' and action != 'Terminate_HSS' and action != 'Initialize_MME' and action != 'Terminate_MME' and action != 'Initialize_SPGW' and action != 'Terminate_SPGW' and action != 'Initialize_CatM_module' and action != 'Terminate_CatM_module' and action != 'Attach_CatM_module' and action != 'Detach_CatM_module' and action != 'Ping_CatM_module' and action != 'IdleSleep':
|
||||
logging.debug('ERROR: test-case ' + id + ' has wrong class ' + action)
|
||||
return False
|
||||
return True
|
||||
@@ -3351,6 +3581,13 @@ def GetParametersFromXML(action):
|
||||
else:
|
||||
SSH.nbMaxUEtoAttach = int(nbMaxUEtoAttach)
|
||||
|
||||
if action == 'CheckStatusUE':
|
||||
expectedNBUE = test.findtext('expectedNbOfConnectedUEs')
|
||||
if (expectedNBUE is None):
|
||||
SSH.expectedNbOfConnectedUEs = -1
|
||||
else:
|
||||
SSH.expectedNbOfConnectedUEs = int(expectedNBUE)
|
||||
|
||||
if action == 'Build_OAI_UE':
|
||||
SSH.Build_OAI_UE_args = test.findtext('Build_OAI_UE_args')
|
||||
|
||||
@@ -3569,10 +3806,10 @@ elif re.match('^LogCollectIperf$', mode, re.IGNORECASE):
|
||||
sys.exit('Insufficient Parameter')
|
||||
SSH.LogCollectIperf()
|
||||
elif re.match('^LogCollectOAIUE$', mode, re.IGNORECASE):
|
||||
if SSH.UEIPAddress == '' or SSH.UEUserName == '' or SSH.UEPassword == '' or SSH.UESourceCodePath == '':
|
||||
Usage()
|
||||
sys.exit('Insufficient Parameter')
|
||||
SSH.LogCollectOAIUE()
|
||||
if SSH.UEIPAddress == '' or SSH.UEUserName == '' or SSH.UEPassword == '' or SSH.UESourceCodePath == '':
|
||||
Usage()
|
||||
sys.exit('Insufficient Parameter')
|
||||
SSH.LogCollectOAIUE()
|
||||
elif re.match('^InitiateHtml$', mode, re.IGNORECASE):
|
||||
if (SSH.ADBIPAddress == '' or SSH.ADBUserName == '' or SSH.ADBPassword == ''):
|
||||
Usage()
|
||||
@@ -3610,7 +3847,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
sys.exit('UE: Insufficient Parameter')
|
||||
|
||||
#read test_case_list.xml file
|
||||
# if no parameters for XML file, use default value
|
||||
# if no parameters for XML file, use default value
|
||||
if (SSH.nbTestXMLfiles != 1):
|
||||
xml_test_file = cwd + "/test_case_list.xml"
|
||||
else:
|
||||
@@ -3648,6 +3885,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
else:
|
||||
logging.debug('ERROR: requested test is invalidly formatted: ' + test)
|
||||
sys.exit(1)
|
||||
SSH.CheckFlexranCtrlInstallation()
|
||||
|
||||
#get the list of tests to be done
|
||||
todo_tests=[]
|
||||
@@ -3674,7 +3912,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
continue
|
||||
SSH.ShowTestID()
|
||||
GetParametersFromXML(action)
|
||||
if action == 'Initialize_UE' or action == 'Attach_UE' or action == 'Detach_UE' or action == 'Ping' or action == 'Iperf' or action == 'Reboot_UE':
|
||||
if action == 'Initialize_UE' or action == 'Attach_UE' or action == 'Detach_UE' or action == 'Ping' or action == 'Iperf' or action == 'Reboot_UE' or action == 'DataDisable_UE' or action == 'DataEnable_UE' or action == 'CheckStatusUE':
|
||||
if (SSH.ADBIPAddress != 'none'):
|
||||
terminate_ue_flag = False
|
||||
SSH.GetAllUEDevices(terminate_ue_flag)
|
||||
@@ -3692,6 +3930,12 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
SSH.AttachUE()
|
||||
elif action == 'Detach_UE':
|
||||
SSH.DetachUE()
|
||||
elif action == 'DataDisable_UE':
|
||||
SSH.DataDisableUE()
|
||||
elif action == 'DataEnable_UE':
|
||||
SSH.DataEnableUE()
|
||||
elif action == 'CheckStatusUE':
|
||||
SSH.CheckStatusUE()
|
||||
elif action == 'Build_OAI_UE':
|
||||
SSH.BuildOAIUE()
|
||||
elif action == 'Initialize_OAI_UE':
|
||||
@@ -3726,6 +3970,10 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
SSH.InitializeSPGW()
|
||||
elif action == 'Terminate_SPGW':
|
||||
SSH.TerminateSPGW()
|
||||
elif action == 'Initialize_FlexranCtrl':
|
||||
SSH.InitializeFlexranCtrl()
|
||||
elif action == 'Terminate_FlexranCtrl':
|
||||
SSH.TerminateFlexranCtrl()
|
||||
elif action == 'IdleSleep':
|
||||
SSH.IdleSleep()
|
||||
else:
|
||||
|
||||
+16
-16
@@ -236,7 +236,7 @@ case $key in
|
||||
VM_NAME=ci-enb-usrp
|
||||
ARCHIVES_LOC=enb_usrp
|
||||
LOG_PATTERN=.Rel14.txt
|
||||
NB_PATTERN_FILES=7
|
||||
NB_PATTERN_FILES=9
|
||||
BUILD_OPTIONS="--eNB -w USRP --mu"
|
||||
NBARGS=$[$NBARGS+256]
|
||||
shift
|
||||
@@ -244,9 +244,9 @@ case $key in
|
||||
-v2)
|
||||
VM_NAME=ci-basic-sim
|
||||
ARCHIVES_LOC=basic_sim
|
||||
LOG_PATTERN=basic_simulator
|
||||
NB_PATTERN_FILES=2
|
||||
BUILD_OPTIONS="--basic-simulator"
|
||||
LOG_PATTERN=Rel14.txt
|
||||
NB_PATTERN_FILES=13
|
||||
BUILD_OPTIONS="--eNB --UE"
|
||||
VM_MEMORY=8192
|
||||
VM_CPU=4
|
||||
RUN_OPTIONS="complex"
|
||||
@@ -279,8 +279,8 @@ case $key in
|
||||
VM_CPU=4
|
||||
ARCHIVES_LOC=enb_eth
|
||||
LOG_PATTERN=.Rel14.txt
|
||||
NB_PATTERN_FILES=6
|
||||
BUILD_OPTIONS="--eNB -t ETHERNET"
|
||||
NB_PATTERN_FILES=8
|
||||
BUILD_OPTIONS="--eNB"
|
||||
NBARGS=$[$NBARGS+256]
|
||||
shift
|
||||
;;
|
||||
@@ -290,8 +290,8 @@ case $key in
|
||||
VM_CPU=4
|
||||
ARCHIVES_LOC=ue_eth
|
||||
LOG_PATTERN=.Rel14.txt
|
||||
NB_PATTERN_FILES=10
|
||||
BUILD_OPTIONS="--UE -t ETHERNET"
|
||||
NB_PATTERN_FILES=12
|
||||
BUILD_OPTIONS="--UE"
|
||||
NBARGS=$[$NBARGS+256]
|
||||
shift
|
||||
;;
|
||||
@@ -332,16 +332,16 @@ case $key in
|
||||
VM_NAME=ci-enb-usrp
|
||||
ARCHIVES_LOC=enb_usrp
|
||||
LOG_PATTERN=.Rel14.txt
|
||||
NB_PATTERN_FILES=7
|
||||
NB_PATTERN_FILES=9
|
||||
BUILD_OPTIONS="--eNB -w USRP --mu"
|
||||
NBARGS=$[$NBARGS+256]
|
||||
;;
|
||||
basic-sim)
|
||||
VM_NAME=ci-basic-sim
|
||||
ARCHIVES_LOC=basic_sim
|
||||
LOG_PATTERN=basic_simulator
|
||||
NB_PATTERN_FILES=2
|
||||
BUILD_OPTIONS="--basic-simulator"
|
||||
LOG_PATTERN=.Rel14.txt
|
||||
NB_PATTERN_FILES=13
|
||||
BUILD_OPTIONS="--UE --eNB"
|
||||
VM_MEMORY=8192
|
||||
VM_CPU=4
|
||||
RUN_OPTIONS="complex"
|
||||
@@ -371,8 +371,8 @@ case $key in
|
||||
VM_CPU=4
|
||||
ARCHIVES_LOC=enb_eth
|
||||
LOG_PATTERN=.Rel14.txt
|
||||
NB_PATTERN_FILES=6
|
||||
BUILD_OPTIONS="--eNB -t ETHERNET"
|
||||
NB_PATTERN_FILES=8
|
||||
BUILD_OPTIONS="--eNB"
|
||||
NBARGS=$[$NBARGS+256]
|
||||
;;
|
||||
ue-ethernet)
|
||||
@@ -381,8 +381,8 @@ case $key in
|
||||
VM_CPU=4
|
||||
ARCHIVES_LOC=ue_eth
|
||||
LOG_PATTERN=.Rel14.txt
|
||||
NB_PATTERN_FILES=10
|
||||
BUILD_OPTIONS="--UE -t ETHERNET"
|
||||
NB_PATTERN_FILES=12
|
||||
BUILD_OPTIONS="--UE"
|
||||
NBARGS=$[$NBARGS+256]
|
||||
;;
|
||||
flexran-rtc)
|
||||
|
||||
@@ -566,9 +566,11 @@ function report_build {
|
||||
summary_table_footer
|
||||
|
||||
summary_table_header "OAI Build basic simulator option" ./archives/basic_sim
|
||||
summary_table_row "Basic Simulator eNb - Release 14" ./archives/basic_sim/basic_simulator_enb.txt "Built target lte-softmodem" ./basic_sim_row1.html
|
||||
summary_table_row "Basic Simulator UE - Release 14" ./archives/basic_sim/basic_simulator_ue.txt "Built target lte-uesoftmodem" ./basic_sim_row2.html
|
||||
summary_table_row "LTE SoftModem - Release 14" ./archives/basic_sim/lte-softmodem.Rel14.txt "Built target lte-softmodem" ./basic_sim_row1.html
|
||||
summary_table_row "LTE UE SoftModem - Release 14" ./archives/basic_sim/lte-uesoftmodem.Rel14.txt "Built target lte-uesoftmodem" ./basic_sim_row2.htm
|
||||
summary_table_row "Conf 2 UE data - Release 14" ./archives/basic_sim/conf2uedata.Rel14.txt "Built target conf2uedata" ./basic_sim_row3.html
|
||||
summary_table_row "RB Tool - Release 14" ./archives/basic_sim/rb_tool.Rel14.txt "Built target rb_tool" ./basic_sim_row4.html
|
||||
summary_table_row "NASMESH - Release 14" ./archives/basic_sim/nasmesh.Rel14.txt "Built target nasmesh" ./basic_sim_row5.html
|
||||
summary_table_footer
|
||||
|
||||
summary_table_header "OAI Build Physical simulators option" ./archives/phy_sim
|
||||
@@ -644,7 +646,7 @@ function report_build {
|
||||
cat $DETAILS_TABLE >> ./build_results.html
|
||||
done
|
||||
fi
|
||||
if [ -f ./basic_sim_row1.html ] || [ -f ./basic_sim_row2.html ] || [ -f ./basic_sim_row3.html ]
|
||||
if [ -f ./basic_sim_row1.html ] || [ -f ./basic_sim_row2.html ] || [ -f ./basic_sim_row3.html ] || [ -f ./basic_sim_row4.html ] || [ -f ./basic_sim_row5.html ]
|
||||
then
|
||||
for DETAILS_TABLE in `ls ./basic_sim_row*.html`
|
||||
do
|
||||
|
||||
@@ -508,26 +508,26 @@ function report_test {
|
||||
NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
|
||||
NB_UE_GOT_SYNC=`egrep -c "got sync" $UE_LOG`
|
||||
NB_ENB_SYNCED_WITH_UE=`egrep -c "Sending NFAPI_START_RESPONSE" $UE_LOG`
|
||||
if [ $NB_ENB_GOT_SYNC -eq 1 ] && [ $NB_UE_GOT_SYNC -eq 3 ] && [ $NB_ENB_SYNCED_WITH_UE -eq 1 ]
|
||||
if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 2 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
|
||||
then
|
||||
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
||||
else
|
||||
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||
fi
|
||||
echo " <td><pre>" >> ./test_simulator_results.html
|
||||
if [ $NB_ENB_GOT_SYNC -eq 1 ]
|
||||
if [ $NB_ENB_GOT_SYNC -gt 0 ]
|
||||
then
|
||||
echo "<font color = \"blue\">- eNB --> got sync</font>" >> ./test_simulator_results.html
|
||||
else
|
||||
echo "<font color = \"red\"><b>- eNB NEVER got sync</b></font>" >> ./test_simulator_results.html
|
||||
fi
|
||||
if [ $NB_UE_GOT_SYNC -eq 3 ]
|
||||
if [ $NB_UE_GOT_SYNC -gt 2 ]
|
||||
then
|
||||
echo "<font color = \"blue\">- UE --> got sync</font>" >> ./test_simulator_results.html
|
||||
else
|
||||
echo "<font color = \"red\"><b>- UE NEVER got sync</b></font>" >> ./test_simulator_results.html
|
||||
fi
|
||||
if [ $NB_ENB_SYNCED_WITH_UE -eq 1 ]
|
||||
if [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
|
||||
then
|
||||
echo "<font color = \"blue\">- UE attached to eNB</font>" >> ./test_simulator_results.html
|
||||
else
|
||||
|
||||
+24
-24
@@ -80,15 +80,15 @@ function start_basic_sim_enb {
|
||||
fi
|
||||
echo "echo \"grep N_RB_DL ci-$LOC_CONF_FILE\"" >> $1
|
||||
echo "grep N_RB_DL ci-$LOC_CONF_FILE | sed -e 's#N_RB_DL.*=#N_RB_DL =#'" >> $1
|
||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/\"" >> $1
|
||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/basic_simulator" >> $1
|
||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/" >> $1
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/" >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/\"" >> $1
|
||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/lte_build_oai/" >> $1
|
||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --basicsim\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
|
||||
echo "cat ./my-lte-softmodem-run.sh" >> $1
|
||||
echo "if [ -e /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE ]; then sudo sudo rm -f /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE; fi" >> $1
|
||||
echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE ./my-lte-softmodem-run.sh" >> $1
|
||||
echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/lte_build_oai/build -o /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE ./my-lte-softmodem-run.sh" >> $1
|
||||
|
||||
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_VM_IP_ADDR < $1
|
||||
rm $1
|
||||
@@ -123,14 +123,14 @@ function start_basic_sim_ue {
|
||||
local LOC_UE_LOG_FILE=$3
|
||||
local LOC_NB_RBS=$4
|
||||
local LOC_FREQUENCY=$5
|
||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue\"" > $1
|
||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/basic_simulator/ue" >> $1
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue" >> $1
|
||||
echo "echo \"./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_NB_RBS --ue-rxgain 140\" > ./my-lte-uesoftmodem-run.sh" >> $1
|
||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/\"" > $1
|
||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build" >> $1
|
||||
echo "echo \"./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_NB_RBS --log_config.global_log_options level,nocolor --basicsim\" > ./my-lte-uesoftmodem-run.sh" >> $1
|
||||
echo "chmod 775 ./my-lte-uesoftmodem-run.sh" >> $1
|
||||
echo "cat ./my-lte-uesoftmodem-run.sh" >> $1
|
||||
echo "if [ -e /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE ]; then sudo sudo rm -f /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE; fi" >> $1
|
||||
echo "sudo -E daemon --inherit --unsafe --name=ue_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/ue -o /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE ./my-lte-uesoftmodem-run.sh" >> $1
|
||||
echo "sudo -E daemon --inherit --unsafe --name=ue_daemon --chdir=/home/ubuntu/tmp/cmake_targets/lte_build_oai/build -o /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE ./my-lte-uesoftmodem-run.sh" >> $1
|
||||
|
||||
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||
rm $1
|
||||
@@ -418,14 +418,14 @@ function recover_core_dump {
|
||||
then
|
||||
local TC=`echo $3 | sed -e "s#^.*enb_##" -e "s#Hz.*#Hz#"`
|
||||
echo "Segmentation fault detected on enb -> recovering core dump"
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb" > $1
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" > $1
|
||||
echo "sync" >> $1
|
||||
echo "sudo tar -cjhf basic-simulator-enb-core-${TC}.bz2 core lte-softmodem *.so ci-lte-basic-sim.conf my-lte-softmodem-run.sh" >> $1
|
||||
echo "sudo rm core" >> $1
|
||||
echo "rm ci-lte-basic-sim.conf" >> $1
|
||||
echo "sync" >> $1
|
||||
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/basic_simulator/enb/basic-simulator-enb-core-${TC}.bz2 $4
|
||||
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/lte_build_oai/build/basic-simulator-enb-core-${TC}.bz2 $4
|
||||
rm -f $1
|
||||
fi
|
||||
}
|
||||
@@ -694,8 +694,8 @@ function build_ue_on_separate_folder {
|
||||
echo "cd cmake_targets/" >> $1
|
||||
echo "mkdir log" >> $1
|
||||
echo "chmod 777 log" >> $1
|
||||
echo "echo \"./build_oai --UE -t ETHERNET \"" >> $1
|
||||
echo "./build_oai --UE -t ETHERNET > log/ue-build.txt 2>&1" >> $1
|
||||
echo "echo \"./build_oai --UE \"" >> $1
|
||||
echo "./build_oai --UE > log/ue-build.txt 2>&1" >> $1
|
||||
echo "cd tools" >> $1
|
||||
echo "sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up" >> $1
|
||||
echo "sudo chmod 666 /etc/iproute2/rt_tables" >> $1
|
||||
@@ -729,9 +729,9 @@ function start_l2_sim_enb {
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1
|
||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||
then
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
else
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor \" > ./my-lte-softmodem-run.sh " >> $1
|
||||
fi
|
||||
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
|
||||
echo "cat ./my-lte-softmodem-run.sh" >> $1
|
||||
@@ -837,9 +837,9 @@ function start_l2_sim_ue {
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1
|
||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||
then
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --L2-emul 3 --num-ues $LOC_NB_UES --nums_ue_thread $LOC_NB_UES --nokrnmod 1 --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --L2-emul 3 --num-ues $LOC_NB_UES --nums_ue_thread $LOC_NB_UES --nokrnmod 1 --log_config.global_log_options level,nocolor --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
else
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --L2-emul 3 --num-ues $LOC_NB_UES --nums_ue_thread $LOC_NB_UES --nokrnmod 1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --L2-emul 3 --num-ues $LOC_NB_UES --nums_ue_thread $LOC_NB_UES --nokrnmod 1 --log_config.global_log_options level,nocolor\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
fi
|
||||
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
|
||||
echo "cat ./my-lte-softmodem-run.sh" >> $1
|
||||
@@ -949,9 +949,9 @@ function start_rf_sim_enb {
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1
|
||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||
then
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim --log_config.global_log_options level,nocolor --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
else
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim --log_config.global_log_options level,nocolor \" > ./my-lte-softmodem-run.sh " >> $1
|
||||
fi
|
||||
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
|
||||
echo "cat ./my-lte-softmodem-run.sh" >> $1
|
||||
@@ -1028,9 +1028,9 @@ function start_rf_sim_ue {
|
||||
echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1
|
||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||
then
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim --log_config.global_log_options level,nocolor --noS1\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
else
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim --log_config.global_log_options level,nocolor\" > ./my-lte-softmodem-run.sh " >> $1
|
||||
fi
|
||||
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
|
||||
echo "cat ./my-lte-softmodem-run.sh" >> $1
|
||||
@@ -1279,7 +1279,7 @@ function run_test_on_vm {
|
||||
do
|
||||
# Not Running in TDD-10MHz and TDD-20MHz : too unstable
|
||||
#if [[ $TMODE =~ .*tdd.* ]] && [[ $BW =~ .*10.* ]]; then continue; fi
|
||||
#if [[ $TMODE =~ .*tdd.* ]] && [[ $BW =~ .*20.* ]]; then continue; fi
|
||||
if [[ $TMODE =~ .*tdd.* ]] && [[ $BW =~ .*20.* ]]; then continue; fi
|
||||
|
||||
if [[ $BW =~ .*05.* ]]; then PRB=25; fi
|
||||
if [[ $BW =~ .*10.* ]]; then PRB=50; fi
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="050101">
|
||||
<testCase id="050101">
|
||||
<class>Initialize_HSS</class>
|
||||
<desc>Initialize HSS</desc>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060101">
|
||||
<class>Initialize_MME</class>
|
||||
|
||||
@@ -26,32 +26,32 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
030201 090109
|
||||
030101 000001 090101 000002 040501 040502 000001 040601 040641 040642 000001 090109 030201
|
||||
030101 000001 090101 000002 040501 040502 000001 040601 040602 040641 040642 000001 090109 030201
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000003">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
<testCase id="000003">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030101">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --noS1</Initialize_eNB_args>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --noS1 --eNBs.[0].rrc_inactivity_threshold 0</Initialize_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
@@ -59,44 +59,44 @@
|
||||
<desc>Terminate eNB</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="090101">
|
||||
<class>Initialize_OAI_UE</class>
|
||||
<desc>Initialize OAI UE (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1</Initialize_OAI_UE_args>
|
||||
</testCase>
|
||||
<testCase id="090101">
|
||||
<class>Initialize_OAI_UE</class>
|
||||
<desc>Initialize OAI UE (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1</Initialize_OAI_UE_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="090109">
|
||||
<class>Terminate_OAI_UE</class>
|
||||
<desc>Terminate OAI UE</desc>
|
||||
</testCase>
|
||||
<testCase id="090109">
|
||||
<class>Terminate_OAI_UE</class>
|
||||
<desc>Terminate OAI UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)(from eNB to OAI UE)</desc>
|
||||
<ping_args>-I oaitun_enb1 -c 20 10.0.1.2</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)(from eNB to OAI UE)</desc>
|
||||
<ping_args>-I oaitun_enb1 -c 20 10.0.1.2</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040502">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)(from OAI UE to eNB)</desc>
|
||||
<ping_args>-I oaitun_ue1 -c 20 10.0.1.1</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040502">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)(from OAI UE to eNB)</desc>
|
||||
<ping_args>-I oaitun_ue1 -c 20 10.0.1.1</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040601">
|
||||
<testCase id="040601">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/1Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-c 10.0.1.2 -u -b 1M -t 30 -i 1 -fm -B 10.0.1.1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040602">
|
||||
<testCase id="040602">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/1.2Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-c 10.0.1.2 -u -b 1.2M -t 30 -i 1 -fm -B 10.0.1.1</iperf_args>
|
||||
<desc>iperf (5MHz - DL/14Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-c 10.0.1.2 -u -b 14M -t 30 -i 1 -fm -B 10.0.1.1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040641">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -26,26 +26,26 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
030201 090109
|
||||
030102 000001 090102 000002 040503 000001 040603 040643 040644 000001 090109 030201
|
||||
030102 000001 090102 000002 040503 000001 040603 040604 040643 040644 000001 090109 030201
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030102">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --eNBs.[0].rrc_inactivity_threshold 0</Initialize_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
@@ -53,37 +53,37 @@
|
||||
<desc>Terminate eNB</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="090102">
|
||||
<class>Initialize_OAI_UE</class>
|
||||
<desc>Initialize OAI UE (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1</Initialize_OAI_UE_args>
|
||||
</testCase>
|
||||
<testCase id="090102">
|
||||
<class>Initialize_OAI_UE</class>
|
||||
<desc>Initialize OAI UE (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1</Initialize_OAI_UE_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="090109">
|
||||
<class>Terminate_OAI_UE</class>
|
||||
<desc>Terminate OAI UE</desc>
|
||||
</testCase>
|
||||
<testCase id="090109">
|
||||
<class>Terminate_OAI_UE</class>
|
||||
<desc>Terminate OAI UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040503">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040503">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040603">
|
||||
<testCase id="040603">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/1Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 1M -t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040604">
|
||||
<testCase id="040604">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/1.2Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-b 1.2M -t 30 -i 1 -fm</iperf_args>
|
||||
<desc>iperf (5MHz - DL/14Mbps/UDP)(30 sec)</desc>
|
||||
<iperf_args>-u -b 14M -t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040643">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -37,10 +37,10 @@
|
||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050101">
|
||||
<testCase id="050101">
|
||||
<class>Initialize_HSS</class>
|
||||
<desc>Initialize HSS</desc>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060101">
|
||||
<class>Initialize_MME</class>
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
<TestCaseExclusionList>
|
||||
</TestCaseExclusionList>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Waiting for a moment...</desc>
|
||||
<idle_sleep_time_in_sec>15</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Waiting for a moment...</desc>
|
||||
<idle_sleep_time_in_sec>15</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030121">
|
||||
<class>Initialize_eNB</class>
|
||||
@@ -49,31 +49,31 @@
|
||||
<desc>Terminate eNB</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040102">
|
||||
<class>Initialize_CatM_module</class>
|
||||
<desc>Initialize CAT-M Module</desc>
|
||||
</testCase>
|
||||
<testCase id="040102">
|
||||
<class>Initialize_CatM_module</class>
|
||||
<desc>Initialize CAT-M Module</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040202">
|
||||
<class>Terminate_CatM_module</class>
|
||||
<desc>Terminate CAT-M Module</desc>
|
||||
</testCase>
|
||||
<testCase id="040202">
|
||||
<class>Terminate_CatM_module</class>
|
||||
<desc>Terminate CAT-M Module</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040302">
|
||||
<class>Attach_CatM_module</class>
|
||||
<desc>Attach CAT-M Module</desc>
|
||||
</testCase>
|
||||
<testCase id="040302">
|
||||
<class>Attach_CatM_module</class>
|
||||
<desc>Attach CAT-M Module</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040402">
|
||||
<class>Detach_CatM_module</class>
|
||||
<desc>Detach CAT-M Module</desc>
|
||||
</testCase>
|
||||
<testCase id="040402">
|
||||
<class>Detach_CatM_module</class>
|
||||
<desc>Detach CAT-M Module</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040502">
|
||||
<class>Ping_CatM_module</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040502">
|
||||
<class>Ping_CatM_module</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>build-tab</htmlTabRef>
|
||||
<htmlTabName>Build</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
010101
|
||||
050101 060101 070101
|
||||
</TestCaseRequestedList>
|
||||
@@ -36,10 +36,10 @@
|
||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050101">
|
||||
<testCase id="050101">
|
||||
<class>Initialize_HSS</class>
|
||||
<desc>Initialize HSS</desc>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060101">
|
||||
<class>Initialize_MME</class>
|
||||
|
||||
@@ -24,24 +24,24 @@
|
||||
<htmlTabRef>epc-closure</htmlTabRef>
|
||||
<htmlTabName>EPC-Closure</htmlTabName>
|
||||
<htmlTabIcon>log-out</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
050201 060201 070201
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="050201">
|
||||
<class>Terminate_HSS</class>
|
||||
<desc>Terminate HSS</desc>
|
||||
</testCase>
|
||||
<testCase id="050201">
|
||||
<class>Terminate_HSS</class>
|
||||
<desc>Terminate HSS</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060201">
|
||||
<class>Terminate_MME</class>
|
||||
<desc>Terminate MME</desc>
|
||||
</testCase>
|
||||
<testCase id="060201">
|
||||
<class>Terminate_MME</class>
|
||||
<desc>Terminate MME</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="070201">
|
||||
<class>Terminate_SPGW</class>
|
||||
<desc>Terminate SPGW</desc>
|
||||
</testCase>
|
||||
<testCase id="070201">
|
||||
<class>Terminate_SPGW</class>
|
||||
<desc>Terminate SPGW</desc>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>test-05-tm1</htmlTabRef>
|
||||
<htmlTabName>Test-05MHz-TM1</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030104 040301 040501 040602 040601 040603 040604 040605 040642 040641 040643 040644 040645 040401 040201 030201
|
||||
@@ -52,61 +52,61 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040601">
|
||||
<testCase id="040601">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040602">
|
||||
<testCase id="040602">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040603">
|
||||
<testCase id="040603">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>unbalanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040604">
|
||||
<testCase id="040604">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040605">
|
||||
<testCase id="040605">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040641">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>test-10-tm1</htmlTabRef>
|
||||
<htmlTabName>Test-10MHz-TM1</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030114 040301 040511 040612 040611 040613 040614 040615 040652 040651 040653 040654 040655 040401 040201 030201
|
||||
@@ -32,10 +32,10 @@
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="030114">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (TDD/Band40/10MHz/info)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
|
||||
</testCase>
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (TDD/Band40/10MHz/info)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Terminate_eNB</class>
|
||||
@@ -52,38 +52,38 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040611">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040612">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
<testCase id="040612">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040613">
|
||||
<class>Iperf</class>
|
||||
@@ -93,20 +93,20 @@
|
||||
<iperf_profile>unbalanced</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040614">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
<testCase id="040614">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040615">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040615">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040651">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>test-20-tm1</htmlTabRef>
|
||||
<htmlTabName>Test-20MHz-TM1</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030124 040301 040521 040622 040621 040623 040624 040625 040662 040661 040663 040664 040665 040401 040201 030201
|
||||
@@ -32,10 +32,10 @@
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="030124">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (TDD/Band40/20MHz/info)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
|
||||
</testCase>
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (TDD/Band40/20MHz/info)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Terminate_eNB</class>
|
||||
@@ -52,38 +52,38 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040621">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040622">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
<testCase id="040622">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040623">
|
||||
<class>Iperf</class>
|
||||
@@ -93,20 +93,20 @@
|
||||
<iperf_profile>unbalanced</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040624">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
<testCase id="040624">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040625">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040625">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/TCP)(30 sec)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040661">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>tracer-test</htmlTabRef>
|
||||
<htmlTabName>T-Tracer</htmlTabName>
|
||||
<htmlTabIcon>duplicate</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
040101
|
||||
030100 040300 040401 040201 030201
|
||||
</TestCaseRequestedList>
|
||||
@@ -51,15 +51,15 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040300">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach single UE</desc>
|
||||
<nbMaxUEtoAttach>1</nbMaxUEtoAttach>
|
||||
</testCase>
|
||||
<testCase id="040300">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach single UE</desc>
|
||||
<nbMaxUEtoAttach>1</nbMaxUEtoAttach>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -36,10 +36,10 @@
|
||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050101">
|
||||
<testCase id="050101">
|
||||
<class>Initialize_HSS</class>
|
||||
<desc>Initialize HSS</desc>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060101">
|
||||
<class>Initialize_MME</class>
|
||||
|
||||
@@ -28,15 +28,101 @@
|
||||
030201
|
||||
040101
|
||||
030101 040301 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201 030201
|
||||
030102 000010 040301 040502 000011 040302 000001 000012 040303 000002 000013 040503 040401 040201 030201
|
||||
050102
|
||||
030102 000020 040301 040504 000021 040302 000001 000022 040303 000002 040504 000023 040401 040201 030201
|
||||
050202
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Waiting for 35 seconds</desc>
|
||||
<idle_sleep_time_in_sec>35</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Waiting for 10 seconds</desc>
|
||||
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000010">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status before attachment</desc>
|
||||
<expectedNbOfConnectedUEs>0</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000011">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status before data disabling</desc>
|
||||
<expectedNbOfConnectedUEs>2</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000012">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status after data disabling</desc>
|
||||
<expectedNbOfConnectedUEs>0</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000013">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status after data re-enabling</desc>
|
||||
<expectedNbOfConnectedUEs>2</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000020">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status before attachment</desc>
|
||||
<expectedNbOfConnectedUEs>0</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000021">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status before data disabling</desc>
|
||||
<expectedNbOfConnectedUEs>2</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000022">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status after data disabling</desc>
|
||||
<expectedNbOfConnectedUEs>0</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000023">
|
||||
<class>CheckStatusUE</class>
|
||||
<desc>Check UE(s) status after data re-enabling</desc>
|
||||
<expectedNbOfConnectedUEs>2</expectedNbOfConnectedUEs>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050102">
|
||||
<class>Initialize_FlexranCtrl</class>
|
||||
<desc>Starting Flexran Controller</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050202">
|
||||
<class>Terminate_FlexranCtrl</class>
|
||||
<desc>Stopping Flexran Controller</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030101">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030102">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030103">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate eNB</desc>
|
||||
@@ -52,62 +138,100 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040302">
|
||||
<class>DataDisable_UE</class>
|
||||
<desc>Disabling Data Service on UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040603">
|
||||
<testCase id="040303">
|
||||
<class>DataEnable_UE</class>
|
||||
<desc>Enabling Data Service on UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040502">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040503">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040504">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040505">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040603">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040604">
|
||||
<testCase id="040604">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040605">
|
||||
<testCase id="040605">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>unbalanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040606">
|
||||
<testCase id="040606">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040607">
|
||||
<testCase id="040607">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040641">
|
||||
<class>Iperf</class>
|
||||
@@ -125,20 +249,20 @@
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040643">
|
||||
<testCase id="040643">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040644">
|
||||
<testCase id="040644">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -52,62 +52,62 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040613">
|
||||
<testCase id="040613">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040614">
|
||||
<testCase id="040614">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040615">
|
||||
<testCase id="040615">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>unbalanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040616">
|
||||
<testCase id="040616">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040617">
|
||||
<testCase id="040617">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040651">
|
||||
<class>Iperf</class>
|
||||
@@ -125,20 +125,20 @@
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040653">
|
||||
<testCase id="040653">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040654">
|
||||
<testCase id="040654">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -52,62 +52,62 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040623">
|
||||
<testCase id="040623">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040624">
|
||||
<testCase id="040624">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040625">
|
||||
<testCase id="040625">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>unbalanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040626">
|
||||
<testCase id="040626">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040627">
|
||||
<testCase id="040627">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040661">
|
||||
<class>Iperf</class>
|
||||
@@ -125,20 +125,20 @@
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040663">
|
||||
<testCase id="040663">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040664">
|
||||
<testCase id="040664">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>balanced</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -51,15 +51,15 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040300">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach single UE</desc>
|
||||
<nbMaxUEtoAttach>1</nbMaxUEtoAttach>
|
||||
</testCase>
|
||||
<testCase id="040300">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach single UE</desc>
|
||||
<nbMaxUEtoAttach>1</nbMaxUEtoAttach>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040541">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040541">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040601">
|
||||
<testCase id="040601">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040641">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040551">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040551">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040611">
|
||||
<testCase id="040611">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/32Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 32M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040651">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040561">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040561">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040621">
|
||||
<testCase id="040621">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040661">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>build-tab</htmlTabRef>
|
||||
<htmlTabName>Build</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
010101
|
||||
050101 060101 070101
|
||||
</TestCaseRequestedList>
|
||||
@@ -34,13 +34,13 @@
|
||||
<testCase id="010101">
|
||||
<class>Build_eNB</class>
|
||||
<desc>Build eNB (USRP -- Ethernet Fronthaul)</desc>
|
||||
<Build_eNB_args>-t ETHERNET -w USRP -c --eNB</Build_eNB_args>
|
||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050101">
|
||||
<testCase id="050101">
|
||||
<class>Initialize_HSS</class>
|
||||
<desc>Initialize HSS</desc>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060101">
|
||||
<class>Initialize_MME</class>
|
||||
|
||||
@@ -24,25 +24,25 @@
|
||||
<htmlTabRef>epc-closure</htmlTabRef>
|
||||
<htmlTabName>EPC-Closure</htmlTabName>
|
||||
<htmlTabIcon>log-out</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
050201 060201 070201
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList>
|
||||
</TestCaseExclusionList>
|
||||
|
||||
<testCase id="050201">
|
||||
<class>Terminate_HSS</class>
|
||||
<desc>Terminate HSS</desc>
|
||||
</testCase>
|
||||
<testCase id="050201">
|
||||
<class>Terminate_HSS</class>
|
||||
<desc>Terminate HSS</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060201">
|
||||
<class>Terminate_MME</class>
|
||||
<desc>Terminate MME</desc>
|
||||
</testCase>
|
||||
<testCase id="060201">
|
||||
<class>Terminate_MME</class>
|
||||
<desc>Terminate MME</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="070201">
|
||||
<class>Terminate_SPGW</class>
|
||||
<desc>Terminate SPGW</desc>
|
||||
</testCase>
|
||||
<testCase id="070201">
|
||||
<class>Terminate_SPGW</class>
|
||||
<desc>Terminate SPGW</desc>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>test-05</htmlTabRef>
|
||||
<htmlTabName>Test-05MHz</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030104 030105 040301 040501 040602 040642 040401 040201 030201 030202
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040602">
|
||||
<testCase id="040602">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040642">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>test-10</htmlTabRef>
|
||||
<htmlTabName>Test-10MHz</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030114 030115 040301 040511 040612 040652 040401 040201 030201 030202
|
||||
@@ -40,11 +40,11 @@
|
||||
</testCase>
|
||||
|
||||
<testCase id="030115">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize RCC (TDD/Band40/10MHz/info)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/rcc.band40.tm1.50PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize RCC (TDD/Band40/10MHz/info)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/rcc.band40.tm1.50PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Terminate_eNB</class>
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040612">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
<testCase id="040612">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040652">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<htmlTabRef>test-20</htmlTabRef>
|
||||
<htmlTabName>Test-20MHz</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030124 030125 040301 040521 040622 040662 040401 040201 030201 030202
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040622">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
<testCase id="040622">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040662">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -34,13 +34,13 @@
|
||||
<testCase id="010101">
|
||||
<class>Build_eNB</class>
|
||||
<desc>Build eNB (USRP -- Ethernet Fronthaul)</desc>
|
||||
<Build_eNB_args>-t ETHERNET -w USRP -c --eNB</Build_eNB_args>
|
||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050101">
|
||||
<testCase id="050101">
|
||||
<class>Initialize_HSS</class>
|
||||
<desc>Initialize HSS</desc>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="060101">
|
||||
<class>Initialize_MME</class>
|
||||
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040501">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040604">
|
||||
<testCase id="040604">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040642">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040511">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040614">
|
||||
<testCase id="040614">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/32Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 32M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040652">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -68,30 +68,30 @@
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
<testCase id="040521">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040624">
|
||||
<testCase id="040624">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/50Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 50M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040662">
|
||||
<class>Iperf</class>
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-10mhz-orange</htmlTabRef>
|
||||
<htmlTabName>Test-10Mhz-Orange</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<htmlTabRef>test-10mhz-orange</htmlTabRef>
|
||||
<htmlTabName>Test-10Mhz-Orange</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
090109
|
||||
090110 000001 090109
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-10mHz-sfr</htmlTabRef>
|
||||
<htmlTabName>Test-10MHz-SFR</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<htmlTabRef>test-10mHz-sfr</htmlTabRef>
|
||||
<htmlTabName>Test-10MHz-SFR</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
090109
|
||||
090111 000001 090109
|
||||
|
||||
+29
-102
@@ -241,16 +241,12 @@ add_boolean_option(DEBUG_MAC_INTERFACE False "print MAC-RLC PDU exchange to stdo
|
||||
add_boolean_option(TRACE_RLC_PAYLOAD False "print RLC PDU to stdout") # if true, make sure that global and PDCP log levels are trace
|
||||
add_boolean_option(TEST_OMG False "???")
|
||||
add_boolean_option(DEBUG_OMG False "???")
|
||||
add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope")
|
||||
add_boolean_option(PRINT_STATS False "This adds the possibility to see the status")
|
||||
add_boolean_option(T_TRACER True "Activate the T tracer, a debugging/monitoring framework" )
|
||||
add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs")
|
||||
add_boolean_option(UE_DEBUG_TRACE False "Activate UE debug trace")
|
||||
add_boolean_option(UE_TIMING_TRACE False "Activate UE timing trace")
|
||||
add_boolean_option(DISABLE_LOG_X False "Deactivate all LOG_* macros")
|
||||
add_boolean_option(USRP_REC_PLAY False "Enable USRP record playback mode")
|
||||
#add_boolean_option(UE_NAS_USE_TUN False "Enable UE NAS TUN device instead of ue_ip.ko")
|
||||
add_boolean_option(BASIC_SIMULATOR False "Has to be True when building the basic simulator, False otherwise")
|
||||
|
||||
add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering")
|
||||
|
||||
@@ -1991,16 +1987,28 @@ endif()
|
||||
|
||||
list(APPEND ATLAS_LIBRARIES lapack lapacke)
|
||||
|
||||
if (${XFORMS})
|
||||
include_directories ("/usr/include/X11")
|
||||
set(XFORMS_SOURCE
|
||||
${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope.c
|
||||
)
|
||||
set(XFORMS_SOURCE_SOFTMODEM
|
||||
${OPENAIR_TARGETS}/RT/USER/stats.c
|
||||
)
|
||||
set(XFORMS_LIBRARIES "forms")
|
||||
endif (${XFORMS})
|
||||
set(XFORMS_SOURCE
|
||||
${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope.c
|
||||
)
|
||||
set(XFORMS_ENB_SOURCE
|
||||
${OPENAIR1_DIR}/PHY/TOOLS/lte_enb_scope.c
|
||||
)
|
||||
set(XFORMS_UE_SOURCE
|
||||
${OPENAIR1_DIR}/PHY/TOOLS/lte_ue_scope.c
|
||||
)
|
||||
set(XFORMS_SOURCE_SOFTMODEM
|
||||
${OPENAIR_TARGETS}/RT/USER/stats.c
|
||||
)
|
||||
set(XFORMS_LIBRARIES "forms")
|
||||
|
||||
|
||||
set (XFORMSINTERFACE_SOURCE
|
||||
${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c
|
||||
)
|
||||
add_library(enbscope MODULE ${XFORMS_SOURCE} ${XFORMS_SOURCE_SOFTMODEM} ${XFORMS_ENB_SOURCE})
|
||||
add_library(uescope MODULE ${XFORMS_SOURCE} ${XFORMS_SOURCE_SOFTMODEM} ${XFORMS_UE_SOURCE})
|
||||
target_link_libraries(enbscope ${XFORMS_LIBRARIES})
|
||||
target_link_libraries(uescope ${XFORMS_LIBRARIES})
|
||||
|
||||
set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODULE_PATH}")
|
||||
|
||||
@@ -2068,8 +2076,7 @@ add_executable(lte-softmodem
|
||||
${OPENAIR_DIR}/common/utils/utils.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${GTPU_need_ITTI}
|
||||
${XFORMS_SOURCE}
|
||||
${XFORMS_SOURCE_SOFTMODEM}
|
||||
${XFORMSINTERFACE_SOURCE}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
@@ -2112,50 +2119,10 @@ target_link_libraries(du_test
|
||||
)
|
||||
|
||||
target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem ${T_LIB})
|
||||
|
||||
# lte-softmodem-nos1 is both eNB and UE implementation
|
||||
###################################################
|
||||
add_executable(lte-softmodem-nos1
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-enb.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c
|
||||
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c
|
||||
${OPENAIR_DIR}/common/utils/utils.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${GTPU_need_ITTI}
|
||||
${XFORMS_SOURCE}
|
||||
${XFORMS_SOURCE_SOFTMODEM}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
)
|
||||
|
||||
add_dependencies(lte-softmodem-nos1 rrc_flag s1ap_flag x2_flag)
|
||||
|
||||
target_link_libraries (lte-softmodem-nos1
|
||||
-Wl,--start-group
|
||||
RRC_LIB F1AP F1AP_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
|
||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB} LFDS7
|
||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries (lte-softmodem-nos1 ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem-nos1 ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem-nos1 ${T_LIB})
|
||||
# lte-uesoftmodem is UE implementation
|
||||
#######################################
|
||||
|
||||
@@ -2177,8 +2144,7 @@ add_executable(lte-uesoftmodem
|
||||
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
|
||||
${OPENAIR_DIR}/common/utils/utils.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${XFORMS_SOURCE}
|
||||
${XFORMS_SOURCE_SOFTMODEM}
|
||||
${XFORMSINTERFACE_SOURCE}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
@@ -2193,50 +2159,11 @@ target_link_libraries (lte-uesoftmodem
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries (lte-uesoftmodem ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem ${T_LIB})
|
||||
|
||||
# lte-uesoftmodem-nos1 is UE implementation
|
||||
###################################################
|
||||
add_executable(lte-uesoftmodem-nos1
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem-common.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR_TARGETS}/RT/USER/rfsim.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c
|
||||
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
|
||||
${OPENAIR_DIR}/common/utils/utils.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${XFORMS_SOURCE}
|
||||
${XFORMS_SOURCE_SOFTMODEM}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
)
|
||||
|
||||
add_dependencies(lte-uesoftmodem-nos1 rrc_flag s1ap_flag x2_flag)
|
||||
|
||||
target_link_libraries (lte-uesoftmodem-nos1
|
||||
-Wl,--start-group
|
||||
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB F1AP F1AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
|
||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries (lte-uesoftmodem-nos1 ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem-nos1 ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem-nos1 ${T_LIB})
|
||||
# USIM process
|
||||
#################
|
||||
#add_executable(usim
|
||||
@@ -2276,7 +2203,7 @@ add_executable(dlsim_tm4
|
||||
)
|
||||
target_link_libraries (dlsim_tm4
|
||||
-Wl,--start-group SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY LFDS ${ITTI_LIB} -Wl,--end-group
|
||||
pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB}
|
||||
pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${T_LIB}
|
||||
)
|
||||
|
||||
foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim)
|
||||
@@ -2292,7 +2219,7 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
|
||||
target_link_libraries (${myExe}
|
||||
|
||||
-Wl,--start-group SIMU UTIL SCHED_LIB SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY PHY_UE PHY_RU LFDS ${ITTI_LIB} LFDS7 -Wl,--end-group
|
||||
pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB} dl
|
||||
pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB} dl
|
||||
)
|
||||
endforeach(myExe)
|
||||
|
||||
@@ -2356,7 +2283,7 @@ endforeach(myExe)
|
||||
if (${T_TRACER})
|
||||
foreach(i
|
||||
#all "add_executable" definitions (except tests, rb_tool, updatefw)
|
||||
lte-softmodem lte-softmodem-nos1 lte-uesoftmodem lte-uesoftmodem-nos1
|
||||
lte-softmodem lte-uesoftmodem
|
||||
dlsim_tm4 dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim
|
||||
pdcchsim pucchsim prachsim syncsim ulsim cu_test du_test
|
||||
#all "add_library" definitions
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -141,6 +141,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -143,6 +143,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -143,6 +143,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -143,6 +143,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
+87
-254
@@ -52,13 +52,13 @@ CPU_AFFINITY_FLAG_USER="False" #Only valid when lowlatecy flag is set to False
|
||||
REL="Rel14"
|
||||
HW="None"
|
||||
TP="None"
|
||||
NOS1=0
|
||||
EPC=0
|
||||
VERBOSE_COMPILE=0
|
||||
CFLAGS_PROCESSOR_USER=""
|
||||
RUN_GROUP=0
|
||||
TEST_CASE_GROUP=""
|
||||
BUILD_DOXYGEN=0
|
||||
BUILD_COVERITY_SCAN=0
|
||||
T_TRACER="True"
|
||||
DISABLE_HARDWARE_DEPENDENCY="False"
|
||||
CMAKE_BUILD_TYPE=""
|
||||
@@ -66,11 +66,9 @@ CMAKE_CMD="$CMAKE"
|
||||
UE_AUTOTEST_TRACE="False"
|
||||
UE_DEBUG_TRACE="False"
|
||||
UE_TIMING_TRACE="False"
|
||||
DISABLE_LOG_X="False"
|
||||
USRP_REC_PLAY="False"
|
||||
BUILD_ECLIPSE=0
|
||||
UE_NAS_USE_TUN="False"
|
||||
BASIC_SIMULATOR=0
|
||||
OPTIONAL_LIBRARIES="telnetsrv enbscope uescope msc"
|
||||
trap handle_ctrl_c INT
|
||||
|
||||
function print_help() {
|
||||
@@ -110,11 +108,8 @@ Options
|
||||
Rel8 limits the implementation to 3GPP Release 8 version
|
||||
Rel10 limits the implementation to 3GPP Release 10 version
|
||||
-w | --hardware
|
||||
EXMIMO, USRP, BLADERF, ETHERNET, LMSSDR, IRIS, None (Default)
|
||||
EXMIMO, USRP, BLADERF, LMSSDR, IRIS, None (Default)
|
||||
Adds this RF board support (in external packages installation and in compilation)
|
||||
-t | --transport protocol
|
||||
ETHERNET , None
|
||||
Adds this trasport protocol support in compilation
|
||||
--phy_simulators
|
||||
Makes the unitary tests Layer 1 simulators
|
||||
--core_simulators
|
||||
@@ -125,19 +120,17 @@ Options
|
||||
runs only specified test cases specified here. This flag is only valid with -s
|
||||
-V | --vcd
|
||||
Adds a debgging facility to the binary files: GUI with major internal synchronization events
|
||||
-x | --xforms
|
||||
Adds a software oscilloscope feature to the produced binaries.
|
||||
--install-system-files
|
||||
Install OpenArInterface required files in Linux system
|
||||
(will ask root password)
|
||||
--noS1
|
||||
Compiles lte-softmodem without S1 interface, using direct link to IP instead
|
||||
--verbose-compile
|
||||
Shows detailed compilation instructions in makefile
|
||||
--cflags_processor
|
||||
Manually Add CFLAGS of processor if they are not detected correctly by script. Only add these flags if you know your processor supports them. Example flags: -msse3 -msse4.1 -msse4.2 -mavx2
|
||||
--build-doxygen
|
||||
Builds doxygen based documentation.
|
||||
--build-coverity-scan
|
||||
Builds Coverity-Scan objects for upload
|
||||
--disable-deadline
|
||||
Disables deadline scheduler of Linux kernel (>=3.14.x).
|
||||
--enable-deadline
|
||||
@@ -154,29 +147,18 @@ Options
|
||||
Enable traces for UE debugging
|
||||
--ue-timing
|
||||
Enable traces for timing
|
||||
--disable-log
|
||||
Disable all LOG_* macros
|
||||
--build-eclipse
|
||||
Build eclipse project files. Paths are auto corrected by fixprj.sh
|
||||
--build-telnet
|
||||
Build telnet server, specify --telnetsrv on command line to start it (eNB only)
|
||||
--build-msc
|
||||
Build MSC tracing utility, specify --msc on command line to start it (eNB and UE)
|
||||
--build-lib <libraries>
|
||||
Build optional shared library, <libraries> can be one or several of $OPTIONAL_LIBRARIES
|
||||
--usrp-recplay
|
||||
Build for I/Q record-playback modes
|
||||
--ue-nas-use-tun
|
||||
Use TUN devices for the UEs instead of ue_ip.ko
|
||||
--basic-simulator
|
||||
Generates a basic [1 UE + 1 eNB + no channel] simulator.
|
||||
See targets/ARCH/tcp_bridge/README.tcp_bridge_oai for documentation.
|
||||
--rfsimulator
|
||||
Generate virtual RF driver
|
||||
to use it, set the environement variable RFSIMULATOR to \"enb\" in the eNB and to the eNB IP address in the UEs
|
||||
|
||||
Usage (first build):
|
||||
NI/ETTUS B201 + COTS UE : ./build_oai -I --eNB -x --install-system-files -w USRP
|
||||
NI/ETTUS B201 + COTS UE : ./build_oai -I --eNB --install-system-files -w USRP
|
||||
Usage (Regular):
|
||||
Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x
|
||||
NI/ETTUS B201 + OAI ENB : ./build_oai --eNB -x -w USRP"
|
||||
Eurecom EXMIMO + OAI ENB : ./build_oai --eNB
|
||||
NI/ETTUS B201 + OAI ENB : ./build_oai --eNB -w USRP"
|
||||
}
|
||||
|
||||
|
||||
@@ -255,14 +237,6 @@ function main() {
|
||||
esac
|
||||
echo_info "Setting hardware to: $HW"
|
||||
shift 2;;
|
||||
-t | --transport_protocol)
|
||||
TP="$2" #"${i#*=}"
|
||||
if [ "$TP" != "ETHERNET" -a "$TP" != "None" ] ; then
|
||||
echo_fatal "Unknown TP type $TP will exit..."
|
||||
else
|
||||
echo_info "Setting transport protocol to: $TP"
|
||||
fi
|
||||
shift 2;;
|
||||
--phy_simulators)
|
||||
SIMUS_PHY=1
|
||||
echo_info "Will compile dlsim, ulsim, ..."
|
||||
@@ -286,7 +260,7 @@ function main() {
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
|
||||
shift;;
|
||||
-x | --xforms)
|
||||
XFORMS="True"
|
||||
XFORMS=1
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
|
||||
echo_info "Will generate the software oscilloscope features"
|
||||
shift;;
|
||||
@@ -294,10 +268,6 @@ function main() {
|
||||
INSTALL_SYSTEM_FILES=1
|
||||
echo_info "Will copy OpenAirInterface files in Linux directories"
|
||||
shift;;
|
||||
--noS1)
|
||||
NOS1=1
|
||||
echo_info "Will compile without S1 interface"
|
||||
shift;;
|
||||
--verbose-compile)
|
||||
VERBOSE_COMPILE=1
|
||||
echo_info "Will compile with verbose instructions"
|
||||
@@ -310,6 +280,10 @@ function main() {
|
||||
BUILD_DOXYGEN=1
|
||||
echo_info "Will build doxygen support"
|
||||
shift;;
|
||||
--build-coverity-scan)
|
||||
BUILD_COVERITY_SCAN=1
|
||||
echo_info "Will build Coverity-Scan objects for upload"
|
||||
shift;;
|
||||
--disable-deadline)
|
||||
FORCE_DEADLINE_SCHEDULER_FLAG_USER="False"
|
||||
echo_info "Disabling the usage of deadline scheduler"
|
||||
@@ -342,10 +316,6 @@ function main() {
|
||||
UE_TIMING_TRACE="True"
|
||||
echo_info "Enabling UE timing trace"
|
||||
shift 1;;
|
||||
--disable-log)
|
||||
DISABLE_LOG_X="True"
|
||||
echo_info "Disabling all LOG_* traces"
|
||||
shift 1;;
|
||||
--uhd-images-dir)
|
||||
UHD_IMAGES_DIR=$2
|
||||
echo_info "Downloading UHD images in the indicated location"
|
||||
@@ -355,30 +325,24 @@ function main() {
|
||||
CMAKE_CMD="$CMAKE_CMD"' -DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE -G"Eclipse CDT4 - Unix Makefiles"'
|
||||
echo_info "Enabling build eclipse project support"
|
||||
shift 1;;
|
||||
--build-telnetsrv)
|
||||
BUILD_TELNETSRV=1
|
||||
echo_info "Build embedded telnet server"
|
||||
shift ;;
|
||||
--build-msc)
|
||||
MSC_GEN=1
|
||||
echo_info "Build MSC tracing utility"
|
||||
shift ;;
|
||||
--build-lib)
|
||||
BUILD_OPTLIB=""
|
||||
for alib in $2 ; do
|
||||
for oklib in $OPTIONAL_LIBRARIES ; do
|
||||
if [ "$alib" = "$oklib" ] ; then
|
||||
BUILD_OPTLIB="$BUILD_OPTLIB $alib"
|
||||
echo_info "Enabling build of lib${alib}.so"
|
||||
fi
|
||||
done
|
||||
done
|
||||
if [ "${BUILD_OPTLIB## }" != "$2" ] ; then
|
||||
echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES"
|
||||
fi
|
||||
shift 2;;
|
||||
--usrp-recplay)
|
||||
USRP_REC_PLAY="True"
|
||||
echo_info "Enabling USRP record playback mode"
|
||||
shift 1;;
|
||||
--ue-nas-use-tun)
|
||||
UE_NAS_USE_TUN="True"
|
||||
echo_info "Enabling UE NAS TUN device usage instead of ue_ip.ko"
|
||||
shift 1;;
|
||||
--basic-simulator)
|
||||
BASIC_SIMULATOR=1
|
||||
echo_info "Compiling the basic simulator"
|
||||
shift 1;;
|
||||
--rfsimulator)
|
||||
RFSIMULATOR=true
|
||||
echo_info "Compiling the RF simulator"
|
||||
shift 1;;
|
||||
-h | --help)
|
||||
print_help
|
||||
exit 1;;
|
||||
@@ -388,7 +352,20 @@ function main() {
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
#########################################################
|
||||
# check if cov-build is installed
|
||||
#########################################################
|
||||
if [ "$BUILD_COVERITY_SCAN" == "1" ] ; then
|
||||
echo_info "Checking cov-build is installed"
|
||||
IS_INSTALLED=`which cov-build | grep -c cov-build || true`
|
||||
if [ $IS_INSTALLED -eq 1 ] ; then
|
||||
echo_info "Found cov-build"
|
||||
else
|
||||
echo_fatal "Did NOT find cov-build in PATH!"
|
||||
fi
|
||||
fi
|
||||
|
||||
CMAKE_CMD="$CMAKE_CMD .."
|
||||
echo_info "CMAKE_CMD=$CMAKE_CMD"
|
||||
#########################################################
|
||||
@@ -398,7 +375,7 @@ function main() {
|
||||
|
||||
if [ "$eNB" = "1" ] ; then
|
||||
if [ "$HW" = "None" -a "$TP" = "None" ] ; then
|
||||
echo_fatal "Define a local radio head (e.g. -w EXMIMO) or a transport protocol (e.g. -t ETHERNET) to communicate with a remote radio head!"
|
||||
echo_info "No local radio head and no transport protocol selected"
|
||||
fi
|
||||
if [ "$HW" = "None" ] ; then
|
||||
echo_info "No radio head has been selected (HW set to $HW)"
|
||||
@@ -504,15 +481,10 @@ function main() {
|
||||
if [ "$T_TRACER" = "False" ] ; then
|
||||
noLOGDirsuffix="_noLOG"
|
||||
fi
|
||||
if [ "$NOS1" = "1" ] ; then
|
||||
noS1Dir="_noS1"
|
||||
bin_suffix="-nos1"
|
||||
else
|
||||
lte_build_dir=lte_build_oai
|
||||
bin_suffix=""
|
||||
fi
|
||||
lte_build_dir=lte_build_oai
|
||||
bin_suffix=""
|
||||
|
||||
lte_build_dir="lte${noS1Dir}_build_oai${noLOGDirsuffix}"
|
||||
lte_build_dir="lte_build_oai${noLOGDirsuffix}"
|
||||
# configuration module libraries, one currently available, using libconfig
|
||||
config_libconfig_shlib=params_libconfig
|
||||
|
||||
@@ -524,12 +496,8 @@ function main() {
|
||||
mkdir -p $DIR/$lte_build_dir/build
|
||||
cmake_file=$DIR/$lte_build_dir/CMakeLists.txt
|
||||
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
|
||||
# if [ "$NOS1" = "1" ] ; then
|
||||
# cat $DIR/$lte_build_dir/CMakeLists.template >> $cmake_file
|
||||
# fi
|
||||
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
||||
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
||||
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
||||
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
||||
# echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||
@@ -545,13 +513,7 @@ function main() {
|
||||
echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
|
||||
echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file
|
||||
echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file
|
||||
echo "set (DISABLE_LOG_X $DISABLE_LOG_X)" >> $cmake_file
|
||||
echo "set (USRP_REC_PLAY $USRP_REC_PLAY)" >> $cmake_file
|
||||
if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
|
||||
echo_info "Compiling UE S1 build : enabling Linux and NETLINK"
|
||||
echo "set (LINUX True )" >> $cmake_file
|
||||
echo "set (PDCP_USE_NETLINK True )" >> $cmake_file
|
||||
fi
|
||||
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
||||
cd $DIR/$lte_build_dir/build
|
||||
eval $CMAKE_CMD
|
||||
@@ -570,46 +532,41 @@ function main() {
|
||||
compilations \
|
||||
$lte_build_dir coding \
|
||||
libcoding.so $dbin/libcoding.so
|
||||
|
||||
if [ "$NOS1" = "1" ] ; then
|
||||
compilations \
|
||||
$lte_build_dir nasmesh \
|
||||
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
||||
compilations \
|
||||
$lte_build_dir rb_tool \
|
||||
rb_tool $dbin/rb_tool
|
||||
cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
|
||||
fi
|
||||
# optional libs (used when noS1 with kernel modules
|
||||
compilations \
|
||||
$lte_build_dir nasmesh \
|
||||
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
||||
compilations \
|
||||
$lte_build_dir rb_tool \
|
||||
rb_tool $dbin/rb_tool
|
||||
cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
|
||||
fi
|
||||
|
||||
if [ "$UE" = 1 ] ; then
|
||||
lte_exec=lte-uesoftmodem${bin_suffix}
|
||||
compilations \
|
||||
$lte_build_dir $lte_exec \
|
||||
$lte_exec $dbin/$lte_exec.$REL
|
||||
|
||||
# mandatory shared lib
|
||||
compilations \
|
||||
$lte_build_dir $config_libconfig_shlib \
|
||||
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
|
||||
compilations \
|
||||
$lte_build_dir coding \
|
||||
libcoding.so $dbin/libcoding.so
|
||||
|
||||
if [ "$NOS1" = "1" ] ; then
|
||||
compilations \
|
||||
$lte_build_dir nasmesh \
|
||||
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
||||
compilations \
|
||||
$lte_build_dir rb_tool \
|
||||
rb_tool $dbin/rb_tool
|
||||
cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
|
||||
else
|
||||
# ue_ip driver compilation
|
||||
echo_info "Compiling UE specific part"
|
||||
lte_exec=lte-uesoftmodem${bin_suffix}
|
||||
compilations \
|
||||
$lte_build_dir ue_ip \
|
||||
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
|
||||
$lte_build_dir $lte_exec \
|
||||
$lte_exec $dbin/$lte_exec.$REL
|
||||
|
||||
# mandatory shared lib
|
||||
compilations \
|
||||
$lte_build_dir $config_libconfig_shlib \
|
||||
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
|
||||
compilations \
|
||||
$lte_build_dir coding \
|
||||
libcoding.so $dbin/libcoding.so
|
||||
# optional libs (used when noS1 with kernel modules
|
||||
compilations \
|
||||
$lte_build_dir nasmesh \
|
||||
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
||||
compilations \
|
||||
$lte_build_dir rb_tool \
|
||||
rb_tool $dbin/rb_tool
|
||||
cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
|
||||
# ue_ip driver compilation
|
||||
compilations \
|
||||
$lte_build_dir ue_ip \
|
||||
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
|
||||
|
||||
# mkdir -p $DIR/at_commands/build
|
||||
# cd $DIR/at_commands/build
|
||||
@@ -644,7 +601,6 @@ function main() {
|
||||
echo_warning "not generated UE NAS files: binaries not found"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
|
||||
cd $OPENAIR_DIR/cmake_targets/lte-simulators
|
||||
@@ -708,23 +664,17 @@ function main() {
|
||||
fi
|
||||
cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
|
||||
fi
|
||||
|
||||
# Telnet server compilation
|
||||
# optional libraries
|
||||
#####################
|
||||
if [ "$BUILD_TELNETSRV" = "1" ] ; then
|
||||
compilations \
|
||||
$lte_build_dir telnetsrv \
|
||||
libtelnetsrv.so $dbin/libtelnetsrv.so
|
||||
if [ ! -z "$BUILD_OPTLIB" ] ; then
|
||||
for oklib in $BUILD_OPTLIB ; do
|
||||
compilations \
|
||||
$lte_build_dir $oklib \
|
||||
lib${oklib}.so $dbin/lib${oklib}.so
|
||||
done
|
||||
|
||||
fi
|
||||
# msc library compilation
|
||||
#####################
|
||||
if [ "$MSC_GEN" = "1" ] ; then
|
||||
compilations \
|
||||
$lte_build_dir msc \
|
||||
libmsc.so $dbin/libmsc.so
|
||||
|
||||
fi
|
||||
|
||||
# build RF device and transport protocol libraries
|
||||
#####################################
|
||||
if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
|
||||
@@ -854,123 +804,6 @@ function main() {
|
||||
echo_info "10. Bypassing the Tests ..."
|
||||
fi
|
||||
|
||||
# basic simulator
|
||||
#####################
|
||||
if [ "$BASIC_SIMULATOR" = "1" ]; then
|
||||
echo_info "Build basic simulator"
|
||||
[ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/basic_simulator
|
||||
[ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
|
||||
mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator
|
||||
mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator/enb
|
||||
mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator/ue
|
||||
mkdir -p $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
|
||||
|
||||
# enb
|
||||
|
||||
cmake_file=$OPENAIR_DIR/cmake_targets/basic_simulator/enb/CMakeLists.txt
|
||||
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
|
||||
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
||||
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
||||
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
|
||||
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
|
||||
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
||||
echo "set ( RF_BOARD \"OAI_USRP\")" >> $cmake_file
|
||||
echo "set ( TRANSP_PRO \"None\")" >> $cmake_file
|
||||
echo "set(PACKAGE_NAME \"simulator_enb\")" >> $cmake_file
|
||||
echo "set (DEADLINE_SCHEDULER \"False\" )" >> $cmake_file
|
||||
echo "set (CPU_AFFINITY \"False\" )" >> $cmake_file
|
||||
echo "set ( T_TRACER \"True\" )" >> $cmake_file
|
||||
echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
|
||||
echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file
|
||||
echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file
|
||||
echo "set (DISABLE_LOG_X $DISABLE_LOG_X)" >> $cmake_file
|
||||
echo "set (USRP_REC_PLAY $USRP_REC_PLAY)" >> $cmake_file
|
||||
echo "set (BASIC_SIMULATOR \"True\" )" >> $cmake_file
|
||||
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)' >> $cmake_file
|
||||
|
||||
echo_info "Build eNB"
|
||||
echo_info "logs are in $dlog/basic_simulator_enb.txt"
|
||||
set +e
|
||||
{
|
||||
cd $OPENAIR_DIR/cmake_targets/basic_simulator/enb
|
||||
cmake .
|
||||
make -j`nproc` lte-softmodem
|
||||
make -j`nproc` coding params_libconfig tcp_bridge_oai
|
||||
ln -sf libtcp_bridge_oai.so liboai_device.so
|
||||
cd ../..
|
||||
} > $dlog/basic_simulator_enb.txt 2>&1
|
||||
set -e
|
||||
if [ -s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/lte-softmodem -a \
|
||||
-s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libcoding.so -a \
|
||||
-s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libparams_libconfig.so -a \
|
||||
-s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libtcp_bridge_oai.so ] ; then
|
||||
echo_success "eNB compiled"
|
||||
check_warnings "$dlog/basic_simulator_enb.txt"
|
||||
else
|
||||
echo_error "eNB compilation failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ue
|
||||
|
||||
echo_info "Compile conf2uedata"
|
||||
cd $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
|
||||
eval $CMAKE_CMD
|
||||
compilations \
|
||||
nas_sim_tools conf2uedata \
|
||||
conf2uedata $dbin/conf2uedata
|
||||
|
||||
cmake_file=$OPENAIR_DIR/cmake_targets/basic_simulator/ue/CMakeLists.txt
|
||||
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
|
||||
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
||||
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
||||
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
|
||||
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
|
||||
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
||||
echo "set ( RF_BOARD \"OAI_USRP\")" >> $cmake_file
|
||||
echo "set ( TRANSP_PRO \"None\")" >> $cmake_file
|
||||
echo "set(PACKAGE_NAME \"simulator_ue\")" >> $cmake_file
|
||||
echo "set (DEADLINE_SCHEDULER \"False\" )" >> $cmake_file
|
||||
echo "set (CPU_AFFINITY \"False\" )" >> $cmake_file
|
||||
echo "set ( T_TRACER \"True\" )" >> $cmake_file
|
||||
echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
|
||||
echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file
|
||||
echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file
|
||||
echo "set (DISABLE_LOG_X $DISABLE_LOG_X)" >> $cmake_file
|
||||
echo "set (USRP_REC_PLAY $USRP_REC_PLAY)" >> $cmake_file
|
||||
echo "set (LINUX True )" >> $cmake_file
|
||||
echo "set (PDCP_USE_NETLINK True )" >> $cmake_file
|
||||
echo "set (BASIC_SIMULATOR \"True\" )" >> $cmake_file
|
||||
# echo "set (UE_NAS_USE_TUN \"True\" )" >> $cmake_file
|
||||
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)' >> $cmake_file
|
||||
|
||||
echo_info "Build UE"
|
||||
echo_info "logs are in $dlog/basic_simulator_ue.txt"
|
||||
set +e
|
||||
{
|
||||
cd $OPENAIR_DIR/cmake_targets/basic_simulator/ue
|
||||
cmake .
|
||||
make -j`nproc` lte-uesoftmodem
|
||||
make -j`nproc` coding params_libconfig tcp_bridge_oai
|
||||
ln -sf libtcp_bridge_oai.so liboai_device.so
|
||||
cd ../..
|
||||
} > $dlog/basic_simulator_ue.txt 2>&1
|
||||
set -e
|
||||
if [ -s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/lte-uesoftmodem -a \
|
||||
-s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libcoding.so -a \
|
||||
-s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libparams_libconfig.so -a \
|
||||
-s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libtcp_bridge_oai.so ] ; then
|
||||
echo_success "UE compiled"
|
||||
check_warnings "$dlog/basic_simulator_ue.txt"
|
||||
else
|
||||
echo_error "UE compilation failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo_info "Generate UE SIM data"
|
||||
$OPENAIR_DIR/targets/bin/conf2uedata -c $OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf -o $OPENAIR_DIR/cmake_targets/basic_simulator/ue
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
@@ -177,10 +177,15 @@ compilations() {
|
||||
set +e
|
||||
{
|
||||
rm -f $3
|
||||
if [ "$VERBOSE_COMPILE" == "1" ]; then
|
||||
make -j`nproc` $2 VERBOSE=$VERBOSE_COMPILE
|
||||
if [ "$BUILD_COVERITY_SCAN" == "1" ]; then
|
||||
COV_SCAN_PREFIX="cov-build --dir cov-int"
|
||||
else
|
||||
make -j`nproc` $2
|
||||
COV_SCAN_PREFIX=""
|
||||
fi
|
||||
if [ "$VERBOSE_COMPILE" == "1" ]; then
|
||||
$COV_SCAN_PREFIX make -j`nproc` $2 VERBOSE=$VERBOSE_COMPILE
|
||||
else
|
||||
$COV_SCAN_PREFIX make -j`nproc` $2
|
||||
fi
|
||||
|
||||
} > $dlog/$2.$REL.txt 2>&1
|
||||
|
||||
@@ -481,10 +481,10 @@ static inline void printMeas(char *txt, Meas *M, int period) {
|
||||
M->iterations,
|
||||
M->maxArray[1],M->maxArray[2], M->maxArray[3],M->maxArray[4], M->maxArray[5],
|
||||
M->maxArray[6],M->maxArray[7], M->maxArray[8],M->maxArray[9],M->maxArray[10]);
|
||||
#if DISABLE_LOG_X
|
||||
printf("%s",txt2);
|
||||
#if T_TRACER
|
||||
LOG_W(PHY,"%s",txt2);
|
||||
#else
|
||||
LOG_W(PHY, "%s",txt2);
|
||||
printf("%s",txt2);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
measur command can be used to get cpu usage or signal processing statistics from a running eNB instance.
|
||||
|
||||
|
||||
Measurments can be displayed by groups, the list of available groups can be retrieved using the `measur show groups` command.
|
||||
```bash
|
||||
softmodem> measur show groups
|
||||
name type
|
||||
00 enb ltestats
|
||||
01 enbues ltestats
|
||||
02 rlc ltestats
|
||||
03 phycpu cpustats
|
||||
04 maccpu cpustats
|
||||
05 pdcpcpu cpustats
|
||||
softmodem>
|
||||
```
|
||||
By default the oai softmodem doesn't compute cpu usage measurments, a specific command allows to enable them.
|
||||
```bash
|
||||
softmodem> measur cpustats enable
|
||||
softmodem> measur show phycpu
|
||||
--------------------------------- cpu (4 GHz) measurements: PHY (cpustats enabled) ---------------------------------
|
||||
00 phy_proc_tx: 40.217 us; 178 | 01 phy_proc_rx: 0.000 us; 0 |
|
||||
02 rx_prach: 40.123 us; 9 | 03 ofdm_mod: 0.000 us; 0 |
|
||||
04 dlsch_common_and_dci: 39.311 us; 178 | 05 dlsch_ue_specific: 0.878 us; 178 |
|
||||
06 dlsch_encoding: 5.667 us; 11 | 07 dlsch_modulation: 5.398 us; 11 |
|
||||
08 dlsch_scrambling: 1.398 us; 11 | 09 dlsch_rate_matching: 1.367 us; 11 |
|
||||
10 dlsch_turbo_encod_prep: 0.000 us; 0 | 11 dlsch_turbo_encod_segm: 0.000 us; 0 |
|
||||
12 dlsch_turbo_encod: 2.408 us; 11 | 13 dlsch_turbo_encod_waiting: 0.000 us; 0 |
|
||||
14 dlsch_turbo_encod_signal: 0.000 us; 0 | 15 dlsch_turbo_encod_main: 0.000 us; 0 |
|
||||
16 dlsch_turbo_encod_wakeup0: 0.000 us; 0 | 17 dlsch_turbo_encod_wakeup1: 0.000 us; 0 |
|
||||
18 dlsch_interleaving: 0.503 us; 11 | 19 rx_dft: 0.000 us; 0 |
|
||||
20 ulsch_channel_estimation: 0.000 us; 0 | 21 ulsch_freq_offset_estimation: 0.000 us; 0 |
|
||||
22 ulsch_decoding: 0.000 us; 0 | 23 ulsch_demodulation: 0.000 us; 0 |
|
||||
24 ulsch_rate_unmatching: 0.000 us; 0 | 25 ulsch_turbo_decoding: 0.000 us; 0 |
|
||||
26 ulsch_deinterleaving: 0.000 us; 0 | 27 ulsch_demultiplexing: 0.000 us; 0 |
|
||||
softmodem> measur cpustats disable
|
||||
```
|
||||
|
||||
signal processing statistics are always available.
|
||||
```bash
|
||||
softmodem> measur show enb
|
||||
--------------------------------- eNB 0 mac stats CC 0 frame 68 ---------------------------------
|
||||
total_num_bcch_pdu = 44 bcch_buffer = 17 total_bcch_buffer = 937
|
||||
bcch_mcs = 2 total_num_ccch_pdu = 0 ccch_buffer = 0
|
||||
total_ccch_buffer = 0 ccch_mcs = 0 total_num_pcch_pdu = 0
|
||||
pcch_buffer = 0 total_pcch_buffer = 0 pcch_mcs = 0
|
||||
num_dlactive_UEs = 0 available_prbs = 25 total_available_prbs = 16924
|
||||
available_ncces = 0 dlsch_bitrate = 0 dlsch_bytes_tx = 0
|
||||
dlsch_pdus_tx = 0 total_dlsch_bitrate = 0 total_dlsch_bytes_tx = 0
|
||||
total_dlsch_pdus_tx = 0 ulsch_bitrate = 0 ulsch_bytes_rx = 0
|
||||
ulsch_pdus_rx = 0 total_ulsch_bitrate = 0 total_ulsch_bytes_rx = 0
|
||||
total_ulsch_pdus_rx = 0 sched_decisions = 0 missed_deadlines = 0
|
||||
```
|
||||
[oai telnetserver home](telnetsrv.md)
|
||||
[oai telnetserver usage home](telnetusage.md)
|
||||
@@ -5,7 +5,7 @@ By default the embedded telnet server, which is implemented in a shared library,
|
||||
cd \<oai repository\>/openairinterface5g
|
||||
source oaienv
|
||||
cd cmake_targets
|
||||
./build_oai --build-telnetsrv
|
||||
./build_oai --build-lib telnetsrv
|
||||
```
|
||||
|
||||
This will create the `libtelnetsrv.so` file in the `targets/bin` and `cmake_targets/lte_build_oai/build` sub directories of the oai repository.
|
||||
@@ -23,6 +23,7 @@ Below are examples of telnet sessions:
|
||||
* [using the loop command](telnetloop.md)
|
||||
* [loader command](telnetloader.md)
|
||||
* [log command](telnetlog.md)
|
||||
* [measur command](telnetmeasur.md)
|
||||
|
||||
# telnet server parameters
|
||||
The telnet server is using the [oai configuration module](Config/Rtusage). Telnet parameters must be specified in the `telnetsrv` section. Some parameters can be modified via the telnet telnet server command, as specified in the last column of the following table.
|
||||
|
||||
@@ -181,6 +181,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
+4
-12
@@ -70,13 +70,13 @@ After completing the build, the binaries are available in the `cmake_targets/lte
|
||||
|
||||
## Telnet Server
|
||||
|
||||
The telnet server can be built with the --build-telnet option, after building the softmodem or while building it.
|
||||
The telnet server can be built with the `--build-lib telnetsrv` option, after building the softmodem or while building it.
|
||||
|
||||
`./build_oai -I -w USRP --eNB --UE --build-telnetsrv`
|
||||
`./build_oai -I -w USRP --eNB --UE --build-lib telnetsrv`
|
||||
|
||||
or
|
||||
|
||||
`./build_oai --build-telnetsrv`
|
||||
`./build_oai --build-lib telnetsrv`
|
||||
|
||||
## USRP record player
|
||||
|
||||
@@ -94,7 +94,6 @@ The USRP record player today needs a specific build. Work to make it available a
|
||||
| --clean-kernel | unknown | no code in the script corresponding to this option |
|
||||
| --install-system-files | maintained | install oai built binaries in linux system files repositories |
|
||||
| -w | maintained and tested in CI for USRP device | build corresponding oai device and create the soft link to enforce this device usage at run-time |
|
||||
| -t | maintained | build the specified transport library, which is used in some simulators and in non monolithic eNodeB deployments. Now of little interest as transport library build is enforced when building the eNodeB. |
|
||||
| --phy_simulators | maintained, tested in CI | build all PHY simulators, a set of executables allowing unitary tests of LTE channel implementation within oai. |
|
||||
| --core_simulators | | |
|
||||
| -s | | |
|
||||
@@ -106,24 +105,17 @@ The USRP record player today needs a specific build. Work to make it available a
|
||||
| --eNB | maintained and tested in CI | build `lte-softmodem` the LTE eNodeB |
|
||||
| --UE | maintained and tested in CI | build `lte-uesoftmodem` the LTE UE |
|
||||
| --usrp-recplay | maintained | build with support for the record player. Implementation will be soon reviewed to switch to a run-time option. |
|
||||
| --build-telnet | maintained | build the telnet server shared library, which can then be loaded at run time via the --telnetsrv command line option. |
|
||||
| --build-msc | unknown | build the msc shared library, which can then be loaded at run time via the --msc command line option. msc is a tracing utility which status is unknown. |
|
||||
| --build-lib | maintained | build optional shared library(ies), which can then be loaded at run time via command line option. Use the --help option to get the list of supported optional libraries. |
|
||||
| --UE-conf-nvram | | |
|
||||
| --UE-gen-nvram | | |
|
||||
| -r | unknown, to be removed | specifies which 3GPP release to build for. Only the default (today rel14) is tested in CI and it is likely that future oai release will remove this option |
|
||||
| -V | deprecated | Used to build with support for synchronization diagram utility. This is now available via the T-Tracer and is included if T-Tracer is not disabled. |
|
||||
| -x | deprecated | Used to build with support for embedded signal analyzer. This is now available via the T-Tracer and is included if T-Tracer is not disabled. |
|
||||
| --noS1 | deprecated, to be removed | build noS1 version of oai softmodem binaries. noS1 allows running oai eNodeB and UE without an LTE core network (EPC). This functionality is now available via a run-time option. |
|
||||
| --build-doxygen | unknown | build doxygen documentation, many oai source files do not include doxygen comments |
|
||||
| --disable-deadline --enable-deadline --disable-cpu-affinity | deprecated | These options were used to activate or de-activate specific code depending on the choice of a specific linux scheduling mode. This has not been tested for a while and should be implemented as configuration options |
|
||||
| --disable-T-Tracer | maintained, to be tested | Remove T_Tracer and console LOG messages except error messages. |
|
||||
| --disable-hardware-dependency | | |
|
||||
| --ue-autotest-trace --ue-timing --ue-trace | deprecated | Were used to enable conditional code implementing debugging messages or debugging statistics. These functionalities are now either available from run-time options or not maintained. |
|
||||
| --disable-log | deprecated, to be removed | Was used to disable LOG messages, replaced by `--disable-T-Tracer` build option to remove tracing code from the build or `--T-stdout 0` run time option to redirect LOG messages to T-Tracer client interface. |
|
||||
| --ue-nas-use-tun | deprecated to be removed | Usage of tun in place of specific kernel modules is now a run time option. `--nokrnmod 0` option disable the default behavior which is to use tun to send or receive ip packets to/from the linux ip stack. |
|
||||
| --build-eclipse | unknown | |
|
||||
| --basic-simulator | deprecated tested in CI | builds the basic simulator device. Now of little interest as this device build is enforced when building the eNodeB and it can be used at run time with the `--basicsim` option. More over the rf simulator is an enhanced basic simulator. |
|
||||
| --rfsimulator | maintained | builds the rf simulator device. Now of little interest as this device build is enforced when building the eNodeB and it can be used at run time with the `--rfsim` option. |
|
||||
| | | |
|
||||
|
||||
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||
|
||||
@@ -122,6 +122,7 @@ The RRC layer is based on **3GPP 36.331** v14.3.0 and implements the following f
|
||||
- eMBMS for multicast and broadcast (experimental)
|
||||
- Handover (experimental)
|
||||
- Paging (soon)
|
||||
- RRC inactivity timer (release of UE after a period of data inactivity)
|
||||
|
||||
## eNB X2AP ##
|
||||
|
||||
|
||||
+85
-113
@@ -22,33 +22,22 @@
|
||||
#include "phy_init.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
|
||||
uint16_t dl_S_table_normal[10]={3,9,10,11,12,3,9,10,11,6};
|
||||
uint16_t dl_S_table_extended[10]={3,8,9,10,3,8,9,5,0,0};
|
||||
uint16_t dl_S_table_normal[10]= {3,9,10,11,12,3,9,10,11,6};
|
||||
uint16_t dl_S_table_extended[10]= {3,8,9,10,3,8,9,5,0,0};
|
||||
|
||||
void set_S_config(LTE_DL_FRAME_PARMS *fp) {
|
||||
|
||||
int X = fp->srsX;
|
||||
|
||||
fp->ul_symbols_in_S_subframe=(1+X);
|
||||
|
||||
if ((fp->Ncp==EXTENDED) && (fp->tdd_config_S>7))
|
||||
AssertFatal(1==0,"Illegal S subframe configuration for Extended Prefix mode\n");
|
||||
|
||||
fp->dl_symbols_in_S_subframe = (fp->Ncp==NORMAL)?dl_S_table_normal[fp->tdd_config_S] : dl_S_table_extended[fp->tdd_config_S];
|
||||
|
||||
|
||||
}
|
||||
|
||||
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
{
|
||||
|
||||
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) {
|
||||
uint8_t log2_osf;
|
||||
|
||||
#if DISABLE_LOG_X
|
||||
printf("Initializing frame parms for N_RB_DL %d, Ncp %d, osf %d\n",frame_parms->N_RB_DL,frame_parms->Ncp,osf);
|
||||
#else
|
||||
LOG_I(PHY,"Initializing frame parms for N_RB_DL %d, Ncp %d, osf %d\n",frame_parms->N_RB_DL,frame_parms->Ncp,osf);
|
||||
#endif
|
||||
|
||||
if (frame_parms->Ncp==EXTENDED) {
|
||||
frame_parms->nb_prefix_samples0=512;
|
||||
@@ -58,125 +47,109 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
frame_parms->nb_prefix_samples0 = 160;
|
||||
frame_parms->nb_prefix_samples = 144;
|
||||
frame_parms->symbols_per_tti = 14;
|
||||
|
||||
}
|
||||
|
||||
|
||||
switch(osf) {
|
||||
case 1:
|
||||
log2_osf = 0;
|
||||
break;
|
||||
case 1:
|
||||
log2_osf = 0;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
log2_osf = 1;
|
||||
break;
|
||||
case 2:
|
||||
log2_osf = 1;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
log2_osf = 2;
|
||||
break;
|
||||
case 4:
|
||||
log2_osf = 2;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
log2_osf = 3;
|
||||
break;
|
||||
case 8:
|
||||
log2_osf = 3;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
log2_osf = 4;
|
||||
break;
|
||||
case 16:
|
||||
log2_osf = 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Illegal oversampling %d\n",osf);
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Illegal oversampling %d\n",osf);
|
||||
}
|
||||
|
||||
switch (frame_parms->N_RB_DL) {
|
||||
case 100:
|
||||
AssertFatal(osf==1,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
|
||||
case 100:
|
||||
AssertFatal(osf==1,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
|
||||
if (frame_parms->threequarter_fs) {
|
||||
frame_parms->ofdm_symbol_size = 1536;
|
||||
frame_parms->samples_per_tti = 23040;
|
||||
frame_parms->first_carrier_offset = 1536-600;
|
||||
frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
|
||||
frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
|
||||
} else {
|
||||
frame_parms->ofdm_symbol_size = 2048;
|
||||
frame_parms->samples_per_tti = 30720;
|
||||
frame_parms->first_carrier_offset = 2048-600;
|
||||
}
|
||||
|
||||
if (frame_parms->threequarter_fs) {
|
||||
frame_parms->N_RBGS = 4;
|
||||
frame_parms->N_RBG = 25;
|
||||
break;
|
||||
|
||||
case 75:
|
||||
AssertFatal(osf==1,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
frame_parms->ofdm_symbol_size = 1536;
|
||||
frame_parms->samples_per_tti = 23040;
|
||||
frame_parms->first_carrier_offset = 1536-600;
|
||||
frame_parms->first_carrier_offset = 1536-450;
|
||||
frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
|
||||
frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
|
||||
frame_parms->N_RBGS = 4;
|
||||
frame_parms->N_RBG = 25;
|
||||
break;
|
||||
|
||||
}
|
||||
else {
|
||||
frame_parms->ofdm_symbol_size = 2048;
|
||||
frame_parms->samples_per_tti = 30720;
|
||||
frame_parms->first_carrier_offset = 2048-600;
|
||||
}
|
||||
frame_parms->N_RBGS = 4;
|
||||
frame_parms->N_RBG = 25;
|
||||
break;
|
||||
case 50:
|
||||
AssertFatal(osf==1,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
frame_parms->ofdm_symbol_size = 1024*osf;
|
||||
frame_parms->samples_per_tti = 15360*osf;
|
||||
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 300;
|
||||
frame_parms->nb_prefix_samples>>=(1-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(1-log2_osf);
|
||||
frame_parms->N_RBGS = 3;
|
||||
frame_parms->N_RBG = 17;
|
||||
break;
|
||||
|
||||
case 75:
|
||||
AssertFatal(osf==1,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
case 25:
|
||||
AssertFatal(osf<=2,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
frame_parms->ofdm_symbol_size = 512*osf;
|
||||
frame_parms->samples_per_tti = 7680*osf;
|
||||
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 150;
|
||||
frame_parms->nb_prefix_samples>>=(2-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(2-log2_osf);
|
||||
frame_parms->N_RBGS = 2;
|
||||
frame_parms->N_RBG = 13;
|
||||
break;
|
||||
|
||||
frame_parms->ofdm_symbol_size = 1536;
|
||||
frame_parms->samples_per_tti = 23040;
|
||||
frame_parms->first_carrier_offset = 1536-450;
|
||||
frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
|
||||
frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
|
||||
frame_parms->N_RBGS = 4;
|
||||
frame_parms->N_RBG = 25;
|
||||
break;
|
||||
case 15:
|
||||
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;
|
||||
frame_parms->nb_prefix_samples>>=(3-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(3-log2_osf);
|
||||
frame_parms->N_RBGS = 2;
|
||||
frame_parms->N_RBG = 8;
|
||||
break;
|
||||
|
||||
case 50:
|
||||
AssertFatal(osf==1,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
case 6:
|
||||
frame_parms->ofdm_symbol_size = 128*osf;
|
||||
frame_parms->samples_per_tti = 1920*osf;
|
||||
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 36;
|
||||
frame_parms->nb_prefix_samples>>=(4-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(4-log2_osf);
|
||||
frame_parms->N_RBGS = 1;
|
||||
frame_parms->N_RBG = 6;
|
||||
break;
|
||||
|
||||
frame_parms->ofdm_symbol_size = 1024*osf;
|
||||
frame_parms->samples_per_tti = 15360*osf;
|
||||
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 300;
|
||||
frame_parms->nb_prefix_samples>>=(1-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(1-log2_osf);
|
||||
frame_parms->N_RBGS = 3;
|
||||
frame_parms->N_RBG = 17;
|
||||
break;
|
||||
|
||||
case 25:
|
||||
AssertFatal(osf<=2,"Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
|
||||
|
||||
|
||||
frame_parms->ofdm_symbol_size = 512*osf;
|
||||
|
||||
|
||||
frame_parms->samples_per_tti = 7680*osf;
|
||||
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 150;
|
||||
frame_parms->nb_prefix_samples>>=(2-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(2-log2_osf);
|
||||
frame_parms->N_RBGS = 2;
|
||||
frame_parms->N_RBG = 13;
|
||||
|
||||
break;
|
||||
|
||||
case 15:
|
||||
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;
|
||||
frame_parms->nb_prefix_samples>>=(3-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(3-log2_osf);
|
||||
frame_parms->N_RBGS = 2;
|
||||
frame_parms->N_RBG = 8;
|
||||
|
||||
break;
|
||||
|
||||
case 6:
|
||||
frame_parms->ofdm_symbol_size = 128*osf;
|
||||
frame_parms->samples_per_tti = 1920*osf;
|
||||
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 36;
|
||||
frame_parms->nb_prefix_samples>>=(4-log2_osf);
|
||||
frame_parms->nb_prefix_samples0>>=(4-log2_osf);
|
||||
frame_parms->N_RBGS = 1;
|
||||
frame_parms->N_RBG = 6;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p \n",frame_parms->N_RB_DL, frame_parms);
|
||||
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1==0,"Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p \n",frame_parms->N_RB_DL, frame_parms);
|
||||
break;
|
||||
}
|
||||
|
||||
LOG_I(PHY,"lte_parms.c: Setting N_RB_DL to %d, ofdm_symbol_size %d\n",frame_parms->N_RB_DL, frame_parms->ofdm_symbol_size);
|
||||
@@ -188,8 +161,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
}
|
||||
|
||||
|
||||
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms)
|
||||
{
|
||||
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms) {
|
||||
LOG_I(PHY,"frame_parms->N_RB_DL=%d\n",frame_parms->N_RB_DL);
|
||||
LOG_I(PHY,"frame_parms->N_RB_UL=%d\n",frame_parms->N_RB_UL);
|
||||
LOG_I(PHY,"frame_parms->Nid_cell=%d\n",frame_parms->Nid_cell);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -62,14 +62,6 @@
|
||||
int16_t dlsch_demod_shift = 0;
|
||||
int16_t interf_unaw_shift = 13;
|
||||
|
||||
//#define DEBUG_HARQ
|
||||
|
||||
//#define DEBUG_PHY 1
|
||||
//#define DEBUG_DLSCH_DEMOD 1
|
||||
|
||||
//#define DISABLE_LOG_X
|
||||
|
||||
// [MCS][i_mod (0,1,2) = (2,4,6)]
|
||||
unsigned char offset_mumimo_llr_drange_fix=0;
|
||||
//inferference-free case
|
||||
unsigned char interf_unaw_shift_tm4_mcs[29]= {5, 3, 4, 3, 3, 2, 1, 1, 2, 0, 1, 1, 1, 1, 0, 0,
|
||||
@@ -379,14 +371,9 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f \n",frame,subframe,slot,
|
||||
symbol,ue->high_speed_flag,type,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f \n",frame,subframe,slot,symbol,
|
||||
ue->high_speed_flag,type,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#endif
|
||||
@@ -412,13 +399,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#endif
|
||||
|
||||
@@ -527,15 +508,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",frame,subframe,slot,symbol,first_symbol_flag,
|
||||
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",frame,subframe,slot,symbol,first_symbol_flag,
|
||||
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#endif
|
||||
|
||||
@@ -758,16 +732,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f \n",frame,subframe,slot,symbol,pdsch_vars[eNB_id]->log2_maxh,proc->channel_level,
|
||||
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n",frame,subframe,slot,symbol,pdsch_vars[eNB_id]->log2_maxh,
|
||||
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
#endif
|
||||
// MRC
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#endif
|
||||
|
||||
@@ -840,13 +806,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#endif
|
||||
//printf("LLR dlsch0_harq->Qm %d rx_type %d cw0 %d cw1 %d symbol %d \n",dlsch0_harq->Qm,rx_type,codeword_TB0,codeword_TB1,symbol);
|
||||
@@ -1210,11 +1170,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
#endif
|
||||
// Please keep it: useful for debugging
|
||||
#if 0
|
||||
@@ -1224,7 +1180,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
|
||||
if(1) {
|
||||
#if 1
|
||||
LOG_M("rxdataF0.m" , "rxdataF0", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1);
|
||||
LOG_M("rxdataF0.m", "rxdataF0", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1);
|
||||
//LOG_M("rxdataF1.m" , "rxdataF1", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1);
|
||||
LOG_M("dl_ch_estimates00.m", "dl_ch_estimates00", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0],14*frame_parms->ofdm_symbol_size,1,1);
|
||||
//LOG_M("dl_ch_estimates01.m", "dl_ch_estimates01", &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0],14*frame_parms->ofdm_symbol_size,1,1);
|
||||
@@ -4767,8 +4723,7 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
|
||||
|
||||
dl_ch0+=12;
|
||||
rxF+=12;
|
||||
}
|
||||
else { // Odd number of RBs
|
||||
} else { // Odd number of RBs
|
||||
for (rb=0; rb<frame_parms->N_RB_DL>>1; rb++) {
|
||||
#ifdef DEBUG_DLSCH_DEMOD
|
||||
printf("dlch_ext %u\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
|
||||
@@ -5811,8 +5766,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF,
|
||||
|
||||
dl_ch0+=12;
|
||||
rxF+=12;
|
||||
}
|
||||
else { // Odd number of RBs
|
||||
} else { // Odd number of RBs
|
||||
for (rb=0; rb<frame_parms->N_RB_DL>>1; rb++) {
|
||||
skip_half=0;
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
*/
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs_UE.h"
|
||||
#include "targets/RT/USER/lte-softmodem.h"
|
||||
#include "PHY/phy_extern_ue.h"
|
||||
#include "SCHED_UE/sched_UE.h"
|
||||
#include "transport_proto_ue.h"
|
||||
@@ -45,63 +46,57 @@ extern openair0_config_t openair0_cfg[];
|
||||
|
||||
//#define DEBUG_INITIAL_SYNCH
|
||||
|
||||
int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
|
||||
{
|
||||
|
||||
int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
|
||||
uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy;
|
||||
LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
|
||||
char phich_resource[6];
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",ue->Mod_id,
|
||||
LOG_D(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",ue->Mod_id,
|
||||
ue->rx_offset);
|
||||
#endif
|
||||
|
||||
for (l=0; l<frame_parms->symbols_per_tti/2; l++) {
|
||||
|
||||
slot_fep(ue,
|
||||
l,
|
||||
0,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
1);
|
||||
l,
|
||||
0,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
1);
|
||||
}
|
||||
|
||||
for (l=0; l<frame_parms->symbols_per_tti/2; l++) {
|
||||
|
||||
slot_fep(ue,
|
||||
l,
|
||||
1,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
1);
|
||||
l,
|
||||
1,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
1);
|
||||
}
|
||||
|
||||
slot_fep(ue,
|
||||
0,
|
||||
2,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
1);
|
||||
|
||||
0,
|
||||
2,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
1);
|
||||
lte_ue_measurements(ue,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
ue->rx_offset,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
|
||||
|
||||
if (ue->frame_parms.frame_type == TDD) {
|
||||
ue_rrc_measurements(ue,
|
||||
2,
|
||||
0);
|
||||
}
|
||||
else {
|
||||
2,
|
||||
0);
|
||||
} else {
|
||||
ue_rrc_measurements(ue,
|
||||
0,
|
||||
0);
|
||||
0,
|
||||
0);
|
||||
}
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE %d] RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
|
||||
|
||||
|
||||
LOG_D(PHY,"[UE %d] RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
|
||||
ue->Mod_id,
|
||||
ue->measurements.rx_rssi_dBm[0] - ((ue->frame_parms.nb_antennas_rx==2) ? 3 : 0),
|
||||
ue->measurements.rx_power_dB[0][0],
|
||||
@@ -112,7 +107,7 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
|
||||
ue->measurements.rx_power_avg[0],
|
||||
ue->rx_total_gain_dB);
|
||||
|
||||
LOG_I(PHY,"[UE %d] N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n",
|
||||
LOG_D(PHY,"[UE %d] N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n",
|
||||
ue->Mod_id,
|
||||
ue->measurements.n0_power_tot_dBm,
|
||||
ue->measurements.n0_power_dB[0],
|
||||
@@ -121,7 +116,6 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
|
||||
ue->measurements.n0_power[1],
|
||||
ue->measurements.n0_power_avg_dB,
|
||||
ue->measurements.n0_power_avg);
|
||||
#endif
|
||||
|
||||
pbch_decoded = 0;
|
||||
|
||||
@@ -153,96 +147,87 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (pbch_decoded) {
|
||||
|
||||
frame_parms->nb_antenna_ports_eNB = pbch_tx_ant;
|
||||
|
||||
// set initial transmission mode to 1 or 2 depending on number of detected TX antennas
|
||||
// openair_daq_vars.dlsch_transmission_mode = (pbch_tx_ant>1) ? 2 : 1;
|
||||
|
||||
|
||||
// flip byte endian on 24-bits for MIB
|
||||
// dummy = ue->pbch_vars[0]->decoded_output[0];
|
||||
// ue->pbch_vars[0]->decoded_output[0] = ue->pbch_vars[0]->decoded_output[2];
|
||||
// ue->pbch_vars[0]->decoded_output[2] = dummy;
|
||||
|
||||
// now check for Bandwidth of Cell
|
||||
dummy = (ue->pbch_vars[0]->decoded_output[2]>>5)&7;
|
||||
|
||||
switch (dummy) {
|
||||
case 0 :
|
||||
frame_parms->N_RB_DL = 6;
|
||||
break;
|
||||
|
||||
case 0 :
|
||||
frame_parms->N_RB_DL = 6;
|
||||
break;
|
||||
case 1 :
|
||||
frame_parms->N_RB_DL = 15;
|
||||
break;
|
||||
|
||||
case 1 :
|
||||
frame_parms->N_RB_DL = 15;
|
||||
break;
|
||||
case 2 :
|
||||
frame_parms->N_RB_DL = 25;
|
||||
break;
|
||||
|
||||
case 2 :
|
||||
frame_parms->N_RB_DL = 25;
|
||||
break;
|
||||
case 3 :
|
||||
frame_parms->N_RB_DL = 50;
|
||||
break;
|
||||
|
||||
case 3 :
|
||||
frame_parms->N_RB_DL = 50;
|
||||
break;
|
||||
case 4 :
|
||||
frame_parms->N_RB_DL = 75;
|
||||
break;
|
||||
|
||||
case 4 :
|
||||
frame_parms->N_RB_DL = 75;
|
||||
break;
|
||||
case 5:
|
||||
frame_parms->N_RB_DL = 100;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
frame_parms->N_RB_DL = 100;
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(PHY,"[UE%d] Initial sync: PBCH decoding: Unknown N_RB_DL\n",ue->Mod_id);
|
||||
return -1;
|
||||
break;
|
||||
default:
|
||||
LOG_E(PHY,"[UE%d] Initial sync: PBCH decoding: Unknown N_RB_DL\n",ue->Mod_id);
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// now check for PHICH parameters
|
||||
frame_parms->phich_config_common.phich_duration = (PHICH_DURATION_t)((ue->pbch_vars[0]->decoded_output[2]>>4)&1);
|
||||
dummy = (ue->pbch_vars[0]->decoded_output[2]>>2)&3;
|
||||
|
||||
switch (dummy) {
|
||||
case 0:
|
||||
frame_parms->phich_config_common.phich_resource = oneSixth;
|
||||
sprintf(phich_resource,"1/6");
|
||||
break;
|
||||
case 0:
|
||||
frame_parms->phich_config_common.phich_resource = oneSixth;
|
||||
sprintf(phich_resource,"1/6");
|
||||
break;
|
||||
|
||||
case 1:
|
||||
frame_parms->phich_config_common.phich_resource = half;
|
||||
sprintf(phich_resource,"1/2");
|
||||
break;
|
||||
case 1:
|
||||
frame_parms->phich_config_common.phich_resource = half;
|
||||
sprintf(phich_resource,"1/2");
|
||||
break;
|
||||
|
||||
case 2:
|
||||
frame_parms->phich_config_common.phich_resource = one;
|
||||
sprintf(phich_resource,"1");
|
||||
break;
|
||||
case 2:
|
||||
frame_parms->phich_config_common.phich_resource = one;
|
||||
sprintf(phich_resource,"1");
|
||||
break;
|
||||
|
||||
case 3:
|
||||
frame_parms->phich_config_common.phich_resource = two;
|
||||
sprintf(phich_resource,"2");
|
||||
break;
|
||||
case 3:
|
||||
frame_parms->phich_config_common.phich_resource = two;
|
||||
sprintf(phich_resource,"2");
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",ue->Mod_id);
|
||||
return -1;
|
||||
break;
|
||||
default:
|
||||
LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",ue->Mod_id);
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
for(int i=0; i<RX_NB_TH;i++)
|
||||
{
|
||||
ue->proc.proc_rxtx[i].frame_rx = (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
|
||||
ue->proc.proc_rxtx[i].frame_rx = (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
|
||||
|
||||
ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
|
||||
for(int i=0; i<RX_NB_TH; i++) {
|
||||
ue->proc.proc_rxtx[i].frame_rx = (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
|
||||
ue->proc.proc_rxtx[i].frame_rx = (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
|
||||
ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
|
||||
}
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE%d] Initial sync: pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, phich_duration %d, phich_resource %s!\n",
|
||||
|
||||
|
||||
LOG_D(PHY,"[UE%d] Initial sync: pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, phich_duration %d, phich_resource %s!\n",
|
||||
ue->Mod_id,
|
||||
frame_parms->nb_antenna_ports_eNB,
|
||||
pbch_tx_ant,
|
||||
@@ -250,21 +235,17 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
|
||||
frame_parms->N_RB_DL,
|
||||
frame_parms->phich_config_common.phich_duration,
|
||||
phich_resource); //frame_parms->phich_config_common.phich_resource);
|
||||
#endif
|
||||
return(0);
|
||||
} else {
|
||||
return(-1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
char phich_string[13][4] = {"","1/6","","1/2","","","one","","","","","","two"};
|
||||
char duplex_string[2][4] = {"FDD","TDD"};
|
||||
char prefix_string[2][9] = {"NORMAL","EXTENDED"};
|
||||
|
||||
int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
{
|
||||
|
||||
int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
|
||||
int32_t sync_pos,sync_pos2,sync_pos_slot;
|
||||
int32_t metric_fdd_ncp=0,metric_fdd_ecp=0,metric_tdd_ncp=0,metric_tdd_ecp=0;
|
||||
uint8_t phase_fdd_ncp,phase_fdd_ecp,phase_tdd_ncp,phase_tdd_ecp;
|
||||
@@ -273,15 +254,10 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||
int ret=-1;
|
||||
int aarx,rx_power=0;
|
||||
/*#ifdef OAI_USRP
|
||||
__m128i *rxdata128;
|
||||
#endif*/
|
||||
// LOG_I(PHY,"**************************************************************\n");
|
||||
// First try FDD normal prefix
|
||||
frame_parms->Ncp=NORMAL;
|
||||
frame_parms->frame_type=FDD;
|
||||
frame_parms->nb_antenna_ports_eNB = 2;
|
||||
|
||||
init_frame_parms(frame_parms,1);
|
||||
/*
|
||||
LOG_M("rxdata0.m","rxd0",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
@@ -297,12 +273,10 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
else
|
||||
sync_pos2 = sync_pos + FRAME_LENGTH_COMPLEX_SAMPLES - frame_parms->nb_prefix_samples;
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
|
||||
#endif
|
||||
|
||||
LOG_D(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
|
||||
|
||||
// SSS detection
|
||||
|
||||
// PSS is hypothesized in last symbol of first slot in Frame
|
||||
sync_pos_slot = (frame_parms->samples_per_tti>>1) - frame_parms->ofdm_symbol_size - frame_parms->nb_prefix_samples;
|
||||
|
||||
@@ -313,9 +287,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
|
||||
if (((sync_pos2 - sync_pos_slot) >=0 ) &&
|
||||
((sync_pos2 - sync_pos_slot) < ((FRAME_LENGTH_COMPLEX_SAMPLES-frame_parms->samples_per_tti/2)))) {
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"Calling sss detection (FDD normal CP)\n");
|
||||
#endif
|
||||
LOG_D(PHY,"Calling sss detection (FDD normal CP)\n");
|
||||
rx_sss(ue,&metric_fdd_ncp,&flip_fdd_ncp,&phase_fdd_ncp);
|
||||
frame_parms->nushift = frame_parms->Nid_cell%6;
|
||||
|
||||
@@ -327,19 +299,14 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
ret = pbch_detection(ue,mode);
|
||||
// LOG_M("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
LOG_D(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
|
||||
frame_parms->Nid_cell,metric_fdd_ncp,phase_fdd_ncp,flip_fdd_ncp,ret);
|
||||
#endif
|
||||
} else {
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"FDD Normal prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
|
||||
#endif
|
||||
LOG_D(PHY,"FDD Normal prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
|
||||
}
|
||||
|
||||
|
||||
if (ret==-1) {
|
||||
|
||||
// Now FDD extended prefix
|
||||
frame_parms->Ncp=EXTENDED;
|
||||
frame_parms->frame_type=FDD;
|
||||
@@ -362,7 +329,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
|
||||
if (((sync_pos2 - sync_pos_slot) >=0 ) &&
|
||||
((sync_pos2 - sync_pos_slot) < ((FRAME_LENGTH_COMPLEX_SAMPLES-frame_parms->samples_per_tti/2)))) {
|
||||
|
||||
rx_sss(ue,&metric_fdd_ecp,&flip_fdd_ecp,&phase_fdd_ecp);
|
||||
frame_parms->nushift = frame_parms->Nid_cell%6;
|
||||
|
||||
@@ -373,14 +339,10 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
|
||||
ret = pbch_detection(ue,mode);
|
||||
// LOG_M("rxdata3.m","rxd3",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
LOG_D(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
|
||||
#endif
|
||||
} else {
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"FDD Extended prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
|
||||
#endif
|
||||
LOG_D(PHY,"FDD Extended prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
|
||||
}
|
||||
|
||||
if (ret==-1) {
|
||||
@@ -413,21 +375,19 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
|
||||
frame_parms->nushift = frame_parms->Nid_cell%6;
|
||||
init_frame_parms(&ue->frame_parms,1);
|
||||
|
||||
lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
|
||||
ret = pbch_detection(ue,mode);
|
||||
// LOG_M("rxdata4.m","rxd4",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
LOG_D(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
|
||||
frame_parms->Nid_cell,metric_tdd_ncp,phase_tdd_ncp,flip_tdd_ncp,ret);
|
||||
#endif
|
||||
|
||||
if (ret==-1) {
|
||||
// Now TDD extended prefix
|
||||
frame_parms->Ncp=EXTENDED;
|
||||
frame_parms->frame_type=TDD;
|
||||
frame_parms->tdd_config=1;
|
||||
frame_parms->tdd_config=1;
|
||||
init_frame_parms(frame_parms,1);
|
||||
sync_pos2 = sync_pos - frame_parms->nb_prefix_samples;
|
||||
|
||||
@@ -453,134 +413,77 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
init_frame_parms(&ue->frame_parms,1);
|
||||
lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
|
||||
ret = pbch_detection(ue,mode);
|
||||
// LOG_M("rxdata5.m","rxd5",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
|
||||
LOG_D(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
|
||||
// LOG_M("rxdata5.m","rxd5",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
|
||||
frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Consider this is a false detection if the offset is > 1000 Hz */
|
||||
if( (abs(ue->common_vars.freq_offset) > 150) && (ret == 0) )
|
||||
{
|
||||
ret=-1;
|
||||
#if DISABLE_LOG_X
|
||||
printf("Ignore MIB with high freq offset [%d Hz] estimation \n",ue->common_vars.freq_offset);
|
||||
#else
|
||||
LOG_E(HW, "Ignore MIB with high freq offset [%d Hz] estimation \n",ue->common_vars.freq_offset);
|
||||
#endif
|
||||
if( (abs(ue->common_vars.freq_offset) > 150) && (ret == 0) ) {
|
||||
ret=-1;
|
||||
LOG_E(HW, "Ignore MIB with high freq offset [%d Hz] estimation \n",ue->common_vars.freq_offset);
|
||||
}
|
||||
|
||||
if (ret==0) { // PBCH found so indicate sync to higher layers and configure frame parameters
|
||||
|
||||
//#ifdef DEBUG_INITIAL_SYNCH
|
||||
#if DISABLE_LOG_X
|
||||
printf("[UE%d] In synch, rx_offset %d samples\n",ue->Mod_id, ue->rx_offset);
|
||||
#else
|
||||
LOG_I(PHY, "[UE%d] In synch, rx_offset %d samples\n",ue->Mod_id, ue->rx_offset);
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
if (ue->UE_scan_carrier == 0) {
|
||||
|
||||
#if UE_AUTOTEST_TRACE
|
||||
#if UE_AUTOTEST_TRACE
|
||||
LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
ue->rx_offset,
|
||||
ue->common_vars.freq_offset );
|
||||
#endif
|
||||
|
||||
// send sync status to higher layers later when timing offset converge to target timing
|
||||
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
ue->rx_offset,
|
||||
ue->common_vars.freq_offset );
|
||||
#endif
|
||||
// send sync status to higher layers later when timing offset converge to target timing
|
||||
generate_pcfich_reg_mapping(frame_parms);
|
||||
generate_phich_reg_mapping(frame_parms);
|
||||
|
||||
|
||||
ue->pbch_vars[0]->pdu_errors_conseq=0;
|
||||
|
||||
}
|
||||
|
||||
#if DISABLE_LOG_X
|
||||
printf("[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm, rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB,
|
||||
10*log10(ue->measurements.rssi),
|
||||
ue->rx_total_gain_dB,
|
||||
ue->measurements.n0_power_tot_dBm,
|
||||
10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
|
||||
(10*log10(ue->measurements.rsrq[0])));
|
||||
|
||||
|
||||
printf("[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
duplex_string[ue->frame_parms.frame_type],
|
||||
prefix_string[ue->frame_parms.Ncp],
|
||||
ue->frame_parms.Nid_cell,
|
||||
ue->frame_parms.N_RB_DL,
|
||||
ue->frame_parms.phich_config_common.phich_duration,
|
||||
phich_string[ue->frame_parms.phich_config_common.phich_resource],
|
||||
ue->frame_parms.nb_antenna_ports_eNB);
|
||||
#else
|
||||
LOG_I(PHY, "[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm, rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB,
|
||||
10*log10(ue->measurements.rssi),
|
||||
ue->rx_total_gain_dB,
|
||||
ue->measurements.n0_power_tot_dBm,
|
||||
10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
|
||||
(10*log10(ue->measurements.rsrq[0])));
|
||||
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB,
|
||||
10*log10(ue->measurements.rssi),
|
||||
ue->rx_total_gain_dB,
|
||||
ue->measurements.n0_power_tot_dBm,
|
||||
10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
|
||||
(10*log10(ue->measurements.rsrq[0])));
|
||||
LOG_I(PHY, "[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
duplex_string[ue->frame_parms.frame_type],
|
||||
prefix_string[ue->frame_parms.Ncp],
|
||||
ue->frame_parms.Nid_cell,
|
||||
ue->frame_parms.N_RB_DL,
|
||||
ue->frame_parms.phich_config_common.phich_duration,
|
||||
phich_string[ue->frame_parms.phich_config_common.phich_resource],
|
||||
ue->frame_parms.nb_antenna_ports_eNB);
|
||||
#endif
|
||||
|
||||
#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
# if DISABLE_LOG_X
|
||||
printf("[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset,
|
||||
ue->common_vars.freq_offset);
|
||||
# else
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
duplex_string[ue->frame_parms.frame_type],
|
||||
prefix_string[ue->frame_parms.Ncp],
|
||||
ue->frame_parms.Nid_cell,
|
||||
ue->frame_parms.N_RB_DL,
|
||||
ue->frame_parms.phich_config_common.phich_duration,
|
||||
phich_string[ue->frame_parms.phich_config_common.phich_resource],
|
||||
ue->frame_parms.nb_antenna_ports_eNB);
|
||||
LOG_I(PHY, "[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset,
|
||||
ue->common_vars.freq_offset);
|
||||
# endif
|
||||
#endif
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset,
|
||||
ue->common_vars.freq_offset);
|
||||
} else {
|
||||
#ifdef DEBUG_INITIAL_SYNC
|
||||
LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",ue->Mod_id);
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
|
||||
LOG_D(PHY,"[UE%d] Initial sync : PBCH not ok\n",ue->Mod_id);
|
||||
LOG_D(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
|
||||
/* LOG_I(PHY,"[UE%d] Initial sync: (metric fdd_ncp %d (%d), metric fdd_ecp %d (%d), metric_tdd_ncp %d (%d), metric_tdd_ecp %d (%d))\n",
|
||||
ue->Mod_id,
|
||||
metric_fdd_ncp,Nid_cell_fdd_ncp,
|
||||
metric_fdd_ecp,Nid_cell_fdd_ecp,
|
||||
metric_tdd_ncp,Nid_cell_tdd_ncp,
|
||||
metric_tdd_ecp,Nid_cell_tdd_ecp);*/
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated Nid_cell %d, Frame_type %d\n",ue->Mod_id,
|
||||
LOG_D(PHY,"[UE%d] Initial sync : Estimated Nid_cell %d, Frame_type %d\n",ue->Mod_id,
|
||||
frame_parms->Nid_cell,frame_parms->frame_type);
|
||||
#endif
|
||||
|
||||
ue->UE_mode[0] = NOT_SYNCHED;
|
||||
ue->pbch_vars[0]->pdu_errors_last=ue->pbch_vars[0]->pdu_errors;
|
||||
ue->pbch_vars[0]->pdu_errors++;
|
||||
ue->pbch_vars[0]->pdu_errors_conseq++;
|
||||
|
||||
}
|
||||
|
||||
// gain control
|
||||
@@ -590,46 +493,28 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
// do a measurement on the best guess of the PSS
|
||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
|
||||
rx_power += signal_energy(&ue->common_vars.rxdata[aarx][sync_pos2],
|
||||
frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
|
||||
frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
|
||||
|
||||
/*
|
||||
// do a measurement on the full frame
|
||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
|
||||
rx_power += signal_energy(&ue->common_vars.rxdata[aarx][0],
|
||||
frame_parms->samples_per_tti*10);
|
||||
frame_parms->samples_per_tti*10);
|
||||
*/
|
||||
|
||||
// we might add a low-pass filter here later
|
||||
ue->measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx;
|
||||
|
||||
ue->measurements.rx_power_avg_dB[0] = dB_fixed(ue->measurements.rx_power_avg[0]);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",ue->Mod_id,ue->measurements.rx_power_avg_dB[0] );
|
||||
#endif
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",ue->Mod_id,ue->measurements.rx_power_avg_dB[0] );
|
||||
|
||||
#ifndef OAI_USRP
|
||||
#ifndef OAI_BLADERF
|
||||
#ifndef OAI_LMSSDR
|
||||
phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
#ifndef OAI_USRP
|
||||
#ifndef OAI_BLADERF
|
||||
#ifndef OAI_LMSSDR
|
||||
phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
|
||||
phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0);
|
||||
} else {
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
|
||||
phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0);
|
||||
|
||||
}
|
||||
|
||||
// exit_fun("debug exit");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
*/
|
||||
#include "PHY/sse_intrin.h"
|
||||
#include "PHY/defs_UE.h"
|
||||
#include "targets/RT/USER/lte-softmodem.h"
|
||||
#include "PHY/phy_extern_ue.h"
|
||||
//#include "prach.h"
|
||||
#include "PHY/LTE_TRANSPORT/if4_tools.h"
|
||||
@@ -43,9 +44,7 @@
|
||||
|
||||
//#define PRACH_DEBUG 1
|
||||
|
||||
int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint16_t Nf )
|
||||
{
|
||||
|
||||
int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint16_t Nf ) {
|
||||
lte_frame_type_t frame_type = ue->frame_parms.frame_type;
|
||||
//uint8_t tdd_config = ue->frame_parms.tdd_config;
|
||||
uint16_t rootSequenceIndex = ue->frame_parms.prach_config_common.rootSequenceIndex;
|
||||
@@ -67,7 +66,6 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
uint16_t preamble_offset,preamble_shift;
|
||||
uint16_t preamble_index0,n_shift_ra,n_shift_ra_bar;
|
||||
uint16_t d_start,numshift;
|
||||
|
||||
uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type);
|
||||
//uint8_t Nsp=2;
|
||||
//uint8_t f_ra,t1_ra;
|
||||
@@ -82,50 +80,46 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
int i, prach_len;
|
||||
uint16_t first_nonzero_root_idx=0;
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP)
|
||||
prach_start = (ue->rx_offset+subframe*ue->frame_parms.samples_per_tti-ue->hw_timing_advance-ue->N_TA_offset);
|
||||
if ( !(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
prach_start = (ue->rx_offset+subframe*ue->frame_parms.samples_per_tti-ue->hw_timing_advance-ue->N_TA_offset);
|
||||
#ifdef PRACH_DEBUG
|
||||
LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
|
||||
prach_start,
|
||||
ue->rx_offset,
|
||||
ue->hw_timing_advance,
|
||||
ue->N_TA_offset);
|
||||
prach_start,
|
||||
ue->rx_offset,
|
||||
ue->hw_timing_advance,
|
||||
ue->N_TA_offset);
|
||||
#endif
|
||||
|
||||
if (prach_start<0)
|
||||
prach_start+=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
|
||||
|
||||
if (prach_start>=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
|
||||
prach_start-=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
|
||||
|
||||
#else //normal case (simulation)
|
||||
prach_start = subframe*ue->frame_parms.samples_per_tti-ue->N_TA_offset;
|
||||
LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
|
||||
prach_start,
|
||||
ue->rx_offset,
|
||||
ue->hw_timing_advance,
|
||||
ue->N_TA_offset);
|
||||
|
||||
#endif
|
||||
if (prach_start<0)
|
||||
prach_start+=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
|
||||
|
||||
if (prach_start>=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
|
||||
prach_start-=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
|
||||
} else { //normal case (simulation)
|
||||
prach_start = subframe*ue->frame_parms.samples_per_tti-ue->N_TA_offset;
|
||||
LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
|
||||
prach_start,
|
||||
ue->rx_offset,
|
||||
ue->hw_timing_advance,
|
||||
ue->N_TA_offset);
|
||||
}
|
||||
|
||||
// First compute physical root sequence
|
||||
if (restricted_set == 0) {
|
||||
AssertFatal(Ncs_config <= 15,
|
||||
"[PHY] FATAL, Illegal Ncs_config for unrestricted format %"PRIu8"\n", Ncs_config );
|
||||
"[PHY] FATAL, Illegal Ncs_config for unrestricted format %"PRIu8"\n", Ncs_config );
|
||||
NCS = NCS_unrestricted[Ncs_config];
|
||||
} else {
|
||||
AssertFatal(Ncs_config <= 14,
|
||||
"[PHY] FATAL, Illegal Ncs_config for restricted format %"PRIu8"\n", Ncs_config );
|
||||
"[PHY] FATAL, Illegal Ncs_config for restricted format %"PRIu8"\n", Ncs_config );
|
||||
NCS = NCS_restricted[Ncs_config];
|
||||
}
|
||||
|
||||
n_ra_prb = get_prach_prb_offset(&(ue->frame_parms),
|
||||
ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
|
||||
ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset,
|
||||
tdd_mapindex, Nf);
|
||||
ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
|
||||
ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset,
|
||||
tdd_mapindex, Nf);
|
||||
prach_root_sequence_map = (prach_fmt<4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4;
|
||||
|
||||
/*
|
||||
// this code is not part of get_prach_prb_offset
|
||||
if (frame_type == TDD) { // TDD
|
||||
@@ -157,7 +151,6 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// This is the relative offset (for unrestricted case) in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
||||
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
||||
|
||||
@@ -166,11 +159,9 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
preamble_shift = (NCS==0)? 0 : (preamble_index % (N_ZC/NCS));
|
||||
preamble_shift *= NCS;
|
||||
} else { // This is the high-speed case
|
||||
|
||||
#ifdef PRACH_DEBUG
|
||||
LOG_I(PHY,"[UE %d] High-speed mode, NCS_config %d\n",ue->Mod_id,Ncs_config);
|
||||
#endif
|
||||
|
||||
not_found = 1;
|
||||
preamble_index0 = preamble_index;
|
||||
// set preamble_offset to initial rootSequenceIndex and look if we need more root sequences for this
|
||||
@@ -190,7 +181,6 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
}
|
||||
|
||||
u = prach_root_sequence_map[index];
|
||||
|
||||
uint16_t n_group_ra = 0;
|
||||
|
||||
if ( (du[u]<(N_ZC/3)) && (du[u]>=NCS) ) {
|
||||
@@ -217,7 +207,6 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
if (preamble_index0 < numshift) {
|
||||
not_found = 0;
|
||||
preamble_shift = (d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS);
|
||||
|
||||
} else { // skip to next rootSequenceIndex and recompute parameters
|
||||
preamble_offset++;
|
||||
preamble_index0 -= numshift;
|
||||
@@ -234,10 +223,8 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
preamble_offset,preamble_shift);
|
||||
|
||||
#endif
|
||||
|
||||
// nsymb = (frame_parms->Ncp==0) ? 14:12;
|
||||
// subframe_offset = (unsigned int)frame_parms->ofdm_symbol_size*subframe*nsymb;
|
||||
|
||||
k = (12*n_ra_prb) - 6*ue->frame_parms.N_RB_UL;
|
||||
|
||||
if (k<0)
|
||||
@@ -245,9 +232,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
|
||||
k*=12;
|
||||
k+=13;
|
||||
|
||||
Xu = (int16_t*)ue->X_u[preamble_offset-first_nonzero_root_idx];
|
||||
|
||||
Xu = (int16_t *)ue->X_u[preamble_offset-first_nonzero_root_idx];
|
||||
/*
|
||||
k+=(12*ue->frame_parms.first_carrier_offset);
|
||||
if (k>(12*ue->frame_parms.ofdm_symbol_size))
|
||||
@@ -256,36 +241,36 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
k*=2;
|
||||
|
||||
switch (ue->frame_parms.N_RB_UL) {
|
||||
case 6:
|
||||
memset((void*)prachF,0,4*1536);
|
||||
break;
|
||||
case 6:
|
||||
memset((void *)prachF,0,4*1536);
|
||||
break;
|
||||
|
||||
case 15:
|
||||
memset((void*)prachF,0,4*3072);
|
||||
break;
|
||||
case 15:
|
||||
memset((void *)prachF,0,4*3072);
|
||||
break;
|
||||
|
||||
case 25:
|
||||
memset((void*)prachF,0,4*6144);
|
||||
break;
|
||||
case 25:
|
||||
memset((void *)prachF,0,4*6144);
|
||||
break;
|
||||
|
||||
case 50:
|
||||
memset((void*)prachF,0,4*12288);
|
||||
break;
|
||||
case 50:
|
||||
memset((void *)prachF,0,4*12288);
|
||||
break;
|
||||
|
||||
case 75:
|
||||
memset((void*)prachF,0,4*18432);
|
||||
break;
|
||||
case 75:
|
||||
memset((void *)prachF,0,4*18432);
|
||||
break;
|
||||
|
||||
case 100:
|
||||
if (ue->frame_parms.threequarter_fs == 0)
|
||||
memset((void*)prachF,0,4*24576);
|
||||
else
|
||||
memset((void*)prachF,0,4*18432);
|
||||
break;
|
||||
case 100:
|
||||
if (ue->frame_parms.threequarter_fs == 0)
|
||||
memset((void *)prachF,0,4*24576);
|
||||
else
|
||||
memset((void *)prachF,0,4*18432);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
for (offset=0,offset2=0; offset<N_ZC; offset++,offset2+=preamble_shift) {
|
||||
|
||||
if (offset2 >= N_ZC)
|
||||
offset2 -= N_ZC;
|
||||
|
||||
@@ -299,49 +284,49 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
}
|
||||
|
||||
switch (prach_fmt) {
|
||||
case 0:
|
||||
Ncp = 3168;
|
||||
break;
|
||||
case 0:
|
||||
Ncp = 3168;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 3:
|
||||
Ncp = 21024;
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
Ncp = 21024;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
Ncp = 6240;
|
||||
break;
|
||||
case 2:
|
||||
Ncp = 6240;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Ncp = 448;
|
||||
break;
|
||||
case 4:
|
||||
Ncp = 448;
|
||||
break;
|
||||
|
||||
default:
|
||||
Ncp = 3168;
|
||||
break;
|
||||
default:
|
||||
Ncp = 3168;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (ue->frame_parms.N_RB_UL) {
|
||||
case 6:
|
||||
Ncp>>=4;
|
||||
prach+=4; // makes prach2 aligned to 128-bit
|
||||
break;
|
||||
case 6:
|
||||
Ncp>>=4;
|
||||
prach+=4; // makes prach2 aligned to 128-bit
|
||||
break;
|
||||
|
||||
case 15:
|
||||
Ncp>>=3;
|
||||
break;
|
||||
case 15:
|
||||
Ncp>>=3;
|
||||
break;
|
||||
|
||||
case 25:
|
||||
Ncp>>=2;
|
||||
break;
|
||||
case 25:
|
||||
Ncp>>=2;
|
||||
break;
|
||||
|
||||
case 50:
|
||||
Ncp>>=1;
|
||||
break;
|
||||
case 50:
|
||||
Ncp>>=1;
|
||||
break;
|
||||
|
||||
case 75:
|
||||
Ncp=(Ncp*3)>>2;
|
||||
break;
|
||||
case 75:
|
||||
Ncp=(Ncp*3)>>2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ue->frame_parms.threequarter_fs == 1)
|
||||
@@ -351,186 +336,184 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
|
||||
// do IDFT
|
||||
switch (ue->frame_parms.N_RB_UL) {
|
||||
case 6:
|
||||
if (prach_fmt == 4) {
|
||||
idft256(prachF,prach2,1);
|
||||
memmove( prach, prach+512, Ncp<<2 );
|
||||
prach_len = 256+Ncp;
|
||||
} else {
|
||||
idft1536(prachF,prach2,1);
|
||||
memmove( prach, prach+3072, Ncp<<2 );
|
||||
prach_len = 1536+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+3072, prach2, 6144 );
|
||||
prach_len = 2*1536+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 15:
|
||||
if (prach_fmt == 4) {
|
||||
idft512(prachF,prach2,1);
|
||||
//TODO: account for repeated format in dft output
|
||||
memmove( prach, prach+1024, Ncp<<2 );
|
||||
prach_len = 512+Ncp;
|
||||
} else {
|
||||
idft3072(prachF,prach2,1);
|
||||
memmove( prach, prach+6144, Ncp<<2 );
|
||||
prach_len = 3072+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+6144, prach2, 12288 );
|
||||
prach_len = 2*3072+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 25:
|
||||
default:
|
||||
if (prach_fmt == 4) {
|
||||
idft1024(prachF,prach2,1);
|
||||
memmove( prach, prach+2048, Ncp<<2 );
|
||||
prach_len = 1024+Ncp;
|
||||
} else {
|
||||
idft6144(prachF,prach2,1);
|
||||
/*for (i=0;i<6144*2;i++)
|
||||
prach2[i]<<=1;*/
|
||||
memmove( prach, prach+12288, Ncp<<2 );
|
||||
prach_len = 6144+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+12288, prach2, 24576 );
|
||||
prach_len = 2*6144+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 50:
|
||||
if (prach_fmt == 4) {
|
||||
idft2048(prachF,prach2,1);
|
||||
memmove( prach, prach+4096, Ncp<<2 );
|
||||
prach_len = 2048+Ncp;
|
||||
} else {
|
||||
idft12288(prachF,prach2,1);
|
||||
memmove( prach, prach+24576, Ncp<<2 );
|
||||
prach_len = 12288+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+24576, prach2, 49152 );
|
||||
prach_len = 2*12288+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 75:
|
||||
if (prach_fmt == 4) {
|
||||
idft3072(prachF,prach2,1);
|
||||
//TODO: account for repeated format in dft output
|
||||
memmove( prach, prach+6144, Ncp<<2 );
|
||||
prach_len = 3072+Ncp;
|
||||
} else {
|
||||
idft18432(prachF,prach2,1);
|
||||
memmove( prach, prach+36864, Ncp<<2 );
|
||||
prach_len = 18432+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+36834, prach2, 73728 );
|
||||
prach_len = 2*18432+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 100:
|
||||
if (ue->frame_parms.threequarter_fs == 0) {
|
||||
case 6:
|
||||
if (prach_fmt == 4) {
|
||||
idft4096(prachF,prach2,1);
|
||||
memmove( prach, prach+8192, Ncp<<2 );
|
||||
prach_len = 4096+Ncp;
|
||||
idft256(prachF,prach2,1);
|
||||
memmove( prach, prach+512, Ncp<<2 );
|
||||
prach_len = 256+Ncp;
|
||||
} else {
|
||||
idft24576(prachF,prach2,1);
|
||||
memmove( prach, prach+49152, Ncp<<2 );
|
||||
prach_len = 24576+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+49152, prach2, 98304 );
|
||||
prach_len = 2* 24576+Ncp;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (prach_fmt == 4) {
|
||||
idft3072(prachF,prach2,1);
|
||||
//TODO: account for repeated format in dft output
|
||||
memmove( prach, prach+6144, Ncp<<2 );
|
||||
prach_len = 3072+Ncp;
|
||||
} else {
|
||||
idft18432(prachF,prach2,1);
|
||||
memmove( prach, prach+36864, Ncp<<2 );
|
||||
prach_len = 18432+Ncp;
|
||||
printf("Generated prach for 100 PRB, 3/4 sampling\n");
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+36834, prach2, 73728 );
|
||||
prach_len = 2*18432+Ncp;
|
||||
}
|
||||
}
|
||||
}
|
||||
idft1536(prachF,prach2,1);
|
||||
memmove( prach, prach+3072, Ncp<<2 );
|
||||
prach_len = 1536+Ncp;
|
||||
|
||||
break;
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+3072, prach2, 6144 );
|
||||
prach_len = 2*1536+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 15:
|
||||
if (prach_fmt == 4) {
|
||||
idft512(prachF,prach2,1);
|
||||
//TODO: account for repeated format in dft output
|
||||
memmove( prach, prach+1024, Ncp<<2 );
|
||||
prach_len = 512+Ncp;
|
||||
} else {
|
||||
idft3072(prachF,prach2,1);
|
||||
memmove( prach, prach+6144, Ncp<<2 );
|
||||
prach_len = 3072+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+6144, prach2, 12288 );
|
||||
prach_len = 2*3072+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 25:
|
||||
default:
|
||||
if (prach_fmt == 4) {
|
||||
idft1024(prachF,prach2,1);
|
||||
memmove( prach, prach+2048, Ncp<<2 );
|
||||
prach_len = 1024+Ncp;
|
||||
} else {
|
||||
idft6144(prachF,prach2,1);
|
||||
/*for (i=0;i<6144*2;i++)
|
||||
prach2[i]<<=1;*/
|
||||
memmove( prach, prach+12288, Ncp<<2 );
|
||||
prach_len = 6144+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+12288, prach2, 24576 );
|
||||
prach_len = 2*6144+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 50:
|
||||
if (prach_fmt == 4) {
|
||||
idft2048(prachF,prach2,1);
|
||||
memmove( prach, prach+4096, Ncp<<2 );
|
||||
prach_len = 2048+Ncp;
|
||||
} else {
|
||||
idft12288(prachF,prach2,1);
|
||||
memmove( prach, prach+24576, Ncp<<2 );
|
||||
prach_len = 12288+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+24576, prach2, 49152 );
|
||||
prach_len = 2*12288+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 75:
|
||||
if (prach_fmt == 4) {
|
||||
idft3072(prachF,prach2,1);
|
||||
//TODO: account for repeated format in dft output
|
||||
memmove( prach, prach+6144, Ncp<<2 );
|
||||
prach_len = 3072+Ncp;
|
||||
} else {
|
||||
idft18432(prachF,prach2,1);
|
||||
memmove( prach, prach+36864, Ncp<<2 );
|
||||
prach_len = 18432+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+36834, prach2, 73728 );
|
||||
prach_len = 2*18432+Ncp;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 100:
|
||||
if (ue->frame_parms.threequarter_fs == 0) {
|
||||
if (prach_fmt == 4) {
|
||||
idft4096(prachF,prach2,1);
|
||||
memmove( prach, prach+8192, Ncp<<2 );
|
||||
prach_len = 4096+Ncp;
|
||||
} else {
|
||||
idft24576(prachF,prach2,1);
|
||||
memmove( prach, prach+49152, Ncp<<2 );
|
||||
prach_len = 24576+Ncp;
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+49152, prach2, 98304 );
|
||||
prach_len = 2* 24576+Ncp;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (prach_fmt == 4) {
|
||||
idft3072(prachF,prach2,1);
|
||||
//TODO: account for repeated format in dft output
|
||||
memmove( prach, prach+6144, Ncp<<2 );
|
||||
prach_len = 3072+Ncp;
|
||||
} else {
|
||||
idft18432(prachF,prach2,1);
|
||||
memmove( prach, prach+36864, Ncp<<2 );
|
||||
prach_len = 18432+Ncp;
|
||||
printf("Generated prach for 100 PRB, 3/4 sampling\n");
|
||||
|
||||
if (prach_fmt>1) {
|
||||
memmove( prach2+36834, prach2, 73728 );
|
||||
prach_len = 2*18432+Ncp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
//LOG_I(PHY,"prach_len=%d\n",prach_len);
|
||||
|
||||
AssertFatal(prach_fmt<4,
|
||||
"prach_fmt4 not fully implemented" );
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
int j;
|
||||
int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*ue->frame_parms.samples_per_tti;
|
||||
LOG_I( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
|
||||
|
||||
for (i=prach_start,j=0; i<min(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,prach_start+prach_len); i++,j++) {
|
||||
((int16_t*)ue->common_vars.txdata[0])[2*i] = prach[2*j];
|
||||
((int16_t*)ue->common_vars.txdata[0])[2*i+1] = prach[2*j+1];
|
||||
}
|
||||
|
||||
for (i=0; i<overflow; i++,j++) {
|
||||
((int16_t*)ue->common_vars.txdata[0])[2*i] = prach[2*j];
|
||||
((int16_t*)ue->common_vars.txdata[0])[2*i+1] = prach[2*j+1];
|
||||
}
|
||||
"prach_fmt4 not fully implemented" );
|
||||
|
||||
if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
int j;
|
||||
int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*ue->frame_parms.samples_per_tti;
|
||||
LOG_I( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
|
||||
|
||||
for (i=prach_start,j=0; i<min(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,prach_start+prach_len); i++,j++) {
|
||||
((int16_t *)ue->common_vars.txdata[0])[2*i] = prach[2*j];
|
||||
((int16_t *)ue->common_vars.txdata[0])[2*i+1] = prach[2*j+1];
|
||||
}
|
||||
|
||||
for (i=0; i<overflow; i++,j++) {
|
||||
((int16_t *)ue->common_vars.txdata[0])[2*i] = prach[2*j];
|
||||
((int16_t *)ue->common_vars.txdata[0])[2*i+1] = prach[2*j+1];
|
||||
}
|
||||
|
||||
#if defined(EXMIMO)
|
||||
// handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
|
||||
for (k=prach_start - (ue->frame_parms.samples_per_tti>>1) ; k<prach_start ; k++) {
|
||||
if (k<0)
|
||||
ue->common_vars.txdata[0][k+ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else if (k>(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
|
||||
ue->common_vars.txdata[0][k-ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else
|
||||
ue->common_vars.txdata[0][k] &= 0xFFFEFFFE;
|
||||
}
|
||||
|
||||
// handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
|
||||
for (k=prach_start - (ue->frame_parms.samples_per_tti>>1) ; k<prach_start ; k++) {
|
||||
if (k<0)
|
||||
ue->common_vars.txdata[0][k+ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else if (k>(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
|
||||
ue->common_vars.txdata[0][k-ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else
|
||||
ue->common_vars.txdata[0][k] &= 0xFFFEFFFE;
|
||||
}
|
||||
|
||||
#endif
|
||||
#else
|
||||
|
||||
for (i=0; i<prach_len; i++) {
|
||||
((int16_t*)(&ue->common_vars.txdata[0][prach_start]))[2*i] = prach[2*i];
|
||||
((int16_t*)(&ue->common_vars.txdata[0][prach_start]))[2*i+1] = prach[2*i+1];
|
||||
} else { // simulators
|
||||
for (i=0; i<prach_len; i++) {
|
||||
((int16_t *)(&ue->common_vars.txdata[0][prach_start]))[2*i] = prach[2*i];
|
||||
((int16_t *)(&ue->common_vars.txdata[0][prach_start]))[2*i+1] = prach[2*i+1];
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(PRACH_WRITE_OUTPUT_DEBUG)
|
||||
LOG_M("prach_txF0.m","prachtxF0",prachF,prach_len-Ncp,1,1);
|
||||
LOG_M("prach_tx0.m","prachtx0",prach+(Ncp<<1),prach_len-Ncp,1,1);
|
||||
LOG_M("txsig.m","txs",(int16_t*)(&ue->common_vars.txdata[0][0]),2*ue->frame_parms.samples_per_tti,1,1);
|
||||
LOG_M("txsig.m","txs",(int16_t *)(&ue->common_vars.txdata[0][0]),2*ue->frame_parms.samples_per_tti,1,1);
|
||||
exit(-1);
|
||||
#endif
|
||||
|
||||
return signal_energy( (int*)prach, 256 );
|
||||
return signal_energy( (int *)prach, 256 );
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file lte_enb_scope.c
|
||||
* \brief enb specific softsope implementation
|
||||
* \author Nokia BellLabs France, francois Taburet
|
||||
* \date 2019
|
||||
* \version 0.1
|
||||
* \company Nokia Bell-Labs France
|
||||
* \email: francois.taburet@nokia-bell-labs.com
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include "targets/RT/USER/lte-softmodem.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "common/config/config_userapi.h"
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
#include "targets/RT/USER/stats.h"
|
||||
|
||||
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
||||
// at eNB 0, an UL scope for every UE
|
||||
FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX];
|
||||
FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||
FD_stats_form *form_stats=NULL,*form_stats_l2=NULL;
|
||||
char title[255];
|
||||
unsigned char scope_enb_num_ue = 2;
|
||||
static pthread_t forms_thread; //xforms
|
||||
int otg_enabled=0;
|
||||
|
||||
void reset_stats(FL_OBJECT *button, long arg) {
|
||||
int i,j,k;
|
||||
PHY_VARS_eNB *phy_vars_eNB = RC.eNB[0][0];
|
||||
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
for (k=0; k<8; k++) { //harq_processes
|
||||
for (j=0; j<phy_vars_eNB->dlsch[i][0]->Mlimit; j++) {
|
||||
phy_vars_eNB->UE_stats[i].dlsch_NAK[k][j]=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_ACK[k][j]=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_trials[k][j]=0;
|
||||
}
|
||||
|
||||
phy_vars_eNB->UE_stats[i].dlsch_l2_errors[k]=0;
|
||||
phy_vars_eNB->UE_stats[i].ulsch_errors[k]=0;
|
||||
phy_vars_eNB->UE_stats[i].ulsch_consecutive_errors=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_sliding_cnt=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_NAK_round0=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_mcs_offset=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static void *scope_thread_eNB(void *arg) {
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
FILE *eNB_stats;
|
||||
# endif
|
||||
struct sched_param sched_param;
|
||||
int UE_id, CC_id;
|
||||
int ue_cnt=0;
|
||||
sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1;
|
||||
sched_setscheduler(0, SCHED_FIFO,&sched_param);
|
||||
printf("Scope thread has priority %d\n",sched_param.sched_priority);
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
eNB_stats = fopen("eNB_stats.txt", "w");
|
||||
#endif
|
||||
|
||||
while (!oai_exit) {
|
||||
ue_cnt=0;
|
||||
|
||||
for(UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
|
||||
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
if ((ue_cnt<scope_enb_num_ue)) {
|
||||
phy_scope_eNB(form_enb[CC_id][ue_cnt],
|
||||
RC.eNB[0][CC_id],
|
||||
UE_id);
|
||||
ue_cnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
// printf("%s",stats_buffer);
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
|
||||
if (eNB_stats) {
|
||||
rewind (eNB_stats);
|
||||
fwrite (stats_buffer, 1, len, eNB_stats);
|
||||
fclose (eNB_stats);
|
||||
}
|
||||
|
||||
# endif
|
||||
pthread_exit((void *)arg);
|
||||
}
|
||||
|
||||
|
||||
int enbscope_autoinit(void) {
|
||||
int UE_id;
|
||||
printf("XFORMS\n");
|
||||
int argc=config_get_if()->argc;
|
||||
char **argv=config_get_if()->argv;
|
||||
fl_initialize (&argc, argv, NULL, 0, 0);
|
||||
form_stats_l2 = create_form_stats_form();
|
||||
fl_show_form (form_stats_l2->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "l2 stats");
|
||||
form_stats = create_form_stats_form();
|
||||
fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
|
||||
|
||||
for(UE_id=0; UE_id<scope_enb_num_ue; UE_id++) {
|
||||
for(int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
form_enb[CC_id][UE_id] = create_lte_phy_scope_enb();
|
||||
sprintf (title, "LTE UL SCOPE eNB for CC_id %d, UE %d",CC_id,UE_id);
|
||||
fl_show_form (form_enb[CC_id][UE_id]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
|
||||
if (otg_enabled) {
|
||||
fl_set_button(form_enb[CC_id][UE_id]->button_0,1);
|
||||
fl_set_object_label(form_enb[CC_id][UE_id]->button_0,"DL Traffic ON");
|
||||
} else {
|
||||
fl_set_button(form_enb[CC_id][UE_id]->button_0,0);
|
||||
fl_set_object_label(form_enb[CC_id][UE_id]->button_0,"DL Traffic OFF");
|
||||
}
|
||||
} // CC_id
|
||||
} // UE_id
|
||||
|
||||
int ret = pthread_create(&forms_thread, NULL, scope_thread_eNB, NULL);
|
||||
|
||||
if (ret == 0)
|
||||
pthread_setname_np( forms_thread, "xforms" );
|
||||
|
||||
printf("Scope thread created, ret=%d\n",ret);
|
||||
return 0;
|
||||
} // start_forms_eNB
|
||||
|
||||
|
||||
|
||||
void end_forms(void) {
|
||||
printf("waiting for XFORMS thread\n");
|
||||
pthread_join(forms_thread,NULL);
|
||||
fl_hide_form(form_stats->stats_form);
|
||||
fl_free_form(form_stats->stats_form);
|
||||
fl_hide_form(form_stats_l2->stats_form);
|
||||
fl_free_form(form_stats_l2->stats_form);
|
||||
|
||||
for(int UE_id=0; UE_id<scope_enb_num_ue; UE_id++) {
|
||||
for(int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
fl_hide_form(form_enb[CC_id][UE_id]->lte_phy_scope_enb);
|
||||
fl_free_form(form_enb[CC_id][UE_id]->lte_phy_scope_enb);
|
||||
}
|
||||
}
|
||||
} // end_forms
|
||||
|
||||
@@ -154,7 +154,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
|
||||
PHY_VARS_eNB *phy_vars_enb,
|
||||
int UE_id)
|
||||
{
|
||||
int eNB_id = 0;
|
||||
|
||||
int i,i2,arx,atx,ind,k;
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_enb->frame_parms;
|
||||
int nsymb_ce = 12*frame_parms->N_RB_UL*frame_parms->symbols_per_tti;
|
||||
@@ -197,10 +197,10 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
|
||||
llr = (float*) calloc(coded_bits_per_codeword,sizeof(float)); // init to zero
|
||||
bit = malloc(coded_bits_per_codeword*sizeof(float));
|
||||
|
||||
rxsig_t = (int16_t**) phy_vars_enb->common_vars.rxdata[eNB_id];
|
||||
rxsig_t = (int16_t**) phy_vars_enb->RU_list[0]->common.rxdata;
|
||||
//chest_t = (int16_t**) phy_vars_enb->pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id];
|
||||
chest_t = (int16_t**) phy_vars_enb->srs_vars[UE_id].srs_ch_estimates[eNB_id];
|
||||
chest_f = (int16_t**) phy_vars_enb->pusch_vars[UE_id]->drs_ch_estimates[eNB_id];
|
||||
chest_t = (int16_t**) phy_vars_enb->srs_vars[UE_id].srs_ch_estimates;
|
||||
chest_f = (int16_t**) phy_vars_enb->pusch_vars[UE_id]->drs_ch_estimates;
|
||||
pusch_llr = (int16_t*) phy_vars_enb->pusch_vars[UE_id]->llr;
|
||||
pusch_comp = (int32_t*) phy_vars_enb->pusch_vars[UE_id]->rxdataF_comp[0];
|
||||
pucch1_comp = (int32_t*) phy_vars_enb->pucch1_stats[UE_id];
|
||||
@@ -209,7 +209,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
|
||||
|
||||
// Received signal in time domain of receive antenna 0
|
||||
if (rxsig_t != NULL) {
|
||||
if (rxsig_t[0] != NULL) {
|
||||
if (rxsig_t[0] != NULL ) {
|
||||
for (i=0; i<FRAME_LENGTH_COMPLEX_SAMPLES; i++) {
|
||||
rxsig_t_dB[0][i] = 10*log10(1.0+(float) ((rxsig_t[0][2*i])*(rxsig_t[0][2*i])+(rxsig_t[0][2*i+1])*(rxsig_t[0][2*i+1])));
|
||||
time[i] = (float) i;
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
|
||||
/*! \file lte_ue_scope.c
|
||||
* \brief UE specific softsope implementation
|
||||
* \author Nokia BellLabs France, francois Taburet
|
||||
* \date 2019
|
||||
* \version 0.1
|
||||
* \company Nokia Bell-Labs France
|
||||
* \email: francois.taburet@nokia-bell-labs.com
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include "targets/RT/USER/lte-softmodem.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "common/config/config_userapi.h"
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
#include "targets/RT/USER/stats.h"
|
||||
#include "PHY/phy_vars_ue.h"
|
||||
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
||||
// at eNB 0, an UL scope for every UE
|
||||
FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX];
|
||||
FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||
FD_stats_form *form_stats=NULL,*form_stats_l2=NULL;
|
||||
char title[255];
|
||||
unsigned char scope_enb_num_ue = 2;
|
||||
static pthread_t forms_thread; //xforms
|
||||
|
||||
|
||||
void reset_stats(FL_OBJECT *button, long arg) {
|
||||
int i,j,k;
|
||||
PHY_VARS_eNB *phy_vars_eNB = RC.eNB[0][0];
|
||||
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
for (k=0; k<8; k++) { //harq_processes
|
||||
for (j=0; j<phy_vars_eNB->dlsch[i][0]->Mlimit; j++) {
|
||||
phy_vars_eNB->UE_stats[i].dlsch_NAK[k][j]=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_ACK[k][j]=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_trials[k][j]=0;
|
||||
}
|
||||
|
||||
phy_vars_eNB->UE_stats[i].dlsch_l2_errors[k]=0;
|
||||
phy_vars_eNB->UE_stats[i].ulsch_errors[k]=0;
|
||||
phy_vars_eNB->UE_stats[i].ulsch_consecutive_errors=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_sliding_cnt=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_NAK_round0=0;
|
||||
phy_vars_eNB->UE_stats[i].dlsch_mcs_offset=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void *scope_thread_UE(void *arg) {
|
||||
char stats_buffer[16384];
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
FILE *UE_stats, *eNB_stats;
|
||||
# endif
|
||||
struct sched_param sched_param;
|
||||
sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1;
|
||||
sched_setscheduler(0, SCHED_FIFO,&sched_param);
|
||||
printf("Scope thread has priority %d\n",sched_param.sched_priority);
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
UE_stats = fopen("UE_stats.txt", "w");
|
||||
#endif
|
||||
|
||||
while (!oai_exit) {
|
||||
// dump_ue_stats (PHY_vars_UE_g[0][0], &PHY_vars_UE_g[0][0]->proc.proc_rxtx[0],stats_buffer, 0, mode,rx_input_level_dBm);
|
||||
//fl_set_object_label(form_stats->stats_text, stats_buffer);
|
||||
fl_clear_browser(form_stats->stats_text);
|
||||
fl_add_browser_line(form_stats->stats_text, stats_buffer);
|
||||
phy_scope_UE(form_ue[0],
|
||||
PHY_vars_UE_g[0][0],
|
||||
0,
|
||||
0,7);
|
||||
// printf("%s",stats_buffer);
|
||||
}
|
||||
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
|
||||
if (UE_stats) {
|
||||
rewind (UE_stats);
|
||||
fwrite (stats_buffer, 1, len, UE_stats);
|
||||
fclose (UE_stats);
|
||||
}
|
||||
|
||||
# endif
|
||||
pthread_exit((void *)arg);
|
||||
}
|
||||
|
||||
|
||||
int uescope_autoinit(void) {
|
||||
int UE_id;
|
||||
int argc=config_get_if()->argc;
|
||||
char **argv=config_get_if()->argv;
|
||||
printf("XFORMS\n");
|
||||
fl_initialize (&argc, argv, NULL, 0, 0);
|
||||
form_stats = create_form_stats_form();
|
||||
fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
|
||||
UE_id = 0;
|
||||
form_ue[UE_id] = create_lte_phy_scope_ue();
|
||||
sprintf (title, "LTE DL SCOPE UE");
|
||||
fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
/*
|
||||
if (openair_daq_vars.use_ia_receiver) {
|
||||
fl_set_button(form_ue[UE_id]->button_0,1);
|
||||
fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver ON");
|
||||
} else {
|
||||
fl_set_button(form_ue[UE_id]->button_0,0);
|
||||
fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver OFF");
|
||||
}*/
|
||||
fl_set_button(form_ue[UE_id]->button_0,0);
|
||||
fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver OFF");
|
||||
int ret = pthread_create(&forms_thread, NULL, scope_thread_UE, NULL);
|
||||
|
||||
if (ret == 0)
|
||||
pthread_setname_np( forms_thread, "xforms" );
|
||||
|
||||
printf("Scope thread created, ret=%d\n",ret);
|
||||
return 0;
|
||||
} // start_forms_UE
|
||||
|
||||
|
||||
void end_forms(void) {
|
||||
printf("waiting for XFORMS thread\n");
|
||||
pthread_join(forms_thread,NULL);
|
||||
fl_hide_form(form_stats->stats_form);
|
||||
fl_free_form(form_stats->stats_form);
|
||||
fl_hide_form(form_ue[0]->lte_phy_scope_ue);
|
||||
fl_free_form(form_ue[0]->lte_phy_scope_ue);
|
||||
} // end_forms
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file openair1/PHY/TOOLS/phy_scope_interface.c
|
||||
* \brief soft scope API interface implementation
|
||||
* \author Nokia BellLabs France, francois Taburet
|
||||
* \date 2019
|
||||
* \version 0.1
|
||||
* \company Nokia BellLabs France
|
||||
* \email: francois.taburet@nokia-bell-labs.com
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include "common/config/config_userapi.h"
|
||||
#include "common/utils/load_module_shlib.h"
|
||||
#include "phy_scope_interface.h"
|
||||
|
||||
#define SOFTSCOPE_ENDFUNC_IDX 0
|
||||
static loader_shlibfunc_t scope_fdesc[]= {{"end_forms",NULL}};
|
||||
|
||||
int load_softscope(char *exectype) {
|
||||
char libname[64];
|
||||
sprintf(libname,"%.10sscope",exectype);
|
||||
return load_module_shlib(libname,scope_fdesc,1,NULL);
|
||||
}
|
||||
|
||||
int end_forms(void) {
|
||||
if (scope_fdesc[SOFTSCOPE_ENDFUNC_IDX].fptr) {
|
||||
scope_fdesc[SOFTSCOPE_ENDFUNC_IDX].fptr();
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
/*! \file phy_scope_interface.h
|
||||
* \brief softscope interface API include file
|
||||
* \author Nokia BellLabs France, francois Taburet
|
||||
* \date 2019
|
||||
* \version 0.1
|
||||
* \company Nokia BellLabs France
|
||||
* \email: francois.taburet@nokia-bell-labs.com
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
|
||||
int load_softscope(char *exectype);
|
||||
int end_forms(void) ;
|
||||
|
||||
|
||||
@@ -76,9 +76,8 @@ extern double cpuf;
|
||||
void Msg1_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
|
||||
void Msg3_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
||||
#endif
|
||||
extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
||||
|
||||
|
||||
void get_dumpparam(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id, uint8_t nb_rb,
|
||||
uint32_t *alloc_even, uint8_t subframe,uint32_t Qm, uint32_t Nl, uint32_t tm,
|
||||
@@ -160,47 +159,7 @@ void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
//unsigned int gain_table[31] = {100,112,126,141,158,178,200,224,251,282,316,359,398,447,501,562,631,708,794,891,1000,1122,1258,1412,1585,1778,1995,2239,2512,2818,3162};
|
||||
/*
|
||||
unsigned int get_tx_amp_prach(int power_dBm, int power_max_dBm, int N_RB_UL)
|
||||
{
|
||||
|
||||
int gain_dB = power_dBm - power_max_dBm;
|
||||
int amp_x_100;
|
||||
|
||||
switch (N_RB_UL) {
|
||||
case 6:
|
||||
amp_x_100 = AMP; // PRACH is 6 PRBS so no scale
|
||||
break;
|
||||
case 15:
|
||||
amp_x_100 = 158*AMP; // 158 = 100*sqrt(15/6)
|
||||
break;
|
||||
case 25:
|
||||
amp_x_100 = 204*AMP; // 204 = 100*sqrt(25/6)
|
||||
break;
|
||||
case 50:
|
||||
amp_x_100 = 286*AMP; // 286 = 100*sqrt(50/6)
|
||||
break;
|
||||
case 75:
|
||||
amp_x_100 = 354*AMP; // 354 = 100*sqrt(75/6)
|
||||
break;
|
||||
case 100:
|
||||
amp_x_100 = 408*AMP; // 408 = 100*sqrt(100/6)
|
||||
break;
|
||||
default:
|
||||
LOG_E(PHY,"Unknown PRB size %d\n",N_RB_UL);
|
||||
mac_xface->macphy_exit("");
|
||||
break;
|
||||
}
|
||||
if (gain_dB < -30) {
|
||||
return(amp_x_100/3162);
|
||||
} else if (gain_dB>0)
|
||||
return(amp_x_100);
|
||||
else
|
||||
return(amp_x_100/gain_table[-gain_dB]); // 245 corresponds to the factor sqrt(25/6)
|
||||
}
|
||||
*/
|
||||
|
||||
unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb) {
|
||||
int gain_dB;
|
||||
@@ -216,7 +175,6 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb
|
||||
return((int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb)));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe) {
|
||||
if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
|
||||
@@ -1130,10 +1088,8 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
int subframe_tx = proc->subframe_tx;
|
||||
int ulsch_start;
|
||||
int overflow=0;
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
int k,l;
|
||||
int dummy_tx_buffer[frame_parms->samples_per_tti] __attribute__((aligned(16)));
|
||||
#endif
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_IN);
|
||||
|
||||
if ( LOG_DEBUGFLAG(UE_TIMING)) {
|
||||
@@ -1141,23 +1097,21 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
}
|
||||
|
||||
nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
|
||||
ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
|
||||
ue->hw_timing_advance-
|
||||
ue->timing_advance-
|
||||
ue->N_TA_offset+5);
|
||||
//LOG_E(PHY,"ul-signal [subframe: %d, ulsch_start %d]\n",subframe_tx, ulsch_start);
|
||||
|
||||
if(ulsch_start < 0)
|
||||
ulsch_start = ulsch_start + (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
|
||||
if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
|
||||
ue->hw_timing_advance-
|
||||
ue->timing_advance-
|
||||
ue->N_TA_offset+5);
|
||||
|
||||
if (ulsch_start > (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti))
|
||||
ulsch_start = ulsch_start % (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
|
||||
if(ulsch_start < 0)
|
||||
ulsch_start = ulsch_start + (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
|
||||
|
||||
//LOG_E(PHY,"ul-signal [subframe: %d, ulsch_start %d]\n",subframe_tx, ulsch_start);
|
||||
#else //this is the normal case
|
||||
ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-ue->N_TA_offset; //-ue->timing_advance;
|
||||
#endif //else EXMIMO
|
||||
if (ulsch_start > (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti))
|
||||
ulsch_start = ulsch_start % (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti);
|
||||
} else { //this is the simulators case
|
||||
ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-ue->N_TA_offset; //-ue->timing_advance;
|
||||
}
|
||||
|
||||
if (empty_subframe) {
|
||||
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
|
||||
@@ -1175,70 +1129,63 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
}
|
||||
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
if (frame_parms->Ncp == 1)
|
||||
int *Buff = (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ? &ue->common_vars.txdata[aa][ulsch_start] :dummy_tx_buffer;
|
||||
|
||||
if (frame_parms->Ncp == 1) {
|
||||
PHY_ofdm_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
dummy_tx_buffer,
|
||||
#else
|
||||
&ue->common_vars.txdata[aa][ulsch_start],
|
||||
#endif
|
||||
Buff,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
nsymb,
|
||||
frame_parms->nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
else {
|
||||
} else {
|
||||
normal_prefix_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
dummy_tx_buffer,
|
||||
#else
|
||||
&ue->common_vars.txdata[aa][ulsch_start],
|
||||
#endif
|
||||
Buff,
|
||||
nsymb>>1,
|
||||
&ue->frame_parms);
|
||||
Buff += (frame_parms->samples_per_tti>>1);
|
||||
normal_prefix_mod(&ue->common_vars.txdataF[aa][((subframe_tx*nsymb)+(nsymb>>1))*frame_parms->ofdm_symbol_size],
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
dummy_tx_buffer+(frame_parms->samples_per_tti>>1),
|
||||
#else
|
||||
&ue->common_vars.txdata[aa][ulsch_start+(frame_parms->samples_per_tti>>1)],
|
||||
#endif
|
||||
Buff,
|
||||
nsymb>>1,
|
||||
&ue->frame_parms);
|
||||
}
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
apply_7_5_kHz(ue,dummy_tx_buffer,0);
|
||||
apply_7_5_kHz(ue,dummy_tx_buffer,1);
|
||||
#else
|
||||
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],0);
|
||||
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],1);
|
||||
#endif
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
|
||||
|
||||
for (k=ulsch_start,l=0; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++,l++) {
|
||||
((short *)ue->common_vars.txdata[aa])[2*k] = ((short *)dummy_tx_buffer)[2*l];
|
||||
((short *)ue->common_vars.txdata[aa])[2*k+1] = ((short *)dummy_tx_buffer)[2*l+1];
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],0);
|
||||
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],1);
|
||||
} else {
|
||||
apply_7_5_kHz(ue,dummy_tx_buffer,0);
|
||||
apply_7_5_kHz(ue,dummy_tx_buffer,1);
|
||||
}
|
||||
|
||||
for (k=0; k<overflow; k++,l++) {
|
||||
((short *)ue->common_vars.txdata[aa])[2*k] = ((short *)dummy_tx_buffer)[2*l];
|
||||
((short *)ue->common_vars.txdata[aa])[2*k+1] = ((short *)dummy_tx_buffer)[2*l+1];
|
||||
}
|
||||
if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
|
||||
|
||||
for (k=ulsch_start,l=0; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++,l++) {
|
||||
((short *)ue->common_vars.txdata[aa])[2*k] = ((short *)dummy_tx_buffer)[2*l];
|
||||
((short *)ue->common_vars.txdata[aa])[2*k+1] = ((short *)dummy_tx_buffer)[2*l+1];
|
||||
}
|
||||
|
||||
for (k=0; k<overflow; k++,l++) {
|
||||
((short *)ue->common_vars.txdata[aa])[2*k] = ((short *)dummy_tx_buffer)[2*l];
|
||||
((short *)ue->common_vars.txdata[aa])[2*k+1] = ((short *)dummy_tx_buffer)[2*l+1];
|
||||
}
|
||||
|
||||
#if defined(EXMIMO)
|
||||
|
||||
// handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
|
||||
for (k=ulsch_start - (frame_parms->samples_per_tti>>1) ; k<ulsch_start ; k++) {
|
||||
if (k<0)
|
||||
ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else if (k>(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
|
||||
ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else
|
||||
ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE;
|
||||
}
|
||||
// handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
|
||||
for (k=ulsch_start - (frame_parms->samples_per_tti>>1) ; k<ulsch_start ; k++) {
|
||||
if (k<0)
|
||||
ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else if (k>(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
|
||||
ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else
|
||||
ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
only for debug
|
||||
LOG_I(PHY,"ul-signal [subframe: %d, ulsch_start %d, TA: %d, rxOffset: %d, timing_advance: %d, hw_timing_advance: %d]\n",subframe_tx, ulsch_start, ue->N_TA_offset, ue->rx_offset, ue->timing_advance, ue->hw_timing_advance);
|
||||
@@ -1310,14 +1257,15 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
ue->prach_resources[eNB_id]->ra_TDD_map_index,
|
||||
ue->prach_resources[eNB_id]->ra_RNTI);
|
||||
ue->tx_total_RE[subframe_tx] = 96;
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
ue->prach_vars[eNB_id]->amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
6);
|
||||
#else
|
||||
ue->prach_vars[eNB_id]->amp = AMP;
|
||||
#endif
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
ue->prach_vars[eNB_id]->amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
6);
|
||||
} else {
|
||||
ue->prach_vars[eNB_id]->amp = AMP;
|
||||
}
|
||||
|
||||
if ((mode == calib_prach_tx) && (((proc->frame_tx&0xfffe)%100)==0))
|
||||
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",
|
||||
@@ -1333,12 +1281,12 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_OUT);
|
||||
// stop_meas(&ue->tx_prach);
|
||||
LOG_I(PHY,"[UE %d][RAPROC] PRACH PL %d dB, power %d dBm (max %d dBm), digital power %d dB (amp %d)\n",
|
||||
ue->Mod_id,
|
||||
get_PL(ue->Mod_id,ue->CC_id,eNB_id),
|
||||
ue->tx_power_dBm[subframe_tx],
|
||||
ue->Mod_id,
|
||||
get_PL(ue->Mod_id,ue->CC_id,eNB_id),
|
||||
ue->tx_power_dBm[subframe_tx],
|
||||
ue->tx_power_max_dBm,
|
||||
dB_fixed(prach_power),
|
||||
ue->prach_vars[eNB_id]->amp);
|
||||
dB_fixed(prach_power),
|
||||
ue->prach_vars[eNB_id]->amp);
|
||||
|
||||
if (ue->mac_enabled==1) {
|
||||
Msg1_transmitted(ue->Mod_id,
|
||||
@@ -1680,14 +1628,16 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
}
|
||||
|
||||
ue->tx_total_RE[subframe_tx] = nb_rb*12;
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
tx_amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
nb_rb);
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
tx_amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
nb_rb);
|
||||
}
|
||||
|
||||
T(T_UE_PHY_PUSCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
|
||||
T_INT(tx_amp),T_INT(ue->ulsch[eNB_id]->f_pusch),T_INT(get_PL(Mod_id,0,eNB_id)),T_INT(nb_rb));
|
||||
|
||||
@@ -1751,20 +1701,19 @@ void ue_srs_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8
|
||||
Po_SRS = ue->tx_power_max_dBm;
|
||||
}
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
|
||||
if (ue->mac_enabled==1) {
|
||||
tx_amp = get_tx_amp(Po_SRS,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
nb_rb_srs);
|
||||
} else {
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
if (ue->mac_enabled==1) {
|
||||
tx_amp = get_tx_amp(Po_SRS,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
nb_rb_srs);
|
||||
} else {
|
||||
tx_amp = AMP;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
LOG_D(PHY,"SRS PROC; TX_MAX_POWER %d, Po_SRS %d, NB_RB_UL %d, NB_RB_SRS %d TX_AMPL %d\n",ue->tx_power_max_dBm,
|
||||
Po_SRS,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
@@ -1903,7 +1852,6 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
|
||||
uint8_t isShortenPucch = (pSoundingrs_ul_config_dedicated->srsCellSubframe && frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission);
|
||||
bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
|
||||
|
||||
// Part - I
|
||||
// Collect feedback that should be transmitted at this subframe
|
||||
// - SR
|
||||
@@ -1990,14 +1938,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
|
||||
ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
|
||||
ue->tx_total_RE[subframe_tx] = 12;
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
1);
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
1);
|
||||
}
|
||||
|
||||
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
|
||||
T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||
|
||||
@@ -2069,14 +2019,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
|
||||
ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
|
||||
ue->tx_total_RE[subframe_tx] = 12;
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
1);
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
1);
|
||||
}
|
||||
|
||||
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
|
||||
T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||
|
||||
@@ -2171,7 +2123,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
|
||||
}
|
||||
|
||||
if (subframe_select(&ue->frame_parms,proc->subframe_tx) == SF_UL ||
|
||||
ue->frame_parms.frame_type == FDD) {
|
||||
ue->frame_parms.frame_type == FDD) {
|
||||
if (ue->UE_mode[eNB_id] > PRACH ) {
|
||||
// check cell srs subframe and ue srs subframe. This has an impact on pusch encoding
|
||||
isSubframeSRS = is_srs_occasion_common(&ue->frame_parms,proc->frame_tx,proc->subframe_tx);
|
||||
@@ -2313,13 +2265,10 @@ void ue_measurement_procedures(
|
||||
if (( (slot%2) == 0) && (l==(4-frame_parms->Ncp))) {
|
||||
// AGC
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_IN);
|
||||
#ifndef OAI_USRP
|
||||
#ifndef OAI_BLADERF
|
||||
#ifndef OAI_LMSSDR
|
||||
phy_adjust_gain (ue,dB_fixed(ue->measurements.rssi),0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
|
||||
phy_adjust_gain (ue,dB_fixed(ue->measurements.rssi),0);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_OUT);
|
||||
eNB_id = 0;
|
||||
|
||||
@@ -2752,6 +2701,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
||||
T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb),
|
||||
T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb),
|
||||
T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS));
|
||||
|
||||
if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
|
||||
LOG_USEDINLOG_VAR(int8_t,harq_pid) = subframe2harq_pid(&ue->frame_parms,
|
||||
pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx),
|
||||
@@ -4205,72 +4155,72 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *pr
|
||||
}
|
||||
|
||||
if (LOG_DEBUGFLAG(UE_TIMING)) {
|
||||
stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
|
||||
LOG_I(PHY, "[AbsSFN %d.%d] Channel Decoder: %5.2f \n",frame_rx,subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
|
||||
}
|
||||
stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
|
||||
LOG_I(PHY, "[AbsSFN %d.%d] Channel Decoder: %5.2f \n",frame_rx,subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
|
||||
}
|
||||
|
||||
// duplicate harq structure
|
||||
uint8_t current_harq_pid = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid;
|
||||
LTE_DL_UE_HARQ_t *current_harq_processes = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
harq_status_t *current_harq_ack = &ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_ack[subframe_rx];
|
||||
// duplicate harq structure
|
||||
uint8_t current_harq_pid = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid;
|
||||
LTE_DL_UE_HARQ_t *current_harq_processes = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
harq_status_t *current_harq_ack = &ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_ack[subframe_rx];
|
||||
|
||||
// For Debug parallelisation
|
||||
//if (current_harq_ack->ack == 0) {
|
||||
//printf("[slot0 dl processing][End of Channel Decoding] AbsSubframe %d.%d Decode Fail for HarqId%d Round%d\n",frame_rx,subframe_rx,current_harq_pid,current_harq_processes->round);
|
||||
//}
|
||||
for(uint8_t rx_th_idx=1; rx_th_idx<RX_NB_TH; rx_th_idx++) {
|
||||
LTE_DL_UE_HARQ_t *harq_processes_dest = ue->dlsch[ue->current_thread_id[(subframe_rx+rx_th_idx)%10]][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
harq_status_t *harq_ack_dest = &ue->dlsch[ue->current_thread_id[(subframe_rx+rx_th_idx)%10]][eNB_id][0]->harq_ack[subframe_rx];
|
||||
copy_harq_proc_struct(harq_processes_dest, current_harq_processes);
|
||||
copy_ack_struct(harq_ack_dest, current_harq_ack);
|
||||
}
|
||||
|
||||
/*
|
||||
LTE_DL_UE_HARQ_t *harq_processes_dest = ue->dlsch[(subframe_rx+1)%RX_NB_TH][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
LTE_DL_UE_HARQ_t *harq_processes_dest1 = ue->dlsch[(subframe_rx+2)%RX_NB_TH][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
|
||||
harq_status_t *current_harq_ack = &ue->dlsch[subframe_rx%RX_NB_TH][eNB_id][0]->harq_ack[subframe_rx];
|
||||
harq_status_t *harq_ack_dest = &ue->dlsch[(subframe_rx+1)%RX_NB_TH][eNB_id][0]->harq_ack[subframe_rx];
|
||||
harq_status_t *harq_ack_dest1 = &ue->dlsch[(subframe_rx+2)%RX_NB_TH][eNB_id][0]->harq_ack[subframe_rx];
|
||||
|
||||
// For Debug parallelisation
|
||||
//if (current_harq_ack->ack == 0) {
|
||||
//printf("[slot0 dl processing][End of Channel Decoding] AbsSubframe %d.%d Decode Fail for HarqId%d Round%d\n",frame_rx,subframe_rx,current_harq_pid,current_harq_processes->round);
|
||||
//}
|
||||
for(uint8_t rx_th_idx=1; rx_th_idx<RX_NB_TH; rx_th_idx++) {
|
||||
LTE_DL_UE_HARQ_t *harq_processes_dest = ue->dlsch[ue->current_thread_id[(subframe_rx+rx_th_idx)%10]][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
harq_status_t *harq_ack_dest = &ue->dlsch[ue->current_thread_id[(subframe_rx+rx_th_idx)%10]][eNB_id][0]->harq_ack[subframe_rx];
|
||||
copy_harq_proc_struct(harq_processes_dest, current_harq_processes);
|
||||
copy_ack_struct(harq_ack_dest, current_harq_ack);
|
||||
}
|
||||
|
||||
/*
|
||||
LTE_DL_UE_HARQ_t *harq_processes_dest = ue->dlsch[(subframe_rx+1)%RX_NB_TH][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
LTE_DL_UE_HARQ_t *harq_processes_dest1 = ue->dlsch[(subframe_rx+2)%RX_NB_TH][eNB_id][0]->harq_processes[current_harq_pid];
|
||||
copy_harq_proc_struct(harq_processes_dest1, current_harq_processes);
|
||||
copy_ack_struct(harq_ack_dest1, current_harq_ack);
|
||||
*/
|
||||
if (subframe_rx==9) {
|
||||
if (frame_rx % 10 == 0) {
|
||||
if ((ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]) != 0)
|
||||
ue->dlsch_fer[eNB_id] = (100*(ue->dlsch_errors[eNB_id] - ue->dlsch_errors_last[eNB_id]))/(ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]);
|
||||
|
||||
harq_status_t *current_harq_ack = &ue->dlsch[subframe_rx%RX_NB_TH][eNB_id][0]->harq_ack[subframe_rx];
|
||||
harq_status_t *harq_ack_dest = &ue->dlsch[(subframe_rx+1)%RX_NB_TH][eNB_id][0]->harq_ack[subframe_rx];
|
||||
harq_status_t *harq_ack_dest1 = &ue->dlsch[(subframe_rx+2)%RX_NB_TH][eNB_id][0]->harq_ack[subframe_rx];
|
||||
ue->dlsch_errors_last[eNB_id] = ue->dlsch_errors[eNB_id];
|
||||
ue->dlsch_received_last[eNB_id] = ue->dlsch_received[eNB_id];
|
||||
}
|
||||
|
||||
copy_harq_proc_struct(harq_processes_dest, current_harq_processes);
|
||||
copy_ack_struct(harq_ack_dest, current_harq_ack);
|
||||
|
||||
copy_harq_proc_struct(harq_processes_dest1, current_harq_processes);
|
||||
copy_ack_struct(harq_ack_dest1, current_harq_ack);
|
||||
*/
|
||||
if (subframe_rx==9) {
|
||||
if (frame_rx % 10 == 0) {
|
||||
if ((ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]) != 0)
|
||||
ue->dlsch_fer[eNB_id] = (100*(ue->dlsch_errors[eNB_id] - ue->dlsch_errors_last[eNB_id]))/(ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]);
|
||||
|
||||
ue->dlsch_errors_last[eNB_id] = ue->dlsch_errors[eNB_id];
|
||||
ue->dlsch_received_last[eNB_id] = ue->dlsch_received[eNB_id];
|
||||
}
|
||||
|
||||
ue->bitrate[eNB_id] = (ue->total_TBS[eNB_id] - ue->total_TBS_last[eNB_id])*100;
|
||||
ue->total_TBS_last[eNB_id] = ue->total_TBS[eNB_id];
|
||||
LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n",
|
||||
ue->Mod_id,frame_rx,ue->total_TBS[eNB_id],
|
||||
ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0);
|
||||
ue->bitrate[eNB_id] = (ue->total_TBS[eNB_id] - ue->total_TBS_last[eNB_id])*100;
|
||||
ue->total_TBS_last[eNB_id] = ue->total_TBS[eNB_id];
|
||||
LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n",
|
||||
ue->Mod_id,frame_rx,ue->total_TBS[eNB_id],
|
||||
ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0);
|
||||
#if UE_AUTOTEST_TRACE
|
||||
|
||||
if ((frame_rx % 100 == 0)) {
|
||||
LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx);
|
||||
}
|
||||
if ((frame_rx % 100 == 0)) {
|
||||
LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
|
||||
|
||||
if (LOG_DEBUGFLAG(UE_TIMING)) {
|
||||
stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
|
||||
LOG_I(PHY, "------FULL RX PROC [AbsSFN %d.%d]: %5.2f ------\n",frame_rx,subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
|
||||
}
|
||||
if (LOG_DEBUGFLAG(UE_TIMING)) {
|
||||
stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
|
||||
LOG_I(PHY, "------FULL RX PROC [AbsSFN %d.%d]: %5.2f ------\n",frame_rx,subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
|
||||
}
|
||||
|
||||
LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
||||
return (0);
|
||||
LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
||||
return (0);
|
||||
}
|
||||
#endif /*UE_SLOT_PARALLELISATION */
|
||||
|
||||
|
||||
@@ -180,6 +180,9 @@ typedef struct RrcConfigurationReq_s {
|
||||
uint8_t mnc_digit_length[PLMN_LIST_MAX_SIZE];
|
||||
uint8_t num_plmn;
|
||||
|
||||
int enable_measurement_reports;
|
||||
int enable_x2;
|
||||
|
||||
uint32_t rrc_inactivity_timer_thres; // for testing, maybe change later
|
||||
|
||||
paging_drx_t default_drx;
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
#include "RRC_config_tools.h"
|
||||
#include "enb_paramdef.h"
|
||||
#include "proto_agent.h"
|
||||
#define RRC_INACTIVITY_THRESH 0
|
||||
|
||||
extern uint16_t sf_ahead;
|
||||
extern void set_parallel_conf(char *parallel_conf);
|
||||
@@ -387,7 +386,9 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
|
||||
for (int I = 0; I < sizeof(PLMNParams) / sizeof(paramdef_t); ++I)
|
||||
PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]);
|
||||
|
||||
RRC_CONFIGURATION_REQ (msg_p).rrc_inactivity_timer_thres = RRC_INACTIVITY_THRESH; // set to 0 to deactivate
|
||||
//RRC_CONFIGURATION_REQ (msg_p).rrc_inactivity_timer_thres = RRC_INACTIVITY_THRESH; // set to 0 to deactivate
|
||||
// In the configuration file it is in seconds. For RRC it has to be in milliseconds
|
||||
RRC_CONFIGURATION_REQ (msg_p).rrc_inactivity_timer_thres = (*ENBParamList.paramarray[i][ENB_RRC_INACTIVITY_THRES_IDX].uptr) * 1000;
|
||||
RRC_CONFIGURATION_REQ (msg_p).cell_identity = enb_id;
|
||||
RRC_CONFIGURATION_REQ (msg_p).tac = *ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].uptr;
|
||||
AssertFatal(!ENBParamList.paramarray[i][ENB_MOBILE_COUNTRY_CODE_IDX_OLD].strptr
|
||||
@@ -417,6 +418,22 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
|
||||
RRC_CONFIGURATION_REQ(msg_p).mnc[l]);
|
||||
}
|
||||
|
||||
/* measurement reports enabled? */
|
||||
if (ENBParamList.paramarray[i][ENB_ENABLE_MEASUREMENT_REPORTS].strptr != NULL &&
|
||||
*(ENBParamList.paramarray[i][ENB_ENABLE_MEASUREMENT_REPORTS].strptr) != NULL &&
|
||||
!strcmp(*(ENBParamList.paramarray[i][ENB_ENABLE_MEASUREMENT_REPORTS].strptr), "yes"))
|
||||
RRC_CONFIGURATION_REQ (msg_p).enable_measurement_reports = 1;
|
||||
else
|
||||
RRC_CONFIGURATION_REQ (msg_p).enable_measurement_reports = 0;
|
||||
|
||||
/* x2 enabled? */
|
||||
if (ENBParamList.paramarray[i][ENB_ENABLE_X2].strptr != NULL &&
|
||||
*(ENBParamList.paramarray[i][ENB_ENABLE_X2].strptr) != NULL &&
|
||||
!strcmp(*(ENBParamList.paramarray[i][ENB_ENABLE_X2].strptr), "yes"))
|
||||
RRC_CONFIGURATION_REQ (msg_p).enable_x2 = 1;
|
||||
else
|
||||
RRC_CONFIGURATION_REQ (msg_p).enable_x2 = 0;
|
||||
|
||||
// Parse optional physical parameters
|
||||
config_getlist( &CCsParamList,NULL,0,enbpath);
|
||||
LOG_I(RRC,"num component carriers %d \n",CCsParamList.numelt);
|
||||
|
||||
@@ -204,6 +204,9 @@ typedef enum {
|
||||
#define ENB_CONFIG_STRING_LOCAL_S_PORTD "local_s_portd"
|
||||
#define ENB_CONFIG_STRING_REMOTE_S_PORTD "remote_s_portd"
|
||||
#define ENB_CONFIG_STRING_NR_CELLID "nr_cellid"
|
||||
#define ENB_CONFIG_STRING_RRC_INACTIVITY_THRESHOLD "rrc_inactivity_threshold"
|
||||
#define ENB_CONFIG_STRING_MEASUREMENT_REPORTS "enable_measurement_reports"
|
||||
#define ENB_CONFIG_STRING_X2 "enable_x2"
|
||||
/*-----------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* cell configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
@@ -223,7 +226,10 @@ typedef enum {
|
||||
{ENB_CONFIG_STRING_REMOTE_S_PORTC, NULL, 0, uptr:NULL, defuintval:50000, TYPE_UINT, 0}, \
|
||||
{ENB_CONFIG_STRING_LOCAL_S_PORTD, NULL, 0, uptr:NULL, defuintval:50001, TYPE_UINT, 0}, \
|
||||
{ENB_CONFIG_STRING_REMOTE_S_PORTD, NULL, 0, uptr:NULL, defuintval:50001, TYPE_UINT, 0}, \
|
||||
{ENB_CONFIG_STRING_NR_CELLID, NULL, 0, u64ptr:NULL, defint64val:0, TYPE_UINT64, 0}, \
|
||||
{ENB_CONFIG_STRING_NR_CELLID, NULL, 0, u64ptr:NULL, defint64val:0, TYPE_UINT64, 0}, \
|
||||
{ENB_CONFIG_STRING_RRC_INACTIVITY_THRESHOLD, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
|
||||
{ENB_CONFIG_STRING_MEASUREMENT_REPORTS, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
{ENB_CONFIG_STRING_X2, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||
}
|
||||
#define ENB_ENB_ID_IDX 0
|
||||
#define ENB_CELL_TYPE_IDX 1
|
||||
@@ -240,6 +246,9 @@ typedef enum {
|
||||
#define ENB_LOCAL_S_PORTD_IDX 12
|
||||
#define ENB_REMOTE_S_PORTD_IDX 13
|
||||
#define ENB_NRCELLID_IDX 14
|
||||
#define ENB_RRC_INACTIVITY_THRES_IDX 15
|
||||
#define ENB_ENABLE_MEASUREMENT_REPORTS 16
|
||||
#define ENB_ENABLE_X2 17
|
||||
|
||||
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
|
||||
#define ENBPARAMS_CHECK { \
|
||||
@@ -257,6 +266,8 @@ typedef enum {
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s5 = { NULL } }, \
|
||||
{ .s5 = { NULL } }, \
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
@@ -127,7 +127,6 @@ int flexran_agent_hello(mid_t mod_id, const void *params, Protocol__FlexranMessa
|
||||
hello_msg->bs_id = flexran_get_bs_id(mod_id);
|
||||
hello_msg->has_bs_id = 1;
|
||||
hello_msg->n_capabilities = flexran_get_capabilities(mod_id, &hello_msg->capabilities);
|
||||
|
||||
*msg = malloc(sizeof(Protocol__FlexranMessage));
|
||||
|
||||
if(*msg == NULL)
|
||||
@@ -296,8 +295,10 @@ int flexran_agent_destroy_enb_config_reply(Protocol__FlexranMessage *msg) {
|
||||
for (int i = 0; i < reply->n_cell_config; i++) {
|
||||
if (reply->cell_config[i]->mbsfn_subframe_config_rfoffset)
|
||||
free(reply->cell_config[i]->mbsfn_subframe_config_rfoffset);
|
||||
|
||||
if (reply->cell_config[i]->mbsfn_subframe_config_rfperiod)
|
||||
free(reply->cell_config[i]->mbsfn_subframe_config_rfperiod);
|
||||
|
||||
if (reply->cell_config[i]->mbsfn_subframe_config_sfalloc)
|
||||
free(reply->cell_config[i]->mbsfn_subframe_config_sfalloc);
|
||||
|
||||
@@ -305,6 +306,7 @@ int flexran_agent_destroy_enb_config_reply(Protocol__FlexranMessage *msg) {
|
||||
for(int j = 0; j < reply->cell_config[i]->si_config->n_si_message; j++) {
|
||||
free(reply->cell_config[i]->si_config->si_message[j]);
|
||||
}
|
||||
|
||||
free(reply->cell_config[i]->si_config->si_message);
|
||||
free(reply->cell_config[i]->si_config);
|
||||
}
|
||||
@@ -319,6 +321,7 @@ int flexran_agent_destroy_enb_config_reply(Protocol__FlexranMessage *msg) {
|
||||
}
|
||||
|
||||
free(reply->cell_config[i]->slice_config->dl);
|
||||
|
||||
for (int j = 0; j < reply->cell_config[i]->slice_config->n_ul; ++j) {
|
||||
if (reply->cell_config[i]->slice_config->ul[j]->n_sorting > 0)
|
||||
free(reply->cell_config[i]->slice_config->ul[j]->sorting);
|
||||
@@ -492,16 +495,15 @@ int flexran_agent_lc_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
||||
goto error;
|
||||
|
||||
lc_config_reply_msg->header = header;
|
||||
|
||||
/* the lc_config_reply entirely depends on MAC except for the
|
||||
* mac_eNB_get_rrc_status() function (which in the current OAI implementation
|
||||
* is reachable if F1 is present). Therefore we check here wether MAC CM is
|
||||
* present and the message gets properly filled if it is or remains empty if
|
||||
* not */
|
||||
lc_config_reply_msg->n_lc_ue_config =
|
||||
flexran_agent_get_mac_xface(mod_id) ? flexran_get_mac_num_ues(mod_id) : 0;
|
||||
|
||||
flexran_agent_get_mac_xface(mod_id) ? flexran_get_mac_num_ues(mod_id) : 0;
|
||||
Protocol__FlexLcUeConfig **lc_ue_config = NULL;
|
||||
|
||||
if (lc_config_reply_msg->n_lc_ue_config > 0) {
|
||||
lc_ue_config = malloc(sizeof(Protocol__FlexLcUeConfig *) * lc_config_reply_msg->n_lc_ue_config);
|
||||
|
||||
@@ -512,6 +514,7 @@ int flexran_agent_lc_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
||||
// Fill the config for each UE
|
||||
for (int i = 0; i < lc_config_reply_msg->n_lc_ue_config; i++) {
|
||||
lc_ue_config[i] = malloc(sizeof(Protocol__FlexLcUeConfig));
|
||||
|
||||
if (!lc_ue_config[i]) goto error;
|
||||
|
||||
protocol__flex_lc_ue_config__init(lc_ue_config[i]);
|
||||
@@ -554,8 +557,7 @@ error:
|
||||
* ************************************
|
||||
*/
|
||||
|
||||
int sort_ue_config(const void *a, const void *b)
|
||||
{
|
||||
int sort_ue_config(const void *a, const void *b) {
|
||||
const Protocol__FlexUeConfig *fa = a;
|
||||
const Protocol__FlexUeConfig *fb = b;
|
||||
|
||||
@@ -563,6 +565,7 @@ int sort_ue_config(const void *a, const void *b)
|
||||
return -1;
|
||||
else if (fa->rnti < fb->rnti)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -584,8 +587,8 @@ int flexran_agent_ue_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
||||
goto error;
|
||||
|
||||
ue_config_reply_msg->header = header;
|
||||
|
||||
ue_config_reply_msg->n_ue_config = 0;
|
||||
|
||||
if (flexran_agent_get_rrc_xface(mod_id))
|
||||
ue_config_reply_msg->n_ue_config = flexran_get_rrc_num_ues(mod_id);
|
||||
else if (flexran_agent_get_mac_xface(mod_id))
|
||||
@@ -597,7 +600,7 @@ int flexran_agent_ue_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
||||
const int nmac = flexran_get_mac_num_ues(mod_id);
|
||||
ue_config_reply_msg->n_ue_config = nrrc < nmac ? nrrc : nmac;
|
||||
LOG_E(FLEXRAN_AGENT, "%s(): different numbers of UEs in RRC (%d) and MAC (%d), reporting for %lu UEs\n",
|
||||
__func__, nrrc, nmac, ue_config_reply_msg->n_ue_config);
|
||||
__func__, nrrc, nmac, ue_config_reply_msg->n_ue_config);
|
||||
}
|
||||
|
||||
Protocol__FlexUeConfig **ue_config;
|
||||
@@ -608,8 +611,10 @@ int flexran_agent_ue_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
||||
if (ue_config == NULL) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
rnti_t rntis[ue_config_reply_msg->n_ue_config];
|
||||
flexran_get_rrc_rnti_list(mod_id, rntis, ue_config_reply_msg->n_ue_config);
|
||||
|
||||
for (int i = 0; i < ue_config_reply_msg->n_ue_config; i++) {
|
||||
const rnti_t rnti = rntis[i];
|
||||
ue_config[i] = malloc(sizeof(Protocol__FlexUeConfig));
|
||||
@@ -617,11 +622,13 @@ int flexran_agent_ue_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
||||
|
||||
if (flexran_agent_get_rrc_xface(mod_id))
|
||||
flexran_agent_fill_rrc_ue_config(mod_id, rnti, ue_config[i]);
|
||||
|
||||
if (flexran_agent_get_mac_xface(mod_id)) {
|
||||
const int UE_id = flexran_get_mac_ue_id_rnti(mod_id, rnti);
|
||||
flexran_agent_fill_mac_ue_config(mod_id, UE_id, ue_config[i]);
|
||||
}
|
||||
}
|
||||
|
||||
ue_config_reply_msg->ue_config = ue_config;
|
||||
}
|
||||
|
||||
@@ -725,14 +732,20 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F
|
||||
|
||||
if(cell_conf == NULL)
|
||||
goto error;
|
||||
for(int i = 0; i < enb_config_reply_msg->n_cell_config; i++){
|
||||
|
||||
for(int i = 0; i < enb_config_reply_msg->n_cell_config; i++) {
|
||||
cell_conf[i] = malloc(sizeof(Protocol__FlexCellConfig));
|
||||
|
||||
if (!cell_conf[i]) goto error;
|
||||
|
||||
protocol__flex_cell_config__init(cell_conf[i]);
|
||||
|
||||
if (flexran_agent_get_phy_xface(mod_id))
|
||||
flexran_agent_fill_phy_cell_config(mod_id, i, cell_conf[i]);
|
||||
|
||||
if (flexran_agent_get_rrc_xface(mod_id))
|
||||
flexran_agent_fill_rrc_cell_config(mod_id, i, cell_conf[i]);
|
||||
|
||||
if (flexran_agent_get_mac_xface(mod_id))
|
||||
flexran_agent_fill_mac_cell_config(mod_id, i, cell_conf[i]);
|
||||
|
||||
@@ -804,10 +817,11 @@ int flexran_agent_handle_enb_config_reply(mid_t mod_id, const void *params, Prot
|
||||
|
||||
if (enb_config->n_cell_config > 1)
|
||||
LOG_W(FLEXRAN_AGENT, "ignoring slice configs for other cell except cell 0\n");
|
||||
|
||||
if (flexran_agent_get_mac_xface(mod_id) && enb_config->cell_config[0]->slice_config) {
|
||||
prepare_update_slice_config(mod_id, enb_config->cell_config[0]->slice_config);
|
||||
//} else {
|
||||
// initiate_soft_restart(mod_id, enb_config->cell_config[0]);
|
||||
//} else {
|
||||
// initiate_soft_restart(mod_id, enb_config->cell_config[0]);
|
||||
}
|
||||
|
||||
*msg = NULL;
|
||||
|
||||
@@ -3329,7 +3329,7 @@ SLDCH_t *ue_get_sldch(module_id_t Mod_id,int CC_id,frame_t frame_tx,sub_frame_t
|
||||
|
||||
|
||||
SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subframeP) {
|
||||
mac_rlc_status_resp_t rlc_status; //, rlc_status_data;
|
||||
mac_rlc_status_resp_t rlc_status = {0,0,0,0,0}; //, rlc_status_data;
|
||||
uint32_t absSF = (frameP*10)+subframeP;
|
||||
UE_MAC_INST *ue = &UE_mac_inst[module_idP];
|
||||
int rvtab[4] = {0,2,3,1};
|
||||
@@ -3370,10 +3370,7 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
|
||||
(ue->sltx_active == 1)) { // every 4th subframe, check for new data from RLC
|
||||
// 10 PRBs, mcs 19
|
||||
int TBS = 4584/8;
|
||||
int req;
|
||||
|
||||
if (TBS <= rlc_status.bytes_in_buffer) req = TBS;
|
||||
else req = rlc_status.bytes_in_buffer;
|
||||
int req = (TBS <= rlc_status.bytes_in_buffer) ? TBS : rlc_status.bytes_in_buffer;
|
||||
|
||||
if (req>0) {
|
||||
sdu_length = mac_rlc_data_req(module_idP,
|
||||
|
||||
+29
-25
@@ -1460,7 +1460,7 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
|
||||
/* for no gcc warnings */
|
||||
(void)dedicatedInfoNas;
|
||||
LTE_C_RNTI_t *cba_RNTI = NULL;
|
||||
int x2_enabled;
|
||||
int measurements_enabled;
|
||||
uint8_t next_xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id);
|
||||
ue_context_pP->ue_context.Status = RRC_CONNECTED;
|
||||
ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // set rrc inactivity when UE goes into RRC_CONNECTED
|
||||
@@ -1872,7 +1872,8 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
|
||||
dedicatedInfoNASList = NULL;
|
||||
}
|
||||
|
||||
x2_enabled = is_x2ap_enabled();
|
||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||
|
||||
// send LTE_RRCConnectionReconfiguration
|
||||
memset(buffer, 0, RRC_BUF_SIZE);
|
||||
@@ -1887,9 +1888,9 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
|
||||
//#ifdef EXMIMO_IOT
|
||||
// NULL, NULL, NULL,NULL,
|
||||
//#else
|
||||
x2_enabled ? (LTE_MeasObjectToAddModList_t *)MeasObj_list : NULL, // MeasObj_list,
|
||||
x2_enabled ? (LTE_ReportConfigToAddModList_t *)ReportConfig_list : NULL, // ReportConfig_list,
|
||||
x2_enabled ? (LTE_QuantityConfig_t *)quantityConfig : NULL, //quantityConfig,
|
||||
measurements_enabled ? (LTE_MeasObjectToAddModList_t *)MeasObj_list : NULL, // MeasObj_list,
|
||||
measurements_enabled ? (LTE_ReportConfigToAddModList_t *)ReportConfig_list : NULL, // ReportConfig_list,
|
||||
measurements_enabled ? (LTE_QuantityConfig_t *)quantityConfig : NULL, //quantityConfig,
|
||||
(LTE_MeasIdToAddModList_t *)NULL,
|
||||
//#endif
|
||||
(LTE_MAC_MainConfig_t *)ue_context_pP->ue_context.mac_MainConfig,
|
||||
@@ -2798,7 +2799,7 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
|
||||
/* For no gcc warnings */
|
||||
(void) dedicatedInfoNas;
|
||||
LTE_C_RNTI_t *cba_RNTI = NULL;
|
||||
int x2_enabled;
|
||||
int measurements_enabled;
|
||||
uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id,
|
||||
uint8_t cc_id = ue_context_pP->ue_context.primaryCC_id;
|
||||
LTE_UE_EUTRA_Capability_t *UEcap = ue_context_pP->ue_context.UE_Capability;
|
||||
@@ -3340,7 +3341,8 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
|
||||
dedicatedInfoNASList = NULL;
|
||||
}
|
||||
|
||||
x2_enabled = is_x2ap_enabled();
|
||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||
|
||||
memset(buffer, 0, RRC_BUF_SIZE);
|
||||
|
||||
@@ -3352,10 +3354,10 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
|
||||
(LTE_DRB_ToReleaseList_t *) NULL, // DRB2_list,
|
||||
(struct LTE_SPS_Config *) NULL, // *sps_Config,
|
||||
(struct LTE_PhysicalConfigDedicated *) *physicalConfigDedicated,
|
||||
x2_enabled ? (LTE_MeasObjectToAddModList_t *) MeasObj_list : NULL,
|
||||
x2_enabled ? (LTE_ReportConfigToAddModList_t *) ReportConfig_list : NULL,
|
||||
x2_enabled ? (LTE_QuantityConfig_t *) quantityConfig : NULL,
|
||||
x2_enabled ? (LTE_MeasIdToAddModList_t *) MeasId_list : NULL,
|
||||
measurements_enabled ? (LTE_MeasObjectToAddModList_t *) MeasObj_list : NULL,
|
||||
measurements_enabled ? (LTE_ReportConfigToAddModList_t *) ReportConfig_list : NULL,
|
||||
measurements_enabled ? (LTE_QuantityConfig_t *) quantityConfig : NULL,
|
||||
measurements_enabled ? (LTE_MeasIdToAddModList_t *) MeasId_list : NULL,
|
||||
(LTE_MAC_MainConfig_t *) mac_MainConfig,
|
||||
(LTE_MeasGapConfig_t *) NULL,
|
||||
(LTE_MobilityControlInfo_t *) NULL,
|
||||
@@ -3473,7 +3475,7 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
|
||||
/* for no gcc warnings */
|
||||
(void)dedicatedInfoNas;
|
||||
LTE_C_RNTI_t *cba_RNTI = NULL;
|
||||
int x2_enabled;
|
||||
int measurements_enabled;
|
||||
uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id,
|
||||
#ifdef CBA
|
||||
//struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola;
|
||||
@@ -3843,7 +3845,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
|
||||
dedicatedInfoNASList = NULL;
|
||||
}
|
||||
|
||||
x2_enabled = is_x2ap_enabled();
|
||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||
|
||||
memset(buffer, 0, RRC_BUF_SIZE);
|
||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||
@@ -3857,10 +3860,10 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
|
||||
// #ifdef EXMIMO_IOT
|
||||
// NULL, NULL, NULL,NULL,
|
||||
// #else
|
||||
x2_enabled ? (LTE_MeasObjectToAddModList_t *)MeasObj_list : NULL,
|
||||
x2_enabled ? (LTE_ReportConfigToAddModList_t *)ReportConfig_list : NULL,
|
||||
x2_enabled ? (LTE_QuantityConfig_t *)quantityConfig : NULL,
|
||||
x2_enabled ? (LTE_MeasIdToAddModList_t *)MeasId_list : NULL,
|
||||
measurements_enabled ? (LTE_MeasObjectToAddModList_t *)MeasObj_list : NULL,
|
||||
measurements_enabled ? (LTE_ReportConfigToAddModList_t *)ReportConfig_list : NULL,
|
||||
measurements_enabled ? (LTE_QuantityConfig_t *)quantityConfig : NULL,
|
||||
measurements_enabled ? (LTE_MeasIdToAddModList_t *)MeasId_list : NULL,
|
||||
// #endif
|
||||
(LTE_MAC_MainConfig_t *)mac_MainConfig,
|
||||
(LTE_MeasGapConfig_t *)NULL,
|
||||
@@ -4108,7 +4111,7 @@ rrc_eNB_process_MeasurementReport(
|
||||
return;
|
||||
|
||||
/* if X2AP is disabled, do nothing */
|
||||
if (!is_x2ap_enabled())
|
||||
if (!RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2)
|
||||
return;
|
||||
|
||||
LOG_D(RRC, "A3 event is triggered...\n");
|
||||
@@ -4498,7 +4501,7 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
|
||||
/* for no gcc warnings */
|
||||
(void)dedicatedInfoNas;
|
||||
LTE_C_RNTI_t *cba_RNTI = NULL;
|
||||
int x2_enabled;
|
||||
int measurements_enabled;
|
||||
uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id,
|
||||
#ifdef CBA
|
||||
//struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola;
|
||||
@@ -5260,7 +5263,8 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
|
||||
|
||||
#endif
|
||||
|
||||
x2_enabled = is_x2ap_enabled();
|
||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||
|
||||
memset(buffer, 0, RRC_BUF_SIZE);
|
||||
char rrc_buf[1000 /* arbitrary, should be big enough, has to be less than size of return buf by a few bits/bytes */];
|
||||
@@ -5276,10 +5280,10 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
|
||||
//#ifdef EXMIMO_IOT
|
||||
// NULL, NULL, NULL,NULL,
|
||||
//#else
|
||||
x2_enabled ? (LTE_MeasObjectToAddModList_t *)MeasObj_list : NULL,
|
||||
x2_enabled ? (LTE_ReportConfigToAddModList_t *)ReportConfig_list : NULL,
|
||||
x2_enabled ? (LTE_QuantityConfig_t *)quantityConfig : NULL,
|
||||
x2_enabled ? (LTE_MeasIdToAddModList_t *)MeasId_list : NULL,
|
||||
measurements_enabled ? (LTE_MeasObjectToAddModList_t *)MeasObj_list : NULL,
|
||||
measurements_enabled ? (LTE_ReportConfigToAddModList_t *)ReportConfig_list : NULL,
|
||||
measurements_enabled ? (LTE_QuantityConfig_t *)quantityConfig : NULL,
|
||||
measurements_enabled ? (LTE_MeasIdToAddModList_t *)MeasId_list : NULL,
|
||||
//#endif
|
||||
(LTE_MAC_MainConfig_t *)mac_MainConfig,
|
||||
(LTE_MeasGapConfig_t *)NULL,
|
||||
@@ -7458,7 +7462,7 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id)
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX, VCD_FUNCTION_IN);
|
||||
|
||||
if (is_x2ap_enabled()) {
|
||||
if (RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2) {
|
||||
/* send a tick to x2ap */
|
||||
msg = itti_alloc_new_message(TASK_RRC_ENB, X2AP_SUBFRAME_PROCESS);
|
||||
itti_send_msg_to_task(TASK_X2AP, ctxt_pP->module_id, msg);
|
||||
|
||||
@@ -257,23 +257,28 @@ rrc_eNB_S1AP_get_ue_ids(
|
||||
}
|
||||
|
||||
if (ue_desc_p != NULL) {
|
||||
result = rrc_eNB_S1AP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, eNB_ue_s1ap_id);
|
||||
if (ue_desc_p->ue_initial_id != UE_INITIAL_ID_INVALID) {
|
||||
result = rrc_eNB_S1AP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, eNB_ue_s1ap_id);
|
||||
|
||||
if (result != NULL) {
|
||||
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ENB_INSTANCE_TO_MODULE_ID(instance)], result->ue_rnti);
|
||||
if (result != NULL) {
|
||||
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ENB_INSTANCE_TO_MODULE_ID(instance)], result->ue_rnti);
|
||||
|
||||
if ((ue_context_p != NULL) && (ue_context_p->ue_context.eNB_ue_s1ap_id == 0)) {
|
||||
ue_context_p->ue_context.eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
||||
} else {
|
||||
LOG_E(RRC, "[eNB %ld] Incoherence between RRC context and S1AP context (%d != %d) for UE RNTI %d or UE RRC context doesn't exist\n",
|
||||
rrc_instance_pP - RC.rrc[0],
|
||||
(ue_context_p==NULL)?99999:ue_context_p->ue_context.eNB_ue_s1ap_id,
|
||||
eNB_ue_s1ap_id,
|
||||
result->ue_rnti);
|
||||
if ((ue_context_p != NULL) && (ue_context_p->ue_context.eNB_ue_s1ap_id == 0)) {
|
||||
ue_context_p->ue_context.eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
||||
} else {
|
||||
LOG_E(RRC, "[eNB %ld] Incoherence between RRC context and S1AP context (%d != %d) for UE RNTI %d or UE RRC context doesn't exist\n",
|
||||
rrc_instance_pP - RC.rrc[0],
|
||||
(ue_context_p==NULL)?99999:ue_context_p->ue_context.eNB_ue_s1ap_id,
|
||||
eNB_ue_s1ap_id,
|
||||
result->ue_rnti);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LOG_E(S1AP, "[eNB %ld] S1AP context found but ue_initial_id is invalid (0)\n", rrc_instance_pP - RC.rrc[0]);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
LOG_E(S1AP, "[eNB %ld] In hashtable_get, couldn't find in s1ap_id2_s1ap_ids eNB_ue_s1ap_id %"PRIu32", even when looking at S1AP context\n",
|
||||
LOG_E(S1AP, "[eNB %ld] In hashtable_get, couldn't find in s1ap_id2_s1ap_ids eNB_ue_s1ap_id %"PRIu32", because ue_initial_id is invalid in S1AP context\n",
|
||||
rrc_instance_pP - RC.rrc[0],
|
||||
eNB_ue_s1ap_id);
|
||||
return NULL;
|
||||
|
||||
@@ -37,6 +37,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -49,6 +49,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -36,6 +36,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -360,6 +360,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -142,6 +142,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -178,6 +178,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -142,6 +142,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -178,6 +178,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
@@ -145,6 +145,8 @@ eNBs =
|
||||
}
|
||||
);
|
||||
|
||||
enable_measurement_reports = "no";
|
||||
|
||||
///X2
|
||||
enable_x2 = "no";
|
||||
t_reloc_prep = 1000; /* unit: millisecond */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user