Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG UE
Commits
274cb07b
Commit
274cb07b
authored
May 21, 2019
by
yilmazt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes to fix errors #1
parent
0281df6d
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
93 additions
and
651 deletions
+93
-651
ci-scripts/main.py
ci-scripts/main.py
+11
-131
openair1/PHY/defs_RU.h
openair1/PHY/defs_RU.h
+36
-38
openair1/PHY/defs_eNB.h
openair1/PHY/defs_eNB.h
+16
-452
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+22
-22
targets/RT/USER/nr-ru.c
targets/RT/USER/nr-ru.c
+8
-8
No files found.
ci-scripts/main.py
View file @
274cb07b
...
@@ -2471,19 +2471,14 @@ class SSHConnection():
...
@@ -2471,19 +2471,14 @@ class SSHConnection():
if
(
not
os
.
path
.
isfile
(
'./'
+
UElogFile
)):
if
(
not
os
.
path
.
isfile
(
'./'
+
UElogFile
)):
return
-
1
return
-
1
ue_log_file
=
open
(
'./'
+
UElogFile
,
'r'
)
ue_log_file
=
open
(
'./'
+
UElogFile
,
'r'
)
<<<<<<<
HEAD
exitSignalReceived
=
False
exitSignalReceived
=
False
=======
>>>>>>>
origin
/
develop
-
nr
foundAssertion
=
False
foundAssertion
=
False
msgAssertion
=
''
msgAssertion
=
''
msgLine
=
0
msgLine
=
0
foundSegFault
=
False
foundSegFault
=
False
foundRealTimeIssue
=
False
foundRealTimeIssue
=
False
<<<<<<<
HEAD
uciStatMsgCount
=
0
uciStatMsgCount
=
0
pdcpDataReqFailedCount
=
0
pdcpDataReqFailedCount
=
0
badDciCount
=
0
rrcConnectionRecfgComplete
=
0
rrcConnectionRecfgComplete
=
0
no_cell_sync_found
=
False
no_cell_sync_found
=
False
mib_found
=
False
mib_found
=
False
...
@@ -2505,35 +2500,11 @@ class SSHConnection():
...
@@ -2505,35 +2500,11 @@ class SSHConnection():
foundAssertion
=
True
foundAssertion
=
True
result
=
re
.
search
(
'LLL'
,
str
(
line
))
result
=
re
.
search
(
'LLL'
,
str
(
line
))
if
result
is
not
None
and
not
exitSignalReceived
:
if
result
is
not
None
and
not
exitSignalReceived
:
=======
rlcDiscardBuffer
=
0
rachCanceledProcedure
=
0
uciStatMsgCount
=
0
pdcpFailure
=
0
ulschFailure
=
0
no_cell_sync_found
=
False
mib_found
=
False
frequency_found
=
False
self
.
htmlUEFailureMsg
=
''
for
line
in
ue_log_file
.
readlines
():
result
=
re
.
search
(
'[Ss]egmentation [Ff]ault'
,
str
(
line
))
if
result
is
not
None
:
foundSegFault
=
True
result
=
re
.
search
(
'[Cc]ore [dD]ump'
,
str
(
line
))
if
result
is
not
None
:
foundSegFault
=
True
result
=
re
.
search
(
'[Aa]ssertion'
,
str
(
line
))
if
result
is
not
None
:
foundAssertion
=
True
result
=
re
.
search
(
'LLL'
,
str
(
line
))
if
result
is
not
None
:
>>>>>>>
origin
/
develop
-
nr
foundRealTimeIssue
=
True
foundRealTimeIssue
=
True
if
foundAssertion
and
(
msgLine
<
3
):
if
foundAssertion
and
(
msgLine
<
3
):
msgLine
+=
1
msgLine
+=
1
msgAssertion
+=
str
(
line
)
msgAssertion
+=
str
(
line
)
result
=
re
.
search
(
'uci->stat'
,
str
(
line
))
result
=
re
.
search
(
'uci->stat'
,
str
(
line
))
<<<<<<<
HEAD
if
result
is
not
None
and
not
exitSignalReceived
:
if
result
is
not
None
and
not
exitSignalReceived
:
uciStatMsgCount
+=
1
uciStatMsgCount
+=
1
result
=
re
.
search
(
'PDCP data request failed'
,
str
(
line
))
result
=
re
.
search
(
'PDCP data request failed'
,
str
(
line
))
...
@@ -2545,10 +2516,6 @@ class SSHConnection():
...
@@ -2545,10 +2516,6 @@ class SSHConnection():
result
=
re
.
search
(
'Generating RRCConnectionReconfigurationComplete'
,
str
(
line
))
result
=
re
.
search
(
'Generating RRCConnectionReconfigurationComplete'
,
str
(
line
))
if
result
is
not
None
:
if
result
is
not
None
:
rrcConnectionRecfgComplete
+=
1
rrcConnectionRecfgComplete
+=
1
=======
if
result
is
not
None
:
uciStatMsgCount
+=
1
>>>>>>>
origin
/
develop
-
nr
# No cell synchronization found, abandoning
# No cell synchronization found, abandoning
result
=
re
.
search
(
'No cell synchronization found, abandoning'
,
str
(
line
))
result
=
re
.
search
(
'No cell synchronization found, abandoning'
,
str
(
line
))
if
result
is
not
None
:
if
result
is
not
None
:
...
@@ -2586,7 +2553,6 @@ class SSHConnection():
...
@@ -2586,7 +2553,6 @@ class SSHConnection():
frequency_found
=
True
frequency_found
=
True
except
Exception
as
e
:
except
Exception
as
e
:
logging
.
error
(
'
\033
[91m'
+
"Measured Carrier Frequency not found"
+
'
\033
[0m'
)
logging
.
error
(
'
\033
[91m'
+
"Measured Carrier Frequency not found"
+
'
\033
[0m'
)
<<<<<<<
HEAD
result
=
re
.
search
(
"PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC"
,
str
(
line
))
result
=
re
.
search
(
"PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC"
,
str
(
line
))
if
result
is
not
None
and
(
not
plmn_found
):
if
result
is
not
None
and
(
not
plmn_found
):
try
:
try
:
...
@@ -2596,8 +2562,6 @@ class SSHConnection():
...
@@ -2596,8 +2562,6 @@ class SSHConnection():
plmn_found
=
True
plmn_found
=
True
except
Exception
as
e
:
except
Exception
as
e
:
logging
.
error
(
'
\033
[91m'
+
"PLMN not found"
+
'
\033
[0m'
)
logging
.
error
(
'
\033
[91m'
+
"PLMN not found"
+
'
\033
[0m'
)
=======
>>>>>>>
origin
/
develop
-
nr
result
=
re
.
search
(
"Found (?P<operator>[\w,\s]{1,15}) \(name from internal table\)"
,
str
(
line
))
result
=
re
.
search
(
"Found (?P<operator>[\w,\s]{1,15}) \(name from internal table\)"
,
str
(
line
))
if
result
is
not
None
:
if
result
is
not
None
:
try
:
try
:
...
@@ -2633,18 +2597,14 @@ class SSHConnection():
...
@@ -2633,18 +2597,14 @@ class SSHConnection():
except
Exception
as
e
:
except
Exception
as
e
:
logging
.
error
(
'
\033
[91m'
+
" AllowedMeasBandwidth not found"
+
'
\033
[0m'
)
logging
.
error
(
'
\033
[91m'
+
" AllowedMeasBandwidth not found"
+
'
\033
[0m'
)
ue_log_file
.
close
()
ue_log_file
.
close
()
<<<<<<<
HEAD
if
rrcConnectionRecfgComplete
>
0
:
if
rrcConnectionRecfgComplete
>
0
:
statMsg
=
'UE connected to eNB ('
+
str
(
rrcConnectionRecfgComplete
)
+
' RRCConnectionReconfigurationComplete message(s) generated)'
statMsg
=
'UE connected to eNB ('
+
str
(
rrcConnectionRecfgComplete
)
+
' RRCConnectionReconfigurationComplete message(s) generated)'
logging
.
debug
(
'
\033
[94m'
+
statMsg
+
'
\033
[0m'
)
logging
.
debug
(
'
\033
[94m'
+
statMsg
+
'
\033
[0m'
)
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
=======
>>>>>>>
origin
/
develop
-
nr
if
uciStatMsgCount
>
0
:
if
uciStatMsgCount
>
0
:
statMsg
=
'UE showed '
+
str
(
uciStatMsgCount
)
+
' "uci->stat" message(s)'
statMsg
=
'UE showed '
+
str
(
uciStatMsgCount
)
+
' "uci->stat" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
<<<<<<<
HEAD
if
pdcpDataReqFailedCount
>
0
:
if
pdcpDataReqFailedCount
>
0
:
statMsg
=
'UE showed '
+
str
(
pdcpDataReqFailedCount
)
+
' "PDCP data request failed" message(s)'
statMsg
=
'UE showed '
+
str
(
pdcpDataReqFailedCount
)
+
' "PDCP data request failed" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
...
@@ -2653,20 +2613,6 @@ class SSHConnection():
...
@@ -2653,20 +2613,6 @@ class SSHConnection():
statMsg
=
'UE showed '
+
str
(
badDciCount
)
+
' "bad DCI 1A" message(s)'
statMsg
=
'UE showed '
+
str
(
badDciCount
)
+
' "bad DCI 1A" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
=======
if
pdcpFailure
>
0
:
statMsg
=
'UE showed '
+
str
(
pdcpFailure
)
+
' "PDCP Out of Resources" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
if
ulschFailure
>
0
:
statMsg
=
'UE showed '
+
str
(
ulschFailure
)
+
' "ULSCH in error in round" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
statMsg
+
'
\n
'
if
rachCanceledProcedure
>
0
:
rachMsg
=
'UE cancelled '
+
str
(
rachCanceledProcedure
)
+
' RA procedure(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
rachMsg
+
'
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
rachMsg
+
'
\n
'
>>>>>>>
origin
/
develop
-
nr
if
foundSegFault
:
if
foundSegFault
:
logging
.
debug
(
'
\u001B
[1;37;41m UE ended with a Segmentation Fault!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m UE ended with a Segmentation Fault!
\u001B
[0m'
)
return
ENB_PROCESS_SEG_FAULT
return
ENB_PROCESS_SEG_FAULT
...
@@ -2684,48 +2630,22 @@ class SSHConnection():
...
@@ -2684,48 +2630,22 @@ class SSHConnection():
if
no_cell_sync_found
and
not
mib_found
:
if
no_cell_sync_found
and
not
mib_found
:
logging
.
debug
(
'
\u001B
[1;37;41m UE could not synchronize !
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m UE could not synchronize !
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
'UE could not synchronize!
\n
'
self
.
htmlUEFailureMsg
+=
'UE could not synchronize!
\n
'
<<<<<<<
HEAD
return
UE_PROCESS_COULD_NOT_SYNC
return
UE_PROCESS_COULD_NOT_SYNC
=======
return
UE_PROCESS_COULD_NOT_SYNC
if
rlcDiscardBuffer
>
0
:
rlcMsg
=
'UE RLC discarded '
+
str
(
rlcDiscardBuffer
)
+
' buffer(s)'
logging
.
debug
(
'
\u001B
[1;37;41m '
+
rlcMsg
+
'
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
rlcMsg
+
'
\n
'
return
ENB_PROCESS_REALTIME_ISSUE
>>>>>>>
origin
/
develop
-
nr
return
0
return
0
def
TerminateeNB
(
self
):
def
TerminateeNB
(
self
):
self
.
open
(
self
.
eNBIPAddress
,
self
.
eNBUserName
,
self
.
eNBPassword
)
self
.
open
(
self
.
eNBIPAddress
,
self
.
eNBUserName
,
self
.
eNBPassword
)
self
.
command
(
'cd '
+
self
.
eNBSourceCodePath
+
'/cmake_targets'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
eNBSourceCodePath
+
'/cmake_targets'
,
'\$'
,
5
)
<<<<<<<
HEAD
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'
lte
-softmodem'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'-softmodem'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S daemon --name=enb'
+
str
(
self
.
eNB_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S daemon --name=enb'
+
str
(
self
.
eNB_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S killall --signal SIGINT lte-softmodem || true'
,
'\$'
,
5
)
=======
#to use daemon on CentOS we need to source the function
#linux_distro = platform.linux_distribution()[0]
#if re.match('(.*)CentOS(.*)', linux_distro, re.IGNORECASE):
#self.command('source /etc/init.d/functions', '\$', 5)
#use nohup instead of daemon
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S daemon --name=enb'
+
str
(
self
.
eNB_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'rm -f my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S killall --signal SIGINT -r .*-softmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S killall --signal SIGINT -r .*-softmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
5
)
time
.
sleep
(
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep softmodem | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep softmodem | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'-softmodem'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'-softmodem'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S killall --signal SIGKILL -r .*-softmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S killall --signal SIGKILL -r .*-softmodem || true'
,
'\$'
,
5
)
>>>>>>>
origin
/
develop
-
nr
time
.
sleep
(
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'lte-softmodem'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S killall --signal SIGKILL lte-softmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
self
.
command
(
'rm -f my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
command
(
'rm -f my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
close
()
self
.
close
()
# If tracer options is on, stopping tshark on EPC side
# If tracer options is on, stopping tshark on EPC side
...
@@ -2871,26 +2791,9 @@ class SSHConnection():
...
@@ -2871,26 +2791,9 @@ class SSHConnection():
def
TerminateOAIUE
(
self
):
def
TerminateOAIUE
(
self
):
self
.
open
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
)
self
.
open
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
)
self
.
command
(
'cd '
+
self
.
UESourceCodePath
+
'/cmake_targets'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
UESourceCodePath
+
'/cmake_targets'
,
'\$'
,
5
)
<<<<<<<
HEAD
self
.
command
(
'ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'lte-uesoftmodem'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S daemon --name=ue'
+
str
(
self
.
UE_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGINT lte-uesoftmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
5
)
self
.
command
(
'ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'lte
-uesoftmodem'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'
-uesoftmodem'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGKILL lte-uesoftmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
self
.
command
(
'rm -f my-lte-uesoftmodem-run'
+
str
(
self
.
UE_instance
)
+
'.sh'
,
'\$'
,
5
)
=======
#to use daemon on CentOS we need to source the function
#linux_distro = platform.linux_distribution()[0]
#if re.match('(.*)CentOS(.*)', linux_distro, re.IGNORECASE):
#self.command('source /etc/init.d/functions', '\$', 5)
#self.command('echo ' + self.UEPassword + ' | sudo -S daemon --name=ue' + str(self.UE_instance) + '_daemon --stop', '\$', 5)
self
.
command
(
'rm -f my-lte-uesoftmodem-run'
+
str
(
self
.
UE_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGINT -r .*-uesoftmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGINT -r .*-uesoftmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
5
)
time
.
sleep
(
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep uesoftmodem | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep uesoftmodem | grep -v grep'
,
'\$'
,
5
)
...
@@ -2898,25 +2801,19 @@ class SSHConnection():
...
@@ -2898,25 +2801,19 @@ class SSHConnection():
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGKILL -r .*-uesoftmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGKILL -r .*-uesoftmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
5
)
time
.
sleep
(
5
)
>>>>>>>
origin
/
develop
-
nr
self
.
command
(
'rm -f my-lte-uesoftmodem-run'
+
str
(
self
.
UE_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
close
()
self
.
close
()
result
=
re
.
search
(
'ue_'
,
str
(
self
.
UELogFile
))
result
=
re
.
search
(
'ue_'
,
str
(
self
.
UELogFile
))
if
result
is
not
None
:
if
result
is
not
None
:
copyin_res
=
self
.
copyin
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
,
self
.
UESourceCodePath
+
'/cmake_targets/'
+
self
.
UELogFile
,
'.'
)
copyin_res
=
self
.
copyin
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
,
self
.
UESourceCodePath
+
'/cmake_targets/'
+
self
.
UELogFile
,
'.'
)
if
(
copyin_res
==
-
1
):
if
(
copyin_res
==
-
1
):
logging
.
debug
(
'
\u001B
[1;37;41m Could not copy UE logfile to analyze it!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m Could not copy UE logfile to analyze it!
\u001B
[0m'
)
<<<<<<<
HEAD
self
.
htmlUEFailureMsg
=
'Could not copy UE logfile to analyze it!'
self
.
htmlUEFailureMsg
=
'Could not copy UE logfile to analyze it!'
self
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
UE_PROCESS_NOLOGFILE_TO_ANALYZE
,
'UE'
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
UE_PROCESS_NOLOGFILE_TO_ANALYZE
,
'UE'
)
=======
optionsMsg
=
'<pre style="background-color:white">Could not copy UE logfile to analyze it!</pre>'
self
.
CreateHtmlTestRow
(
optionsMsg
,
'KO'
,
UE_PROCESS_NOLOGFILE_TO_ANALYZE
,
'UE'
)
>>>>>>>
origin
/
develop
-
nr
self
.
UELogFile
=
''
self
.
UELogFile
=
''
return
return
logging
.
debug
(
'
\u001B
[1m Analyzing UE logfile
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m Analyzing UE logfile
\u001B
[0m'
)
logStatus
=
self
.
AnalyzeLogFile_UE
(
self
.
UELogFile
)
logStatus
=
self
.
AnalyzeLogFile_UE
(
self
.
UELogFile
)
<<<<<<<
HEAD
result
=
re
.
search
(
'--no-L2-connect'
,
str
(
self
.
Initialize_OAI_UE_args
))
result
=
re
.
search
(
'--no-L2-connect'
,
str
(
self
.
Initialize_OAI_UE_args
))
if
result
is
not
None
:
if
result
is
not
None
:
ueAction
=
'Sniffing'
ueAction
=
'Sniffing'
...
@@ -2941,23 +2838,6 @@ class SSHConnection():
...
@@ -2941,23 +2838,6 @@ class SSHConnection():
else
:
else
:
self
.
htmlUEFailureMsg
=
'No Log File to analyze!'
self
.
htmlUEFailureMsg
=
'No Log File to analyze!'
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
=======
if
(
logStatus
<
0
):
optionsMsg
=
'<pre style="background-color:white"><b>Sniffing Unsuccessful</b>
\n
'
optionsMsg
+=
self
.
htmlUEFailureMsg
optionsMsg
+=
'</pre>'
self
.
CreateHtmlTestRow
(
optionsMsg
,
'KO'
,
logStatus
,
'UE'
)
self
.
CreateHtmlTabFooter
(
False
)
sys
.
exit
(
1
)
else
:
optionsMsg
=
'<pre style="background-color:white"><b>Sniffing Successful</b>
\n
'
optionsMsg
+=
self
.
htmlUEFailureMsg
optionsMsg
+=
'</pre>'
self
.
CreateHtmlTestRow
(
optionsMsg
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
UELogFile
=
''
else
:
self
.
CreateHtmlTestRow
(
'<pre style="background-color:white">No Log File to analyze</pre>'
,
'OK'
,
ALL_PROCESSES_OK
)
>>>>>>>
origin
/
develop
-
nr
def
AutoTerminateUEandeNB
(
self
):
def
AutoTerminateUEandeNB
(
self
):
if
(
self
.
ADBIPAddress
!=
'none'
):
if
(
self
.
ADBIPAddress
!=
'none'
):
...
...
openair1/PHY/defs_RU.h
View file @
274cb07b
...
@@ -35,6 +35,7 @@
...
@@ -35,6 +35,7 @@
#define MAX_BANDS_PER_RRU 4
#define MAX_BANDS_PER_RRU 4
#define MAX_RRU_CONFIG_SIZE 1024
#ifdef OCP_FRAMEWORK
#ifdef OCP_FRAMEWORK
...
@@ -364,6 +365,10 @@ typedef struct RU_t_s{
...
@@ -364,6 +365,10 @@ typedef struct RU_t_s{
struct
NR_DL_FRAME_PARMS
*
nr_frame_parms
;
struct
NR_DL_FRAME_PARMS
*
nr_frame_parms
;
///timing offset used in TDD
///timing offset used in TDD
int
N_TA_offset
;
int
N_TA_offset
;
/// SF extension used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
int
sf_extension
;
/// "end of burst delay" used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
int
end_of_burst_delay
;
/// RF device descriptor
/// RF device descriptor
openair0_device
rfdevice
;
openair0_device
rfdevice
;
/// HW configuration
/// HW configuration
...
@@ -373,7 +378,7 @@ typedef struct RU_t_s{
...
@@ -373,7 +378,7 @@ typedef struct RU_t_s{
int
num_gNB
;
int
num_gNB
;
/// list of NBs using this RU
/// list of NBs using this RU
struct
PHY_VARS_eNB_s
*
eNB_list
[
NUMBER_OF_eNB_MAX
];
struct
PHY_VARS_eNB_s
*
eNB_list
[
NUMBER_OF_eNB_MAX
];
struct
PHY_VARS_gNB_s
*
gNB_list
[
NUMBER_OF_
e
NB_MAX
];
struct
PHY_VARS_gNB_s
*
gNB_list
[
NUMBER_OF_
g
NB_MAX
];
/// Mapping of antenna ports to RF chain index
/// Mapping of antenna ports to RF chain index
openair0_rf_map
rf_map
;
openair0_rf_map
rf_map
;
/// IF device descriptor
/// IF device descriptor
...
@@ -399,7 +404,8 @@ typedef struct RU_t_s{
...
@@ -399,7 +404,8 @@ typedef struct RU_t_s{
/// function pointer to release function for radio interface
/// function pointer to release function for radio interface
int
(
*
stop_rf
)(
struct
RU_t_s
*
ru
);
int
(
*
stop_rf
)(
struct
RU_t_s
*
ru
);
/// function pointer to initialization function for radio interface
/// function pointer to initialization function for radio interface
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
);
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_eNB_s
*
eNB
);
int
(
*
nr_start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
);
/// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
/// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
void
(
*
feprx
)(
struct
RU_t_s
*
ru
);
void
(
*
feprx
)(
struct
RU_t_s
*
ru
);
/// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
/// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
...
@@ -410,12 +416,11 @@ typedef struct RU_t_s{
...
@@ -410,12 +416,11 @@ typedef struct RU_t_s{
int
(
*
wakeup_rxtx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
);
int
(
*
wakeup_rxtx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
);
int
(
*
nr_wakeup_rxtx
)(
struct
PHY_VARS_gNB_s
*
gNB
,
struct
RU_t_s
*
ru
);
int
(
*
nr_wakeup_rxtx
)(
struct
PHY_VARS_gNB_s
*
gNB
,
struct
RU_t_s
*
ru
);
/// function pointer to wakeup routine in lte-enb/nr-gnb.
/// function pointer to wakeup routine in lte-enb/nr-gnb.
void
(
*
wakeup_prach_eNB
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
void
(
*
wakeup_prach_eNB
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
void
(
*
wakeup_prach_gNB
)(
struct
PHY_VARS_gNB_s
*
gNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
void
(
*
wakeup_prach_gNB
)(
struct
PHY_VARS_gNB_s
*
gNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// function pointer to wakeup routine in lte-enb.
/// function pointer to wakeup routine in lte-enb.
void
(
*
wakeup_prach_eNB_br
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
void
(
*
wakeup_prach_eNB_br
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
#endif
#endif
/// function pointer to NB entry routine
/// function pointer to NB entry routine
...
@@ -446,7 +451,7 @@ typedef struct RU_t_s{
...
@@ -446,7 +451,7 @@ typedef struct RU_t_s{
RU_COMMON
common
;
RU_COMMON
common
;
/// beamforming weight vectors per eNB
/// beamforming weight vectors per eNB
int32_t
**
beam_weights
[
NUMBER_OF_eNB_MAX
+
1
][
15
];
int32_t
**
beam_weights
[
NUMBER_OF_eNB_MAX
+
1
][
15
];
/// beamforming weight vectors per
e
NB
/// beamforming weight vectors per
g
NB
int32_t
**
nrbeam_weights
[
NUMBER_OF_gNB_MAX
+
1
][
16
];
int32_t
**
nrbeam_weights
[
NUMBER_OF_gNB_MAX
+
1
][
16
];
/// received frequency-domain signal for PRACH (IF4p5 RRU)
/// received frequency-domain signal for PRACH (IF4p5 RRU)
int16_t
**
prach_rxsigF
;
int16_t
**
prach_rxsigF
;
...
@@ -460,12 +465,8 @@ typedef struct RU_t_s{
...
@@ -460,12 +465,8 @@ typedef struct RU_t_s{
RU_proc_t
proc
;
RU_proc_t
proc
;
/// stats thread pthread descriptor
/// stats thread pthread descriptor
pthread_t
ru_stats_thread
;
pthread_t
ru_stats_thread
;
}
RU_t
;
}
RU_t
;
#define MAX_RRU_CONFIG_SIZE 1024
typedef
enum
{
typedef
enum
{
RAU_tick
=
0
,
RAU_tick
=
0
,
RRU_capabilities
=
1
,
RRU_capabilities
=
1
,
...
@@ -487,8 +488,6 @@ typedef enum {
...
@@ -487,8 +488,6 @@ typedef enum {
MAX_FH_FMTs
=
4
MAX_FH_FMTs
=
4
}
FH_fmt_options_t
;
}
FH_fmt_options_t
;
#define MAX_BANDS_PER_RRU 4
typedef
struct
RRU_capabilities_s
{
typedef
struct
RRU_capabilities_s
{
/// Fronthaul format
/// Fronthaul format
FH_fmt_options_t
FH_fmt
;
FH_fmt_options_t
FH_fmt
;
...
@@ -513,7 +512,6 @@ typedef struct RRU_capabilities_s {
...
@@ -513,7 +512,6 @@ typedef struct RRU_capabilities_s {
}
RRU_capabilities_t
;
}
RRU_capabilities_t
;
typedef
struct
RRU_config_s
{
typedef
struct
RRU_config_s
{
/// Fronthaul format
/// Fronthaul format
RU_if_south_t
FH_fmt
;
RU_if_south_t
FH_fmt
;
/// number of EUTRA bands (<=4) configured in RRU
/// number of EUTRA bands (<=4) configured in RRU
...
...
openair1/PHY/defs_eNB.h
View file @
274cb07b
...
@@ -34,30 +34,26 @@
...
@@ -34,30 +34,26 @@
#define _GNU_SOURCE
#define _GNU_SOURCE
#include <execinfo.h>
#include <getopt.h>
#include <malloc.h>
#include <math.h>
#include <pthread.h>
#include <sched.h>
#include <sched.h>
#include <signal.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <string.h>
#include <unistd.h>
#include <linux/sched.h>
#include <sys/ioctl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/mman.h>
#include <linux/sched.h>
#include <signal.h>
#include <execinfo.h>
#include <getopt.h>
#include <sys/sysinfo.h>
#include <sys/sysinfo.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <math.h>
#include "common_lib.h"
#include "common_lib.h"
#include "msc.h"
#include "msc.h"
#include "defs_common.h"
#include "defs_common.h"
#include "impl_defs_top.h"
#include "impl_defs_top.h"
#include "PHY/TOOLS/time_meas.h"
#include "PHY/TOOLS/time_meas.h"
...
@@ -66,445 +62,19 @@
...
@@ -66,445 +62,19 @@
#include "platform_types.h"
#include "platform_types.h"
#include "PHY/LTE_TRANSPORT/transport_common.h"
#include "PHY/LTE_TRANSPORT/transport_common.h"
#include "PHY/LTE_TRANSPORT/transport_eNB.h"
#include "PHY/LTE_TRANSPORT/transport_eNB.h"
#include <pthread.h>
#include "openair2/PHY_INTERFACE/IF_Module.h"
#include "openair2/PHY_INTERFACE/IF_Module.h"
#define MAX_NUM_RU_PER_eNB 64
typedef
struct
RU_proc_t_s
{
/// Pointer to associated RU descriptor
struct
RU_t_s
*
ru
;
/// timestamp received from HW
openair0_timestamp
timestamp_rx
;
/// timestamp to send to "slave rru"
openair0_timestamp
timestamp_tx
;
/// subframe to act upon for reception
int
subframe_rx
;
/// subframe to act upon for transmission
int
subframe_tx
;
/// subframe to act upon for reception of prach
int
subframe_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// subframe to act upon for reception of prach BL/CE UEs
int
subframe_prach_br
;
#endif
/// frame to act upon for reception
int
frame_rx
;
/// frame to act upon for transmission
int
frame_tx
;
/// unwrapped frame count
int
frame_tx_unwrap
;
/// frame to act upon for reception of prach
int
frame_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// frame to act upon for reception of prach
int
frame_prach_br
;
#endif
/// frame offset for slave RUs (to correct for frame asynchronism at startup)
int
frame_offset
;
/// \brief Instance count for FH processing thread.
/// \internal This variable is protected by \ref mutex_FH.
int
instance_cnt_FH
;
int
instance_cnt_FH1
;
/// \internal This variable is protected by \ref mutex_prach.
int
instance_cnt_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// \internal This variable is protected by \ref mutex_prach.
int
instance_cnt_prach_br
;
#endif
/// \internal This variable is protected by \ref mutex_synch.
int
instance_cnt_synch
;
/// \internal This variable is protected by \ref mutex_eNBs.
int
instance_cnt_eNBs
;
/// \brief Instance count for rx processing thread.
/// \internal This variable is protected by \ref mutex_asynch_rxtx.
int
instance_cnt_asynch_rxtx
;
/// \internal This variable is protected by \ref mutex_fep
int
instance_cnt_fep
;
/// \internal This variable is protected by \ref mutex_feptx
int
instance_cnt_feptx
;
/// This varible is protected by \ref mutex_emulatedRF
int
instance_cnt_emulateRF
;
/// pthread structure for RU FH processing thread
pthread_t
pthread_FH
;
pthread_t
pthread_FH1
;
/// pthread structure for RU prach processing thread
pthread_t
pthread_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// pthread structure for RU prach processing thread BL/CE UEs
pthread_t
pthread_prach_br
;
#endif
/// pthread struct for RU synch thread
pthread_t
pthread_synch
;
/// pthread struct for RU RX FEP worker thread
pthread_t
pthread_fep
;
/// pthread struct for RU TX FEP worker thread
pthread_t
pthread_feptx
;
/// pthread struct for emulated RF
pthread_t
pthread_emulateRF
;
/// pthread structure for asychronous RX/TX processing thread
pthread_t
pthread_asynch_rxtx
;
/// flag to indicate first RX acquisition
int
first_rx
;
/// flag to indicate first TX transmission
int
first_tx
;
/// pthread attributes for RU FH processing thread
pthread_attr_t
attr_FH
;
pthread_attr_t
attr_FH1
;
/// pthread attributes for RU prach
pthread_attr_t
attr_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// pthread attributes for RU prach BL/CE UEs
pthread_attr_t
attr_prach_br
;
#endif
/// pthread attributes for RU synch thread
pthread_attr_t
attr_synch
;
/// pthread attributes for asynchronous RX thread
pthread_attr_t
attr_asynch_rxtx
;
/// pthread attributes for worker fep thread
pthread_attr_t
attr_fep
;
/// pthread attributes for worker feptx thread
pthread_attr_t
attr_feptx
;
/// pthread attributes for emulated RF
pthread_attr_t
attr_emulateRF
;
/// scheduling parameters for RU FH thread
struct
sched_param
sched_param_FH
;
struct
sched_param
sched_param_FH1
;
/// scheduling parameters for RU prach thread
struct
sched_param
sched_param_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// scheduling parameters for RU prach thread BL/CE UEs
struct
sched_param
sched_param_prach_br
;
#endif
/// scheduling parameters for RU synch thread
struct
sched_param
sched_param_synch
;
/// scheduling parameters for asynch_rxtx thread
struct
sched_param
sched_param_asynch_rxtx
;
/// condition variable for RU FH thread
pthread_cond_t
cond_FH
;
pthread_cond_t
cond_FH1
;
/// condition variable for RU prach thread
pthread_cond_t
cond_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// condition variable for RU prach thread BL/CE UEs
pthread_cond_t
cond_prach_br
;
#endif
/// condition variable for RU synch thread
pthread_cond_t
cond_synch
;
/// condition variable for asynch RX/TX thread
pthread_cond_t
cond_asynch_rxtx
;
/// condition variable for RU RX FEP thread
pthread_cond_t
cond_fep
;
/// condition variable for RU TX FEP thread
pthread_cond_t
cond_feptx
;
/// condition variable for emulated RF
pthread_cond_t
cond_emulateRF
;
/// condition variable for eNB signal
pthread_cond_t
cond_eNBs
;
/// mutex for RU FH
pthread_mutex_t
mutex_FH
;
pthread_mutex_t
mutex_FH1
;
/// mutex for RU prach
pthread_mutex_t
mutex_prach
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// mutex for RU prach BL/CE UEs
pthread_mutex_t
mutex_prach_br
;
#endif
/// mutex for RU synch
pthread_mutex_t
mutex_synch
;
/// mutex for eNB signal
pthread_mutex_t
mutex_eNBs
;
/// mutex for asynch RX/TX thread
pthread_mutex_t
mutex_asynch_rxtx
;
/// mutex for fep RX worker thread
pthread_mutex_t
mutex_fep
;
/// mutex for fep TX worker thread
pthread_mutex_t
mutex_feptx
;
/// mutex for emulated RF thread
pthread_mutex_t
mutex_emulateRF
;
/// symbol mask for IF4p5 reception per subframe
uint32_t
symbol_mask
[
10
];
/// number of slave threads
int
num_slaves
;
/// array of pointers to slaves
struct
RU_proc_t_s
**
slave_proc
;
#ifdef PHY_TX_THREAD
/// pthread structure for PRACH thread
pthread_t
pthread_phy_tx
;
pthread_mutex_t
mutex_phy_tx
;
pthread_cond_t
cond_phy_tx
;
/// \internal This variable is protected by \ref mutex_phy_tx.
int
instance_cnt_phy_tx
;
/// frame to act upon for transmission
int
frame_phy_tx
;
/// subframe to act upon for transmission
int
subframe_phy_tx
;
/// timestamp to send to "slave rru"
openair0_timestamp
timestamp_phy_tx
;
/// pthread structure for RF TX thread
pthread_t
pthread_rf_tx
;
pthread_mutex_t
mutex_rf_tx
;
pthread_cond_t
cond_rf_tx
;
/// \internal This variable is protected by \ref mutex_rf_tx.
int
instance_cnt_rf_tx
;
#endif
#if defined(PRE_SCD_THREAD)
pthread_t
pthread_pre_scd
;
/// condition variable for time processing thread
pthread_cond_t
cond_pre_scd
;
/// mutex for time thread
pthread_mutex_t
mutex_pre_scd
;
int
instance_pre_scd
;
#endif
int
emulate_rf_busy
;
}
RU_proc_t
;
typedef
enum
{
LOCAL_RF
=
0
,
REMOTE_IF5
=
1
,
REMOTE_MBP_IF5
=
2
,
REMOTE_IF4p5
=
3
,
REMOTE_IF1pp
=
4
,
MAX_RU_IF_TYPES
=
5
}
RU_if_south_t
;
typedef
struct
RU_t_s
{
/// index of this ru
uint32_t
idx
;
/// Pointer to configuration file
char
*
rf_config_file
;
/// southbound interface
RU_if_south_t
if_south
;
/// timing
node_timing_t
if_timing
;
/// function
node_function_t
function
;
/// Ethernet parameters for fronthaul interface
eth_params_t
eth_params
;
/// flag to indicate the RU is in synch with a master reference
int
in_synch
;
/// timing offset
int
rx_offset
;
/// flag to indicate the RU is a slave to another source
int
is_slave
;
/// Total gain of receive chain
uint32_t
rx_total_gain_dB
;
/// number of bands that this device can support
int
num_bands
;
/// band list
int
band
[
MAX_BANDS_PER_RRU
];
/// number of RX paths on device
int
nb_rx
;
/// number of TX paths on device
int
nb_tx
;
/// maximum PDSCH RS EPRE
int
max_pdschReferenceSignalPower
;
/// maximum RX gain
int
max_rxgain
;
/// Attenuation of RX paths on device
int
att_rx
;
/// Attenuation of TX paths on device
int
att_tx
;
/// flag to indicate precoding operation in RU
int
do_precoding
;
/// Frame parameters
LTE_DL_FRAME_PARMS
frame_parms
;
///timing offset used in TDD
int
N_TA_offset
;
/// SF extension used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
int
sf_extension
;
/// "end of burst delay" used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
int
end_of_burst_delay
;
/// RF device descriptor
openair0_device
rfdevice
;
/// HW configuration
openair0_config_t
openair0_cfg
;
/// Number of eNBs using this RU
int
num_eNB
;
/// list of eNBs using this RU
struct
PHY_VARS_eNB_s
*
eNB_list
[
NUMBER_OF_eNB_MAX
];
/// Mapping of antenna ports to RF chain index
openair0_rf_map
rf_map
;
/// IF device descriptor
openair0_device
ifdevice
;
/// Pointer for ifdevice buffer struct
if_buffer_t
ifbuffer
;
/// if prach processing is to be performed in RU
int
do_prach
;
/// function pointer to synchronous RX fronthaul function (RRU,3GPP_eNB)
void
(
*
fh_south_in
)(
struct
RU_t_s
*
ru
,
int
*
frame
,
int
*
subframe
);
/// function pointer to synchronous TX fronthaul function
void
(
*
fh_south_out
)(
struct
RU_t_s
*
ru
);
/// function pointer to synchronous RX fronthaul function (RRU)
void
(
*
fh_north_in
)(
struct
RU_t_s
*
ru
,
int
*
frame
,
int
*
subframe
);
/// function pointer to synchronous RX fronthaul function (RRU)
void
(
*
fh_north_out
)(
struct
RU_t_s
*
ru
);
/// function pointer to asynchronous fronthaul interface
void
(
*
fh_north_asynch_in
)(
struct
RU_t_s
*
ru
,
int
*
frame
,
int
*
subframe
);
/// function pointer to asynchronous fronthaul interface
void
(
*
fh_south_asynch_in
)(
struct
RU_t_s
*
ru
,
int
*
frame
,
int
*
subframe
);
/// function pointer to initialization function for radio interface
int
(
*
start_rf
)(
struct
RU_t_s
*
ru
);
/// function pointer to release function for radio interface
int
(
*
stop_rf
)(
struct
RU_t_s
*
ru
);
/// function pointer to initialization function for radio interface
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_eNB_s
*
eNB
);
/// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
void
(
*
feprx
)(
struct
RU_t_s
*
ru
);
/// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
void
(
*
feptx_ofdm
)(
struct
RU_t_s
*
ru
);
/// function pointer to TX front-end processing routine (PRECODING)
void
(
*
feptx_prec
)(
struct
RU_t_s
*
ru
);
/// function pointer to wakeup routine in lte-enb.
int
(
*
wakeup_rxtx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
);
/// function pointer to wakeup routine in lte-enb.
void
(
*
wakeup_prach_eNB
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
/// function pointer to wakeup routine in lte-enb.
void
(
*
wakeup_prach_eNB_br
)(
struct
PHY_VARS_eNB_s
*
eNB
,
struct
RU_t_s
*
ru
,
int
frame
,
int
subframe
);
#endif
/// function pointer to eNB entry routine
void
(
*
eNB_top
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
frame_rx
,
int
subframe_rx
,
char
*
string
,
struct
RU_t_s
*
ru
);
/// Timing statistics
time_stats_t
ofdm_demod_stats
;
/// Timing statistics (TX)
time_stats_t
ofdm_mod_stats
;
/// Timing wait statistics
time_stats_t
ofdm_demod_wait_stats
;
/// Timing wakeup statistics
time_stats_t
ofdm_demod_wakeup_stats
;
/// Timing wait statistics (TX)
time_stats_t
ofdm_mod_wait_stats
;
/// Timing wakeup statistics (TX)
time_stats_t
ofdm_mod_wakeup_stats
;
/// Timing statistics (RX Fronthaul + Compression)
time_stats_t
rx_fhaul
;
/// Timing statistics (TX Fronthaul + Compression)
time_stats_t
tx_fhaul
;
/// Timong statistics (Compression)
time_stats_t
compression
;
/// Timing statistics (Fronthaul transport)
time_stats_t
transport
;
/// RX and TX buffers for precoder output
RU_COMMON
common
;
/// beamforming weight vectors per eNB
int32_t
**
beam_weights
[
NUMBER_OF_eNB_MAX
+
1
][
15
];
/// received frequency-domain signal for PRACH (IF4p5 RRU)
int16_t
**
prach_rxsigF
;
/// received frequency-domain signal for PRACH BR (IF4p5 RRU)
int16_t
**
prach_rxsigF_br
[
4
];
/// sequence number for IF5
uint8_t
seqno
;
/// initial timestamp used as an offset make first real timestamp 0
openair0_timestamp
ts_offset
;
/// process scheduling variables
RU_proc_t
proc
;
/// stats thread pthread descriptor
pthread_t
ru_stats_thread
;
}
RU_t
;
#define MAX_RRU_CONFIG_SIZE 1024
typedef
enum
{
RAU_tick
=
0
,
RRU_capabilities
=
1
,
RRU_config
=
2
,
RRU_MSG_max_num
=
3
}
rru_config_msg_type_t
;
typedef
struct
RRU_CONFIG_msg_s
{
rru_config_msg_type_t
type
;
ssize_t
len
;
uint8_t
msg
[
MAX_RRU_CONFIG_SIZE
];
}
RRU_CONFIG_msg_t
;
typedef
enum
{
OAI_IF5_only
=
0
,
OAI_IF4p5_only
=
1
,
OAI_IF5_and_IF4p5
=
2
,
MBP_IF5
=
3
,
MAX_FH_FMTs
=
4
}
FH_fmt_options_t
;
#define MAX_BANDS_PER_RRU 4
typedef
struct
RRU_capabilities_s
{
/// Fronthaul format
FH_fmt_options_t
FH_fmt
;
/// number of EUTRA bands (<=4) supported by RRU
uint8_t
num_bands
;
/// EUTRA band list supported by RRU
uint8_t
band_list
[
MAX_BANDS_PER_RRU
];
/// Number of concurrent bands (component carriers)
uint8_t
num_concurrent_bands
;
/// Maximum TX EPRE of each band
int8_t
max_pdschReferenceSignalPower
[
MAX_BANDS_PER_RRU
];
/// Maximum RX gain of each band
uint8_t
max_rxgain
[
MAX_BANDS_PER_RRU
];
/// Number of RX ports of each band
uint8_t
nb_rx
[
MAX_BANDS_PER_RRU
];
/// Number of TX ports of each band
uint8_t
nb_tx
[
MAX_BANDS_PER_RRU
];
/// max DL bandwidth (1,6,15,25,50,75,100)
uint8_t
N_RB_DL
[
MAX_BANDS_PER_RRU
];
/// max UL bandwidth (1,6,15,25,50,75,100)
uint8_t
N_RB_UL
[
MAX_BANDS_PER_RRU
];
}
RRU_capabilities_t
;
typedef
struct
RRU_config_s
{
/// Fronthaul format
RU_if_south_t
FH_fmt
;
/// number of EUTRA bands (<=4) configured in RRU
uint8_t
num_bands
;
/// EUTRA band list configured in RRU
uint8_t
band_list
[
MAX_BANDS_PER_RRU
];
/// TDD configuration (0-6)
uint8_t
tdd_config
[
MAX_BANDS_PER_RRU
];
/// TDD special subframe configuration (0-10)
uint8_t
tdd_config_S
[
MAX_BANDS_PER_RRU
];
/// TX frequency
uint32_t
tx_freq
[
MAX_BANDS_PER_RRU
];
/// RX frequency
uint32_t
rx_freq
[
MAX_BANDS_PER_RRU
];
/// TX attenation w.r.t. max
uint8_t
att_tx
[
MAX_BANDS_PER_RRU
];
/// RX attenuation w.r.t. max
uint8_t
att_rx
[
MAX_BANDS_PER_RRU
];
/// DL bandwidth
uint8_t
N_RB_DL
[
MAX_BANDS_PER_RRU
];
/// UL bandwidth
uint8_t
N_RB_UL
[
MAX_BANDS_PER_RRU
];
/// 3/4 sampling rate
uint8_t
threequarter_fs
[
MAX_BANDS_PER_RRU
];
/// prach_FreqOffset for IF4p5
int
prach_FreqOffset
[
MAX_BANDS_PER_RRU
];
/// prach_ConfigIndex for IF4p5
int
prach_ConfigIndex
[
MAX_BANDS_PER_RRU
];
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
int
emtc_prach_CElevel_enable
[
MAX_BANDS_PER_RRU
][
4
];
/// emtc_prach_FreqOffset for IF4p5 per CE Level
int
emtc_prach_FreqOffset
[
MAX_BANDS_PER_RRU
][
4
];
/// emtc_prach_ConfigIndex for IF4p5 per CE Level
int
emtc_prach_ConfigIndex
[
MAX_BANDS_PER_RRU
][
4
];
#endif
}
RRU_config_t
;
#include <pthread.h>
#include "common_lib.h"
#include "openairinterface5g_limits.h"
#include "openairinterface5g_limits.h"
#define PBCH_A 24
#define NUMBER_OF_SUBBANDS_MAX 13
#define NUMBER_OF_SUBBANDS_MAX 13
#define NUMBER_OF_HARQ_PID_MAX 8
#define NUMBER_OF_HARQ_PID_MAX 8
#define MAX_BANDS_PER_RRU 4
#define MAX_FRAME_NUMBER 0x400
#define MAX_FRAME_NUMBER 0x400
#define MAX_NUM_RU_PER_eNB 64
#define MAX_NUM_RX_PRACH_PREAMBLES 4
#define MAX_RRU_CONFIG_SIZE 1024
typedef
struct
{
typedef
struct
{
/// \brief Pointers (dynamic) to the received data in the time domain.
/// \brief Pointers (dynamic) to the received data in the time domain.
...
@@ -606,14 +176,13 @@ typedef struct {
...
@@ -606,14 +176,13 @@ typedef struct {
int16_t
*
llr
;
int16_t
*
llr
;
}
LTE_eNB_PUSCH
;
}
LTE_eNB_PUSCH
;
#define PBCH_A 24
typedef
struct
{
typedef
struct
{
uint8_t
pbch_d
[
96
+
(
3
*
(
16
+
PBCH_A
))];
uint8_t
pbch_d
[
96
+
(
3
*
(
16
+
PBCH_A
))];
uint8_t
pbch_w
[
3
*
3
*
(
16
+
PBCH_A
)];
uint8_t
pbch_w
[
3
*
3
*
(
16
+
PBCH_A
)];
uint8_t
pbch_e
[
1920
];
uint8_t
pbch_e
[
1920
];
}
LTE_eNB_PBCH
;
}
LTE_eNB_PBCH
;
#define MAX_NUM_RX_PRACH_PREAMBLES 4
typedef
struct
{
typedef
struct
{
/// \brief ?.
/// \brief ?.
...
@@ -639,11 +208,6 @@ typedef struct {
...
@@ -639,11 +208,6 @@ typedef struct {
#endif
#endif
}
LTE_eNB_PRACH
;
}
LTE_eNB_PRACH
;
#include "PHY/TOOLS/time_meas.h"
#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
#include "PHY/LTE_TRANSPORT/transport_eNB.h"
/// Context data structure for RX/TX portion of subframe processing
/// Context data structure for RX/TX portion of subframe processing
typedef
struct
{
typedef
struct
{
/// Component Carrier index
/// Component Carrier index
...
...
openair1/PHY/defs_gNB.h
View file @
274cb07b
...
@@ -541,7 +541,7 @@ typedef struct PHY_VARS_gNB_s {
...
@@ -541,7 +541,7 @@ typedef struct PHY_VARS_gNB_s {
/// Ethernet parameters for fronthaul interface
/// Ethernet parameters for fronthaul interface
eth_params_t
eth_params
;
eth_params_t
eth_params
;
int
rx_total_gain_dB
;
int
rx_total_gain_dB
;
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
);
int
(
*
nr_start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
);
uint8_t
local_flag
;
uint8_t
local_flag
;
nfapi_nr_config_request_t
gNB_config
;
nfapi_nr_config_request_t
gNB_config
;
NR_DL_FRAME_PARMS
frame_parms
;
NR_DL_FRAME_PARMS
frame_parms
;
...
...
targets/RT/USER/nr-ru.c
View file @
274cb07b
...
@@ -1428,9 +1428,9 @@ static void* ru_thread( void* param ) {
...
@@ -1428,9 +1428,9 @@ static void* ru_thread( void* param ) {
}
}
else
{
else
{
// Start IF device if any
// Start IF device if any
if
(
ru
->
start_if
)
{
if
(
ru
->
nr_
start_if
)
{
LOG_I
(
PHY
,
"Starting IF interface for RU %d
\n
"
,
ru
->
idx
);
LOG_I
(
PHY
,
"Starting IF interface for RU %d
\n
"
,
ru
->
idx
);
AssertFatal
(
ru
->
start_if
(
ru
,
NULL
)
==
0
,
"Could not start the IF device
\n
"
);
AssertFatal
(
ru
->
nr_
start_if
(
ru
,
NULL
)
==
0
,
"Could not start the IF device
\n
"
);
if
(
ru
->
if_south
==
LOCAL_RF
)
ret
=
connect_rau
(
ru
);
if
(
ru
->
if_south
==
LOCAL_RF
)
ret
=
connect_rau
(
ru
);
else
ret
=
attach_rru
(
ru
);
else
ret
=
attach_rru
(
ru
);
AssertFatal
(
ret
==
0
,
"Cannot connect to remote radio
\n
"
);
AssertFatal
(
ret
==
0
,
"Cannot connect to remote radio
\n
"
);
...
@@ -1671,7 +1671,7 @@ void *ru_thread_synch(void *arg) {
...
@@ -1671,7 +1671,7 @@ void *ru_thread_synch(void *arg) {
}
}
*/
*/
int
start_if
(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
)
{
int
nr_
start_if
(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
)
{
return
(
ru
->
ifdevice
.
trx_start_func
(
&
ru
->
ifdevice
));
return
(
ru
->
ifdevice
.
trx_start_func
(
&
ru
->
ifdevice
));
}
}
...
@@ -2067,7 +2067,7 @@ void set_function_spec_param(RU_t *ru)
...
@@ -2067,7 +2067,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
feprx
=
NULL
;
// nothing (this is a time-domain signal)
ru
->
feprx
=
NULL
;
// nothing (this is a time-domain signal)
ru
->
feptx_ofdm
=
NULL
;
// nothing (this is a time-domain signal)
ru
->
feptx_ofdm
=
NULL
;
// nothing (this is a time-domain signal)
ru
->
feptx_prec
=
NULL
;
// nothing (this is a time-domain signal)
ru
->
feptx_prec
=
NULL
;
// nothing (this is a time-domain signal)
ru
->
start_if
=
start_if
;
// need to start the if interface for if5
ru
->
nr_start_if
=
nr_start_if
;
// need to start the if interface for if5
ru
->
ifdevice
.
host_type
=
RRU_HOST
;
ru
->
ifdevice
.
host_type
=
RRU_HOST
;
ru
->
rfdevice
.
host_type
=
RRU_HOST
;
ru
->
rfdevice
.
host_type
=
RRU_HOST
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
...
@@ -2092,7 +2092,7 @@ void set_function_spec_param(RU_t *ru)
...
@@ -2092,7 +2092,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
feprx
=
(
get_nprocs
()
<=
2
)
?
fep_full
:
ru_fep_full_2thread
;
// RX DFTs
ru
->
feprx
=
(
get_nprocs
()
<=
2
)
?
fep_full
:
ru_fep_full_2thread
;
// RX DFTs
ru
->
feptx_ofdm
=
(
get_nprocs
()
<=
2
)
?
nr_feptx_ofdm
:
nr_feptx_ofdm_2thread
;
// this is fep with idft only (no precoding in RRU)
ru
->
feptx_ofdm
=
(
get_nprocs
()
<=
2
)
?
nr_feptx_ofdm
:
nr_feptx_ofdm_2thread
;
// this is fep with idft only (no precoding in RRU)
ru
->
feptx_prec
=
NULL
;
ru
->
feptx_prec
=
NULL
;
ru
->
start_if
=
start_if
;
// need to start the if interface for if4p5
ru
->
nr_start_if
=
nr_start_if
;
// need to start the if interface for if4p5
ru
->
ifdevice
.
host_type
=
RRU_HOST
;
ru
->
ifdevice
.
host_type
=
RRU_HOST
;
ru
->
rfdevice
.
host_type
=
RRU_HOST
;
ru
->
rfdevice
.
host_type
=
RRU_HOST
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
...
@@ -2116,7 +2116,7 @@ void set_function_spec_param(RU_t *ru)
...
@@ -2116,7 +2116,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
feptx_prec
=
feptx_prec
;
// this is fep with idft and precoding
ru
->
feptx_prec
=
feptx_prec
;
// this is fep with idft and precoding
ru
->
fh_north_in
=
NULL
;
// no incoming fronthaul from north
ru
->
fh_north_in
=
NULL
;
// no incoming fronthaul from north
ru
->
fh_north_out
=
NULL
;
// no outgoing fronthaul to north
ru
->
fh_north_out
=
NULL
;
// no outgoing fronthaul to north
ru
->
start_if
=
NULL
;
// no if interface
ru
->
nr_start_if
=
NULL
;
// no if interface
ru
->
rfdevice
.
host_type
=
RAU_HOST
;
ru
->
rfdevice
.
host_type
=
RAU_HOST
;
}
}
ru
->
fh_south_in
=
rx_rf
;
// local synchronous RF RX
ru
->
fh_south_in
=
rx_rf
;
// local synchronous RF RX
...
@@ -2149,7 +2149,7 @@ void set_function_spec_param(RU_t *ru)
...
@@ -2149,7 +2149,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
fh_south_asynch_in
=
NULL
;
// no asynchronous UL
ru
->
fh_south_asynch_in
=
NULL
;
// no asynchronous UL
ru
->
start_rf
=
NULL
;
// no local RF
ru
->
start_rf
=
NULL
;
// no local RF
ru
->
stop_rf
=
NULL
;
ru
->
stop_rf
=
NULL
;
ru
->
start_if
=
start_if
;
// need to start if interface for IF5
ru
->
nr_start_if
=
nr_start_if
;
// need to start if interface for IF5
ru
->
ifdevice
.
host_type
=
RAU_HOST
;
ru
->
ifdevice
.
host_type
=
RAU_HOST
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
ru
->
ifdevice
.
configure_rru
=
configure_ru
;
ru
->
ifdevice
.
configure_rru
=
configure_ru
;
...
@@ -2174,7 +2174,7 @@ void set_function_spec_param(RU_t *ru)
...
@@ -2174,7 +2174,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
fh_north_asynch_in
=
NULL
;
ru
->
fh_north_asynch_in
=
NULL
;
ru
->
start_rf
=
NULL
;
// no local RF
ru
->
start_rf
=
NULL
;
// no local RF
ru
->
stop_rf
=
NULL
;
ru
->
stop_rf
=
NULL
;
ru
->
start_if
=
start_if
;
// need to start if interface for IF4p5
ru
->
nr_start_if
=
nr_start_if
;
// need to start if interface for IF4p5
ru
->
ifdevice
.
host_type
=
RAU_HOST
;
ru
->
ifdevice
.
host_type
=
RAU_HOST
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
ru
->
ifdevice
.
configure_rru
=
configure_ru
;
ru
->
ifdevice
.
configure_rru
=
configure_ru
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment