如何在DPDK 20.11与Alveo U200的QDMA中实现通用过滤器
DPDK 20.11 下 QDMA 通用过滤器(Generic Filter)实现指南
核心修改方向
1. QDMA驱动层适配
- 在
qdma_rte.c中扩展过滤器处理逻辑:- 新增
QDMA_FILTER_TYPE_GENERIC枚举值,补充到现有过滤器类型定义中 - 针对
rte_eth_dev_filter_ctrl接口,实现RTE_ETH_FILTER_GENERIC类型的分支处理,覆盖添加、删除、查询、清空四种操作
- 新增
- 对接硬件寄存器:
- 定位QDMA PF/VF配置空间中通用过滤器对应的寄存器组(含过滤表基地址、条目使能位、匹配规则寄存器)
- 编写寄存器读写逻辑,将DPDK传入的
struct rte_eth_generic_filter规则(如五元组掩码、自定义匹配字段)转换为硬件可识别的格式写入寄存器
- 维护过滤状态:在驱动私有数据结构(如
qdma_private)中添加链表,记录已配置的通用过滤器条目,用于后续状态查询与清理
2. 对齐DPDK过滤框架
- 确保驱动支持
RTE_ETH_FILTER_GENERIC的全量操作:RTE_ETH_FILTER_ADD、RTE_ETH_FILTER_DELETE、RTE_ETH_FILTER_GET、RTE_ETH_FILTER_FLUSH - 添加规则合法性校验:检查传入的过滤规则是否符合QDMA硬件的匹配能力(如掩码长度、支持的字段类型),不支持的规则直接返回对应错误码
3. 暴露硬件支持能力
- 在
qdma_dev_info_get函数中,设置dev_info->filter_num[RTE_ETH_FILTER_GENERIC]为QDMA硬件支持的通用过滤器最大条目数 - 在
dev_info->filter_flags中标记对应位,告知DPDK框架本驱动支持通用过滤器功能
调试与验证步骤
- 用
dpdk-testpmd工具验证:执行filter add generic命令添加自定义规则,抓包确认仅匹配流量被接收 - 开启驱动调试日志:编译时打开
CONFIG_RTE_LIBRTE_QDMA_DEBUG=y,查看寄存器读写日志,确认规则是否正确写入硬件 - 核对硬件编程手册:如果缺少驱动文档,可参考厂商提供的QDMA硬件编程手册,匹配寄存器地址与位定义
注意事项
- 严格对齐DPDK 20.11版本的
rte_ethdev.h中通用过滤器的结构体与枚举定义,避免版本差异导致的兼容性问题 - 区分QDMA PF与VF的过滤器权限:部分场景下VF的通用过滤器配置会受PF全局规则限制,需针对性处理
内容的提问来源于stack exchange,提问作者thanveer Pk
相关产品推荐
相关产品推荐

