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

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

正常情况下, 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 应该要收的包也收了. 这样原因就找到了.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值