dpdk - 使用 dpdk 示例给出错误端口未在端口掩码中启用
问题描述
我正在尝试使用修改后的 Makefile 将我的自定义应用程序与 DPDK 示例集成
- 具有自定义应用程序代码和 Makefile 的基本转发应用程序(l2fwd 和骨架)可以正常工作。
- 具有自定义应用程序代码和 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] 基于通过评论的对话
- NIC 被标识为 Mellanox,但类型 mlx5 或 mlx6 不是
- 基于 Makefile 参数,它是共享库链接。
- 未修改命令行参数以获取用于 mellanox 的共享库 PMD 的 PCIe 探针
- 应用程序没有日志
makefile
捕获--log-level
。
解决方案
DPDK 库可以静态链接或共享模式链接。基于更新,-Wl,--whole-archive -l dpdk -Wl,--no-whole-archive
当前链接是在共享模式下完成的。
要启用对所需 PMD 的探测,请使用 DPDK rte_eal_inti args -d
。例子
- Fortville NIC 使用
-d librte_pmd_i40e.so
- 供 82599ES 使用
-d librte_pmd_ixgbe.so
- [基于评论更新的编辑 1] 对于 mellanox net_mlx5 请使用
-d librte_pmd_mlx5.so
.
笔记:
- 确保
export LD_LIBRARY_PATH=/usr/local/lib/aarch64-linux-gnu/
设置了具有所需 DPDK PMD 的路径。 - 如果可以完成与静态库的链接,则可以避免传递选项
-d
推荐阅读
- android - Android minify 阻止应用程序构建
- jquery - DataTables数字排序不起作用
- .htaccess - 如何使用 .htacess 使用修改后的 URL 进行重定向
- haskell - 编译 FFI 示例时 libHSghc-prim 出现未定义符号错误
- node.js - NPM 在安装本地模块时更改模块名称
- java - java等待来自线程的事件
- sql - 在几列中导入h2数据库中的csv文件
- angular - Angular:如何使 NgControl 仅对主机的 valueChanges 做出反应
- python - 去除重复行并拆分平行语料库
- c# - 如何对依赖 HttpContext.GetGlobalResourceObject 的类进行单元测试?