嵌入式开发时如何让eth口同时使用socket和ODP

博客内容讲述了在使用ODP(Offload Data Plane)时遇到的问题,即在对eth口进行vfio绑定后,eth0在ifconfig下消失,无法配置IP用于socket通信。解决方案是通过启用sriov并创建虚拟功能VF,将VF绑定给ODP使用,而保留PF用于常规socket通信。需要注意的是,初始化ethport时不能开启混杂模式,因为这会导致PF和VF之间的资源冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正常情况下, ODP 在对eth口收发包时, 要先在脚本中对eth口进行绑定:

vfio-devbind.sh -b vfio-pci 0002:02:00.0

0002:02:00.0 表示eth0 的bdf 号.

有一个问题, 这样操作后, eth0在linux的ifconfig就不能显示了, 就不能配置IP 用于socket了.

如何能ODP 使用了也还可以用于socket 呢?

用以下配置虚拟一个设备出来:

echo 1 > /sys/class/net/eth0/device/sriov_numvfs

ODP 绑定的时候用:(如果不绑定, 这个会在ifconfig -a中显示出来, 作为普通的eth口使用)

vfio-devbind.sh -b vfio-pci 0002:02:00.1

这样可以实现.

注意:

ODP 在初始化eth port的时候, 不能打开混杂模式, 不然ODP, 和 socket都不能正常使用.

说明一下, 为什么要关闭混杂模式:

之前设置的原因, 主要是ODP 的demo 代码中就有这一行.没有去掉. 能用的情况下, 就忽略了.

后边发生了问题, 看源码发现sriov VF中设置了混杂模式后, 是对底层硬件npc 资源进行了设置, 这个npc 资源对于PF, VF 都在用, 这样就导致 了eth0 的VF 配置了混杂模式后, 把PF 应该要收的包也收了. 这样原因就找到了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值