首页 > 解决方案 > 使用 dpdk 示例给出错误端口未在端口掩码中启用

问题描述

我正在尝试使用修改后的 Makefile 将我的自定义应用程序与 DPDK 示例集成

  1. 具有自定义应用程序代码和 Makefile 的基本转发应用程序(l2fwd 和骨架)可以正常工作。
  2. 具有自定义应用程序代码和 Makefile 的 L3fwd ACL 应用程序无法识别 NIC 端口

错误日志:port is not enabled in port mask 网卡: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

[EDIT-1] 基于通过评论的对话

  1. NIC 被标识为 Mellanox,但类型 mlx5 或 mlx6 不是
  2. 基于 Makefile 参数,它是共享库链接。
  3. 未修改命令行参数以获取用于 mellanox 的共享库 PMD 的 PCIe 探针
  4. 应用程序没有日志makefile捕获 --log-level

标签: dpdk

解决方案


DPDK 库可以静态链接或共享模式链接。基于更新,-Wl,--whole-archive -l dpdk -Wl,--no-whole-archive当前链接是在共享模式下完成的。

要启用对所需 PMD 的探测,请使用 DPDK rte_eal_inti args -d。例子

  1. Fortville NIC 使用-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

推荐阅读