北京SEO

igb网卡MAC地址为0时VF不能在guest中使用如何解决

2019/10/10/17:46:40  阅读:1714  来源:谷歌SEO算法  标签: SEO技术

将 Linux 3.9 作为KVM的内核,使用 Intel igb NIC 时把 MAC地址设置为0,然后将 VF(igbvf)分配guest使用出错:igbvf: probe of 0000:00:03.0 failed with error -5.

在使用了Linux 3.9 作为KVM host的内核后,使用Intel igb NIC(如:82576,I350)的SR-IOV,在将VF(igbvf)分配guest使用时,可能会遇到不工作的情况,在guest的dmesg中可以看到如下的错误信息:

  1. igbvf0000:00:03.0:irq26forMSI/MSI-X
  2. igbvf0000:00:03.0:InvalidMACAddress:00:00:00:00:00:00
  3. igbvf:probeof0000:00:03.0failedwitherror-5

即是,在guest中检测到的igbvf的MAC地址为全0,如kernel(KVM)bugzilla上的这个bug:

https://bugzilla.kernel.org/show_bug.cgi?id=55421

经过分析,出现这个问题的原因是,在最新的igb driver中在igbf使用时,会默认设置其MAC地址为全0,而之前是设置一个随机的MAC,可以看下面的Patch真是去做这件事情的,代码如下:

  1. [root@jay-linuxkvm.git]#gitdiff5ac6f91d39e088^5ac6f91d39e088
  2. diff--gita/drivers/net/ethernet/intel/igb/igb_main.cb/drivers/net/ethernet/intel/igb/igb_main.c
  3. indexb81a953..a59e630100644
  4. ---a/drivers/net/ethernet/intel/igb/igb_main.c
  5. +++b/drivers/net/ethernet/intel/igb/igb_main.c
  6. @@-5197,7+5197,7@@staticintigb_vf_configure(structigb_adapter*adapter,intvf)
  7. {
  8. unsignedcharmac_addr[ETH_ALEN];
  9. -eth_random_addr(mac_addr);
  10. +eth_zero_addr(mac_addr);
  11. igb_set_vf_mac(adapter,vf,mac_addr);
  12. return0;
  13. @@-5550,9+5550,9@@staticvoidigb_vf_reset_event(structigb_adapter*adapter,u32vf)
  14. {--phpfensi.com
  15. unsignedchar*vf_mac=adapter->vf_data[vf].vf_mac_addresses;
  16. -/*generateanewmacaddressaswewerehotplugremoved/added*/
  17. +/*clearmacaddressaswewerehotplugremoved/added*/
  18. if(!(adapter->vf_data[vf].flags&IGB_VF_FLAG_PF_SET_MAC))
  19. -eth_random_addr(vf_mac);
  20. +eth_zero_addr(vf_mac);
  21. /*processremainingresetevents*/
  22. igb_vf_reset(adapter,vf);

至于为什么设置为全0而不使用曾经的随机MAC呢,这主要是因为随机的MAC在guest中与udev不能很好的工作,多次使用VF后会让ethX(X为数字编号)的编号持续增长变化,可能变为eth500、eth666之类的,对用户很不友好.

所以在KVM中,对于igb NIC的SR-IOV操作,需要注意以下两种方法(注意使用其中一种方法即可避免VF的MAC全0的情况):

1.在分配VF给客户机之前,需要在host中先设置igbvf的MAC地址,命令如下:

  1. [root@jay-linux~]#iplinkseteth0vf0mac00:1E:67:65:93:01
  2. #eth0为host中PF对应的interface名称,0代表PF的编号为0的VF(即第一个VF)
  3. #如果不清楚PF和VF对应关系,可以用下面的命令你个来查看以便确认
  4. [root@jay-linux~]#ethtool-ieth0
  5. driver:igb
  6. version:4.1.2-k
  7. firmware-version:1.64,0x800006fc
  8. bus-info:0000:0a:00.0
  9. supports-statistics:yes
  10. supports-test:yes
  11. supports-eeprom-access:yes
  12. supports-register-dump:yes
  13. supports-priv-flags:no
  14. [root@jay-linux~]#ls-l/sys/bus/pci/devices/0000:0a:00.0/virtfn*
  15. lrwxrwxrwx1rootroot0Apr2315:09/sys/bus/pci/devices/0000:0a:00.0/virtfn0->../0000:0b:10.0
  16. lrwxrwxrwx1rootroot0Apr2315:09/sys/bus/pci/devices/0000:0a:00.0/virtfn1->../0000:0b:10.4
  17. lrwxrwxrwx1rootroot0Apr2315:09/sys/bus/pci/devices/0000:0a:00.0/virtfn2->../0000:0b:11.0
  18. lrwxrwxrwx1rootroot0Apr2315:09/sys/bus/pci/devices/0000:0a:00.0/virtfn3->../0000:0b:11.4
  19. lrwxrwxrwx1rootroot0Apr2315:09/sys/bus/pci/devices/0000:0a:00.0/virtfn4->../0000:0b:12.0
  20. lrwxrwxrwx1rootroot0Apr2315:09/sys/bus/pci/devices/0000:0a:00.0/virtfn5->../0000:0b:12.4
  21. lrwxrwxrwx1rootroot0Apr2315:09/sys/bus/pci/devices/0000:0a:00.0/virtfn6->../0000:0b:13.0

2.升级guest中的kernel或igbvf driver,发现在升级一个rhel6.4 guest的内核到 Linux 3.9 之后,也可以正常使用igbvf了,尽管没有做第一种方法中在host中手动设置igbvf的MAC.

这是因为最新的igbvf driver在检测到MAC为全0时,也做了特别处理.

广告内容

igb网卡MAC地址为0时VF不能在guest中使用如何解决 igb网卡MAC地址为0时VF不能在guest中使用如何解决 igb网卡MAC地址为0时VF不能在guest中使用如何解决

相关阅读

热门评论

sunshine技术博客 sunshine技术博客

sunshine技术博客

总篇数164

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法