This commit does the following:
1. Reverts GTPU_need_ITTI back to develop 2. Removed gdb helper and co files 3. Reverts changes to logging mechanism 4. Reverts changes to assert that were unnecessary 5. Reverts changes to VNF that occured from a bad merge 6. Removes unnecessary else() in gNB softmodem
This commit is contained in:
@@ -2846,7 +2846,6 @@ add_executable(lte-softmodem
|
||||
${OPENAIR_DIR}/common/utils/utils.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${PHY_INTERFACE_DIR}/queue_t.c
|
||||
${GTPU_need_ITTI}
|
||||
${OPENAIR_DIR}/common/utils/lte/ue_power.c
|
||||
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
|
||||
${XFORMSINTERFACE_SOURCE}
|
||||
@@ -3034,7 +3033,6 @@ add_executable(nr-softmodem
|
||||
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
|
||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||
${PHY_INTERFACE_DIR}/queue_t.c
|
||||
${GTPU_need_ITTI}
|
||||
${XFORMSINTERFACE_SOURCE}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
cd "$(dirname "$0")/.." || exit
|
||||
source oaienv
|
||||
cd cmake_targets || exit
|
||||
|
||||
cmd=(
|
||||
./ran_build/build/lte-softmodem
|
||||
-O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf
|
||||
--noS1
|
||||
"$@"
|
||||
)
|
||||
|
||||
exec sudo -E gdb "$@" --args "${cmd[@]}"
|
||||
@@ -1,195 +0,0 @@
|
||||
-------------------------------------------------------------------------------
|
||||
Build.
|
||||
|
||||
Make sure you've built with debug info:
|
||||
|
||||
cd ~/openairinterface5g # or wherever
|
||||
source oaienv
|
||||
cd cmake_targets
|
||||
./build_oai --UE --eNB --verbose-compile --run-with-gdb RelWithDebInfo
|
||||
make -C ran_build/build -j4 lte-softmodem lte-uesoftmodem
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Verify.
|
||||
|
||||
Verify the build was done correctly:
|
||||
|
||||
$ ./gdb-helper
|
||||
...
|
||||
Reading symbols from ./ran_build/build/lte-softmodem...done.
|
||||
(gdb) b main
|
||||
Breakpoint 1 at 0x59f110: file /local/episys/openairinterface5g/targets/RT/USER/lte-softmodem.c, line 516.
|
||||
(gdb) run
|
||||
Starting program: /local/episys/openairinterface5g/cmake_targets/ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf --noS1
|
||||
[Thread debugging using libthread_db enabled]
|
||||
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
|
||||
|
||||
Breakpoint 1, main (argc=4, argv=0x7fffffffe058) at /local/episys/openairinterface5g/targets/RT/USER/lte-softmodem.c:516
|
||||
516 {
|
||||
(gdb) list
|
||||
511 pthread_mutex_unlock(&nfapi_sync_mutex);
|
||||
512 printf( "NFAPI: got sync (%s)\n", thread_name);
|
||||
513 }
|
||||
514
|
||||
515 int main ( int argc, char **argv )
|
||||
516 {
|
||||
517 struct sched_param param =
|
||||
518 {
|
||||
519 .sched_priority = 79
|
||||
520 };
|
||||
(gdb) n
|
||||
521 if (sched_setscheduler( 0, SCHED_RR, ¶m ) == -1 )
|
||||
(gdb) quit
|
||||
A debugging session is active.
|
||||
|
||||
Inferior 1 [process 19964] will be killed.
|
||||
|
||||
Quit anyway? (y or n) y
|
||||
$
|
||||
|
||||
If gdb says "no debugging symbols found" then clean your workspace and re-do
|
||||
the build as above.
|
||||
|
||||
(gdb) b main
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Password-less sudo.
|
||||
|
||||
Vscode launches lte-softmodem via sudo. Make sure sudo does not prompt you
|
||||
for a password:
|
||||
|
||||
sudo -n id
|
||||
|
||||
If that command fails, do the following:
|
||||
|
||||
echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
|
||||
|
||||
Then verify:
|
||||
|
||||
sudo -n id
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Vscode.
|
||||
|
||||
Launch Vscode:
|
||||
|
||||
cd ~/openairinterface5g # or wherever
|
||||
code . targets/RT/USER/lte-softmodem.c .vscode/launch.json
|
||||
|
||||
See launch.json for details about how vscode launches lte-softmodem for debugging.
|
||||
|
||||
For example, in lte-softmodem.c, scroll to main() and click the line number to
|
||||
the left of main to add a breakpoint. then do Run => Start debugging (F5) to
|
||||
run lte-softmodem in the debugger
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Running Vscode remotely.
|
||||
|
||||
Currently, running Vscode remotely (via an X-Windows connection) does not work
|
||||
-- the Vscode window appears but remains blank. Presumably the Vscode
|
||||
developers will fix this problem eventually. Meanwhile, you can use `sshfs`
|
||||
to make the remote filesystem appear locally and then run Vscode locally.
|
||||
|
||||
On the local machine:
|
||||
|
||||
$ remote=surfer # or whatever the remote machine's name is
|
||||
$ mkdir ~/openairinterface5g
|
||||
$ sshfs $remote:openairinterface5g ~/openairinterface5g
|
||||
$ ls ~/openairinterface5g
|
||||
CHANGELOG.md CONTRIBUTING.md nfapi openair3 targets
|
||||
...
|
||||
$ code ~/openairinterface5g
|
||||
$
|
||||
|
||||
The remote and local pathnames of your openairinterface5g workspace should be
|
||||
the same. If they're different, use a symlink on the local machine to make
|
||||
the remote pathnames work locally. This part is important because executables
|
||||
built on $remote contain references to the source files and vscode & gdb will
|
||||
use those pathnames to find the source files.
|
||||
|
||||
You may want to locally mount the remote logs directory, too:
|
||||
|
||||
$ mkdir ~/logs
|
||||
$ sshfs $remote:logs ~/logs
|
||||
$ ls -l ~/logs
|
||||
total 40
|
||||
lrwxrwxrwx 1 1002 1002 22 Jan 17 11:54 latest -> logs-2021-01-17-085419
|
||||
drwxr-xr-x 1 1002 1002 4096 Jan 17 11:54 logs-2021-01-17-085419
|
||||
$
|
||||
|
||||
That will give you access to core files collected by lte_testscript.py, for
|
||||
example.
|
||||
|
||||
$ file ~/logs/latest/0001/coredump-6699
|
||||
/home/michael/logs/latest/0001/coredump-6699: ELF 64-bit LSB core file,
|
||||
x86-64, version 1 (SYSV), SVR4-style, from './ran_build/build/lte-softmodem
|
||||
-O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi', real uid: 0, effective
|
||||
uid: 0, real gid: 0, effective gid: 0, execfn:
|
||||
'./ran_build/build/lte-softmodem', platform: 'x86_64'
|
||||
$
|
||||
$ file ~/openairinterface5g/cmake_targets/ran_build/build/lte-softmodem
|
||||
/home/michael/openairinterface5g/cmake_targets/ran_build/build/lte-softmodem:
|
||||
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked,
|
||||
interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
|
||||
BuildID[sha1]=831400d4aae5d43b94ef3b22ebbd635107de48ae, with debug_info, not
|
||||
stripped
|
||||
$
|
||||
|
||||
Verify gdb can access these remote files:
|
||||
|
||||
$ gdb ~/openairinterface5g/cmake_targets/ran_build/build/lte-softmodem \
|
||||
~/logs/latest/0001/coredump-6699
|
||||
...
|
||||
Program terminated with signal SIGABRT, Aborted.
|
||||
#0 0x00007f7fd7d11438 in ?? ()
|
||||
[Current thread is 1 (LWP 39)]
|
||||
(gdb)
|
||||
|
||||
If this step is too slow, you may want to copy the executable and coredump
|
||||
files to the local machine first.
|
||||
|
||||
$ scp -C $remote:openairinterface5g/cmake_targets/ran_build/build/lte-softmodem .
|
||||
$ scp -C $remote:logs/latest/0001/coredump-6699 .
|
||||
$ gdb lte-softmodem coredump-6699
|
||||
|
||||
Note, the local and remote machines should be the same version of Linux (e.g.,
|
||||
both Ubuntu 16.04). Otherwise, gdb will likely have trouble understanding the
|
||||
coredump.
|
||||
|
||||
To load the coredump into Vscode, modify launch.json to add "coreDumpPath".
|
||||
You may also need to modify the "program" path and delete "miDebuggerPath".
|
||||
|
||||
--- .vscode/launch.json
|
||||
+++ .vscode/launch.json
|
||||
@@ -9,7 +9,7 @@
|
||||
"name": "(gdb) Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
- "program": "${workspaceFolder}/cmake_targets/ran_build/build/lte-so
|
||||
+ "program": "/home/michael/tmp/lte-softmodem",
|
||||
"args": [
|
||||
"-O", "../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf",
|
||||
"--noS1"
|
||||
@@ -19,14 +19,14 @@
|
||||
"environment": [],
|
||||
"externalConsole": false,
|
||||
"MIMode": "gdb",
|
||||
- "miDebuggerPath": "${workspaceFolder}/cmake_targets/sudo-gdb",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
- ]
|
||||
+ ],
|
||||
+ "coreDumpPath": "/home/michael/tmp/coredump-6699"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Then, in Vscode click the debug icon on the left navigation bar, then click
|
||||
the green "play" triangle near the upper left corner of the window. See the
|
||||
"CALL STACK" near the lower left of the window.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Helper script for Vscode. See .vscode/launch.json "miDebuggerPath"
|
||||
cd "$(dirname "$0")/.." || exit
|
||||
source oaienv
|
||||
cd cmake_targets || exit
|
||||
exec sudo -nE gdb "$@"
|
||||
+8
-13
@@ -562,19 +562,14 @@ static int log_header(char *log_buffer,
|
||||
const char *format)
|
||||
{
|
||||
char threadname[PR_SET_NAME];
|
||||
struct timespec ts;
|
||||
if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
|
||||
abort();
|
||||
return snprintf(log_buffer, buffsize, "%lu.%06lu %s%s[%s]%c %s %s%s",
|
||||
ts.tv_sec,
|
||||
ts.tv_nsec / 1000,
|
||||
log_level_highlight_end[level],
|
||||
( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
|
||||
g_log->log_component[comp].name,
|
||||
( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:' '),
|
||||
( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
|
||||
format,
|
||||
log_level_highlight_end[level]);
|
||||
return snprintf(log_buffer, buffsize, "%s%s[%s]%c %s %s%s",
|
||||
log_level_highlight_end[level],
|
||||
( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
|
||||
g_log->log_component[comp].name,
|
||||
( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:' '),
|
||||
( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
|
||||
format,
|
||||
log_level_highlight_end[level]);
|
||||
}
|
||||
|
||||
void logRecord_mt(const char *file,
|
||||
|
||||
@@ -106,22 +106,12 @@ extern "C" {
|
||||
/* .log_format = 0x13 uncolored standard messages
|
||||
* .log_format = 0x93 colored standard messages */
|
||||
/* keep white space in first position; switching it to 0 allows colors to be disabled*/
|
||||
#define LOG_WITH_COLORS 1
|
||||
#if LOG_WITH_COLORS
|
||||
#define LOG_RED "\033[1;31m" /*!< \brief VT100 sequence for bold red foreground */
|
||||
#define LOG_GREEN "\033[32m" /*!< \brief VT100 sequence for green foreground */
|
||||
#define LOG_ORANGE "\033[93m" /*!< \brief VT100 sequence for orange foreground */
|
||||
#define LOG_BLUE "\033[34m" /*!< \brief VT100 sequence for blue foreground */
|
||||
#define LOG_CYBL "\033[40;36m" /*!< \brief VT100 sequence for cyan foreground on black background */
|
||||
#define LOG_RESET "\033[0m" /*!< \brief VT100 sequence for reset (black) foreground */
|
||||
#else
|
||||
# define LOG_RED ""
|
||||
# define LOG_GREEN ""
|
||||
# define LOG_ORANGE ""
|
||||
# define LOG_BLUE ""
|
||||
# define LOG_CYBL ""
|
||||
# define LOG_RESET ""
|
||||
#endif // LOG_WITH_COLORS
|
||||
/* @}*/
|
||||
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ extern "C" {
|
||||
|
||||
void *itti_malloc(task_id_t origin_task_id, task_id_t destination_task_id, ssize_t size) {
|
||||
void *ptr = NULL;
|
||||
AssertFatal ((ptr=calloc (1, size)) != NULL, "Memory allocation of %zu bytes failed (%d -> %d)!\n",
|
||||
AssertFatal ((ptr=calloc (size, 1)) != NULL, "Memory allocation of %zu bytes failed (%d -> %d)!\n",
|
||||
size, origin_task_id, destination_task_id);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
+2
-28
@@ -238,34 +238,8 @@ void rx_func(void *param) {
|
||||
if (pthread_mutex_unlock(&rnti_to_remove_mutex)) exit(1);
|
||||
|
||||
// RX processing
|
||||
int tx_slot_type; int rx_slot_type;
|
||||
if(NFAPI_MODE != NFAPI_MONOLITHIC) { //slot selection routines not working properly in nfapi, so temporarily hardcoding
|
||||
if ((slot_tx==8) || (slot_tx==9) || (slot_tx==18) || (slot_tx==19)) { //tx slot config
|
||||
tx_slot_type = NR_UPLINK_SLOT;
|
||||
}
|
||||
else if ((slot_tx==7) || (slot_tx==17)) {
|
||||
tx_slot_type = NR_MIXED_SLOT;
|
||||
}
|
||||
else {
|
||||
tx_slot_type = NR_DOWNLINK_SLOT;;
|
||||
}
|
||||
|
||||
if ((slot_rx==8) || (slot_rx==9) || (slot_rx==18) || (slot_rx==19)) { // rx slot config
|
||||
rx_slot_type = NR_UPLINK_SLOT;
|
||||
}
|
||||
else if ((slot_rx==7) || (slot_rx==17)) {
|
||||
rx_slot_type = NR_MIXED_SLOT;
|
||||
}
|
||||
else {
|
||||
rx_slot_type = NR_DOWNLINK_SLOT;;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
tx_slot_type = nr_slot_select(cfg,frame_tx,slot_tx);
|
||||
rx_slot_type = nr_slot_select(cfg,frame_rx,slot_rx);
|
||||
}
|
||||
int tx_slot_type = nr_slot_select(cfg,frame_tx,slot_tx);
|
||||
int rx_slot_type = nr_slot_select(cfg,frame_rx,slot_rx);
|
||||
if (rx_slot_type == NR_UPLINK_SLOT || rx_slot_type == NR_MIXED_SLOT) {
|
||||
// UE-specific RX processing for subframe n
|
||||
// TODO: check if this is correct for PARALLEL_RU_L1_TRX_SPLIT
|
||||
|
||||
@@ -633,7 +633,7 @@ void init_pdcp(void) {
|
||||
LOG_I(PDCP, "node is DU, rlc send pdcp_data_ind by proto_agent \n");
|
||||
pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) proto_agent_send_pdcp_data_ind);
|
||||
}
|
||||
} else if (get_softmodem_params()->nsa) {
|
||||
} else {
|
||||
pdcp_layer_init();
|
||||
uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
|
||||
(PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
|
||||
@@ -646,9 +646,6 @@ void init_pdcp(void) {
|
||||
nr_pdcp_module_init(pdcp_initmask, 0);
|
||||
pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req);
|
||||
pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
|
||||
} else {
|
||||
LOG_I(PDCP, "node is DU, rlc send pdcp_data_ind by proto_agent \n");
|
||||
pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) proto_agent_send_pdcp_data_ind);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user