Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
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-RAN
Commits
849be5f9
Commit
849be5f9
authored
Aug 20, 2018
by
Rajeev Gangula
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into develop
parents
86f4d8c1
dc9c27a3
Changes
39
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
1867 additions
and
225 deletions
+1867
-225
ci-scripts/Jenkinsfile-gitlab
ci-scripts/Jenkinsfile-gitlab
+17
-1
ci-scripts/main.py
ci-scripts/main.py
+389
-44
ci-scripts/xml_files/enb_usrp210_band7.xml
ci-scripts/xml_files/enb_usrp210_band7.xml
+1
-1
ci-scripts/xml_files/test_case_list_template.xml
ci-scripts/xml_files/test_case_list_template.xml
+2
-2
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+8
-3
cmake_targets/tools/build_helper
cmake_targets/tools/build_helper
+1
-1
common/utils/LOG/vcd_signal_dumper.h
common/utils/LOG/vcd_signal_dumper.h
+7
-7
common/utils/T/.gitignore
common/utils/T/.gitignore
+1
-0
common/utils/T/Makefile
common/utils/T/Makefile
+11
-2
common/utils/T/T.c
common/utils/T/T.c
+37
-26
common/utils/T/T.h
common/utils/T/T.h
+36
-11
common/utils/T/T_defs.h
common/utils/T/T_defs.h
+4
-2
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+324
-24
common/utils/T/check_vcd.c
common/utils/T/check_vcd.c
+249
-0
common/utils/T/genids.c
common/utils/T/genids.c
+11
-10
common/utils/T/local_tracer.c
common/utils/T/local_tracer.c
+10
-30
common/utils/T/tracer/Makefile
common/utils/T/tracer/Makefile
+14
-11
common/utils/T/tracer/config.c
common/utils/T/tracer/config.c
+6
-0
common/utils/T/tracer/config.h
common/utils/T/tracer/config.h
+1
-0
common/utils/T/tracer/database.c
common/utils/T/tracer/database.c
+15
-0
common/utils/T/tracer/database.h
common/utils/T/tracer/database.h
+1
-0
common/utils/T/tracer/enb.c
common/utils/T/tracer/enb.c
+1
-0
common/utils/T/tracer/multi.c
common/utils/T/tracer/multi.c
+385
-0
common/utils/T/tracer/to_vcd.c
common/utils/T/tracer/to_vcd.c
+50
-9
common/utils/T/tracer/ue.c
common/utils/T/tracer/ue.c
+1
-0
common/utils/T/tracer/utils.c
common/utils/T/tracer/utils.c
+48
-19
common/utils/T/tracer/utils.h
common/utils/T/tracer/utils.h
+3
-0
common/utils/itti/intertask_interface.c
common/utils/itti/intertask_interface.c
+1
-1
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
+6
-0
openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c
openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c
+7
-2
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+4
-4
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+1
-0
openair2/NETWORK_DRIVER/MESH/device.c
openair2/NETWORK_DRIVER/MESH/device.c
+4
-0
openair2/NETWORK_DRIVER/UE_IP/device.c
openair2/NETWORK_DRIVER/UE_IP/device.c
+5
-1
openair3/S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1
openair3/S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1
+198
-0
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+3
-2
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+2
-9
targets/RT/USER/lte-softmodem.h
targets/RT/USER/lte-softmodem.h
+2
-2
targets/RT/USER/lte-uesoftmodem.c
targets/RT/USER/lte-uesoftmodem.c
+1
-1
No files found.
ci-scripts/Jenkinsfile-gitlab
View file @
849be5f9
...
...
@@ -286,7 +286,8 @@ pipeline {
}
}
post
{
always
{
// In case of success we really pick the report from the exact slave build number
success
{
script
{
copyArtifacts
(
projectName:
'eNB-CI-FDD-Band7-B210'
,
filter:
'test_results*.html'
,
...
...
@@ -296,6 +297,21 @@ pipeline {
}
}
}
// In case of any non-success, we are retrieving the HTML report of the last completed
// slave job. Note that we could use that syntax also in case of success.
// The only drop-back is that we may retrieve the HTML report of a previous build
cleanup
{
script
{
if
(!
fileExists
(
'test_results-eNB-CI-FDD-Band7-B210.html'
))
{
copyArtifacts
(
projectName:
'eNB-CI-FDD-Band7-B210'
,
filter:
'test_results*.html'
,
selector:
lastCompleted
())
if
(
fileExists
(
'test_results-eNB-CI-FDD-Band7-B210.html'
))
{
archiveArtifacts
artifacts:
'test_results-eNB-CI-FDD-Band7-B210.html'
}
}
}
}
}
}
}
...
...
ci-scripts/main.py
View file @
849be5f9
...
...
@@ -45,7 +45,7 @@ import xml.etree.ElementTree as ET
import
logging
import
datetime
import
signal
from
multiprocessing
import
Process
,
Lock
from
multiprocessing
import
Process
,
Lock
,
SimpleQueue
logging
.
basicConfig
(
level
=
logging
.
DEBUG
,
format
=
"[%(asctime)s] %(name)s:%(levelname)s: %(message)s"
...
...
@@ -154,6 +154,34 @@ class SSHConnection():
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Unexpected Others
\u001B
[0m'
)
def
copy
(
self
,
ipaddress
,
username
,
password
,
source
,
destination
):
logging
.
debug
(
'scp '
+
username
+
'@'
+
ipaddress
+
':'
+
source
+
' '
+
destination
)
scp_spawn
=
pexpect
.
spawn
(
'scp '
+
username
+
'@'
+
ipaddress
+
':'
+
source
+
' '
+
destination
,
timeout
=
5
)
scp_response
=
scp_spawn
.
expect
([
'Are you sure you want to continue connecting (yes/no)?'
,
'password:'
,
pexpect
.
EOF
,
pexpect
.
TIMEOUT
])
if
scp_response
==
0
:
scp_spawn
.
sendline
(
'yes'
)
scp_spawn
.
expect
(
'password:'
)
scp_spawn
.
sendline
(
password
)
scp_response
=
scp_spawn
.
expect
([
'\$'
,
'Permission denied'
,
'password:'
,
pexpect
.
EOF
,
pexpect
.
TIMEOUT
])
if
scp_response
==
0
:
pass
else
:
logging
.
debug
(
'1 - scp_response = '
+
str
(
scp_response
))
sys
.
exit
(
'SCP failed'
)
elif
scp_response
==
1
:
scp_spawn
.
sendline
(
password
)
scp_response
=
scp_spawn
.
expect
([
'\$'
,
'Permission denied'
,
'password:'
,
pexpect
.
EOF
,
pexpect
.
TIMEOUT
])
if
scp_response
==
0
or
scp_response
==
3
:
pass
else
:
logging
.
debug
(
'2 - scp_response = '
+
str
(
scp_response
))
sys
.
exit
(
'SCP failed'
)
elif
scp_response
==
2
:
pass
else
:
logging
.
debug
(
'3 - scp_response = '
+
str
(
scp_response
))
sys
.
exit
(
'SCP failed'
)
def
BuildeNB
(
self
):
if
self
.
eNBIPAddress
==
''
or
self
.
eNBRepository
==
''
or
self
.
eNBBranch
==
''
or
self
.
eNBUserName
==
''
or
self
.
eNBPassword
==
''
or
self
.
eNBSourceCodePath
==
''
:
Usage
()
...
...
@@ -274,7 +302,7 @@ class SSHConnection():
loopCounter
=
loopCounter
-
1
if
(
loopCounter
==
0
):
doLoop
=
False
logging
.
debug
(
'
\u001B
[1;3
7
;43m eNB logging system did not show got sync! See with attach later
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;3
0
;43m eNB logging system did not show got sync! See with attach later
\u001B
[0m'
)
self
.
CreateHtmlTestRow
(
config_file
,
'eNB not showing got sync!'
,
0
)
# Not getting got sync is bypassed for the moment
#sys.exit(1)
...
...
@@ -319,21 +347,32 @@ class SSHConnection():
job
.
join
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
0
)
def
AttachUE_common
(
self
,
device_id
):
def
AttachUE_common
(
self
,
device_id
,
statusQueue
,
lock
):
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/on'
,
'\$'
,
60
)
time
.
sleep
(
2
)
count
=
45
max_count
=
45
count
=
max_count
while
count
>
0
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell dumpsys telephony.registry | grep mDataConnectionState'
,
'\$'
,
15
)
result
=
re
.
search
(
'mDataConnectionState.*=(?P<state>[0-9\-]+)'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m mDataConnectionState Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
'mDataConnectionState Not Found!'
)
lock
.
release
()
break
mDataConnectionState
=
int
(
result
.
group
(
'state'
))
if
mDataConnectionState
==
2
:
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Attach Completed
\u001B
[0m'
)
lock
.
acquire
()
statusQueue
.
put
(
max_count
-
count
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
'Attach Completed'
)
lock
.
release
()
break
count
=
count
-
1
if
count
==
15
or
count
==
30
:
...
...
@@ -342,11 +381,15 @@ class SSHConnection():
time
.
sleep
(
0.5
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/on'
,
'\$'
,
60
)
time
.
sleep
(
0.5
)
logging
.
debug
(
'
\u001B
[1mWait UE ('
+
device_id
+
') a second until mDataConnectionState=2 ('
+
str
(
45
-
count
)
+
' times)
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1mWait UE ('
+
device_id
+
') a second until mDataConnectionState=2 ('
+
str
(
max_count
-
count
)
+
' times)
\u001B
[0m'
)
time
.
sleep
(
1
)
if
count
==
0
:
logging
.
debug
(
'
\u001B
[1;37;41m UE ('
+
device_id
+
') Attach Failed
\u001B
[0m'
)
sys
.
exit
(
1
)
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
'Attach Failed'
)
lock
.
release
()
self
.
close
()
except
:
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
...
...
@@ -358,14 +401,39 @@ class SSHConnection():
initialize_eNB_flag
=
False
self
.
CheckProcessExist
(
initialize_eNB_flag
)
multi_jobs
=
[]
status_queue
=
SimpleQueue
()
lock
=
Lock
()
for
device_id
in
self
.
UEDevices
:
p
=
Process
(
target
=
SSH
.
AttachUE_common
,
args
=
(
device_id
,))
p
=
Process
(
target
=
SSH
.
AttachUE_common
,
args
=
(
device_id
,
status_queue
,
lock
,
))
p
.
daemon
=
True
p
.
start
()
multi_jobs
.
append
(
p
)
for
job
in
multi_jobs
:
job
.
join
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
len
(
self
.
UEDevices
))
if
(
status_queue
.
empty
()):
self
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
len
(
self
.
UEDevices
))
sys
.
exit
(
1
)
else
:
attach_status
=
True
html_queue
=
SimpleQueue
()
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
attach_status
=
False
device_id
=
status_queue
.
get
()
message
=
status_queue
.
get
()
if
(
count
<
0
):
html_cell
=
"<pre>UE ("
+
device_id
+
")
\n
"
+
message
+
"</pre>"
else
:
html_cell
=
"<pre>UE ("
+
device_id
+
")
\n
"
+
message
+
' in '
+
str
(
count
+
2
)
+
' seconds</pre>'
html_queue
.
put
(
html_cell
)
if
(
attach_status
):
self
.
CreateHtmlTestRowQueue
(
'N/A'
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
else
:
self
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
self
.
CreateHtmlFooter
()
sys
.
exit
(
1
)
def
DetachUE_common
(
self
,
device_id
):
try
:
...
...
@@ -481,7 +549,7 @@ class SSHConnection():
self
.
UEIPAddresses
.
append
(
UE_IPAddress
)
self
.
close
()
def
Ping_common
(
self
,
lock
,
UE_IPAddress
,
device_id
):
def
Ping_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
statusQueue
):
try
:
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
...
...
@@ -490,32 +558,65 @@ class SSHConnection():
self
.
command
(
'stdbuf -o0 ping '
+
self
.
ping_args
+
' '
+
UE_IPAddress
+
' 2>&1 | stdbuf -o0 tee -a ping_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
ping_time
[
0
])
*
1.5
)
result
=
re
.
search
(
', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Packet Loss Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
message
=
'Packet Loss Not Found!'
logging
.
debug
(
'
\u001B
[1;37;41m '
+
message
+
'
\u001B
[0m'
)
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
message
)
lock
.
release
()
return
packetloss
=
result
.
group
(
'packetloss'
)
if
float
(
packetloss
)
==
100
:
logging
.
debug
(
'
\u001B
[1;37;41m Packet Loss is 100%
\u001B
[0m'
)
sys
.
exit
(
1
)
message
=
'Packet Loss is 100%'
logging
.
debug
(
'
\u001B
[1;37;41m '
+
message
+
'
\u001B
[0m'
)
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
message
)
lock
.
release
()
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
:
logging
.
debug
(
'
\u001B
[1;37;41m Ping RTT_Min RTT_Avg RTT_Max Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
message
=
'Ping RTT_Min RTT_Avg RTT_Max Not Found!'
logging
.
debug
(
'
\u001B
[1;37;41m '
+
message
+
'
\u001B
[0m'
)
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
message
)
lock
.
release
()
return
rtt_min
=
result
.
group
(
'rtt_min'
)
rtt_avg
=
result
.
group
(
'rtt_avg'
)
rtt_max
=
result
.
group
(
'rtt_max'
)
pal_msg
=
'Packet Loss : '
+
packetloss
+
'%'
min_msg
=
'RTT(Min) : '
+
rtt_min
+
' ms'
avg_msg
=
'RTT(Avg) : '
+
rtt_avg
+
' ms'
max_msg
=
'RTT(Max) : '
+
rtt_max
+
' ms'
lock
.
acquire
()
logging
.
debug
(
'
\u001B
[1;37;44m ping result ('
+
UE_IPAddress
+
')
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m Packet Loss : '
+
packetloss
+
'%
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m RTT(Min) : '
+
rtt_min
+
' ms'
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m RTT(Avg) : '
+
rtt_avg
+
' ms'
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m RTT(Max) : '
+
rtt_max
+
' ms'
+
'
\u001B
[0m'
)
lock
.
release
()
logging
.
debug
(
'
\u001B
[1;34m '
+
pal_msg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m '
+
min_msg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m '
+
avg_msg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m '
+
max_msg
+
'
\u001B
[0m'
)
qMsg
=
pal_msg
+
'
\n
'
+
min_msg
+
'
\n
'
+
avg_msg
+
'
\n
'
+
max_msg
packetLossOK
=
True
if
packetloss
is
not
None
:
if
float
(
packetloss
)
>
float
(
self
.
ping_packetloss_threshold
):
qMsg
+=
'
\n
Packet Loss too high'
logging
.
debug
(
'
\u001B
[1;37;41m Packet Loss too high
\u001B
[0m'
)
sys
.
exit
(
1
)
packetLossOK
=
False
elif
float
(
packetloss
)
>
0
:
qMsg
+=
'
\n
Packet Loss is not 0%'
logging
.
debug
(
'
\u001B
[1;37;43m Packet Loss is not 0%
\u001B
[0m'
)
if
(
packetLossOK
):
statusQueue
.
put
(
0
)
else
:
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
statusQueue
.
put
(
qMsg
)
lock
.
release
()
self
.
close
()
except
:
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
...
...
@@ -530,16 +631,38 @@ class SSHConnection():
multi_jobs
=
[]
i
=
0
lock
=
Lock
()
status_queue
=
SimpleQueue
()
for
UE_IPAddress
in
self
.
UEIPAddresses
:
device_id
=
self
.
UEDevices
[
i
]
p
=
Process
(
target
=
SSH
.
Ping_common
,
args
=
(
lock
,
UE_IPAddress
,
device_id
,))
p
=
Process
(
target
=
SSH
.
Ping_common
,
args
=
(
lock
,
UE_IPAddress
,
device_id
,
status_queue
,
))
p
.
daemon
=
True
p
.
start
()
multi_jobs
.
append
(
p
)
i
=
i
+
1
for
job
in
multi_jobs
:
job
.
join
()
self
.
CreateHtmlTestRow
(
self
.
ping_args
,
'OK'
,
0
)
if
(
status_queue
.
empty
()):
self
.
CreateHtmlTestRow
(
self
.
ping_args
,
'KO'
,
len
(
self
.
UEDevices
))
sys
.
exit
(
1
)
else
:
ping_status
=
True
html_queue
=
SimpleQueue
()
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
ping_status
=
False
device_id
=
status_queue
.
get
()
ip_addr
=
status_queue
.
get
()
message
=
status_queue
.
get
()
html_cell
=
"<pre>UE ("
+
device_id
+
")
\n
IP Address : "
+
ip_addr
+
"
\n
"
+
message
+
"</pre>"
html_queue
.
put
(
html_cell
)
if
(
ping_status
):
self
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
else
:
self
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
self
.
CreateHtmlFooter
()
sys
.
exit
(
1
)
def
Iperf_ComputeTime
(
self
):
result
=
re
.
search
(
'-t (?P<iperf_time>\d+)'
,
str
(
self
.
iperf_args
))
...
...
@@ -573,7 +696,7 @@ class SSHConnection():
sys
.
exit
(
1
)
return
result
def
Iperf_analyzeV2Output
(
self
,
lock
,
UE_IPAddress
):
def
Iperf_analyzeV2Output
(
self
,
lock
,
UE_IPAddress
,
device_id
,
statusQueue
):
result
=
re
.
search
(
'Server Report:'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
result
=
re
.
search
(
'read failed: Connection refused'
,
str
(
self
.
ssh
.
before
))
...
...
@@ -581,7 +704,7 @@ class SSHConnection():
logging
.
debug
(
'
\u001B
[1;37;41m Could not connect to iperf server!
\u001B
[0m'
)
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Server Report and Connection refused Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
return
-
1
result
=
re
.
search
(
'Server Report:
\\\\
r
\\\\
n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/..\d+) (\((?P<packetloss>[0-9\.]+)%\))'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
bitrate
=
result
.
group
(
'bitrate'
)
...
...
@@ -589,41 +712,184 @@ class SSHConnection():
jitter
=
result
.
group
(
'jitter'
)
lock
.
acquire
()
logging
.
debug
(
'
\u001B
[1;37;44m iperf result ('
+
UE_IPAddress
+
')
\u001B
[0m'
)
iperfStatus
=
True
msg
=
''
if
bitrate
is
not
None
:
msg
+=
'Bitrate : '
+
bitrate
+
'
\n
'
logging
.
debug
(
'
\u001B
[1;34m Bitrate : '
+
bitrate
+
'
\u001B
[0m'
)
if
packetloss
is
not
None
:
msg
+=
'Packet Loss : '
+
packetloss
+
'%
\n
'
logging
.
debug
(
'
\u001B
[1;34m Packet Loss : '
+
packetloss
+
'%
\u001B
[0m'
)
if
float
(
packetloss
)
>
float
(
self
.
iperf_packetloss_threshold
):
msg
+=
'Packet Loss too high!
\n
'
logging
.
debug
(
'
\u001B
[1;37;41m Packet Loss too high
\u001B
[0m'
)
lock
.
release
()
sys
.
exit
(
1
)
iperfStatus
=
False
if
jitter
is
not
None
:
msg
+=
'Jitter : '
+
jitter
+
'
\n
'
logging
.
debug
(
'
\u001B
[1;34m Jitter : '
+
jitter
+
'
\u001B
[0m'
)
if
(
iperfStatus
):
statusQueue
.
put
(
0
)
else
:
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
statusQueue
.
put
(
msg
)
lock
.
release
()
return
0
def
Iperf_analyzeV2Server
(
self
,
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
iperf_real_options
):
if
(
not
os
.
path
.
isfile
(
'iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
statusQueue
.
put
(
'Could not analyze from server log'
)
lock
.
release
()
return
# Computing the requested bandwidth in float
result
=
re
.
search
(
'-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]'
,
str
(
iperf_real_options
))
if
result
is
None
:
logging
.
debug
(
'Iperf bandwidth Not Found!'
)
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
statusQueue
.
put
(
'Could not compute Iperf bandwidth!'
)
lock
.
release
()
return
else
:
req_bandwidth
=
result
.
group
(
'iperf_bandwidth'
)
req_bw
=
float
(
req_bandwidth
)
result
=
re
.
search
(
'-b [0-9\.]+K'
,
str
(
iperf_real_options
))
if
result
is
not
None
:
req_bandwidth
=
'%.1f Kbits/sec'
%
req_bw
req_bw
=
req_bw
*
1000
result
=
re
.
search
(
'-b [0-9\.]+M'
,
str
(
iperf_real_options
))
if
result
is
not
None
:
req_bandwidth
=
'%.1f Mbits/sec'
%
req_bw
req_bw
=
req_bw
*
1000000
result
=
re
.
search
(
'-b [0-9\.]+G'
,
str
(
iperf_real_options
))
if
result
is
not
None
:
req_bandwidth
=
'%.1f Gbits/sec'
%
req_bw
req_bw
=
req_bw
*
1000000000
server_file
=
open
(
'iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'r'
)
br_sum
=
0.0
ji_sum
=
0.0
pl_sum
=
0
ps_sum
=
0
row_idx
=
0
for
line
in
server_file
.
readlines
():
result
=
re
.
search
(
'(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(?P<lostPack>[0-9]+)/ +(?P<sentPack>[0-9]+)'
,
str
(
line
))
if
result
is
not
None
:
bitrate
=
result
.
group
(
'bitrate'
)
jitter
=
result
.
group
(
'jitter'
)
packetlost
=
result
.
group
(
'lostPack'
)
packetsent
=
result
.
group
(
'sentPack'
)
br
=
bitrate
.
split
(
' '
)
ji
=
jitter
.
split
(
' '
)
row_idx
=
row_idx
+
1
curr_br
=
float
(
br
[
0
])
pl_sum
=
pl_sum
+
int
(
packetlost
)
ps_sum
=
ps_sum
+
int
(
packetsent
)
if
(
br
[
1
]
==
'Kbits/sec'
):
curr_br
=
curr_br
*
1000
if
(
br
[
1
]
==
'Mbits/sec'
):
curr_br
=
curr_br
*
1000
*
1000
br_sum
=
curr_br
+
br_sum
ji_sum
=
float
(
ji
[
0
])
+
ji_sum
if
(
row_idx
>
0
):
br_sum
=
br_sum
/
row_idx
ji_sum
=
ji_sum
/
row_idx
br_loss
=
100
*
br_sum
/
req_bw
if
(
br_sum
>
1000
):
br_sum
=
br_sum
/
1000
if
(
br_sum
>
1000
):
br_sum
=
br_sum
/
1000
bitrate
=
'%.2f Mbits/sec'
%
br_sum
else
:
bitrate
=
'%.2f Kbits/sec'
%
br_sum
else
:
bitrate
=
'%.2f bits/sec'
%
br_sum
bitperf
=
'%.2f '
%
br_loss
bitperf
+=
'%'
jitter
=
'%.2f ms'
%
(
ji_sum
)
if
(
ps_sum
>
0
):
pl
=
float
(
100
*
pl_sum
/
ps_sum
)
packetloss
=
'%2.1f '
%
(
pl
)
packetloss
+=
'%'
else
:
packetloss
=
'unknown'
lock
.
acquire
()
if
(
br_loss
<
90
):
statusQueue
.
put
(
1
)
else
:
statusQueue
.
put
(
0
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
req_msg
=
'Req Bitrate : '
+
req_bandwidth
bir_msg
=
'Bitrate : '
+
bitrate
brl_msg
=
'Bitrate Perf: '
+
bitperf
jit_msg
=
'Jitter : '
+
jitter
pal_msg
=
'Packet Loss : '
+
packetloss
statusQueue
.
put
(
req_msg
+
'
\n
'
+
bir_msg
+
'
\n
'
+
brl_msg
+
'
\n
'
+
jit_msg
+
'
\n
'
+
pal_msg
+
'
\n
'
)
logging
.
debug
(
'
\u001B
[1;37;45m iperf result ('
+
UE_IPAddress
+
')
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;35m '
+
req_msg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;35m '
+
bir_msg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;35m '
+
brl_msg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;35m '
+
jit_msg
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;35m '
+
pal_msg
+
'
\u001B
[0m'
)
lock
.
release
()
else
:
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
statusQueue
.
put
(
'Could not analyze from server log'
)
lock
.
release
()
def
Iperf_analyzeV3Output
(
self
,
lock
,
UE_IPAddress
):
server_file
.
close
()
def
Iperf_analyzeV3Output
(
self
,
lock
,
UE_IPAddress
,
device_id
,
statusQueue
):
result
=
re
.
search
(
'(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)
\\\\
r
\\\\
n(?:|\[ *\d+\] Sent \d+ datagrams)
\\\\
r
\\\\
niperf Done\.'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
result
=
re
.
search
(
'(?P<error>iperf: error - [a-zA-Z0-9 :]+)'
,
str
(
self
.
ssh
.
before
))
lock
.
acquire
()
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
if
result
is
not
None
:
logging
.
debug
(
'
\u001B
[1;37;41m '
+
result
.
group
(
'error'
)
+
'
\u001B
[0m'
)
statusQueue
.
put
(
result
.
group
(
'error'
))
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Bitrate and/or Packet Loss Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
statusQueue
.
put
(
'Bitrate and/or Packet Loss Not Found!'
)
lock
.
release
()
bitrate
=
result
.
group
(
'bitrate'
)
packetloss
=
result
.
group
(
'packetloss'
)
lock
.
acquire
()
logging
.
debug
(
'
\u001B
[1;37;44m iperf result ('
+
UE_IPAddress
+
')
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;34m Bitrate : '
+
bitrate
+
'
\u001B
[0m'
)
msg
=
'Bitrate : '
+
bitrate
+
'
\n
'
iperfStatus
=
True
if
packetloss
is
not
None
:
logging
.
debug
(
'
\u001B
[1;34m Packet Loss : '
+
packetloss
+
'%
\u001B
[0m'
)
msg
+=
'Packet Loss : '
+
packetloss
+
'%
\n
'
if
float
(
packetloss
)
>
float
(
self
.
iperf_packetloss_threshold
):
logging
.
debug
(
'
\u001B
[1;37;41m Packet Loss too high
\u001B
[0m'
)
lock
.
release
()
sys
.
exit
(
1
)
msg
+=
'Packet Loss too high!
\n
'
iperfStatus
=
False
if
(
iperfStatus
):
statusQueue
.
put
(
0
)
else
:
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
lock
.
release
()
def
Iperf_UL_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
):
def
Iperf_UL_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
,
statusQueue
):
ipnumbers
=
UE_IPAddress
.
split
(
'.'
)
if
(
len
(
ipnumbers
)
==
4
):
ipnumbers
[
3
]
=
'1'
...
...
@@ -645,25 +911,32 @@ class SSHConnection():
time
.
sleep
(
0.5
)
modified_options
=
self
.
Iperf_ComputeModifiedBW
(
idx
,
ue_num
)
modified_options
=
modified_options
.
replace
(
'-R'
,
''
)
time
.
sleep
(
0.5
)
self
.
command
(
'rm -f iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -c '
+
EPC_Iperf_UE_IPAddress
+
' '
+
modified_options
+
' -p '
+
str
(
port
)
+
'" 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
self
.
Iperf_analyzeV2Output
(
lock
,
UE_IPAddress
)
clientStatus
=
self
.
Iperf_analyzeV2Output
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
)
# Launch iperf server on EPC side
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'killall --signal SIGKILL iperf'
,
self
.
EPCUserName
,
5
)
self
.
close
()
def
Iperf_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
):
if
(
clientStatus
==
-
1
):
time
.
sleep
(
1
)
if
(
os
.
path
.
isfile
(
'iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
os
.
remove
(
'iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
)
self
.
copy
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
self
.
EPCSourceCodePath
+
'/scripts/iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'.'
)
self
.
Iperf_analyzeV2Server
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
modified_options
)
def
Iperf_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
,
statusQueue
):
try
:
# Single-UE profile -- iperf only on one UE
if
SSH
.
iperf_profile
==
'single-ue'
and
idx
!=
0
:
return
useIperf3
=
False
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
# if by chance ADB server and EPC are on the same remote host, at least log collection will take of it
# if by chance ADB server and EPC are on the same remote host, at least log collection will take
care
of it
self
.
command
(
'if [ ! -d '
+
self
.
EPCSourceCodePath
+
'/scripts ]; then mkdir -p '
+
self
.
EPCSourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
# Checking if iperf / iperf3 are installed
...
...
@@ -672,8 +945,16 @@ class SSHConnection():
if
result
is
None
:
result
=
re
.
search
(
'iperf'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Neither iperf nor iperf3 installed on UE!
\u001B
[0m'
)
sys
.
exit
(
1
)
message
=
'Neither iperf nor iperf3 installed on UE!'
lock
.
acquire
()
logging
.
debug
(
'
\u001B
[1;37;41m '
+
message
+
'
\u001B
[0m'
)
statusQueue
.
put
(
-
1
)
statusQueue
.
put
(
device_id
)
statusQueue
.
put
(
UE_IPAddress
)
statusQueue
.
put
(
message
)
lock
.
release
()
return
#sys.exit(1)
else
:
useIperf3
=
True
# in case of iperf, UL has its own function
...
...
@@ -681,7 +962,7 @@ class SSHConnection():
result
=
re
.
search
(
'-R'
,
str
(
self
.
iperf_args
))
if
result
is
not
None
:
self
.
close
()
self
.
Iperf_UL_common
(
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
)
self
.
Iperf_UL_common
(
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
,
statusQueue
)
return
if
(
useIperf3
):
...
...
@@ -704,11 +985,12 @@ class SSHConnection():
if
(
useIperf3
):
self
.
command
(
'stdbuf -o0 iperf3 -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
self
.
Iperf_analyzeV3Output
(
lock
,
UE_IPAddress
)
clientStatus
=
0
self
.
Iperf_analyzeV3Output
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
)
else
:
self
.
command
(
'stdbuf -o0 iperf -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
self
.
Iperf_analyzeV2Output
(
lock
,
UE_IPAddress
)
clientStatus
=
self
.
Iperf_analyzeV2Output
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
)
self
.
close
()
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
...
...
@@ -718,6 +1000,12 @@ class SSHConnection():
pid_iperf
=
result
.
group
(
'pid'
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell kill -KILL '
+
pid_iperf
,
'\$'
,
5
)
self
.
close
()
if
(
clientStatus
==
-
1
):
time
.
sleep
(
1
)
if
(
os
.
path
.
isfile
(
'iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
os
.
remove
(
'iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
)
self
.
copy
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
,
self
.
EPCSourceCodePath
+
'/scripts/iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'.'
)
self
.
Iperf_analyzeV2Server
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
modified_options
)
except
:
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
...
...
@@ -732,16 +1020,43 @@ class SSHConnection():
i
=
0
ue_num
=
len
(
self
.
UEIPAddresses
)
lock
=
Lock
()
status_queue
=
SimpleQueue
()
for
UE_IPAddress
in
self
.
UEIPAddresses
:
device_id
=
self
.
UEDevices
[
i
]
p
=
Process
(
target
=
SSH
.
Iperf_common
,
args
=
(
lock
,
UE_IPAddress
,
device_id
,
i
,
ue_num
,))
p
=
Process
(
target
=
SSH
.
Iperf_common
,
args
=
(
lock
,
UE_IPAddress
,
device_id
,
i
,
ue_num
,
status_queue
,
))
p
.
daemon
=
True
p
.
start
()
multi_jobs
.
append
(
p
)
i
=
i
+
1
for
job
in
multi_jobs
:
job
.
join
()
self
.
CreateHtmlTestRow
(
self
.
iperf_args
,
'OK'
,
0
)
if
(
status_queue
.
empty
()):
self
.
CreateHtmlTestRow
(
self
.
iperf_args
,
'KO'
,
len
(
self
.
UEDevices
))
sys
.
exit
(
1
)
else
:
iperf_status
=
True
iperf_noperf
=
False
html_queue
=
SimpleQueue
()
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
iperf_status
=
False
if
(
count
>
0
):
iperf_noperf
=
True
device_id
=
status_queue
.
get
()
ip_addr
=
status_queue
.
get
()
message
=
status_queue
.
get
()
html_cell
=
"<pre>UE ("
+
device_id
+
")
\n
IP Address : "
+
ip_addr
+
"
\n
"
+
message
+
"</pre>"
html_queue
.
put
(
html_cell
)
if
(
iperf_noperf
and
iperf_status
):
self
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'PERF NOT MET'
,
len
(
self
.
UEDevices
),
html_queue
)
elif
(
iperf_status
):
self
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
else
:
self
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
self
.
CreateHtmlFooter
()
sys
.
exit
(
1
)
def
CheckProcessExist
(
self
,
initialize_eNB_flag
):
multi_jobs
=
[]
...
...
@@ -872,6 +1187,7 @@ class SSHConnection():
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./stop_mme'
,
'\$'
,
5
)
self
.
close
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
0
)
def
TerminateSPGW
(
self
):
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
...
...
@@ -1099,6 +1415,35 @@ class SSHConnection():
i
+=
1
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
def
CreateHtmlTestRowQueue
(
self
,
options
,
status
,
ue_status
,
ue_queue
):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
addOrangeBK
=
False
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcyan" >'
+
SSH
.
testCase_id
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
SSH
.
desc
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
str
(
options
)
+
'</td>
\n
'
)
if
(
str
(
status
)
==
'OK'
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightgreen" >'
+
str
(
status
)
+
'</td>
\n
'
)
elif
(
str
(
status
)
==
'KO'
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >'
+
str
(
status
)
+
'</td>
\n
'
)
else
:
addOrangeBK
=
True
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >'
+
str
(
status
)
+
'</td>
\n
'
)
i
=
0
while
(
i
<
self
.
htmlUEConnected
):
if
(
i
<
ue_status
):
if
(
not
ue_queue
.
empty
()):
if
(
addOrangeBK
):
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >'
+
str
(
ue_queue
.
get
())
+
'</td>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <td>'
+
str
(
ue_queue
.
get
())
+
'</td>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <td>-</td>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <td>-</td>
\n
'
)
i
+=
1
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
#-----------------------------------------------------------
# Usage()
#-----------------------------------------------------------
...
...
ci-scripts/xml_files/enb_usrp210_band7.xml
View file @
849be5f9
...
...
@@ -27,7 +27,7 @@
<testCase
id=
"010101"
>
<class>
Build_eNB
</class>
<desc>
Build eNB (USRP)
</desc>
<Build_eNB_args>
-w USRP -
x -
c --eNB
</Build_eNB_args>
<Build_eNB_args>
-w USRP -c --eNB
</Build_eNB_args>
</testCase>
<testCase
id=
"030101"
>
...
...
ci-scripts/xml_files/test_case_list_template.xml
View file @
849be5f9
...
...
@@ -29,13 +29,13 @@
<testCase
id=
"010101"
>
<class>
Build_eNB
</class>
<desc>
Build eNB (USRP)
</desc>
<Build_eNB_args>
-w USRP -
x -
c --eNB
</Build_eNB_args>
<Build_eNB_args>
-w USRP -c --eNB
</Build_eNB_args>
</testCase>
<testCase
id=
"010102"
>
<class>
Build_eNB
</class>
<desc>
Build eNB (USRP)
</desc>
<Build_eNB_args>
-w BLADERF -
x -
c --eNB
</Build_eNB_args>
<Build_eNB_args>
-w BLADERF -c --eNB
</Build_eNB_args>
</testCase>
<testCase
id=
"030101"
>
...
...
cmake_targets/CMakeLists.txt
View file @
849be5f9
...
...
@@ -1880,9 +1880,13 @@ endif (${T_TRACER})
#This rule and the following deal with it.
add_custom_command
(
OUTPUT
${
OPENAIR_DIR
}
/common/utils/T/T_IDs.h
COMMAND make
COMMAND $
(
MAKE
)
clean
COMMAND $
(
MAKE
)
COMMAND $
(
MAKE
)
check_vcd
WORKING_DIRECTORY
${
OPENAIR_DIR
}
/common/utils/T
DEPENDS
${
OPENAIR_DIR
}
/common/utils/T/T_messages.txt
${
OPENAIR_DIR
}
/common/utils/LOG/vcd_signal_dumper.c
${
OPENAIR_DIR
}
/common/utils/LOG/vcd_signal_dumper.h
)
#This rule is specifically needed to generate T files
...
...
@@ -2187,7 +2191,8 @@ if (${T_TRACER})
oai_eth_transpro
FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA
SECU_CN SCHED_LIB PHY L2 default_sched remote_sched RAL CN_UTILS
GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB PHY_MEX
)
GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB PHY_MEX
coding
)
if
(
TARGET
${
i
}
)
add_dependencies
(
${
i
}
generate_T
)
endif
()
...
...
@@ -2230,7 +2235,7 @@ function(make_driver name dir)
endforeach
()
CONFIGURE_FILE
(
${
OPENAIR_CMAKE
}
/tools/Kbuild.cmake
${
OPENAIR_BIN_DIR
}
/
${
name
}
/Kbuild
)
add_custom_command
(
OUTPUT
${
name
}
.ko
COMMAND
make
-C
${
module_build_path
}
M=
${
OPENAIR_BIN_DIR
}
/
${
name
}
COMMAND
$
(
MAKE
)
-C
${
module_build_path
}
M=
${
OPENAIR_BIN_DIR
}
/
${
name
}
WORKING_DIRECTORY
${
OPENAIR_BIN_DIR
}
/
${
name
}
COMMENT
"building
${
module
}
.ko"
VERBATIM
...
...
cmake_targets/tools/build_helper
View file @
849be5f9
...
...
@@ -683,7 +683,7 @@ install_asn1c_from_source(){
# better to use a given commit than a branch in case the branch
# is updated and requires modifications in the source of OAI
#git checkout velichkov_s1ap_plus_option_group
git checkout
ec830d70bbb014b769810355a2f321a91ccd8a58
git checkout
73d6b23dcec9ab36605b4af884143824392134c1
autoreconf -iv
./configure
make -j`nproc`
...
...
common/utils/LOG/vcd_signal_dumper.h
View file @
849be5f9
...
...
@@ -39,7 +39,7 @@
/* WARNING: if you edit the enums below, update also string definitions in vcd_signal_dumper.c */
typedef
enum
{
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB
=
0
,
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB
=
0
,
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB
,
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_ENB
,
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB
,
...
...
@@ -91,12 +91,12 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLES_TX_SEQ_NUM
,
VCD_SIGNAL_DUMPER_VARIABLES_CNT
,
VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP
,
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_POLL_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC
,
VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE
,
VCD_SIGNAL_DUMPER_VARIABLE
S
_ITTI_SEND_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE
S
_ITTI_POLL_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE
S
_ITTI_RECV_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE
S
_ITTI_ALLOC_MSG
,
VCD_SIGNAL_DUMPER_VARIABLE
S
_MP_ALLOC
,
VCD_SIGNAL_DUMPER_VARIABLE
S
_MP_FREE
,
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX
,
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX
,
VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO
,
...
...
common/utils/T/.gitignore
View file @
849be5f9
...
...
@@ -15,4 +15,5 @@ tracer/to_vcd
tracer/extract_input_subframe
tracer/extract_output_subframe
tracer/extract
tracer/multi
tracee/tracee
common/utils/T/Makefile
View file @
849be5f9
...
...
@@ -18,6 +18,15 @@ T_messages.txt.h: T_messages.txt
T_IDs.h
:
$(GENIDS) T_messages.txt
./
$(GENIDS)
T_messages.txt T_IDs.h
check_vcd
:
gcc
-Wall
-I
.
-I
..
-I
../itti
-Itracer
-o
_check_vcd check_vcd.c tracer/database.c tracer/utils.c
-lm
-pthread
./_check_vcd
||
(
rm
-f
./_check_vcd ./T_IDs.h ./T_messages.txt.h
&&
false
)
rm
-f
./_check_vcd
.PHONY
:
check_vcd
clean
:
rm
-f
*
.o
$(GENIDS)
core T_IDs.h T_messages.txt.h
cd
tracer
&&
make clean
rm
-f
*
.o
$(GENIDS)
core T_IDs.h T_messages.txt.h _check_vcd
cleanall
:
clean
cd
tracer
&&
$(MAKE)
clean
common/utils/T/T.c
View file @
849be5f9
...
...
@@ -31,6 +31,12 @@ volatile int _T_freelist_head;
volatile
int
*
T_freelist_head
=
&
_T_freelist_head
;
T_cache_t
*
T_cache
;
#if BASIC_SIMULATOR
/* global variables used by T_GET_SLOT, see in T.h */
volatile
uint64_t
T_next_id
;
volatile
uint64_t
T_active_id
;
#endif
static
void
get_message
(
int
s
)
{
char
t
;
...
...
@@ -91,7 +97,7 @@ static void new_thread(void *(*f)(void *), void *data)
/* defined in local_tracer.c */
void
T_local_tracer_main
(
int
remote_port
,
int
wait_for_tracer
,
int
local_socket
,
char
*
shm_file
);
int
local_socket
,
void
*
shm_array
);
/* We monitor the tracee and the local tracer processes.
* When one dies we forcefully kill the other.
...
...
@@ -114,22 +120,31 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
{
int
socket_pair
[
2
];
int
s
;
int
T_shm_fd
;
int
child1
,
child2
;
char
shm_file
[
128
];
sprintf
(
shm_file
,
"/%s%d"
,
T_SHM_FILENAME
,
getpid
());
int
i
;
if
(
socketpair
(
AF_UNIX
,
SOCK_STREAM
,
0
,
socket_pair
))
{
perror
(
"socketpair"
);
abort
();
}
/* setup shared memory */
T_cache
=
mmap
(
NULL
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
),
PROT_READ
|
PROT_WRITE
,
MAP_SHARED
|
MAP_ANONYMOUS
,
-
1
,
0
);
if
(
T_cache
==
MAP_FAILED
)
{
perror
(
"mmap"
);
abort
();
}
/* let's garbage the memory to catch some potential problems
* (think multiprocessor sync issues, barriers, etc.)
*/
memset
(
T_cache
,
0x55
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
));
for
(
i
=
0
;
i
<
T_CACHE_SIZE
;
i
++
)
T_cache
[
i
].
busy
=
0
;
/* child1 runs the local tracer and child2 (or main) runs the tracee */
child1
=
fork
();
if
(
child1
==
-
1
)
abort
();
if
(
child1
==
0
)
{
close
(
socket_pair
[
1
]);
T_local_tracer_main
(
remote_port
,
wait_for_tracer
,
socket_pair
[
0
],
shm_fil
e
);
T_cach
e
);
exit
(
0
);
}
close
(
socket_pair
[
0
]);
...
...
@@ -138,6 +153,7 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
child2
=
fork
();
if
(
child2
==
-
1
)
abort
();
if
(
child2
!=
0
)
{
close
(
socket_pair
[
1
]);
munmap
(
T_cache
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
));
monitor_and_kill
(
child1
,
child2
);
}
}
...
...
@@ -148,34 +164,29 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
T_socket
=
s
;
/* setup shared memory */
T_shm_fd
=
shm_open
(
shm_file
,
O_RDWR
/*| O_SYNC*/
,
0666
);
shm_unlink
(
shm_file
);
if
(
T_shm_fd
==
-
1
)
{
perror
(
shm_file
);
abort
();
}
T_cache
=
mmap
(
NULL
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
),
PROT_READ
|
PROT_WRITE
,
MAP_SHARED
,
T_shm_fd
,
0
);
if
(
T_cache
==
MAP_FAILED
)
{
perror
(
shm_file
);
abort
();
}
close
(
T_shm_fd
);
new_thread
(
T_receive_thread
,
NULL
);
}
void
T_Config_Init
(
void
)
{
int
T_port
;
/* by default we wait for the tracer */
int
T_nowait
;
/* default port to listen to to wait for the tracer */
int
T_dont_fork
;
/* default is to fork, see 'T_init' to understand */
int
T_port
;
/* by default we wait for the tracer */
int
T_nowait
;
/* default port to listen to to wait for the tracer */
int
T_dont_fork
;
/* default is to fork, see 'T_init' to understand */
paramdef_t
ttraceparams
[]
=
CMDLINE_TTRACEPARAMS_DESC
;
paramdef_t
ttraceparams
[]
=
CMDLINE_TTRACEPARAMS_DESC
;
/* for a cleaner config file, TTracer params should be defined in a specific section... */
config_get
(
ttraceparams
,
sizeof
(
ttraceparams
)
/
sizeof
(
paramdef_t
),
TTRACER_CONFIG_PREFIX
);
/* for a cleaner config file, TTracer params should be defined in a
* specific section...
*/
config_get
(
ttraceparams
,
sizeof
(
ttraceparams
)
/
sizeof
(
paramdef_t
),
TTRACER_CONFIG_PREFIX
);
/* compatibility: look for TTracer command line options in root section */
config_process_cmdline
(
ttraceparams
,
sizeof
(
ttraceparams
)
/
sizeof
(
paramdef_t
),
NULL
);
/* compatibility: look for TTracer command line options in root section */
config_process_cmdline
(
ttraceparams
,
sizeof
(
ttraceparams
)
/
sizeof
(
paramdef_t
),
NULL
);
if
(
T_stdout
==
0
)
{
if
(
T_stdout
==
0
)
T_init
(
T_port
,
1
-
T_nowait
,
T_dont_fork
);
}
}
common/utils/T/T.h
View file @
849be5f9
...
...
@@ -112,13 +112,37 @@ extern volatile int *T_freelist_head;
extern
T_cache_t
*
T_cache
;
extern
int
*
T_active
;
/* When running the basic simulator, we may fill the T cache too fast.
* Let's not crash if it's full, just wait.
* Let's serialize write accesses to the T cache. For that, we use a
* 'ticket' mechanism. To acquire a T slot the caller needs to own the
* current active ticket. We also wait for the slot to be free if
* it is already in use.
*/
#if BASIC_SIMULATOR
# define T_BASIC_SIMULATOR_WAIT \
while (T_cache[T_LOCAL_slot].busy) usleep(100)
# define T_GET_SLOT \
do { \
extern volatile uint64_t T_next_id; \
extern volatile uint64_t T_active_id; \
uint64_t id; \
/* get a ticket */
\
id = __sync_fetch_and_add(&T_next_id, 1); \
/* wait for our turn */
\
while (id != __sync_fetch_and_add(&T_active_id, 0))
/* busy wait */
; \
/* this is our turn, try to acquire the slot until it's free */
\
do { \
T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01); \
if (T_LOCAL_busy & 0x01) usleep(100); \
} while (T_LOCAL_busy & 0x01); \
/* check that there are still some tickets */
\
if (__sync_fetch_and_add(&T_active_id, 0) == 0xffffffffffffffff) { \
printf("T: reached the end of times, bye...\n"); \
abort(); \
} \
/* free our ticket, which signals the next waiter that it's its turn */
\
(void)__sync_fetch_and_add(&T_active_id, 1); \
} while (0)
#else
# define T_BASIC_SIMULATOR_WAIT
/* */
# define T_GET_SLOT \
T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01);
#endif
/* used at header of Tn, allocates buffer */
...
...
@@ -126,11 +150,12 @@ extern int *T_active;
char *T_LOCAL_buf; \
int T_LOCAL_size = 0; \
int T_LOCAL_slot; \
int T_LOCAL_busy; \
T_LOCAL_slot = __sync_fetch_and_add(T_freelist_head, 1) \
& (T_CACHE_SIZE - 1); \
(void)__sync_fetch_and_and(T_freelist_head, T_CACHE_SIZE - 1); \
T_
BASIC_SIMULATOR_WAI
T; \
if (T_
cache[T_LOCAL_slot].busy
) { \
T_
GET_SLO
T; \
if (T_
LOCAL_busy & 0x01
) { \
printf("%s:%d:%s: T cache is full - consider increasing its size\n", \
__FILE__, __LINE__, __FUNCTION__); \
abort(); \
...
...
@@ -142,7 +167,7 @@ extern int *T_active;
#define T_COMMIT() \
T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
__sync_synchronize(); \
T_cache[T_LOCAL_slot].busy = 1; \
(void)__sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x02);
#define T_CHECK_SIZE(len, argnum) \
if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \
...
...
@@ -578,10 +603,10 @@ extern int *T_active;
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*------------------------------------------------------------------------------------------------------------------------------------------*/
#define CMDLINE_TTRACEPARAMS_DESC { \
{"T_port", CONFIG_HLP_TPORT, 0,
iptr:&T_port, defintval:2021, TYPE_INT, 0},
\
{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL,
iptr:&T_nowait, defintval:0, TYPE_INT, 0},
\
{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL,
iptr:&T_dont_fork, defintval:0, TYPE_INT, 0},
\
{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL,
iptr:&T_stdout, defintval:1, TYPE_INT, 0},
\
{"T_port", CONFIG_HLP_TPORT, 0,
iptr:&T_port, defintval:2021, TYPE_INT, 0},
\
{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL,
iptr:&T_nowait, defintval:0, TYPE_INT, 0},
\
{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL,
iptr:&T_dont_fork, defintval:0, TYPE_INT, 0},
\
{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL,
iptr:&T_stdout, defintval:1, TYPE_INT, 0},
\
}
...
...
common/utils/T/T_defs.h
View file @
849be5f9
...
...
@@ -31,13 +31,15 @@
#endif
typedef
struct
{
/* 'busy' is a bit field
* bit 0: 1 means that slot is acquired by writer
* bit 1: 1 means that slot is ready for consumption
*/
volatile
int
busy
;
char
buffer
[
T_BUFFER_MAX
];
int
length
;
}
T_cache_t
;
#define T_SHM_FILENAME "/T_shm_segment"
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
#define VCD_NUM_FUNCTIONS 190
...
...
common/utils/T/T_messages.txt
View file @
849be5f9
...
...
@@ -749,6 +749,7 @@ ID = LEGACY_OSA_TRACE
DESC = OSA legacy logs - trace level
GROUP = ALL:LEGACY_OSA:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_SIM_INFO
DESC = SIM legacy logs - info level
GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_INFO:LEGACY
...
...
@@ -769,6 +770,7 @@ ID = LEGACY_SIM_TRACE
DESC = SIM legacy logs - trace level
GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
# this is a bad hack but I won't fix (function util_print_hex_octets
# in openairinterface5g/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
# does funky things with the LOG_x macros but we work on the C pre-processor
...
...
@@ -922,30 +924,9 @@ ID = buf_test
#VCD variables and functions
#be careful! this must be synchronized with the code!
#also keep up to date VCD_NUM_VARIABLES and VCD_NUM_FUNCTIONS in T_defs.h
#to synchronize: copy/paste from openair2/UTIL/LOG/vcd_signal_dumper.h
#the variables and functions name, replace "SIGNAL_DUMPER_VARIABLES" by
#"VARIABLE" and "SIGNAL_DUMPER_FUNCTIONS" by "FUNCTION" (check that
#everything is fine! for example we have
#VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG that has VARIABLE without S)
#and then process with sed
#to generate variables:
#sed -e "s/ VCD_VARIABLE_\(.*\)/ID = VCD_VARIABLE_\1\n DESC = VCD variable \1\n GROUP = ALL:VCD:ENB\n FORMAT = ulong,value/" < VCD >> T_messages.txt
#to generate functions:
#sed -e "s/ VCD_FUNCTION_\(.*\)/ID = VCD_FUNCTION_\1\n DESC = VCD function \1\n GROUP = ALL:VCD:ENB\n FORMAT = int,value/" < VCD.functions >> T_messages.txt
#you may want to manually edit groups for UE instead of eNB
#then count functions and variables and update VCD_NUM_FUNCTIONS and
#VCD_NUM_VARIABLES in T_defs.h
#also verify that VCD_FIRST_FUNCTION and VCD_FIRST_VARIABLE are correct
#in T_defs.h. They have to point to the first function and variable
#as defined below. Note also that the order of the VCD functions
#and variables must be the same as in the code.
#also keep up to date VCD_NUM_VARIABLES, VCD_NUM_FUNCTIONS,
#VCD_FIRST_FUNCTION and VCD_FIRST_VARIABLE in T_defs.h
#to check that everything is correct you can run: make _check_vcd
#variables
...
...
@@ -953,514 +934,642 @@ ID = VCD_VARIABLE_FRAME_NUMBER_TX0_ENB
DESC = VCD variable FRAME_NUMBER_TX0_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_TX0_eNB
ID = VCD_VARIABLE_FRAME_NUMBER_TX1_ENB
DESC = VCD variable FRAME_NUMBER_TX1_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_TX1_eNB
ID = VCD_VARIABLE_FRAME_NUMBER_RX0_ENB
DESC = VCD variable FRAME_NUMBER_RX0_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_RX0_eNB
ID = VCD_VARIABLE_FRAME_NUMBER_RX1_ENB
DESC = VCD variable FRAME_NUMBER_RX1_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_RX1_eNB
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_ENB
DESC = VCD variable SUBFRAME_NUMBER_TX0_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_TX0_eNB
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_ENB
DESC = VCD variable SUBFRAME_NUMBER_TX1_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_TX1_eNB
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_ENB
DESC = VCD variable SUBFRAME_NUMBER_RX0_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_RX0_eNB
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB
DESC = VCD variable SUBFRAME_NUMBER_RX1_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_RX1_eNB
ID = VCD_VARIABLE_FRAME_NUMBER_TX0_RU
DESC = VCD variable FRAME_NUMBER_TX0_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_TX0_RU
ID = VCD_VARIABLE_FRAME_NUMBER_TX1_RU
DESC = VCD variable FRAME_NUMBER_TX1_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_TX1_RU
ID = VCD_VARIABLE_FRAME_NUMBER_RX0_RU
DESC = VCD variable FRAME_NUMBER_RX0_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_RX0_RU
ID = VCD_VARIABLE_FRAME_NUMBER_RX1_RU
DESC = VCD variable FRAME_NUMBER_RX1_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_RX1_RU
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU
DESC = VCD variable SUBFRAME_NUMBER_TX0_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_TX0_RU
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU
DESC = VCD variable SUBFRAME_NUMBER_TX1_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_TX1_RU
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU
DESC = VCD variable SUBFRAME_NUMBER_RX0_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_RX0_RU
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU
DESC = VCD variable SUBFRAME_NUMBER_RX1_RU
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_number_RX1_RU
ID = VCD_VARIABLE_RUNTIME_TX_ENB
DESC = VCD variable RUNTIME_TX_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = runtime_TX_eNB
ID = VCD_VARIABLE_RUNTIME_RX_ENB
DESC = VCD variable RUNTIME_RX_ENB
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = runtime_RX_eNB
ID = VCD_VARIABLE_FRAME_NUMBER_TX0_UE
DESC = VCD variable FRAME_NUMBER_TX0_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_TX0_UE
ID = VCD_VARIABLE_FRAME_NUMBER_TX1_UE
DESC = VCD variable FRAME_NUMBER_TX1_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_TX1_UE
ID = VCD_VARIABLE_FRAME_NUMBER_RX0_UE
DESC = VCD variable FRAME_NUMBER_RX0_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_RX0_UE
ID = VCD_VARIABLE_FRAME_NUMBER_RX1_UE
DESC = VCD variable FRAME_NUMBER_RX1_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = frame_number_RX1_UE
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_UE
DESC = VCD variable SUBFRAME_NUMBER_TX0_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_TX0_UE
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_UE
DESC = VCD variable SUBFRAME_NUMBER_TX1_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_TX1_UE
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_UE
DESC = VCD variable SUBFRAME_NUMBER_RX0_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_RX0_UE
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE
DESC = VCD variable SUBFRAME_NUMBER_RX1_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = subframe_RX1_UE
ID = VCD_VARIABLE_UE_RX_OFFSET
DESC = VCD variable UE_RX_OFFSET
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue_rx_offset
ID = VCD_VARIABLE_DIFF
DESC = VCD variable DIFF
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = diff2
ID = VCD_VARIABLE_HW_SUBFRAME
DESC = VCD variable HW_SUBFRAME
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = hw_subframe
ID = VCD_VARIABLE_HW_FRAME
DESC = VCD variable HW_FRAME
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = hw_frame
ID = VCD_VARIABLE_HW_SUBFRAME_RX
DESC = VCD variable HW_SUBFRAME_RX
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = hw_subframe_rx
ID = VCD_VARIABLE_HW_FRAME_RX
DESC = VCD variable HW_FRAME_RX
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = hw_frame_rx
ID = VCD_VARIABLE_TXCNT
DESC = VCD variable TXCNT
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = txcnt
ID = VCD_VARIABLE_RXCNT
DESC = VCD variable RXCNT
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = rxcnt
ID = VCD_VARIABLE_TRX_TS
DESC = VCD variable TRX_TS
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = trx_ts
ID = VCD_VARIABLE_TRX_TST
DESC = VCD variable TRX_TST
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = trx_tst
ID = VCD_VARIABLE_TRX_TS_UE
DESC = VCD variable TRX_TS_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = trx_ts_ue
ID = VCD_VARIABLE_TRX_TST_UE
DESC = VCD variable TRX_TST_UE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = trx_tst_ue
ID = VCD_VARIABLE_TRX_WRITE_FLAGS
DESC = VCD variable TRX_WRITE_FLAGS
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = trx_write_flags
ID = VCD_VARIABLE_TX_TS
DESC = VCD variable TX_TS
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = tx_ts
ID = VCD_VARIABLE_RX_TS
DESC = VCD variable RX_TS
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = rx_ts
ID = VCD_VARIABLE_RX_HWCNT
DESC = VCD variable RX_HWCNT
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = hw_cnt_rx
ID = VCD_VARIABLE_RX_LHWCNT
DESC = VCD variable RX_LHWCNT
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = lhw_cnt_rx
ID = VCD_VARIABLE_TX_HWCNT
DESC = VCD variable TX_HWCNT
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = hw_cnt_tx
ID = VCD_VARIABLE_TX_LHWCNT
DESC = VCD variable TX_LHWCNT
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = lhw_cnt_tx
ID = VCD_VARIABLE_RX_PCK
DESC = VCD variable RX_PCK
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = pck_rx
ID = VCD_VARIABLE_TX_PCK
DESC = VCD variable TX_PCK
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = pck_tx
ID = VCD_VARIABLE_RX_SEQ_NUM
DESC = VCD variable RX_SEQ_NUM
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = rx_seq_num
ID = VCD_VARIABLE_RX_SEQ_NUM_PRV
DESC = VCD variable RX_SEQ_NUM_PRV
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = rx_seq_num_prv
ID = VCD_VARIABLE_TX_SEQ_NUM
DESC = VCD variable TX_SEQ_NUM
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = tx_seq_num
ID = VCD_VARIABLE_CNT
DESC = VCD variable CNT
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = cnt
ID = VCD_VARIABLE_DUMMY_DUMP
DESC = VCD variable DUMMY_DUMP
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = dummy_dump
ID = VCD_VARIABLE_ITTI_SEND_MSG
DESC = VCD variable ITTI_SEND_MSG
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = itti_send_msg
ID = VCD_VARIABLE_ITTI_POLL_MSG
DESC = VCD variable ITTI_POLL_MSG
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = itti_poll_msg
ID = VCD_VARIABLE_ITTI_RECV_MSG
DESC = VCD variable ITTI_RECV_MSG
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = itti_recv_msg
ID = VCD_VARIABLE_ITTI_ALLOC_MSG
DESC = VCD variable ITTI_ALLOC_MSG
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = itti_alloc_msg
ID = VCD_VARIABLE_MP_ALLOC
DESC = VCD variable MP_ALLOC
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = mp_alloc
ID = VCD_VARIABLE_MP_FREE
DESC = VCD variable MP_FREE
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = mp_free
ID = VCD_VARIABLE_UE_INST_CNT_RX
DESC = VCD variable UE_INST_CNT_RX
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue_inst_cnt_rx
ID = VCD_VARIABLE_UE_INST_CNT_TX
DESC = VCD variable UE_INST_CNT_TX
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue_inst_cnt_tx
ID = VCD_VARIABLE_DCI_INFO
DESC = VCD variable DCI_INFO
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = dci_info
ID = VCD_VARIABLE_UE0_BSR
DESC = VCD variable UE0_BSR
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_BSR
ID = VCD_VARIABLE_UE0_BO
DESC = VCD variable UE0_BO
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_BO
ID = VCD_VARIABLE_UE0_SCHEDULED
DESC = VCD variable UE0_SCHEDULED
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_scheduled
ID = VCD_VARIABLE_UE0_TIMING_ADVANCE
DESC = VCD variable UE0_TIMING_ADVANCE
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_timing_advance
ID = VCD_VARIABLE_UE0_SR_ENERGY
DESC = VCD variable UE0_SR_ENERGY
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SR_ENERGY
ID = VCD_VARIABLE_UE0_SR_THRES
DESC = VCD variable UE0_SR_THRES
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SR_THRES
ID = VCD_VARIABLE_UE0_RSSI0
DESC = VCD variable UE0_RSSI0
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi0
ID = VCD_VARIABLE_UE0_RSSI1
DESC = VCD variable UE0_RSSI1
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi1
ID = VCD_VARIABLE_UE0_RSSI2
DESC = VCD variable UE0_RSSI2
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi2
ID = VCD_VARIABLE_UE0_RSSI3
DESC = VCD variable UE0_RSSI3
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi3
ID = VCD_VARIABLE_UE0_RSSI4
DESC = VCD variable UE0_RSSI4
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi4
ID = VCD_VARIABLE_UE0_RSSI5
DESC = VCD variable UE0_RSSI5
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi5
ID = VCD_VARIABLE_UE0_RSSI6
DESC = VCD variable UE0_RSSI6
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi6
ID = VCD_VARIABLE_UE0_RSSI7
DESC = VCD variable UE0_RSSI7
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_rssi7
ID = VCD_VARIABLE_UE0_RES0
DESC = VCD variable UE0_RES0
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res0
ID = VCD_VARIABLE_UE0_RES1
DESC = VCD variable UE0_RES1
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res1
ID = VCD_VARIABLE_UE0_RES2
DESC = VCD variable UE0_RES2
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res2
ID = VCD_VARIABLE_UE0_RES3
DESC = VCD variable UE0_RES3
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res3
ID = VCD_VARIABLE_UE0_RES4
DESC = VCD variable UE0_RES4
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res4
ID = VCD_VARIABLE_UE0_RES5
DESC = VCD variable UE0_RES5
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res5
ID = VCD_VARIABLE_UE0_RES6
DESC = VCD variable UE0_RES6
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res6
ID = VCD_VARIABLE_UE0_RES7
DESC = VCD variable UE0_RES7
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_res7
ID = VCD_VARIABLE_UE0_MCS0
DESC = VCD variable UE0_MCS0
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS0
ID = VCD_VARIABLE_UE0_MCS1
DESC = VCD variable UE0_MCS1
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS1
ID = VCD_VARIABLE_UE0_MCS2
DESC = VCD variable UE0_MCS2
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS2
ID = VCD_VARIABLE_UE0_MCS3
DESC = VCD variable UE0_MCS3
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS3
ID = VCD_VARIABLE_UE0_MCS4
DESC = VCD variable UE0_MCS4
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS4
ID = VCD_VARIABLE_UE0_MCS5
DESC = VCD variable UE0_MCS5
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS5
ID = VCD_VARIABLE_UE0_MCS6
DESC = VCD variable UE0_MCS6
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS6
ID = VCD_VARIABLE_UE0_MCS7
DESC = VCD variable UE0_MCS7
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_MCS7
ID = VCD_VARIABLE_UE0_RB0
DESC = VCD variable UE0_RB0
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB0
ID = VCD_VARIABLE_UE0_RB1
DESC = VCD variable UE0_RB1
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB1
ID = VCD_VARIABLE_UE0_RB2
DESC = VCD variable UE0_RB2
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB2
ID = VCD_VARIABLE_UE0_RB3
DESC = VCD variable UE0_RB3
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB3
ID = VCD_VARIABLE_UE0_RB4
DESC = VCD variable UE0_RB4
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB4
ID = VCD_VARIABLE_UE0_RB5
DESC = VCD variable UE0_RB5
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB5
ID = VCD_VARIABLE_UE0_RB6
DESC = VCD variable UE0_RB6
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB6
ID = VCD_VARIABLE_UE0_RB7
DESC = VCD variable UE0_RB7
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_RB7
ID = VCD_VARIABLE_UE0_ROUND0
DESC = VCD variable UE0_ROUND0
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND0
ID = VCD_VARIABLE_UE0_ROUND1
DESC = VCD variable UE0_ROUND1
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND1
ID = VCD_VARIABLE_UE0_ROUND2
DESC = VCD variable UE0_ROUND2
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND2
ID = VCD_VARIABLE_UE0_ROUND3
DESC = VCD variable UE0_ROUND3
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND3
ID = VCD_VARIABLE_UE0_ROUND4
DESC = VCD variable UE0_ROUND4
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND4
ID = VCD_VARIABLE_UE0_ROUND5
DESC = VCD variable UE0_ROUND5
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND5
ID = VCD_VARIABLE_UE0_ROUND6
DESC = VCD variable UE0_ROUND6
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND6
ID = VCD_VARIABLE_UE0_ROUND7
DESC = VCD variable UE0_ROUND7
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_ROUND7
ID = VCD_VARIABLE_UE0_SFN0
DESC = VCD variable UE0_SFN0
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN0
ID = VCD_VARIABLE_UE0_SFN1
DESC = VCD variable UE0_SFN1
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN1
ID = VCD_VARIABLE_UE0_SFN2
DESC = VCD variable UE0_SFN2
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN2
ID = VCD_VARIABLE_UE0_SFN3
DESC = VCD variable UE0_SFN3
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN3
ID = VCD_VARIABLE_UE0_SFN4
DESC = VCD variable UE0_SFN4
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN4
ID = VCD_VARIABLE_UE0_SFN5
DESC = VCD variable UE0_SFN5
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN5
ID = VCD_VARIABLE_UE0_SFN6
DESC = VCD variable UE0_SFN6
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN6
ID = VCD_VARIABLE_UE0_SFN7
DESC = VCD variable UE0_SFN7
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_SFN7
ID = VCD_VARIABLE_SEND_IF4_SYMBOL
DESC = VCD variable SEND_IF4_SYMBOL
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = send_if4_symbol
ID = VCD_VARIABLE_RECV_IF4_SYMBOL
DESC = VCD variable RECV_IF4_SYMBOL
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = recv_if4_symbol
ID = VCD_VARIABLE_SEND_IF5_PKT_ID
DESC = VCD variable SEND_IF5_PKT_ID
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = send_if5_pkt_id
ID = VCD_VARIABLE_RECV_IF5_PKT_ID
DESC = VCD variable RECV_IF5_PKT_ID
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = recv_if5_pkt_id
ID = VCD_VARIABLE_UE_PDCP_FLUSH_SIZE
DESC = VCD variable UE_PDCP_FLUSH_SIZE
GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue_pdcp_flush_size
ID = VCD_VARIABLE_UE_PDCP_FLUSH_ERR
DESC = VCD variable UE_PDCP_FLUSH_ERR
GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue_pdcp_flush_err
ID = VCD_VARIABLE_UE0_TRX_READ_NS
DESC = VCD variable UE0_TRX_READ_NS
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_trx_read_ns
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS
DESC = VCD variable UE0_TRX_WRITE_NS
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_trx_write_ns
ID = VCD_VARIABLE_UE0_TRX_READ_NS_MISSING
DESC = VCD variable UE0_TRX_READ_NS_MISSING
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_trx_read_ns_missing
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING
DESC = VCD variable UE0_TRX_WRITE_NS_MISSING
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ue0_trx_write_ns_missing
ID = VCD_VARIABLE_CPUID_ENB_THREAD_RXTX
DESC = VCD variable CPUID_ENB_THREAD_RXTX
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = enb_thread_rxtx_CPUID
ID = VCD_VARIABLE_CPUID_RU_THREAD
DESC = VCD variable CPUID_RU_THREAD
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ru_thread_CPUID
ID = VCD_VARIABLE_CPUID_RU_THREAD_TX
DESC = VCD variable CPUID_RU_THREAD_TX
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
VCD_NAME = ru_thread_tx_CPUID
#functions
...
...
@@ -1468,763 +1577,954 @@ ID = VCD_FUNCTION_RT_SLEEP
DESC = VCD function RT_SLEEP
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rt_sleep
ID = VCD_FUNCTION_TRX_READ
DESC = VCD function TRX_READ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_read
ID = VCD_FUNCTION_TRX_WRITE
DESC = VCD function TRX_WRITE
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_write
ID = VCD_FUNCTION_TRX_READ_UE
DESC = VCD function TRX_READ_UE
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_read_ue
ID = VCD_FUNCTION_TRX_WRITE_UE
DESC = VCD function TRX_WRITE_UE
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_write_ue
ID = VCD_FUNCTION_TRX_READ_IF
DESC = VCD function TRX_READ_IF
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_read_if
ID = VCD_FUNCTION_TRX_WRITE_IF
DESC = VCD function TRX_WRITE_IF
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_write_if
ID = VCD_FUNCTION_eNB_PROC_RXTX0
DESC = VCD function eNB_PROC_RXTX0
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_thread_rxtx0
ID = VCD_FUNCTION_eNB_PROC_RXTX1
DESC = VCD function eNB_PROC_RXTX1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_thread_rxtx1
ID = VCD_FUNCTION_UE_THREAD_SYNCH
DESC = VCD function UE_THREAD_SYNCH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_thread_synch
ID = VCD_FUNCTION_UE_THREAD_RXTX0
DESC = VCD function UE_THREAD_RXTX0
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_thread_rxtx0
ID = VCD_FUNCTION_UE_THREAD_RXTX1
DESC = VCD function UE_THREAD_RXTX1
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_thread_rxtx1
ID = VCD_FUNCTION_TRX_READ_SF9
DESC = VCD function TRX_READ_SF9
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_read_sf9
ID = VCD_FUNCTION_TRX_WRITE_SF9
DESC = VCD function TRX_WRITE_SF9
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_write_sf9
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX0
DESC = VCD function UE_SIGNAL_COND_RXTX0
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_signal_cond_rxtx0
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX1
DESC = VCD function UE_SIGNAL_COND_RXTX1
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_signal_cond_rxtx1
ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0
DESC = VCD function UE_WAIT_COND_RXTX0
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_wait_cond_rxtx0
ID = VCD_FUNCTION_UE_WAIT_COND_RXTX1
DESC = VCD function UE_WAIT_COND_RXTX1
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_wait_cond_rxtx1
ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0
DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_lock_mutex_rxtx_for_cond_wait0
ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1
DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_lock_mutex_rxtx_for_cond_wait1
ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0
DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_lock_mutex_rxtx_for_cnt_decrement0
ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1
DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_lock_mutex_rxtx_for_cnt_decrement1
ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0
DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_lock_mutex_rxtx_for_cnt_increment0
ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1
DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_lock_mutex_rxtx_for_cnt_increment1
ID = VCD_FUNCTION_SIM_DO_DL_SIGNAL
DESC = VCD function SIM_DO_DL_SIGNAL
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = do_DL_sig
ID = VCD_FUNCTION_SIM_DO_UL_SIGNAL
DESC = VCD function SIM_DO_UL_SIGNAL
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = do_UL_sig
ID = VCD_FUNCTION_SIM_UE_TRX_READ
DESC = VCD function SIM_UE_TRX_READ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = UE_trx_read
ID = VCD_FUNCTION_eNB_TX
DESC = VCD function eNB_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_tx
ID = VCD_FUNCTION_eNB_RX
DESC = VCD function eNB_RX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_rx
ID = VCD_FUNCTION_eNB_TRX
DESC = VCD function eNB_TRX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_trx
ID = VCD_FUNCTION_eNB_TM
DESC = VCD function eNB_TM
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_tm
ID = VCD_FUNCTION_eNB_RX_SLEEP
DESC = VCD function eNB_RX_SLEEP
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_rx_sleep
ID = VCD_FUNCTION_eNB_TX_SLEEP
DESC = VCD function eNB_TX_SLEEP
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_tx_sleep
ID = VCD_FUNCTION_eNB_PROC_SLEEP
DESC = VCD function eNB_PROC_SLEEP
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = eNB_proc_sleep
ID = VCD_FUNCTION_TRX_READ_RF
DESC = VCD function TRX_READ_RF
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_read_rf
ID = VCD_FUNCTION_TRX_WRITE_RF
DESC = VCD function TRX_WRITE_RF
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = trx_write_rf
ID = VCD_FUNCTION_UE_SYNCH
DESC = VCD function UE_SYNCH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_synch
ID = VCD_FUNCTION_UE_SLOT_FEP
DESC = VCD function UE_SLOT_FEP
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_slot_fep
ID = VCD_FUNCTION_UE_RRC_MEASUREMENTS
DESC = VCD function UE_RRC_MEASUREMENTS
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_rrc_measurements
ID = VCD_FUNCTION_UE_GAIN_CONTROL
DESC = VCD function UE_GAIN_CONTROL
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_gain_control
ID = VCD_FUNCTION_UE_ADJUST_SYNCH
DESC = VCD function UE_ADJUST_SYNCH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_adjust_synch
ID = VCD_FUNCTION_UE_MEASUREMENT_PROCEDURES
DESC = VCD function UE_MEASUREMENT_PROCEDURES
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = lte_ue_measurement_procedures
ID = VCD_FUNCTION_UE_PDCCH_PROCEDURES
DESC = VCD function UE_PDCCH_PROCEDURES
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = lte_ue_pdcch_procedures
ID = VCD_FUNCTION_UE_PBCH_PROCEDURES
DESC = VCD function UE_PBCH_PROCEDURES
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = lte_ue_pbch_procedures
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX
DESC = VCD function PHY_PROCEDURES_ENB_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_eNb_tx0
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1
DESC = VCD function PHY_PROCEDURES_ENB_TX1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_eNb_tx1
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX
DESC = VCD function PHY_PROCEDURES_RU_FEPRX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ru_feprx0
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1
DESC = VCD function PHY_PROCEDURES_RU_FEPRX1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ru_feprx1
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ru_feptx_ofdm0
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ru_feptx_ofdm1
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ru_feptx_prec0
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ru_feptx_prec1
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC
DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_eNb_rx_uespec0
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1
DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_eNb_rx_uespec1
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX
DESC = VCD function PHY_PROCEDURES_UE_TX
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ue_tx
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_RX
DESC = VCD function PHY_PROCEDURES_UE_RX
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ue_rx
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC
DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_UESPEC
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ue_tx_ulsch_uespec
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PUCCH
DESC = VCD function PHY_PROCEDURES_UE_TX_PUCCH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ue_tx_pucch
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_COMMON
DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_COMMON
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ue_tx_ulsch_common
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PRACH
DESC = VCD function PHY_PROCEDURES_UE_TX_PRACH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ue_tx_prach
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_RAR
DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_RAR
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_ue_tx_ulsch_rar
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE
DESC = VCD function PHY_PROCEDURES_ENB_LTE
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_eNB_lte
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_LTE
DESC = VCD function PHY_PROCEDURES_UE_LTE
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_procedures_UE_lte
ID = VCD_FUNCTION_PDSCH_THREAD
DESC = VCD function PDSCH_THREAD
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdsch_thread
ID = VCD_FUNCTION_DLSCH_THREAD0
DESC = VCD function DLSCH_THREAD0
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread0
ID = VCD_FUNCTION_DLSCH_THREAD1
DESC = VCD function DLSCH_THREAD1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread1
ID = VCD_FUNCTION_DLSCH_THREAD2
DESC = VCD function DLSCH_THREAD2
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread2
ID = VCD_FUNCTION_DLSCH_THREAD3
DESC = VCD function DLSCH_THREAD3
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread3
ID = VCD_FUNCTION_DLSCH_THREAD4
DESC = VCD function DLSCH_THREAD4
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread4
ID = VCD_FUNCTION_DLSCH_THREAD5
DESC = VCD function DLSCH_THREAD5
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread5
ID = VCD_FUNCTION_DLSCH_THREAD6
DESC = VCD function DLSCH_THREAD6
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread6
ID = VCD_FUNCTION_DLSCH_THREAD7
DESC = VCD function DLSCH_THREAD7
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_thread7
ID = VCD_FUNCTION_DLSCH_DECODING0
DESC = VCD function DLSCH_DECODING0
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding0
ID = VCD_FUNCTION_DLSCH_DECODING1
DESC = VCD function DLSCH_DECODING1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding1
ID = VCD_FUNCTION_DLSCH_DECODING2
DESC = VCD function DLSCH_DECODING2
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding2
ID = VCD_FUNCTION_DLSCH_DECODING3
DESC = VCD function DLSCH_DECODING3
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding3
ID = VCD_FUNCTION_DLSCH_DECODING4
DESC = VCD function DLSCH_DECODING4
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding4
ID = VCD_FUNCTION_DLSCH_DECODING5
DESC = VCD function DLSCH_DECODING5
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding5
ID = VCD_FUNCTION_DLSCH_DECODING6
DESC = VCD function DLSCH_DECODING6
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding6
ID = VCD_FUNCTION_DLSCH_DECODING7
DESC = VCD function DLSCH_DECODING7
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dlsch_decoding7
ID = VCD_FUNCTION_RX_PDCCH
DESC = VCD function RX_PDCCH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rx_pdcch
ID = VCD_FUNCTION_DCI_DECODING
DESC = VCD function DCI_DECODING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = dci_decoding
ID = VCD_FUNCTION_RX_PHICH
DESC = VCD function RX_PHICH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rx_phich
ID = VCD_FUNCTION_PDSCH_PROC
DESC = VCD function PDSCH_PROC
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdsch_procedures
ID = VCD_FUNCTION_PDSCH_PROC_SI
DESC = VCD function PDSCH_PROC_SI
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdsch_procedures_si
ID = VCD_FUNCTION_PDSCH_PROC_P
DESC = VCD function PDSCH_PROC_P
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdsch_procedures_p
ID = VCD_FUNCTION_PDSCH_PROC_RA
DESC = VCD function PDSCH_PROC_RA
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdsch_procedures_ra
ID = VCD_FUNCTION_PHY_UE_CONFIG_SIB2
DESC = VCD function PHY_UE_CONFIG_SIB2
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ue_config_sib2
ID = VCD_FUNCTION_PHY_CONFIG_SIB1_ENB
DESC = VCD function PHY_CONFIG_SIB1_ENB
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_phy_config_sib1_eNB
ID = VCD_FUNCTION_PHY_CONFIG_SIB2_ENB
DESC = VCD function PHY_CONFIG_SIB2_ENB
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_phy_config_sib2_eNB
ID = VCD_FUNCTION_PHY_CONFIG_DEDICATED_ENB
DESC = VCD function PHY_CONFIG_DEDICATED_ENB
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_phy_config_dedicated_eNB
ID = VCD_FUNCTION_PHY_UE_COMPUTE_PRACH
DESC = VCD function PHY_UE_COMPUTE_PRACH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ue_compute_prach
ID = VCD_FUNCTION_PHY_ENB_ULSCH_MSG3
DESC = VCD function PHY_ENB_ULSCH_MSG3
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_msg3
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING0
DESC = VCD function PHY_ENB_ULSCH_DECODING0
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding0
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING1
DESC = VCD function PHY_ENB_ULSCH_DECODING1
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding1
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING2
DESC = VCD function PHY_ENB_ULSCH_DECODING2
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding2
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING3
DESC = VCD function PHY_ENB_ULSCH_DECODING3
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding3
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING4
DESC = VCD function PHY_ENB_ULSCH_DECODING4
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding4
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING5
DESC = VCD function PHY_ENB_ULSCH_DECODING5
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding5
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING6
DESC = VCD function PHY_ENB_ULSCH_DECODING6
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding6
ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING7
DESC = VCD function PHY_ENB_ULSCH_DECODING7
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_ulsch_decoding7
ID = VCD_FUNCTION_PHY_ENB_SFGEN
DESC = VCD function PHY_ENB_SFGEN
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_sfgen
ID = VCD_FUNCTION_PHY_ENB_PRACH_RX
DESC = VCD function PHY_ENB_PRACH_RX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_prach_rx
ID = VCD_FUNCTION_PHY_RU_PRACH_RX
DESC = VCD function PHY_RU_PRACH_RX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ru_prach_rx
ID = VCD_FUNCTION_PHY_ENB_PDCCH_TX
DESC = VCD function PHY_ENB_PDCCH_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_pdcch_tx
ID = VCD_FUNCTION_PHY_ENB_RS_TX
DESC = VCD function PHY_ENB_RS_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_enb_rs_tx
ID = VCD_FUNCTION_UE_GENERATE_PRACH
DESC = VCD function UE_GENERATE_PRACH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ue_generate_prach
ID = VCD_FUNCTION_UE_ULSCH_MODULATION
DESC = VCD function UE_ULSCH_MODULATION
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ue_ulsch_modulation
ID = VCD_FUNCTION_UE_ULSCH_ENCODING
DESC = VCD function UE_ULSCH_ENCODING
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ue_ulsch_encoding
ID = VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI
DESC = VCD function UE_ULSCH_ENCODING_FILL_CQI
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ue_ulsch_encoding_fill_cqi
ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING
DESC = VCD function UE_ULSCH_SCRAMBLING
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_ue_ulsch_scrambling
ID = VCD_FUNCTION_ENB_DLSCH_MODULATION
DESC = VCD function ENB_DLSCH_MODULATION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_eNB_dlsch_modulation
ID = VCD_FUNCTION_ENB_DLSCH_ENCODING
DESC = VCD function ENB_DLSCH_ENCODING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_eNB_dlsch_encoding
ID = VCD_FUNCTION_ENB_DLSCH_ENCODING_W
DESC = VCD function ENB_DLSCH_ENCODING_W
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_eNB_dlsch_encoding_w
ID = VCD_FUNCTION_ENB_DLSCH_SCRAMBLING
DESC = VCD function ENB_DLSCH_SCRAMBLING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_eNB_dlsch_scrambling
ID = VCD_FUNCTION_ENB_BEAM_PRECODING
DESC = VCD function ENB_BEAM_PRECODING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_eNB_beam_precoding
ID = VCD_FUNCTION_ENB_OFDM_MODULATION
DESC = VCD function ENB_OFDM_MODULATION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = phy_eNB_ofdm_mod_l
ID = VCD_FUNCTION_MACPHY_INIT
DESC = VCD function MACPHY_INIT
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_macphy_init
ID = VCD_FUNCTION_MACPHY_EXIT
DESC = VCD function MACPHY_EXIT
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_macphy_exit
ID = VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER
DESC = VCD function ENB_DLSCH_ULSCH_SCHEDULER
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_eNB_dlsch_ulsch_scheduler
ID = VCD_FUNCTION_FILL_RAR
DESC = VCD function FILL_RAR
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_fill_rar
ID = VCD_FUNCTION_TERMINATE_RA_PROC
DESC = VCD function TERMINATE_RA_PROC
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_terminate_ra_proc
ID = VCD_FUNCTION_INITIATE_RA_PROC
DESC = VCD function INITIATE_RA_PROC
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_initiate_ra_proc
ID = VCD_FUNCTION_CANCEL_RA_PROC
DESC = VCD function CANCEL_RA_PROC
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_cancel_ra_proc
ID = VCD_FUNCTION_GET_DCI_SDU
DESC = VCD function GET_DCI_SDU
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_get_dci_sdu
ID = VCD_FUNCTION_GET_DLSCH_SDU
DESC = VCD function GET_DLSCH_SDU
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_get_dlsch_sdu
ID = VCD_FUNCTION_RX_SDU
DESC = VCD function RX_SDU
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_rx_sdu
ID = VCD_FUNCTION_MRBCH_PHY_SYNC_FAILURE
DESC = VCD function MRBCH_PHY_SYNC_FAILURE
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_mrbch_phy_sync_failure
ID = VCD_FUNCTION_SR_INDICATION
DESC = VCD function SR_INDICATION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_SR_indication
ID = VCD_FUNCTION_DLSCH_PREPROCESSOR
DESC = VCD function DLSCH_PREPROCESSOR
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = mac_dlsch_preprocessor
ID = VCD_FUNCTION_SCHEDULE_DLSCH
DESC = VCD function SCHEDULE_DLSCH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = mac_schedule_dlsch
ID = VCD_FUNCTION_FILL_DLSCH_DCI
DESC = VCD function FILL_DLSCH_DCI
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = mac_fill_dlsch_dci
ID = VCD_FUNCTION_OUT_OF_SYNC_IND
DESC = VCD function OUT_OF_SYNC_IND
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_out_of_sync_ind
ID = VCD_FUNCTION_UE_DECODE_SI
DESC = VCD function UE_DECODE_SI
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_decode_si
ID = VCD_FUNCTION_UE_DECODE_PCCH
DESC = VCD function UE_DECODE_PCCH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_decode_pcch
ID = VCD_FUNCTION_UE_DECODE_CCCH
DESC = VCD function UE_DECODE_CCCH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_decode_ccch
ID = VCD_FUNCTION_UE_DECODE_BCCH
DESC = VCD function UE_DECODE_BCCH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_decode_bcch
ID = VCD_FUNCTION_UE_SEND_SDU
DESC = VCD function UE_SEND_SDU
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_send_sdu
ID = VCD_FUNCTION_UE_GET_SDU
DESC = VCD function UE_GET_SDU
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_get_sdu
ID = VCD_FUNCTION_UE_GET_RACH
DESC = VCD function UE_GET_RACH
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_get_rach
ID = VCD_FUNCTION_UE_PROCESS_RAR
DESC = VCD function UE_PROCESS_RAR
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_process_rar
ID = VCD_FUNCTION_UE_SCHEDULER
DESC = VCD function UE_SCHEDULER
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_scheduler
ID = VCD_FUNCTION_UE_GET_SR
DESC = VCD function UE_GET_SR
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = macxface_ue_get_sr
ID = VCD_FUNCTION_UE_SEND_MCH_SDU
DESC = VCD function UE_SEND_MCH_SDU
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = ue_send_mch_sdu
ID = VCD_FUNCTION_RLC_DATA_REQ
DESC = VCD function RLC_DATA_REQ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rlc_data_req
#ID = VCD_FUNCTION_RLC_DATA_IND
# DESC = VCD function RLC_DATA_IND
# GROUP = ALL:VCD:ENB:VCD_FUNCTION
# FORMAT = int,value
# VCD_NAME = rlc_data_ind
ID = VCD_FUNCTION_MAC_RLC_STATUS_IND
DESC = VCD function MAC_RLC_STATUS_IND
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = mac_rlc_status_ind
ID = VCD_FUNCTION_MAC_RLC_DATA_REQ
DESC = VCD function MAC_RLC_DATA_REQ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = mac_rlc_data_req
ID = VCD_FUNCTION_MAC_RLC_DATA_IND
DESC = VCD function MAC_RLC_DATA_IND
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = mac_rlc_data_ind
ID = VCD_FUNCTION_RLC_UM_TRY_REASSEMBLY
DESC = VCD function RLC_UM_TRY_REASSEMBLY
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rlc_um_try_reassembly
ID = VCD_FUNCTION_RLC_UM_CHECK_TIMER_DAR_TIME_OUT
DESC = VCD function RLC_UM_CHECK_TIMER_DAR_TIME_OUT
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rlc_um_check_timer_dar_time_out
ID = VCD_FUNCTION_RLC_UM_RECEIVE_PROCESS_DAR
DESC = VCD function RLC_UM_RECEIVE_PROCESS_DAR
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rlc_um_receive_process_dar
ID = VCD_FUNCTION_PDCP_RUN
DESC = VCD function PDCP_RUN
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_run
ID = VCD_FUNCTION_PDCP_DATA_REQ
DESC = VCD function PDCP_DATA_REQ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_data_req
ID = VCD_FUNCTION_PDCP_DATA_IND
DESC = VCD function PDCP_DATA_IND
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_data_ind
ID = VCD_FUNCTION_PDCP_APPLY_SECURITY
DESC = VCD function PDCP_APPLY_SECURITY
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_apply_security
ID = VCD_FUNCTION_PDCP_VALIDATE_SECURITY
DESC = VCD function PDCP_VALIDATE_SECURITY
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_validate_security
ID = VCD_FUNCTION_PDCP_FIFO_READ
DESC = VCD function PDCP_FIFO_READ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_fifo_read
ID = VCD_FUNCTION_PDCP_FIFO_READ_BUFFER
DESC = VCD function PDCP_FIFO_READ_BUFFER
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_fifo_read_buffer
ID = VCD_FUNCTION_PDCP_FIFO_FLUSH
DESC = VCD function PDCP_FIFO_FLUSH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_fifo_flush
ID = VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER
DESC = VCD function PDCP_FIFO_FLUSH_BUFFER
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcp_fifo_flush_buffer
ID = VCD_FUNCTION_RRC_RX_TX
DESC = VCD function RRC_RX_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rrc_rx_tx
ID = VCD_FUNCTION_RRC_MAC_CONFIG
DESC = VCD function RRC_MAC_CONFIG
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rrc_mac_config_req
ID = VCD_FUNCTION_RRC_UE_DECODE_SIB1
DESC = VCD function RRC_UE_DECODE_SIB1
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rrc_ue_decode_sib1
ID = VCD_FUNCTION_RRC_UE_DECODE_SI
DESC = VCD function RRC_UE_DECODE_SI
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = rrc_ue_decode_si
ID = VCD_FUNCTION_GTPV1U_ENB_TASK
DESC = VCD function GTPV1U_ENB_TASK
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = gtpv1u_enb_task
ID = VCD_FUNCTION_GTPV1U_PROCESS_UDP_REQ
DESC = VCD function GTPV1U_PROCESS_UDP_REQ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = gtpv1u_process_udp_req
ID = VCD_FUNCTION_GTPV1U_PROCESS_TUNNEL_DATA_REQ
DESC = VCD function GTPV1U_PROCESS_TUNNEL_DATA_REQ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = gtpv1u_process_tunnel_data_req
ID = VCD_FUNCTION_UDP_ENB_TASK
DESC = VCD function UDP_ENB_TASK
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = udp_enb_task
ID = VCD_FUNCTION_EMU_TRANSPORT
DESC = VCD function EMU_TRANSPORT
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = emu_transport
ID = VCD_FUNCTION_LOG_RECORD
DESC = VCD function LOG_RECORD
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = log_record
ID = VCD_FUNCTION_ITTI_ENQUEUE_MESSAGE
DESC = VCD function ITTI_ENQUEUE_MESSAGE
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = itti_enqueue_message
ID = VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE
DESC = VCD function ITTI_DUMP_ENQUEUE_MESSAGE
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = itti_dump_enqueue_message
ID = VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC
DESC = VCD function ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = itti_dump_enqueue_message_malloc
ID = VCD_FUNCTION_ITTI_RELAY_THREAD
DESC = VCD function ITTI_RELAY_THREAD
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = itti_relay_thread
ID = VCD_FUNCTION_TEST
DESC = VCD function TEST
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = test
ID = VCD_FUNCTION_SEND_IF4
DESC = VCD function SEND_IF4
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = send_if4
ID = VCD_FUNCTION_RECV_IF4
DESC = VCD function RECV_IF4
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = recv_if4
ID = VCD_FUNCTION_SEND_IF5
DESC = VCD function SEND_IF5
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = send_if5
ID = VCD_FUNCTION_RECV_IF5
DESC = VCD function RECV_IF5
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = recv_if5
ID = VCD_FUNCTION_TRX_COMPR_IF
DESC = VCD function TRX_COMPR_IF
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = compress_if
ID = VCD_FUNCTION_TRX_DECOMPR_IF
DESC = VCD function TRX_DECOMPR_IF
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = decompress_if
ID = VCD_FUNCTION_NFAPI
DESC = VCD function NFAPI
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = nfapi_subframe
ID = VCD_FUNCTION_GENERATE_PCFICH
DESC = VCD function GENERATE_PCFICH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = generate_pcfich
ID = VCD_FUNCTION_GENERATE_DCI0
DESC = VCD function GENERATE_DCI0
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = generate_dci0
ID = VCD_FUNCTION_GENERATE_DLSCH
DESC = VCD function GENERATE_DLSCH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = generate_dlsch
ID = VCD_FUNCTION_GENERATE_PHICH
DESC = VCD function GENERATE_PHICH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = generate_phich
ID = VCD_FUNCTION_PDCCH_SCRAMBLING
DESC = VCD function PDCCH_SCRAMBLING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcch_scrambling
ID = VCD_FUNCTION_PDCCH_MODULATION
DESC = VCD function PDCCH_MODULATION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcch_modulation
ID = VCD_FUNCTION_PDCCH_INTERLEAVING
DESC = VCD function PDCCH_INTERLEAVING
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcch_interleaving
ID = VCD_FUNCTION_PDCCH_TX
DESC = VCD function PDCCH_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
VCD_NAME = pdcch_tx
common/utils/T/check_vcd.c
0 → 100644
View file @
849be5f9
/*
* To disable the checks done by this program, see below at the beginning
* of the function 'main'.
*/
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "database.h"
#define T_TRACER 1
#include "T.h"
/* VCD specific defines and includes
* If the codebase changes, it may need to be updated
*/
#define ENB_MODE
#define ENABLE_USE_CPU_EXECUTION_TIME
#include "../LOG/vcd_signal_dumper.c"
void
err
(
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
void
err
(
char
*
fmt
,
...)
{
va_list
ap
;
va_start
(
ap
,
fmt
);
printf
(
"
\x1b
[31m"
);
printf
(
"error: "
);
vprintf
(
fmt
,
ap
);
printf
(
"
\n
"
"
\x1b
[33m
\n
"
"You probably added a VCD trace (variable or function) but you did not
\n
"
"update T_messages.txt and/or T_defs.h in common/utils/T/
\n
"
"
\n
"
"Be sure to add the new trace to T_messages.txt, at the right place in the
\n
"
"file. Do not forget to define VCD_NAME with an identical value as found
\n
"
"in the array eurecomVariablesNames or eurecomFunctionsNames.
\n
"
"
\n
"
"Be sure to update VCD_NUM_FUNCTIONS, VCD_NUM_VARIABLES, VCD_FIRST_FUNCTION
\n
"
"and VCD_FIRST_VARIABLE in T_defs.h
\n
"
"
\n
"
"The same procedure has to be followed when you delete a VCD trace.
\n
"
"Delete it in T_messages.txt as well and update T_defs.h
\n
"
"
\n
"
"You can disable those VCD checks at development time.
\n
"
"To disable the VCD checks see the file common/utils/T/check_vcd.c
\n
"
"Do not push any modification that disables the VCD checks to the
\n
"
"main repository.
\n
"
);
printf
(
"
\x1b
[m
\n
"
);
va_end
(
ap
);
exit
(
1
);
}
int
main
(
void
)
{
/* to disable the checks done by this program, uncomment the following
* line, ie. remove the leading '//'
*/
//return 0;
void
*
database
=
parse_database
(
"T_messages.txt"
);
int
number_of_events
;
int
first_var
=
-
1
;
int
last_var
;
int
first_fun
=
-
1
;
int
last_fun
;
char
*
prefix
;
int
prefix_len
;
char
*
name
;
char
*
vcd_name
;
int
i
;
FILE
*
in
;
char
*
l
=
NULL
;
size_t
lsize
;
if
(
database
==
NULL
)
err
(
"something wrong with T_messages.txt"
);
/* check the value of VCD_NUM_FUNCTIONS */
if
(
VCD_NUM_FUNCTIONS
!=
sizeof
(
eurecomFunctionsNames
)
/
sizeof
(
char
*
))
err
(
"VCD_NUM_FUNCTIONS (%d) must be equal to %zd"
,
VCD_NUM_FUNCTIONS
,
sizeof
(
eurecomFunctionsNames
)
/
sizeof
(
char
*
));
/* check the value of VCD_NUM_VARIABLES */
if
(
VCD_NUM_VARIABLES
!=
sizeof
(
eurecomVariablesNames
)
/
sizeof
(
char
*
))
err
(
"VCD_NUM_VARIABLES (%d) must be equal to %zd"
,
VCD_NUM_VARIABLES
,
sizeof
(
eurecomVariablesNames
)
/
sizeof
(
char
*
));
number_of_events
=
number_of_ids
(
database
);
if
(
number_of_events
==
0
)
err
(
"no event defined in T_messages.txt"
);
/* T_messages.txt ends with VCD VARIABLES followed by VCD FUNCTIONS
* followed by nothing.
* Let's check.
*/
/* check VCD VARIABLES traces in T_messages.txt */
prefix
=
"VCD_VARIABLE_"
;
prefix_len
=
strlen
(
prefix
);
for
(
i
=
0
;
i
<
number_of_events
;
i
++
)
{
name
=
event_name_from_id
(
database
,
i
);
if
(
strncmp
(
name
,
prefix
,
prefix_len
))
continue
;
first_var
=
i
;
break
;
}
if
(
first_var
==
-
1
)
err
(
"no VCD_VARIABLE_ found in T_messages.txt"
);
for
(;
i
<
number_of_events
;
i
++
)
{
name
=
event_name_from_id
(
database
,
i
);
if
(
strncmp
(
name
,
prefix
,
prefix_len
))
break
;
}
last_var
=
i
-
1
;
/* check VCD FUNCTIONS traces in T_messages.txt */
if
(
i
==
number_of_events
)
err
(
"no VCD_FUNCTION_ found in T_messages.txt"
);
prefix
=
"VCD_FUNCTION_"
;
prefix_len
=
strlen
(
prefix
);
first_fun
=
i
;
name
=
event_name_from_id
(
database
,
i
);
if
(
strncmp
(
name
,
prefix
,
prefix_len
))
err
(
"last VCD_VARIABLE_ not followed by a VCD_FUNCTION_ in T_messages.txt"
);
for
(;
i
<
number_of_events
;
i
++
)
{
name
=
event_name_from_id
(
database
,
i
);
if
(
strncmp
(
name
,
prefix
,
prefix_len
))
break
;
}
if
(
i
!=
number_of_events
)
err
(
"T_messages.txt does not end with a VCD_FUNCTION_ trace"
);
last_fun
=
i
-
1
;
if
(
first_var
!=
(
unsigned
)
VCD_FIRST_VARIABLE
)
err
(
"VCD_FIRST_VARIABLE is not correct in T_defs.h"
);
if
(
first_fun
!=
(
unsigned
)
VCD_FIRST_FUNCTION
)
err
(
"VCD_FIRST_FUNCTION is not correct in T_defs.h"
);
if
(
last_var
-
first_var
+
1
!=
VCD_NUM_VARIABLES
)
err
(
"VCD_NUM_VARIABLES is not correct in T_defs.h"
);
if
(
last_fun
-
first_fun
+
1
!=
VCD_NUM_FUNCTIONS
)
err
(
"VCD_NUM_FUNCTIONS is not correct in T_defs.h"
);
/* check that VCD_NAME is identical to
* eurecomVariablesNames[x]/eurecomFunctionsNames[x]
*/
prefix
=
"VCD_VARIABLE_"
;
prefix_len
=
strlen
(
prefix
);
for
(
i
=
0
;
i
<
number_of_events
;
i
++
)
{
name
=
event_name_from_id
(
database
,
i
);
if
(
strncmp
(
name
,
prefix
,
prefix_len
))
continue
;
vcd_name
=
event_vcd_name_from_id
(
database
,
i
);
if
(
vcd_name
==
NULL
)
err
(
"%s has no VCD_NAME in T_messages.txt"
,
name
);
if
(
strcmp
(
vcd_name
,
eurecomVariablesNames
[
i
-
first_var
]))
err
(
"%s has a wrong VCD_NAME in T_messages.txt"
,
name
);
}
prefix
=
"VCD_FUNCTION_"
;
prefix_len
=
strlen
(
prefix
);
for
(
i
=
0
;
i
<
number_of_events
;
i
++
)
{
name
=
event_name_from_id
(
database
,
i
);
if
(
strncmp
(
name
,
prefix
,
prefix_len
))
continue
;
vcd_name
=
event_vcd_name_from_id
(
database
,
i
);
if
(
vcd_name
==
NULL
)
err
(
"%s has no VCD_NAME in T_messages.txt"
,
name
);
if
(
strcmp
(
vcd_name
,
eurecomFunctionsNames
[
i
-
first_fun
]))
err
(
"%s has a wrong VCD_NAME in T_messages.txt"
,
name
);
}
/* check IDs - these checks are difficult because we parse
* common/utils/LOG/vcd_signal_dumper.h which is expected to
* be formatted as is:
* - define vcd_signal_dump_variables then vcd_signal_dump_functions
* - one VCD_XXXX per line starting with two spaces
* followed by ',' or '=' with no space in between
* - no #ifdef / #if is taken into account
* - we require VCD_SIGNAL_DUMPER_VARIABLES_END and
* VCD_SIGNAL_DUMPER_FUNCTIONS_END at the end of each array,
* each on a line of its own with two spaces before and nothing after.
*
* If these checks fail, consider formatting
* common/utils/LOG/vcd_signal_dumper.h as expected here, if
* it makes sense of course. Otherwise, change the code below.
*
* In common/utils/LOG/vcd_signal_dumper.h a valid name is
* either VCD_SIGNAL_DUMPER_VARIABLES_ABC or
* VCD_SIGNAL_DUMPER_FUNCTIONS_XYZ
* and in T_messages.txt the corresponding name has to be
* VCD_VARIABLE_ABC or VCD_FUNCTION_XYZ
*/
i
=
first_var
;
in
=
fopen
(
"../LOG/vcd_signal_dumper.h"
,
"r"
);
if
(
in
==
NULL
)
err
(
"could not open ../LOG/vcd_signal_dumper.h"
);
while
(
1
)
{
char
*
x
=
" VCD_SIGNAL_DUMPER_VARIABLES_"
;
ssize_t
r
;
free
(
l
);
l
=
NULL
;
lsize
=
0
;
r
=
getline
(
&
l
,
&
lsize
,
in
);
if
(
r
==
-
1
)
break
;
if
(
!
strcmp
(
l
,
" VCD_SIGNAL_DUMPER_VARIABLES_END
\n
"
))
break
;
/* remove ',' or '=' if found */
{
char
*
s
=
l
;
while
(
*
s
)
{
if
(
*
s
==
','
||*
s
==
'='
)
{
*
s
=
0
;
break
;
}
s
++
;
}
}
if
(
strncmp
(
l
,
x
,
strlen
(
x
)))
continue
;
if
(
!
(
i
>=
first_var
&&
i
<=
last_var
))
err
(
"T_messages.txt is not correct with respect to VCD VARIABLES"
);
name
=
event_name_from_id
(
database
,
i
);
if
(
strcmp
(
l
+
strlen
(
x
),
name
+
strlen
(
"VCD_VARIABLE_"
)))
err
(
"%s is not correct in T_messages.txt"
,
name
);
i
++
;
}
if
(
i
!=
last_var
+
1
)
err
(
"VCD VARIABLES wrong in T_messages.txt"
);
while
(
1
)
{
char
*
x
=
" VCD_SIGNAL_DUMPER_FUNCTIONS_"
;
ssize_t
r
;
free
(
l
);
l
=
NULL
;
lsize
=
0
;
r
=
getline
(
&
l
,
&
lsize
,
in
);
if
(
r
==
-
1
)
break
;
if
(
!
strcmp
(
l
,
" VCD_SIGNAL_DUMPER_FUNCTIONS_END
\n
"
))
break
;
/* remove ',' or '=' if found */
{
char
*
s
=
l
;
while
(
*
s
)
{
if
(
*
s
==
','
||*
s
==
'='
)
{
*
s
=
0
;
break
;
}
s
++
;
}
}
if
(
strncmp
(
l
,
x
,
strlen
(
x
)))
continue
;
if
(
!
(
i
>=
first_fun
&&
i
<=
last_fun
))
err
(
"T_messages.txt is not correct with respect to VCD FUNCTIONS"
);
name
=
event_name_from_id
(
database
,
i
);
if
(
strcmp
(
l
+
strlen
(
x
),
name
+
strlen
(
"VCD_FUNCTION_"
)))
err
(
"%s is not correct in T_messages.txt"
,
name
);
i
++
;
}
fclose
(
in
);
if
(
i
!=
last_fun
+
1
)
err
(
"VCD FUNCTIONS wrong in T_messages.txt"
);
return
0
;
}
common/utils/T/genids.c
View file @
849be5f9
...
...
@@ -14,21 +14,21 @@ int cmp(const void *p1, const void *p2)
}
/* return 1 if s was not already known, 0 if it was */
int
new_unique_id
(
char
*
s
)
int
new_unique_id
(
char
*
s
,
char
*
input_file
)
{
if
(
unique_ids_size
)
if
(
bsearch
(
&
s
,
unique_ids
,
unique_ids_size
,
sizeof
(
char
*
),
cmp
)
!=
NULL
)
{
printf
(
"
FATAL: ID %s is not unique
\n
"
,
s
);
printf
(
"
error: ID %s is not unique in %s
\n
"
,
s
,
input_file
);
return
0
;
}
if
(
unique_ids_size
==
unique_ids_maxsize
)
{
unique_ids_maxsize
+=
256
;
unique_ids
=
realloc
(
unique_ids
,
unique_ids_maxsize
*
sizeof
(
char
*
));
if
(
unique_ids
==
NULL
)
{
printf
(
"out of memory
\n
"
);
abort
();
}
if
(
unique_ids
==
NULL
)
{
printf
(
"
erorr:
out of memory
\n
"
);
abort
();
}
}
unique_ids
[
unique_ids_size
]
=
strdup
(
s
);
if
(
unique_ids
[
unique_ids_size
]
==
NULL
)
{
printf
(
"out of memory
\n
"
);
abort
();
}
{
printf
(
"
erorr:
out of memory
\n
"
);
abort
();
}
unique_ids_size
++
;
qsort
(
unique_ids
,
unique_ids_size
,
sizeof
(
char
*
),
cmp
);
return
1
;
...
...
@@ -43,7 +43,8 @@ void putname(int c)
if
(
bufname_size
==
bufname_maxsize
)
{
bufname_maxsize
+=
256
;
bufname
=
realloc
(
bufname
,
bufname_maxsize
);
if
(
bufname
==
NULL
)
{
printf
(
"memory allocation error
\n
"
);
exit
(
1
);
}
if
(
bufname
==
NULL
)
{
printf
(
"erorr: memory allocation error
\n
"
);
exit
(
1
);
}
}
bufname
[
bufname_size
]
=
c
;
bufname_size
++
;
...
...
@@ -58,7 +59,8 @@ void putvalue(int c)
if
(
bufvalue_size
==
bufvalue_maxsize
)
{
bufvalue_maxsize
+=
256
;
bufvalue
=
realloc
(
bufvalue
,
bufvalue_maxsize
);
if
(
bufvalue
==
NULL
)
{
printf
(
"memory allocation error
\n
"
);
exit
(
1
);
}
if
(
bufvalue
==
NULL
)
{
printf
(
"error: memory allocation error
\n
"
);
exit
(
1
);
}
}
bufvalue
[
bufvalue_size
]
=
c
;
bufvalue_size
++
;
...
...
@@ -119,7 +121,7 @@ int main(int n, char **v)
char
*
in_name
;
char
*
out_name
;
if
(
n
!=
3
)
{
printf
(
"gimme <source> <dest>
\n
"
);
exit
(
1
);
}
if
(
n
!=
3
)
{
printf
(
"
error:
gimme <source> <dest>
\n
"
);
exit
(
1
);
}
n
=
0
;
...
...
@@ -134,14 +136,13 @@ int main(int n, char **v)
while
(
1
)
{
get_line
(
in
,
&
name
,
&
value
);
if
(
name
==
NULL
)
break
;
printf
(
"name '%s' value '%s'
\n
"
,
name
,
value
);
if
(
isspace
(
value
[
strlen
(
value
)
-
1
]))
{
printf
(
"bad value '%s' (no space at the end please!)
\n
"
,
value
);
printf
(
"
error:
bad value '%s' (no space at the end please!)
\n
"
,
value
);
unlink
(
out_name
);
exit
(
1
);
}
if
(
!
strcmp
(
name
,
"ID"
))
{
if
(
!
new_unique_id
(
value
))
{
unlink
(
out_name
);
exit
(
1
);
}
if
(
!
new_unique_id
(
value
,
in_name
))
{
unlink
(
out_name
);
exit
(
1
);
}
fprintf
(
out
,
"#define T_%s T_ID(%d)
\n
"
,
value
,
n
);
n
++
;
}
...
...
common/utils/T/local_tracer.c
View file @
849be5f9
...
...
@@ -337,54 +337,34 @@ static void forward(void *_forwarder, char *buf, int size)
static
void
wait_message
(
void
)
{
while
(
T_local_cache
[
T_busylist_head
].
busy
==
0
)
usleep
(
1000
);
}
static
void
init_shm
(
char
*
shm_file
)
{
int
i
;
int
s
=
shm_open
(
shm_file
,
O_RDWR
|
O_CREAT
/*| O_SYNC*/
,
0666
);
if
(
s
==
-
1
)
{
perror
(
shm_file
);
abort
();
}
if
(
ftruncate
(
s
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
)))
{
perror
(
shm_file
);
abort
();
}
T_local_cache
=
mmap
(
NULL
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
),
PROT_READ
|
PROT_WRITE
,
MAP_SHARED
,
s
,
0
);
if
(
T_local_cache
==
MAP_FAILED
)
{
perror
(
shm_file
);
abort
();
}
close
(
s
);
/* let's garbage the memory to catch some potential problems
* (think multiprocessor sync issues, barriers, etc.)
*/
memset
(
T_local_cache
,
0x55
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
));
for
(
i
=
0
;
i
<
T_CACHE_SIZE
;
i
++
)
T_local_cache
[
i
].
busy
=
0
;
while
((
T_local_cache
[
T_busylist_head
].
busy
&
0x02
)
==
0
)
usleep
(
1000
);
}
void
T_local_tracer_main
(
int
remote_port
,
int
wait_for_tracer
,
int
local_socket
,
char
*
shm_file
)
int
local_socket
,
void
*
shm_array
)
{
int
s
;
int
port
=
remote_port
;
int
dont_wait
=
wait_for_tracer
?
0
:
1
;
void
*
f
;
printf
(
"local tracer starting
\n
"
);
/* write on a socket fails if the other end is closed and we get SIGPIPE */
if
(
signal
(
SIGPIPE
,
SIG_IGN
)
==
SIG_ERR
){
if
(
signal
(
SIGPIPE
,
SIG_IGN
)
==
SIG_ERR
)
{
printf
(
"local tracer received SIGPIPE
\n
"
);
abort
();
}
}
T_local_cache
=
shm_array
;
init_shm
(
shm_file
);
s
=
local_socket
;
printf
(
"local tracer starting step 2
\n
"
);
if
(
dont_wait
)
{
char
t
=
2
;
printf
(
"local tracer in no wait mode
\n
"
);
if
(
write
(
s
,
&
t
,
1
)
!=
1
)
abort
();
}
printf
(
"local tracer starting step 3
\n
"
);
f
=
forwarder
(
port
,
s
);
printf
(
"local tracer main loop....
\n
"
);
/* read messages */
while
(
1
)
{
wait_message
();
...
...
common/utils/T/tracer/Makefile
View file @
849be5f9
...
...
@@ -7,7 +7,7 @@ LIBS=-lm
XLIBS
=
-lX11
-lpng
-lXft
all
:
record replay extract_config textlog enb ue vcd macpdu2wireshark
\
extract_input_subframe extract_output_subframe to_vcd extract
extract_input_subframe extract_output_subframe to_vcd extract
multi
record
:
utils.o record.o database.o config.o
$(CC)
$(CFLAGS)
-o
record
$^
$(LIBS)
...
...
@@ -57,19 +57,22 @@ macpdu2wireshark: macpdu2wireshark.o database.o utils.o handler.o event.o \
config.o
$(CC)
$(CFLAGS)
-o
$@
$^
$(LIBS)
multi
:
multi.o utils.o database.o config.o
$(CC)
$(CFLAGS)
-o
multi
$^
$(LIBS)
.PHONY
:
all gui/gui.a view/view.a logger/logger.a filter/filter.a
gui/gui.a
:
cd
gui
&&
make
cd
gui
&&
$(MAKE)
view/view.a
:
cd
view
&&
make
cd
view
&&
$(MAKE)
logger/logger.a
:
cd
logger
&&
make
cd
logger
&&
$(MAKE)
filter/filter.a
:
cd
filter
&&
make
cd
filter
&&
$(MAKE)
%.o
:
%.c
$(CC)
$(CFLAGS)
-c
-o
$@
$<
...
...
@@ -77,9 +80,9 @@ filter/filter.a:
clean
:
rm
-f
*
.o core tracer_remote textlog enb ue vcd record replay
rm
-f
extract_config macpdu2wireshark extract_input_subframe
rm
-f
extract_output_subframe to_vcd extract
cd
gui
&&
make
clean
cd
view
&&
make
clean
cd
logger
&&
make
clean
cd
filter
&&
make
clean
cd
hacks
&&
make
clean
rm
-f
extract_output_subframe to_vcd extract
multi
cd
gui
&&
$(MAKE)
clean
cd
view
&&
$(MAKE)
clean
cd
logger
&&
$(MAKE)
clean
cd
filter
&&
$(MAKE)
clean
cd
hacks
&&
$(MAKE)
clean
common/utils/T/tracer/config.c
View file @
849be5f9
...
...
@@ -60,3 +60,9 @@ void verify_config(void)
abort
();
}
}
void
get_local_config
(
char
**
txt
,
int
*
len
)
{
*
txt
=
local
;
*
len
=
local_size
;
}
common/utils/T/tracer/config.h
View file @
849be5f9
...
...
@@ -5,5 +5,6 @@ void clear_remote_config(void);
void
append_received_config_chunk
(
char
*
buf
,
int
length
);
void
load_config_file
(
char
*
filename
);
void
verify_config
(
void
);
void
get_local_config
(
char
**
txt
,
int
*
len
);
#endif
/* _CONFIG_H_ */
common/utils/T/tracer/database.c
View file @
849be5f9
...
...
@@ -13,6 +13,7 @@ typedef struct {
char
**
arg_type
;
char
**
arg_name
;
int
asize
;
char
*
vcd_name
;
int
id
;
}
id
;
...
...
@@ -138,6 +139,7 @@ id *add_id(database *r, char *idname, int i)
r
->
i
[
r
->
isize
].
arg_type
=
NULL
;
r
->
i
[
r
->
isize
].
arg_name
=
NULL
;
r
->
i
[
r
->
isize
].
asize
=
0
;
r
->
i
[
r
->
isize
].
vcd_name
=
NULL
;
r
->
i
[
r
->
isize
].
id
=
i
;
r
->
isize
++
;
qsort
(
r
->
i
,
r
->
isize
,
sizeof
(
id
),
id_cmp
);
...
...
@@ -224,6 +226,12 @@ void add_desc(id *i, char *desc)
i
->
desc
=
strdup
(
desc
);
if
(
i
->
desc
==
NULL
)
abort
();
}
void
add_vcd_name
(
id
*
i
,
char
*
vcd_name
)
{
if
(
i
==
NULL
)
{
printf
(
"ERROR: VCD_NAME line before ID line
\n
"
);
exit
(
1
);}
i
->
vcd_name
=
strdup
(
vcd_name
);
if
(
i
->
vcd_name
==
NULL
)
abort
();
}
char
*
format_get_next_token
(
char
**
cur
)
{
char
*
start
;
...
...
@@ -320,6 +328,7 @@ void *parse_database(char *filename)
if
(
!
strcmp
(
name
,
"GROUP"
))
add_groups
(
r
,
last_id
,
value
);
if
(
!
strcmp
(
name
,
"DESC"
))
add_desc
(
last_id
,
value
);
if
(
!
strcmp
(
name
,
"FORMAT"
))
add_format
(
last_id
,
value
);
if
(
!
strcmp
(
name
,
"VCD_NAME"
))
add_vcd_name
(
last_id
,
value
);
}
fclose
(
in
);
...
...
@@ -424,6 +433,12 @@ char *event_name_from_id(void *_database, int id)
return
d
->
i
[
d
->
id_to_pos
[
id
]].
name
;
}
char
*
event_vcd_name_from_id
(
void
*
_database
,
int
id
)
{
database
*
d
=
_database
;
return
d
->
i
[
d
->
id_to_pos
[
id
]].
vcd_name
;
}
int
event_id_from_name
(
void
*
_database
,
char
*
name
)
{
database
*
d
=
_database
;
...
...
common/utils/T/tracer/database.h
View file @
849be5f9
...
...
@@ -8,6 +8,7 @@ void list_ids(void *database);
void
list_groups
(
void
*
database
);
void
on_off
(
void
*
d
,
char
*
item
,
int
*
a
,
int
onoff
);
char
*
event_name_from_id
(
void
*
database
,
int
id
);
char
*
event_vcd_name_from_id
(
void
*
_database
,
int
id
);
int
event_id_from_name
(
void
*
database
,
char
*
name
);
int
number_of_ids
(
void
*
database
);
int
database_get_ids
(
void
*
database
,
char
***
ids
);
...
...
common/utils/T/tracer/enb.c
View file @
849be5f9
...
...
@@ -878,6 +878,7 @@ int main(int n, char **v)
restart:
clear_remote_config
();
if
(
enb_data
.
socket
!=
-
1
)
close
(
enb_data
.
socket
);
enb_data
.
socket
=
connect_to
(
ip
,
port
);
/* send the first message - activate selected traces */
...
...
common/utils/T/tracer/multi.c
0 → 100644
View file @
849be5f9
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <poll.h>
#include <sys/socket.h>
#include <unistd.h>
#include "database.h"
#include "utils.h"
#include "../T.h"
#include "config.h"
#define DEFAULT_LOCAL_PORT 2022
typedef
struct
{
int
id
;
/* increases at each new tracer's connection */
int
s
;
/* socket */
int
*
is_on
;
/* local vision of is_on for this tracer */
int
poll_id
;
/* -1: invalid, otherwise index in fds array */
}
ti_t
;
typedef
struct
{
ti_t
*
ti
;
/* data for tracers */
int
ti_size
;
int
ti_maxsize
;
}
multi_t
;
void
set_is_on
(
int
*
is_on
,
int
pos
,
int
val
)
{
if
(
val
)
is_on
[
pos
]
++
;
else
is_on
[
pos
]
--
;
/* TODO: remove check? */
if
(
is_on
[
pos
]
<
0
)
{
printf
(
"%s:%d:nonono
\n
"
,
__FILE__
,
__LINE__
);
abort
();
}
}
int
send_messages_txt
(
int
s
,
char
*
T_messages_txt
,
int
T_messages_txt_len
)
{
char
buf
[
T_BUFFER_MAX
];
char
*
T_LOCAL_buf
=
buf
;
int32_t
T_LOCAL_size
;
unsigned
char
*
src
;
int
src_len
;
/* trace T_message.txt
* Send several messages -1 with content followed by message -2.
*/
src
=
(
unsigned
char
*
)
T_messages_txt
;
src_len
=
T_messages_txt_len
;
while
(
src_len
)
{
int
send_size
=
src_len
;
if
(
send_size
>
T_PAYLOAD_MAXSIZE
-
sizeof
(
int
))
send_size
=
T_PAYLOAD_MAXSIZE
-
sizeof
(
int
);
/* TODO: be careful, we use internal T stuff, to rewrite? */
T_LOCAL_size
=
0
;
T_HEADER
(
T_ID
(
-
1
));
T_PUT_buffer
(
1
,
((
T_buffer
){
addr
:
(
src
),
length
:
(
send_size
)}));
if
(
socket_send
(
s
,
&
T_LOCAL_size
,
4
)
==
-
1
)
return
-
1
;
if
(
socket_send
(
s
,
buf
,
T_LOCAL_size
)
==
-
1
)
return
-
1
;
src
+=
send_size
;
src_len
-=
send_size
;
}
T_LOCAL_size
=
0
;
T_HEADER
(
T_ID
(
-
2
));
if
(
socket_send
(
s
,
&
T_LOCAL_size
,
4
)
==
-
1
)
return
-
1
;
return
socket_send
(
s
,
buf
,
T_LOCAL_size
);
}
void
new_tracer
(
multi_t
*
m
,
int
s
,
int
is_on_size
,
char
*
t
,
int
t_size
,
int
id
)
{
if
(
send_messages_txt
(
s
,
t
,
t_size
)
==
-
1
)
{
printf
(
"error sending T_messages.txt to new tracer %d => remove tracer
\n
"
,
id
);
return
;
}
if
(
m
->
ti_size
==
m
->
ti_maxsize
)
{
m
->
ti_maxsize
+=
64
;
m
->
ti
=
realloc
(
m
->
ti
,
m
->
ti_maxsize
*
sizeof
(
ti_t
));
if
(
m
->
ti
==
NULL
)
abort
();
}
m
->
ti
[
m
->
ti_size
].
id
=
id
;
m
->
ti
[
m
->
ti_size
].
s
=
s
;
m
->
ti
[
m
->
ti_size
].
is_on
=
calloc
(
is_on_size
,
sizeof
(
int
));
if
(
m
->
ti
[
m
->
ti_size
].
is_on
==
NULL
)
abort
();
m
->
ti
[
m
->
ti_size
].
poll_id
=
-
1
;
m
->
ti_size
++
;
}
void
remove_tracer
(
multi_t
*
m
,
int
t
)
{
free
(
m
->
ti
[
t
].
is_on
);
shutdown
(
m
->
ti
[
t
].
s
,
SHUT_RDWR
);
close
(
m
->
ti
[
t
].
s
);
m
->
ti_size
--
;
memmove
(
&
m
->
ti
[
t
],
&
m
->
ti
[
t
+
1
],
(
m
->
ti_size
-
t
)
*
sizeof
(
ti_t
));
}
int
send_is_on
(
int
socket
,
int
number_of_events
,
int
*
is_on
)
{
int
i
;
char
mt
=
1
;
if
(
socket_send
(
socket
,
&
mt
,
1
)
==
-
1
||
socket_send
(
socket
,
&
number_of_events
,
sizeof
(
int
))
==
-
1
)
return
-
1
;
for
(
i
=
0
;
i
<
number_of_events
;
i
++
)
{
int
v
=
is_on
[
i
]
?
1
:
0
;
if
(
socket_send
(
socket
,
&
v
,
sizeof
(
int
))
==
-
1
)
return
-
1
;
}
return
0
;
}
int
read_tracee
(
int
s
,
OBUF
*
ebuf
,
int
*
_type
,
int32_t
*
_length
)
{
int
type
;
int32_t
length
;
char
*
v
;
int
vpos
=
0
;
if
(
fullread
(
s
,
&
length
,
4
)
==
-
1
)
return
-
1
;
if
(
ebuf
->
omaxsize
<
length
)
{
ebuf
->
omaxsize
=
(
length
+
65535
)
&
~
65535
;
ebuf
->
obuf
=
realloc
(
ebuf
->
obuf
,
ebuf
->
omaxsize
);
if
(
ebuf
->
obuf
==
NULL
)
{
printf
(
"out of memory
\n
"
);
exit
(
1
);
}
}
v
=
ebuf
->
obuf
;
memcpy
(
v
+
vpos
,
&
length
,
4
);
vpos
+=
4
;
#ifdef T_SEND_TIME
if
(
fullread
(
s
,
v
+
vpos
,
sizeof
(
struct
timespec
))
==-
1
)
return
-
1
;
vpos
+=
sizeof
(
struct
timespec
);
length
-=
sizeof
(
struct
timespec
);
#endif
if
(
fullread
(
s
,
&
type
,
sizeof
(
int
))
==
-
1
)
return
-
1
;
memcpy
(
v
+
vpos
,
&
type
,
sizeof
(
int
));
vpos
+=
sizeof
(
int
);
length
-=
sizeof
(
int
);
if
(
fullread
(
s
,
v
+
vpos
,
length
)
==
-
1
)
return
-
1
;
vpos
+=
length
;
ebuf
->
osize
=
vpos
;
*
_type
=
type
;
*
_length
=
length
;
return
0
;
}
void
forward_event
(
multi_t
*
m
,
int
number_of_events
,
OBUF
*
ebuf
,
int
type
)
{
int
i
;
if
(
type
<
0
||
type
>=
number_of_events
)
{
printf
(
"error: bad type of event to forward %d
\n
"
,
type
);
abort
();
}
for
(
i
=
0
;
i
<
m
->
ti_size
;
i
++
)
{
if
(
!
m
->
ti
[
i
].
is_on
[
type
])
continue
;
if
(
socket_send
(
m
->
ti
[
i
].
s
,
ebuf
->
obuf
,
ebuf
->
osize
)
==
-
1
)
printf
(
"warning: error forwarding event to tracer %d
\n
"
,
m
->
ti
[
i
].
id
);
}
}
int
connect_to_tracee
(
char
*
ip
,
int
port
,
int
number_of_events
,
int
*
is_on
)
{
int
s
;
printf
(
"connecting to %s:%d
\n
"
,
ip
,
port
);
s
=
try_connect_to
(
ip
,
port
);
if
(
s
==
-
1
)
return
-
1
;
if
(
send_is_on
(
s
,
number_of_events
,
is_on
)
==
-
1
)
{
shutdown
(
s
,
SHUT_RDWR
);
close
(
s
);
return
-
1
;
}
return
s
;
}
void
usage
(
void
)
{
printf
(
"options:
\n
"
" -d <database file> this option is mandatory
\n
"
" -ip <host> connect to given IP address (default %s)
\n
"
" -p <port> connect to given port (default %d)
\n
"
" -lp <port> listen on local port (default %d)
\n
"
,
DEFAULT_REMOTE_IP
,
DEFAULT_REMOTE_PORT
,
DEFAULT_LOCAL_PORT
);
exit
(
1
);
}
int
main
(
int
n
,
char
**
v
)
{
char
*
database_filename
=
NULL
;
void
*
database
;
char
*
ip
=
DEFAULT_REMOTE_IP
;
int
port
=
DEFAULT_REMOTE_PORT
;
int
local_port
=
DEFAULT_LOCAL_PORT
;
int
*
is_on
;
int
number_of_events
;
int
i
,
j
;
char
*
T_messages_txt
;
int
T_messages_txt_len
;
int
l
;
/* listen socket for tracers' connections */
int
s
=
-
1
;
/* socket connected to tracee. -1 if not connected */
multi_t
m
;
int
is_on_changed
;
int
current_nfd
;
struct
pollfd
*
fds
=
NULL
;
int
next_id
=
0
;
memset
(
&
m
,
0
,
sizeof
(
m
));
/* write on a socket fails if the other end is closed and we get SIGPIPE */
if
(
signal
(
SIGPIPE
,
SIG_IGN
)
==
SIG_ERR
)
abort
();
for
(
i
=
1
;
i
<
n
;
i
++
)
{
if
(
!
strcmp
(
v
[
i
],
"-h"
)
||
!
strcmp
(
v
[
i
],
"--help"
))
usage
();
if
(
!
strcmp
(
v
[
i
],
"-d"
))
{
if
(
i
>
n
-
2
)
usage
();
database_filename
=
v
[
++
i
];
continue
;
}
if
(
!
strcmp
(
v
[
i
],
"-ip"
))
{
if
(
i
>
n
-
2
)
usage
();
ip
=
v
[
++
i
];
continue
;
}
if
(
!
strcmp
(
v
[
i
],
"-p"
))
{
if
(
i
>
n
-
2
)
usage
();
port
=
atoi
(
v
[
++
i
]);
continue
;
}
if
(
!
strcmp
(
v
[
i
],
"-lp"
))
{
if
(
i
>
n
-
2
)
usage
();
local_port
=
atoi
(
v
[
++
i
]);
continue
;
}
usage
();
}
if
(
database_filename
==
NULL
)
{
printf
(
"ERROR: provide a database file (-d)
\n
"
);
exit
(
1
);
}
database
=
parse_database
(
database_filename
);
load_config_file
(
database_filename
);
get_local_config
(
&
T_messages_txt
,
&
T_messages_txt_len
);
number_of_events
=
number_of_ids
(
database
);
is_on
=
calloc
(
number_of_events
,
sizeof
(
int
));
if
(
is_on
==
NULL
)
abort
();
/* create listener socket */
l
=
create_listen_socket
(
"0.0.0.0"
,
local_port
);
OBUF
ebuf
=
{
osize
:
0
,
omaxsize
:
0
,
obuf
:
NULL
};
current_nfd
=
0
;
while
(
1
)
{
int
nfd
;
int
timeout
;
if
(
s
==
-
1
)
s
=
connect_to_tracee
(
ip
,
port
,
number_of_events
,
is_on
);
/* poll on s (if there), l, and all tracers' sockets */
nfd
=
1
+
(
s
!=
-
1
)
+
m
.
ti_size
;
if
(
nfd
!=
current_nfd
)
{
current_nfd
=
nfd
;
free
(
fds
);
fds
=
calloc
(
nfd
,
sizeof
(
struct
pollfd
));
if
(
fds
==
NULL
)
{
perror
(
"calloc"
);
exit
(
1
);
}
}
i
=
0
;
fds
[
i
].
fd
=
l
;
fds
[
i
].
events
=
POLLIN
;
i
++
;
if
(
s
!=
-
1
)
{
fds
[
i
].
fd
=
s
;
fds
[
i
].
events
=
POLLIN
;
i
++
;
}
for
(
j
=
0
;
j
<
m
.
ti_size
;
j
++
)
{
m
.
ti
[
j
].
poll_id
=
i
;
fds
[
i
].
fd
=
m
.
ti
[
j
].
s
;
fds
[
i
].
events
=
POLLIN
;
i
++
;
}
if
(
s
==
-
1
)
timeout
=
1000
;
else
timeout
=
-
1
;
if
(
poll
(
fds
,
nfd
,
timeout
)
==
-
1
)
{
perror
(
"poll"
);
exit
(
1
);
}
if
(
fds
[
0
].
revents
&
~
POLLIN
)
{
printf
(
"TODO: error on listen socket?
\n
"
);
exit
(
1
);
}
/* new tracer connecting? */
if
(
fds
[
0
].
revents
&
POLLIN
)
{
int
t
;
printf
(
"tracer %d connecting
\n
"
,
next_id
);
t
=
socket_accept
(
l
);
if
(
t
==
-
1
)
perror
(
"accept"
);
else
new_tracer
(
&
m
,
t
,
number_of_events
,
T_messages_txt
,
T_messages_txt_len
,
next_id
);
next_id
++
;
}
if
(
s
!=
-
1
&&
fds
[
1
].
revents
&
~
POLLIN
)
{
printf
(
"TODO: error on tracee socket?
\n
"
);
exit
(
1
);
}
/* data from tracee */
if
(
s
!=
-
1
&&
fds
[
1
].
revents
&
POLLIN
)
{
int
type
;
int32_t
length
;
if
(
read_tracee
(
s
,
&
ebuf
,
&
type
,
&
length
)
==
-
1
)
{
clear_remote_config
();
shutdown
(
s
,
SHUT_RDWR
);
close
(
s
);
s
=
-
1
;
}
else
{
if
(
type
==
-
1
)
append_received_config_chunk
(
ebuf
.
obuf
+
ebuf
.
osize
-
length
,
length
);
else
if
(
type
==
-
2
)
verify_config
();
else
forward_event
(
&
m
,
number_of_events
,
&
ebuf
,
type
);
}
}
/* status of each tracer */
is_on_changed
=
0
;
for
(
j
=
0
;
j
<
m
.
ti_size
;
j
++
)
{
int
l
;
int
s
;
int
*
t_is_on
;
if
(
m
.
ti
[
j
].
poll_id
==
-
1
)
continue
;
i
=
m
.
ti
[
j
].
poll_id
;
s
=
m
.
ti
[
j
].
s
;
t_is_on
=
m
.
ti
[
j
].
is_on
;
if
(
fds
[
i
].
revents
&
(
POLLHUP
|
POLLERR
))
goto
tracer_error
;
/* error? */
if
(
fds
[
i
].
revents
&
~
POLLIN
)
{
printf
(
"TODO: error with tracer?
\n
"
);
exit
(
1
);
}
/* data in */
if
(
fds
[
i
].
revents
&
POLLIN
)
{
char
t
;
int
len
;
int
v
;
if
(
fullread
(
s
,
&
t
,
1
)
!=
1
)
goto
tracer_error
;
switch
(
t
)
{
case
0
:
is_on_changed
=
1
;
if
(
fullread
(
s
,
&
len
,
sizeof
(
int
))
==
-
1
)
goto
tracer_error
;
for
(
l
=
0
;
l
<
len
;
l
++
)
{
if
(
fullread
(
s
,
&
v
,
sizeof
(
int
))
==
-
1
)
goto
tracer_error
;
if
(
v
<
0
||
v
>=
number_of_events
)
goto
tracer_error
;
t_is_on
[
v
]
=
1
-
t_is_on
[
v
];
set_is_on
(
is_on
,
v
,
t_is_on
[
v
]);
}
break
;
case
1
:
is_on_changed
=
1
;
if
(
fullread
(
s
,
&
len
,
sizeof
(
int
))
==
-
1
)
goto
tracer_error
;
if
(
len
<
0
||
len
>
number_of_events
)
goto
tracer_error
;
for
(
l
=
0
;
l
<
len
;
l
++
)
{
if
(
fullread
(
s
,
&
v
,
sizeof
(
int
))
==
-
1
)
goto
tracer_error
;
if
(
v
<
0
||
v
>
1
)
goto
tracer_error
;
if
(
t_is_on
[
l
]
!=
v
)
set_is_on
(
is_on
,
l
,
v
);
t_is_on
[
l
]
=
v
;
}
break
;
case
2
:
break
;
default:
printf
(
"error: unhandled message type %d
\n
"
,
t
);
//abort();
}
}
continue
;
tracer_error:
printf
(
"remove tracer %d
\n
"
,
m
.
ti
[
j
].
id
);
for
(
l
=
0
;
l
<
number_of_events
;
l
++
)
if
(
m
.
ti
[
j
].
is_on
[
l
])
{
is_on_changed
=
1
;
set_is_on
(
is_on
,
l
,
0
);
}
remove_tracer
(
&
m
,
j
);
j
--
;
}
if
(
is_on_changed
&&
s
!=
-
1
)
if
(
send_is_on
(
s
,
number_of_events
,
is_on
)
==
-
1
)
{
clear_remote_config
();
shutdown
(
s
,
SHUT_RDWR
);
close
(
s
);
s
=
-
1
;
}
}
return
0
;
}
common/utils/T/tracer/to_vcd.c
View file @
849be5f9
...
...
@@ -12,7 +12,14 @@
#include "logger/logger.h"
#include "view/view.h"
enum
var_type
{
DEFAULT
,
VCD_FUNCTION
,
VCD_VARIABLE
};
typedef
struct
{
enum
var_type
type
;
char
*
event
;
char
*
arg
;
char
*
vcd_name
;
...
...
@@ -44,16 +51,39 @@ void vcd_write_header(vcd_vars *v, int n)
"$version
\n
"
" to_vcd
\n
"
"$end
\n
"
"$timescale 1ns $end
\n
"
"$timescale 1ns $end
\n
"
)
<=
0
)
abort
();
if
(
fprintf
(
out
,
"$scope module logic $end
\n
"
)
<=
0
)
abort
();
for
(
i
=
0
;
i
<
n
;
i
++
)
if
(
v
[
i
].
type
==
DEFAULT
)
if
(
fprintf
(
out
,
"$var wire %d %s %s $end
\n
"
,
v
[
i
].
boolean
?
1
:
64
,
v
[
i
].
vcd_name
,
v
[
i
].
vcd_name
)
<=
0
)
abort
();
if
(
fprintf
(
out
,
"$upscope $end
\n
"
)
<=
0
)
abort
();
if
(
fprintf
(
out
,
"$scope module functions $end
\n
"
)
<=
0
)
abort
();
for
(
i
=
0
;
i
<
n
;
i
++
)
if
(
v
[
i
].
type
==
VCD_FUNCTION
)
if
(
fprintf
(
out
,
"$var wire %d %s %s $end
\n
"
,
v
[
i
].
boolean
?
1
:
64
,
v
[
i
].
vcd_name
,
v
[
i
].
vcd_name
)
<=
0
)
abort
();
if
(
fprintf
(
out
,
"$upscope $end
\n
"
)
<=
0
)
abort
();
if
(
fprintf
(
out
,
"$scope module variables $end
\n
"
)
<=
0
)
abort
();
for
(
i
=
0
;
i
<
n
;
i
++
)
if
(
fprintf
(
out
,
"$var wire %d %s %s $end
\n
"
,
v
[
i
].
boolean
?
1
:
64
,
v
[
i
].
vcd_name
,
v
[
i
].
vcd_name
)
<=
0
)
abort
();
if
(
v
[
i
].
type
==
VCD_VARIABLE
)
if
(
fprintf
(
out
,
"$var wire %d %s %s $end
\n
"
,
v
[
i
].
boolean
?
1
:
64
,
v
[
i
].
vcd_name
,
v
[
i
].
vcd_name
)
<=
0
)
abort
();
if
(
fprintf
(
out
,
"$upscope $end
\n
"
)
<=
0
)
abort
();
if
(
fprintf
(
out
,
"$upscope $end
\n
"
"$enddefinitions $end
\n
"
"$dumpvars
\n
"
)
<=
0
)
abort
();
...
...
@@ -194,12 +224,13 @@ void force_stop(int x)
}
vcd_vars
*
add_var
(
vcd_vars
*
vars
,
int
nvars
,
char
*
event
,
char
*
arg
,
char
*
vcd_name
,
int
is_boolean
)
char
*
event
,
char
*
arg
,
char
*
vcd_name
,
int
is_boolean
,
enum
var_type
t
)
{
if
(
nvars
%
64
==
0
)
{
vars
=
realloc
(
vars
,
(
nvars
+
64
)
*
sizeof
(
vcd_vars
));
if
(
vars
==
NULL
)
abort
();
}
vars
[
nvars
].
type
=
t
;
vars
[
nvars
].
event
=
event
;
vars
[
nvars
].
arg
=
arg
;
vars
[
nvars
].
vcd_name
=
vcd_name
;
...
...
@@ -240,7 +271,7 @@ int main(int n, char **v)
char
*
event
=
v
[
++
i
];
char
*
arg
=
v
[
++
i
];
char
*
vcd_name
=
v
[
++
i
];
vars
=
add_var
(
vars
,
nvars
,
event
,
arg
,
vcd_name
,
1
);
vars
=
add_var
(
vars
,
nvars
,
event
,
arg
,
vcd_name
,
1
,
DEFAULT
);
nvars
++
;
continue
;
}
...
...
@@ -248,7 +279,7 @@ int main(int n, char **v)
char
*
event
=
v
[
++
i
];
char
*
arg
=
v
[
++
i
];
char
*
vcd_name
=
v
[
++
i
];
vars
=
add_var
(
vars
,
nvars
,
event
,
arg
,
vcd_name
,
0
);
vars
=
add_var
(
vars
,
nvars
,
event
,
arg
,
vcd_name
,
0
,
DEFAULT
);
nvars
++
;
continue
;
}
...
...
@@ -283,20 +314,30 @@ int main(int n, char **v)
/* activate all VCD traces */
for
(
i
=
0
;
i
<
number_of_events
;
i
++
)
{
int
is_boolean
;
enum
var_type
type
;
int
prefix_length
;
char
*
name
=
event_name_from_id
(
database
,
i
);
char
*
vcd_name
;
char
*
var_prefix
=
"VCD_VARIABLE_"
;
char
*
fun_prefix
=
"VCD_FUNCTION_"
;
if
(
!
strncmp
(
name
,
var_prefix
,
strlen
(
var_prefix
)))
{
prefix_length
=
strlen
(
var_prefix
);
is_boolean
=
0
;
type
=
VCD_VARIABLE
;
}
else
if
(
!
strncmp
(
name
,
fun_prefix
,
strlen
(
fun_prefix
)))
{
prefix_length
=
strlen
(
fun_prefix
);
is_boolean
=
1
;
type
=
VCD_FUNCTION
;
}
else
continue
;
vcd_name
=
event_vcd_name_from_id
(
database
,
i
);
if
(
vcd_name
==
NULL
)
{
vcd_name
=
name
+
prefix_length
;
printf
(
"WARNING: ID %s does not define VCD_NAME in the file %s, using %s
\n
"
,
name
,
database_filename
,
vcd_name
);
}
vars
=
add_var
(
vars
,
nvars
,
name
,
"value"
,
name
+
prefix_length
,
is_boolean
);
name
,
"value"
,
vcd_name
,
is_boolean
,
type
);
nvars
++
;
}
}
...
...
common/utils/T/tracer/ue.c
View file @
849be5f9
...
...
@@ -857,6 +857,7 @@ int main(int n, char **v)
restart:
clear_remote_config
();
if
(
ue_data
.
socket
!=
-
1
)
close
(
ue_data
.
socket
);
ue_data
.
socket
=
connect_to
(
ip
,
port
);
/* send the first message - activate selected traces */
...
...
common/utils/T/tracer/utils.c
View file @
849be5f9
...
...
@@ -79,6 +79,36 @@ list *list_append(list *l, void *data)
/* socket */
/****************************************************************************/
int
create_listen_socket
(
char
*
addr
,
int
port
)
{
struct
sockaddr_in
a
;
int
s
;
int
v
;
s
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
s
==
-
1
)
{
perror
(
"socket"
);
exit
(
1
);
}
v
=
1
;
if
(
setsockopt
(
s
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
v
,
sizeof
(
int
)))
{
perror
(
"setsockopt"
);
exit
(
1
);
}
a
.
sin_family
=
AF_INET
;
a
.
sin_port
=
htons
(
port
);
a
.
sin_addr
.
s_addr
=
inet_addr
(
addr
);
if
(
bind
(
s
,
(
struct
sockaddr
*
)
&
a
,
sizeof
(
a
)))
{
perror
(
"bind"
);
exit
(
1
);
}
if
(
listen
(
s
,
5
))
{
perror
(
"listen"
);
exit
(
1
);
}
return
s
;
}
int
socket_accept
(
int
s
)
{
struct
sockaddr_in
a
;
socklen_t
alen
;
alen
=
sizeof
(
a
);
return
accept
(
s
,
(
struct
sockaddr
*
)
&
a
,
&
alen
);
}
int
socket_send
(
int
socket
,
void
*
buffer
,
int
size
)
{
char
*
x
=
buffer
;
...
...
@@ -94,26 +124,13 @@ int socket_send(int socket, void *buffer, int size)
int
get_connection
(
char
*
addr
,
int
port
)
{
struct
sockaddr_in
a
;
socklen_t
alen
;
int
s
,
t
;
printf
(
"waiting for connection on %s:%d
\n
"
,
addr
,
port
);
s
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
s
==
-
1
)
{
perror
(
"socket"
);
exit
(
1
);
}
t
=
1
;
if
(
setsockopt
(
s
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
t
,
sizeof
(
int
)))
{
perror
(
"setsockopt"
);
exit
(
1
);
}
a
.
sin_family
=
AF_INET
;
a
.
sin_port
=
htons
(
port
);
a
.
sin_addr
.
s_addr
=
inet_addr
(
addr
);
s
=
create_listen_socket
(
addr
,
port
);
if
(
bind
(
s
,
(
struct
sockaddr
*
)
&
a
,
sizeof
(
a
)))
{
perror
(
"bind"
);
exit
(
1
);
}
if
(
listen
(
s
,
5
))
{
perror
(
"bind"
);
exit
(
1
);
}
alen
=
sizeof
(
a
);
t
=
accept
(
s
,
(
struct
sockaddr
*
)
&
a
,
&
alen
);
t
=
socket_accept
(
s
);
if
(
t
==
-
1
)
{
perror
(
"accept"
);
exit
(
1
);
}
close
(
s
);
...
...
@@ -137,14 +154,11 @@ int fullread(int fd, void *_buf, int count)
return
ret
;
}
int
connect_to
(
char
*
addr
,
int
port
)
int
try_
connect_to
(
char
*
addr
,
int
port
)
{
int
s
;
struct
sockaddr_in
a
;
printf
(
"connecting to %s:%d
\n
"
,
addr
,
port
);
again:
s
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
s
==
-
1
)
{
perror
(
"socket"
);
exit
(
1
);
}
...
...
@@ -155,6 +169,21 @@ again:
if
(
connect
(
s
,
(
struct
sockaddr
*
)
&
a
,
sizeof
(
a
))
==
-
1
)
{
perror
(
"connect"
);
close
(
s
);
return
-
1
;
}
return
s
;
}
int
connect_to
(
char
*
addr
,
int
port
)
{
int
s
;
printf
(
"connecting to %s:%d
\n
"
,
addr
,
port
);
again:
s
=
try_connect_to
(
addr
,
port
);
if
(
s
==
-
1
)
{
printf
(
"trying again in 1s
\n
"
);
sleep
(
1
);
goto
again
;
...
...
common/utils/T/tracer/utils.h
View file @
849be5f9
...
...
@@ -24,11 +24,14 @@ list *list_append(list *l, void *data);
#define DEFAULT_REMOTE_IP "127.0.0.1"
#define DEFAULT_REMOTE_PORT 2021
int
create_listen_socket
(
char
*
addr
,
int
port
);
int
socket_accept
(
int
s
);
/* socket_send: return 0 if okay, -1 on error */
int
socket_send
(
int
socket
,
void
*
buffer
,
int
size
);
int
get_connection
(
char
*
addr
,
int
port
);
/* fullread: return length read if okay (that is: 'count'), -1 on error */
int
fullread
(
int
fd
,
void
*
_buf
,
int
count
);
int
try_connect_to
(
char
*
addr
,
int
port
);
int
connect_to
(
char
*
addr
,
int
port
);
/****************************************************************************/
...
...
common/utils/itti/intertask_interface.c
View file @
849be5f9
...
...
@@ -745,7 +745,7 @@ void itti_exit_task(void)
#if defined(OAI_EMU) || defined(RTAI)
if
(
task_id
>
TASK_UNKNOWN
)
{
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG
,
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLE
S
_ITTI_RECV_MSG
,
__sync_and_and_fetch
(
&
itti_desc
.
vcd_receive_msg
,
~
(
1L
<<
task_id
)));
}
#endif
...
...
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
View file @
849be5f9
...
...
@@ -40,8 +40,14 @@
#include<math.h>
#include <stdlib.h>
#include <string.h>
#include <linux/version.h>
#if RHEL_RELEASE_CODE >= 1796
#include <lapacke/lapacke_utils.h>
#include <lapacke/lapacke.h>
#else
#include <lapacke_utils.h>
#include <lapacke.h>
#endif
#include <cblas.h>
#include "linear_preprocessing_rec.h"
...
...
openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c
View file @
849be5f9
...
...
@@ -13,9 +13,14 @@ data storage. */
#include <stdlib.h>
#include <cblas.h>
#include <string.h>
#include <linux/version.h>
#if RHEL_RELEASE_CODE >= 1796
#include <lapacke/lapacke_utils.h>
#include <lapacke/lapacke.h>
#else
#include <lapacke_utils.h>
#include <lapacke.h>
#endif
//#define DEBUG_PREPROC
...
...
@@ -366,4 +371,4 @@ float sqrt_float(float x, float sqrt_x)
{
sqrt_x
=
(
float
)(
sqrt
((
double
)(
x
)));
return
sqrt_x
;
}
\ No newline at end of file
}
openair2/ENB_APP/enb_config.c
View file @
849be5f9
...
...
@@ -2355,12 +2355,12 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
#endif
}
if
(
strcmp
(
*
(
S1ParamList
.
paramarray
[
l
][
ENB_MME_IP_ADDRESS_PREFERENCE_IDX
].
strptr
),
"ipv4"
)
==
0
)
{
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
j
].
ipv4
=
1
;
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
l
].
ipv4
=
1
;
}
else
if
(
strcmp
(
*
(
S1ParamList
.
paramarray
[
l
][
ENB_MME_IP_ADDRESS_PREFERENCE_IDX
].
strptr
),
"ipv6"
)
==
0
)
{
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
j
].
ipv6
=
1
;
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
l
].
ipv6
=
1
;
}
else
if
(
strcmp
(
*
(
S1ParamList
.
paramarray
[
l
][
ENB_MME_IP_ADDRESS_PREFERENCE_IDX
].
strptr
),
"no"
)
==
0
)
{
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
j
].
ipv4
=
1
;
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
j
].
ipv6
=
1
;
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
l
].
ipv4
=
1
;
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mme_ip_address
[
l
].
ipv6
=
1
;
}
}
...
...
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
849be5f9
...
...
@@ -386,6 +386,7 @@ set_ul_DAI(int module_idP, int UE_idP, int CC_idP, int frameP,
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
3
]
=
DAI
;
break
;
}
break
;
case
2
:
// if ((subframeP==3)||(subframeP==8))
...
...
openair2/NETWORK_DRIVER/MESH/device.c
View file @
849be5f9
...
...
@@ -324,7 +324,11 @@ static const struct net_device_ops nasmesh_netdev_ops = {
.
ndo_set_mac_address
=
NULL
,
.
ndo_set_config
=
nas_set_config
,
.
ndo_do_ioctl
=
nas_CTL_ioctl
,
#if RHEL_RELEASE_CODE>=1797
.
extended
.
ndo_change_mtu
=
nas_change_mtu
,
#else
.
ndo_change_mtu
=
nas_change_mtu
,
#endif
.
ndo_tx_timeout
=
nas_tx_timeout
,
};
...
...
openair2/NETWORK_DRIVER/UE_IP/device.c
View file @
849be5f9
...
...
@@ -349,7 +349,11 @@ static const struct net_device_ops ue_ip_netdev_ops = {
.
ndo_set_mac_address
=
ue_ip_set_mac_address
,
.
ndo_set_config
=
ue_ip_set_config
,
.
ndo_do_ioctl
=
NULL
,
.
ndo_change_mtu
=
ue_ip_change_mtu
,
#if RHEL_RELEASE_CODE>=1797
.
extended
.
ndo_change_mtu
=
ue_ip_change_mtu
,
#else
.
ndo_change_mtu
=
ue_ip_change_mtu
,
#endif
.
ndo_tx_timeout
=
ue_ip_tx_timeout
,
.
ndo_change_rx_flags
=
ue_ip_change_rx_flags
,
};
...
...
openair3/S1AP/MESSAGES/ASN1/R15/s1ap-15.2.0.asn1
View file @
849be5f9
...
...
@@ -6881,3 +6881,201 @@ id-EDT-Session ProtocolIE-ID ::= 281
id-CNTypeRestrictions ProtocolIE-ID ::= 282
END
-- **************************************************************
--
-- Container definitions
--
-- **************************************************************
S1AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Containers (5) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
Criticality,
Presence,
PrivateIE-ID,
ProtocolExtensionID,
ProtocolIE-ID
FROM S1AP-CommonDataTypes
maxPrivateIEs,
maxProtocolExtensions,
maxProtocolIEs
FROM S1AP-Constants;
-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************
S1AP-PROTOCOL-IES ::= CLASS {
&id ProtocolIE-ID UNIQUE,
&criticality Criticality,
&Value,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
TYPE &Value
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************
S1AP-PROTOCOL-IES-PAIR ::= CLASS {
&id ProtocolIE-ID UNIQUE,
&firstCriticality Criticality,
&FirstValue,
&secondCriticality Criticality,
&SecondValue,
&presence Presence
}
WITH SYNTAX {
ID &id
FIRST CRITICALITY &firstCriticality
FIRST TYPE &FirstValue
SECOND CRITICALITY &secondCriticality
SECOND TYPE &SecondValue
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Protocol Extensions
--
-- **************************************************************
S1AP-PROTOCOL-EXTENSION ::= CLASS {
&id ProtocolExtensionID UNIQUE,
&criticality Criticality,
&Extension,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
EXTENSION &Extension
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Private IEs
--
-- **************************************************************
S1AP-PRIVATE-IES ::= CLASS {
&id PrivateIE-ID,
&criticality Criticality,
&Value,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
TYPE &Value
PRESENCE &presence
}
-- **************************************************************
--
-- Container for Protocol IEs
--
-- **************************************************************
ProtocolIE-Container {S1AP-PROTOCOL-IES : IEsSetParam} ::=
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-SingleContainer {S1AP-PROTOCOL-IES : IEsSetParam} ::=
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-Field {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
id S1AP-PROTOCOL-IES.&id ({IEsSetParam}),
criticality S1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}),
value S1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id})
}
-- **************************************************************
--
-- Container for Protocol IE Pairs
--
-- **************************************************************
ProtocolIE-ContainerPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
ProtocolIE-FieldPair {{IEsSetParam}}
ProtocolIE-FieldPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
id S1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}),
firstCriticality S1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}),
firstValue S1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}),
secondCriticality S1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}),
secondValue S1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id})
}
-- **************************************************************
--
-- Container Lists for Protocol IE Containers
--
-- **************************************************************
ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES : IEsSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-SingleContainer {{IEsSetParam}}
ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-ContainerPair {{IEsSetParam}}
-- **************************************************************
--
-- Container for Protocol Extensions
--
-- **************************************************************
ProtocolExtensionContainer {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::=
SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
ProtocolExtensionField {{ExtensionSetParam}}
ProtocolExtensionField {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
id S1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}),
criticality S1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}),
extensionValue S1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id})
}
-- **************************************************************
--
-- Container for Private IEs
--
-- **************************************************************
PrivateIE-Container {S1AP-PRIVATE-IES : IEsSetParam } ::=
SEQUENCE (SIZE (1.. maxPrivateIEs)) OF
PrivateIE-Field {{IEsSetParam}}
PrivateIE-Field {S1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
id S1AP-PRIVATE-IES.&id ({IEsSetParam}),
criticality S1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}),
value S1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id})
}
END
targets/RT/USER/lte-ru.c
View file @
849be5f9
...
...
@@ -121,7 +121,7 @@ extern int emulate_rf;
extern
int
numerology
;
extern
int
fepw
;
extern
int
single_thread_flag
;
extern
clock_source_t
clock_source
;
extern
void
phy_init_RU
(
RU_t
*
);
extern
void
phy_free_RU
(
RU_t
*
);
...
...
@@ -1411,7 +1411,8 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) {
cfg
->
num_rb_dl
=
fp
->
N_RB_DL
;
cfg
->
tx_num_channels
=
ru
->
nb_tx
;
cfg
->
rx_num_channels
=
ru
->
nb_rx
;
cfg
->
clock_source
=
clock_source
;
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
{
cfg
->
tx_freq
[
i
]
=
(
double
)
fp
->
dl_CarrierFreq
;
...
...
targets/RT/USER/lte-softmodem.c
View file @
849be5f9
...
...
@@ -130,7 +130,7 @@ volatile int start_UE = 0;
#endif
volatile
int
oai_exit
=
0
;
static
clock_source_t
clock_source
=
internal
;
clock_source_t
clock_source
=
internal
;
static
int
wait_for_sync
=
0
;
unsigned
int
mmapped_dma
=
0
;
...
...
@@ -942,7 +942,7 @@ int main( int argc, char **argv )
printf
(
"Reading in command-line options
\n
"
);
get_options
();
get_options
();
if
(
CONFIG_ISFLAGSET
(
CONFIG_ABORT
)
)
{
fprintf
(
stderr
,
"Getting configuration failed
\n
"
);
exit
(
-
1
);
...
...
@@ -1131,13 +1131,6 @@ int main( int argc, char **argv )
rt_sleep_ns
(
10
*
100000000ULL
);
if
(
nfapi_mode
)
{
printf
(
"NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection
\n
"
);
pthread_cond_init
(
&
sync_cond
,
NULL
);
pthread_mutex_init
(
&
sync_mutex
,
NULL
);
}
if
(
nfapi_mode
)
{
printf
(
"NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection
\n
"
);
...
...
targets/RT/USER/lte-softmodem.h
View file @
849be5f9
...
...
@@ -65,7 +65,7 @@
#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n"
#define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n"
#define CONFIG_HLP_DMAMAP "sets flag for improved EXMIMO UE performance\n"
#define CONFIG_HLP_
EXCCLK "tells hardware to use an external clock reference
\n"
#define CONFIG_HLP_
CLK "tells hardware to use a clock reference (0:internal, 1:external, 2:gpsdo)
\n"
#define CONFIG_HLP_USIM "use XOR autentication algo in case of test usim mode\n"
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
#define CONFIG_HLP_TADV "Set timing_advance\n"
...
...
@@ -161,7 +161,7 @@
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&phy_test, defintval:0, TYPE_INT, 0}, \
{"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&usim_test, defintval:0, TYPE_UINT8, 0}, \
{"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, uptr:&mmapped_dma, defintval:0, TYPE_INT, 0}, \
{"
external-clock", CONFIG_HLP_EXCCLK, PARAMFLAG_BOOL, uptr:&clock_source, defintval:0, TYPE_INT,
0}, \
{"
clock", CONFIG_HLP_CLK, 0, uptr:&clock_source, defintval:0, TYPE_UINT,
0}, \
{"wait-for-sync", NULL, PARAMFLAG_BOOL, iptr:&wait_for_sync, defintval:0, TYPE_INT, 0}, \
{"single-thread-enable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:0, TYPE_INT, 0}, \
{"threadIQ", NULL, 0, iptr:&(threads.iq), defintval:1, TYPE_INT, 0}, \
...
...
targets/RT/USER/lte-uesoftmodem.c
View file @
849be5f9
...
...
@@ -136,7 +136,7 @@ volatile int start_UE = 0;
#endif
volatile
int
oai_exit
=
0
;
static
clock_source_t
clock_source
=
internal
;
clock_source_t
clock_source
=
internal
;
static
int
wait_for_sync
=
0
;
unsigned
int
mmapped_dma
=
0
;
...
...
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