NXP MCU 技术论坛
直播中

洒下墨色

10年用户 1007经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

为什么无法通过demo_feature_L2_bridge_vlan上的PFE转发VLAN标记的以太网数据包?

我正在尝试在使用 libfci 时评估 Linux BSP 上的一些 PFE 功能,但没有成功。希望有人可以帮忙。

设置:
- 板卡:S32G-VNP-RDB3 (S32G399A)
- 软件:LinuxBSP 43.0.0 PFE 固件 1.10.0
- PC0 连接到 emac0 (P4)
- PC1 连接到 emac1 (P5)

问题:
我正在尝试运行 libfci 随附的 demo_feature_L2_bridge_vlan 演示,它基本上展示了以下内容:
1. 同一网络中 2 台设备之间的无标签通信(PC0_NOVLAN 和 PC1_NOVLAN)
2. 同一网络中 2 个设备之间的标记通信(PC0_100 和 PC1_100 - VLAN 100 或 PC0_200 和 PC1_200 - VLAN 200)
我可以成功验证的第一个用例 - 从 PC0 向 PC1 发送 ping(反之亦然)。以下是发生的情况:
- PC0 发送 ARP 请求,询问 PC2 的 MAC 地址
- PC1 使用其 MAC 地址响应 ARP 给定
- PC0 发送 ICMP 请求
- PC1 使用 ICMP 应答进行响应
对于第二个用例,我看不到正在路由的数据包。PC1 不响应 PC0 发送的 ARP 请求。我还尝试发送硬编码数据包(PC0 和 PC1 的 src 和 dst MAC/IP 地址,基本上是执行 ARP 工作),但没有成功。

我做了什么:
- 按照 S32G3_LinuxBSP_43.0_User_Manual 构建 Yocto,包括 PFE 软件和固件,使用映像刷新 SD 卡(板处于 SD 卡引导模式)
- 配置 PC0 和 PC1 以太网接口,以在必要时匹配演示配置 VLAN(VLAN 100 或 VLAN 200)的 MAC/IP 地址
- 验证了 SerDes/SJ 交换机配置的 BSP 默认配置是否正确
- 尝试在 PC 之间发送数据包:ping 或 UDP 数据包(带有硬编码的 MAC/IP 地址)
- 验证发送到 S23G 板的以太网数据包是否带有 VLAN 标记

我需要支持来运行第二个用例。

回帖(1)

乐骞添

2025-3-27 18:13:05

根据问题描述,以下是可能的原因及解决方案:


可能原因分析:



  1. PFE桥接未正确配置VLAN过滤:PFE需要明确允许VLAN ID通过桥接端口。

  2. 物理接口剥离VLAN标签:网卡的VLAN卸载功能可能导致标签被剥离。

  3. VLAN子接口未正确创建或加入桥接:未将VLAN子接口关联到桥接设备。

  4. PFE固件或驱动兼容性问题:当前固件版本可能存在VLAN转发的bug。

  5. 转发表未正确学习VLAN信息:PFE转发表未包含VLAN相关的MAC条目。


解决步骤:


1. 检查并配置桥接的VLAN过滤


确保桥接设备(如br0)允许对应的VLAN通过:


# 添加VLAN 100和200到桥接端口emac0和emac1
bridge vlan add dev emac0 vid 100
bridge vlan add dev emac0 vid 200
bridge vlan add dev emac1 vid 100
bridge vlan add dev emac1 vid 200

# 验证配置
bridge vlan show

2. 关闭物理接口的VLAN卸载


禁用接收端VLAN标签剥离,保留标签以供PFE处理:


ethtool -K emac0 rx-vlan-offload off
ethtool -K emac1 rx-vlan-offload off

3. 创建VLAN子接口并加入桥接


若使用VLAN子接口,确保正确创建并关联到桥接:


# 创建VLAN 100子接口
ip link add link emac0 name emac0.100 type vlan id 100
ip link set emac0.100 up

# 将子接口加入桥接
brctl addif br0 emac0.100

4. 验证PFE固件和驱动


检查固件版本是否支持VLAN功能,并查看系统日志:


dmesg | grep pfe

如有必要,升级到NXP官方推荐版本或应用补丁。


5. 数据包抓取分析


在发送和接收接口抓包,确认VLAN标签处理:


# 在emac0抓取VLAN 100的流量
tcpdump -i emac0 -n -e vlan 100

# 在emac1抓取响应
tcpdump -i emac1 -n -e vlan 100

若发送端有标签而接收端无,则PFE未正确转发;若接收端有标签但PC未处理,需检查PC的VLAN配置。


6. 检查libfci的VLAN配置


确保demo代码中正确设置了VLAN参数,例如:



  • 初始化时注册VLAN ID。

  • 转发表条目包含VLAN与MAC的映射。


其他注意事项:



  • 硬件限制:确认S32G399A的PFE支持VLAN桥接,查阅数据手册。

  • 防火墙规则:检查ebtablesnftables是否过滤了VLAN流量。

  • 示例配置参考:对照NXP提供的PFE示例配置,调整参数。


通过以上步骤排查,应能定位并解决VLAN转发失败的问题。如问题依旧,建议在NXP社区或支持渠道提交详细日志和配置以获取进一步帮助。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分