Запуск Pktgen со сценариями Lua приводит к ошибке User State for CLI not set for Lua.
Команда, которую я запускаю:
sudo -E ./usr/local/bin/pktgen --no-telemetry -l 4,6,8,10 -n 4 -a 0000:03:02.0 -m 1024 -- -T -P -m [6:8].0 -f test/hello-world.lua
Что дает следующий результат:
Я установил переменные среды RTE_SDK=/root/Program/dpdk и RTE_TARGET=x86_64-native-linux-gcc.
Сбой происходит от cli.c (ссылка на код):
/**
* Load and execute a command file or Lua script file.
*
*/
int
cli_execute_cmdfile(const char *filename)
{
if (filename == NULL)
return 0;
gb_reset_buf(this_cli->gb);
if (strstr(filename, ".lua") || strstr(filename, ".LUA") ) {
if (!this_cli->user_state) {
cli_printf(">>> User State for CLI not set for Lua\n");
return -1;
}
if (lua_dofile) {
/* Execute the Lua script file. */
if (lua_dofile(this_cli->user_state, filename) != 0)
return -1;
} else
cli_printf(">>> Lua is not enabled in configuration!\n");
} else {
FILE *fd;
char buff[256];
fd = fopen(filename, "r");
if (fd == NULL)
return -1;
/* Read and feed the lines to the cmdline parser. */
while (fgets(buff, sizeof(buff), fd))
cli_input(buff, strlen(buff));
fclose(fd);
}
return 0;
}
Так вроде бы this_cli->user_state не ставится, а как его поставить?
Я просмотрел документацию для CLI, но там не упоминается настройка какого-либо пользовательского состояния из того, что я вижу.
Предлагаемое решение кажется шагом в правильном направлении, поскольку теперь оно может найти библиотеку Lua, но я все еще получаю ту же ошибку после запуска meson -Denable_lua=true build, ninja -C build, а затем ninja -C build install, за которым следует sudo -E ./usr/local/bin/pktgen --no-telemetry -l 4,6,8,10 -n 4 -a 0000:03:02.0 -m 1024 -- -T -P -m [6:8].0 -f test/hello-world.lua
Возможно, это как-то связано с Run-time dependency lua found: NO?
При запуске make install в lua-5.4.4 возвращается:
User_state установлен в pktgen-main.c, но в разделе #ifdef LUA_ENABLED.
Глядя на meson_options.txt, который находится в базовом каталоге извлечения pktgen, он содержит:
option('enable_lua', type: 'boolean', value: false, description: 'Enable Lua support')
Это означает, что вы должны включить поддержку Lua при сборке (после установки зависимостей, как показано ниже):
meson -Denable_lua=true build
Для этого потребуется еще несколько зависимостей, поэтому вам, возможно, придется их установить, например. в Убунте:
sudo apt-get install cmake
А затем установка Lua — мне пришлось установить его из исходников в соответствии с инструкциями, потому что установка его с помощью диспетчера пакетов Ubuntu apt не дала мне необходимой библиотеки:
curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz
tar zxf lua-5.4.4.tar.gz
cd lua-5.4.4
make all test
sudo make install
Спасибо за ваш отзыв! Кажется, он все еще работает неправильно. Пожалуйста, смотрите раздел обновления в вопросе.
Решение состояло в том, чтобы запустить make clean buildlua вместо использования meson и ninja
Как ты получил бинарник?