困扰了很久的问题,供大家参考和讨论。

用 libvirt 和 kvm
部署了一批虚拟机,网络用的macvtap,比较新的网络虚拟化方案,配合比较新的交换机(支持VEPA)基本是完美的(除了ipv6的DAD一定会失败,这个是另外一个事情了)。

因为虚拟环境中使用了ipv6,所以多播的包很重要,比如RA等,不过虚拟机里面拿不到从交换机过来的多播包,所以ipv6的网络半瘫痪,打开了网卡的allmulti之后才能正常使用,然而v6的子网很大,开allmulti显然很不靠谱。

最初怀疑是macvtap或macvlan的bug,看完代码发现macvlan的确实现了macvlan设备到物理设备的多播filter列表的同步;而macvtap是在macvlan的后面封装了一个tap设备,简单地看了下代码觉得macvtap并没有实现奇怪的ioctl来管理多播filter地址列表。

到这,我想kvm是通过macvtap来与物理环境通信的,既然macvtap不支持多播filter地址列表,那么显然已经没救了。

今天搜索的时候发现了这样一个[patch](
http://libvirt.org/git/?p=libvirt.git;a=commit;h=d70cc1fa7219b347a301e132bb927f41958b372d)
,好像就是在解决多播filter地址列表的问题。但是为什么是libvirt的patch?

又找了一下发现在[这里](https://libvirt.org/formatdomain.html#elementsNICS)
有一个参数叫trustGuestRxFilters,在它为true的时候libvirt会处理kvm的事件,同步多播的filter列表,不过默认是no。

所以这个问题的结论大概应该是(暂时还没验证):
1. libvirt版本大于1.2.10
2. trustGuestRxFilters=yes
3. 虚拟机的网卡model用virtio(其他model不支持)

我不能理解的是:

libvirt 不是一个UI吗,这事为什么归它管?

-- 

--- 
You received this message because you are subscribed to the Google Groups "TUNA 
主邮件列表" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

回复