On Sat, Feb 18, 2012 at 7:07 PM, Laine Stump <laine@laine.org> wrote:
On 02/17/2012 02:51 PM, Ansis Atteka wrote:
>
>
> On Fri, Feb 17, 2012 at 10:55 AM, Laine Stump <laine@laine.org
> <mailto:laine@laine.org>> wrote:> 1. Now in virNetDevTapCreateInBridgePort() function we always pass
>
> On 02/16/2012 06:49 PM, Ansis Atteka wrote:
> > Currently libvirt sets the attached-mac to altered MAC address
> that has
> > first byte set to FE. This patch will change that behavior by
> using the
> > original (unaltered) MAC address from the domain XML
> configuration file.
>
> Maybe I didn't read thoroughly enough, but I don't see where it
> changes
> the behavior - in the cases where previously the first byte was set to
> 0xFE, now you send discourage=true, and in the cases where it didn't,
> now you send discourage=false.
>
> "discourage" means whether bridge should be discouraged to use the
> newly added
> TAP device's MAC address. Libvirt does that by setting the first MAC
> address byte
> high enough.
>
> And here is how this patch works:
>
> exactly the same MAC address that was defined in XML.> 2. If "discourage" flag was set to true, then we create a copy of MAC
> address and set its first byte to 0xFE> 3. virNetDevSetMAC() function would use the MAC address that was
> product of #2
> 4. while virNetDevOpenvswitchAddPort() function would use the
> original MAC address that was passed in #1 (this code did not needRight. That's what I missed - all I saw was every occurrence of creating
> to be changed so most likely that was the reason why you did not
> notice behavior changes)
>
a temporary mac address with 0xFE in the first byte replaced with adding
"discourage=true" to the args. I didn't notice that
virNetDevOpenvswitchAddPort() takes the macaddr (while
virNetDevBridgeAddPort() doesn't).
But that means that the tap device has been created with an
0xFE-initiated MAC address, and then you attach to the bridge using the
unmodified address. Is the issue that the mac address used during the
attach needs to match the MAC address that will be in the traffic? Do
connections to an openvswitch bridge have an implied MAC filter on them,
such that only that MAC address gets through?
(Also, the only time discourage is false is for libvirt's virtual
network bridges. I'm wondering if they could also use the modified MAC
address for the tap devices - if that was the case we could just always
create the temporary MAC address in virNetDevTapCreateInBridgePort()
(and always set the tap device's mac to that).)
We could get rid of the "discourage" argument if we would passvirDomainNetDefPtr instead of virNetDevVPortProfilePtr structure tovirNetDevOpenvswitchAddPort() function. This approach wouldalso eliminate the need to pass MAC address at all to thevirNetDevOpenvswitchAddPort() function making bothAPIs for Linux Bridge and OVS bridge more simpler andsimilar (and this could eventually lead to abstracted bridge API).