использование примера dpdk приводит к ошибке порт не включен в маске порта

#dpdk

Вопрос:

Я пытаюсь интегрировать свое пользовательское приложение с примерами DPDK, используя измененный файл Makefile

  1. Базовое приложение переадресации (l2fwd и скелет) с пользовательским кодом приложения и файлом Makefile работает без проблем.
  2. Приложение ACL L3fwd с пользовательским кодом приложения и файлом Makefile не может идентифицировать порты сетевой карты

Журнал ошибок: port is not enabled in port mask NIC: Mellanox PMD

Пользовательский файл создания:

     link_directories(/usr/local/lib/aarch64-linux-gnu/)
    include_directories(/usr/local/include/)
    link_directories(/opt/mellanox/dpdk/lib)
    
    SET(DPDK_LIBS "-Wl,--whole-archive  -l dpdk  -Wl,--no-whole-archive")
    add_executable( exAppln exAppln.c )
    target_link_libraries(exAppln LINK_PUBLIC  pcap ${DPDK_LIBS} )
 

Аргумент, передаваемый для пользовательского приложения, является ./Sample -l 1,2 -n 4 -- -p 0x3 --config="(0,0,1)" --rule_ipv4="/root/rule_ipv4.db" --rule_ipv6=/root/rule_ipv6.db

[ПРАВКА-1] на основе разговора через комментарий

  1. NIC идентифицируется как Mellanox, но тип mlx5 или mlx6 не является
  2. На основе аргумента Makefile это ссылка на общую библиотеку.
  3. Аргументы командной строки не изменяются для ввода PCIe-зонда для общей библиотеки PMD для mellanox
  4. нет записи журнала для makefile приложения и --log-level для приложения.

Комментарии:

1. пожалуйста, обновите используемую версию DPDK? ваше пользовательское приложение использует файл макета DPDK или использует пользовательский файл макета?

2. Я использую пользовательский файл создания. В системе установлены две версии DPDK 20.11 и 19.05. В файле cmakefile пользовательского приложения я связался с двумя версиями dpdk, так как в последней версии отсутствовали некоторые файлы so.

3. @imo пожалуйста, обновите вопрос с помощью пользовательского файла makefile и используемого сетевого адаптера PMD для ясности

4. запрошена информация о PMD сетевой карты, но у вас есть общее имя интерфейса ядра. Это бесполезно. Но на основании аргументов ссылки в файле makefile проблема идентифицирована и решение предоставлено в качестве ответа, пожалуйста, примите или поддержите, чтобы закрыть проблему.

5. все еще ждете с вашего конца , чтобы поделиться обновлением при запуске с опцией -d , определяющей, используется ли сетевой адаптер mellanox 5 или mellanox 6, как указано, ссылки на файлы makefile по умолчанию статически (можно перепроверить на основе журналов make)., запрошено создать образец приложения DPDK с теми же флагами для перекрестной проверки

Ответ №1:

Библиотеки DPDK могут быть связаны статически или в общем режиме. На основе обновления -Wl,--whole-archive -l dpdk -Wl,--no-whole-archive текущая привязка выполняется в общем режиме.

Чтобы включить зондирование желаемого PMD, используйте аргументы DPDK rte_eal_inti -d . Пример

  1. для использования в сети Fortville -d librte_pmd_i40e.so
  2. для использования 82599ES -d librte_pmd_ixgbe.so
  3. [редактировать-1 на основе обновления комментариев] для mellanox net_mlx5, пожалуйста, используйте -d librte_pmd_mlx5.so .

записка:

  1. убедитесь export LD_LIBRARY_PATH=/usr/local/lib/aarch64-linux-gnu/ , что установлен параметр, указывающий путь к нужному DPDK PMD.
  2. если можно выполнить связывание со статическими библиотеками, вы можете избежать передачи опции -d

Комментарии:

1. Используется сетевой адаптер Mellanox, а LD_LIBRARY_PATH имеет значение /opt/mellanox/dpdk/lib . Похоже, здесь проблема в другом. Первоначально я использовал пример приложения для базовой переадресации, и интегрированный код выполнялся без ошибок, так как я хотел использовать фильтрацию пакетов, я переключился на код acl l3fwd

2. @ima если вам нужны библиотеки mellanox, вы также должны указать свой путь export LD_LIBRARY_PATH=/usr/local/lib/aarch64-linux-gnu:/opt/mellanox/dpdk/lib . вы передали pmd mellanox с опцией -d rte_eal_init? Работает ли ваш сетевой адаптер mellanox с DPDK/example/l3fwd, построенным в режиме общей библиотеки (создание приложения вручную)?