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. Is this a precursor to something else? Does openvswitch maybe not need this extremely high MAC address? > --- > src/network/bridge_driver.c | 2 +- > src/qemu/qemu_command.c | 5 +---- > src/uml/uml_conf.c | 5 +---- > src/util/virnetdevtap.c | 11 ++++++++++- > src/util/virnetdevtap.h | 1 + > 5 files changed, 14 insertions(+), 10 deletions(-) > > diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c > index 8575d3e..3e1e031 100644 > --- a/src/network/bridge_driver.c > +++ b/src/network/bridge_driver.c > @@ -1766,7 +1766,7 @@ networkStartNetworkVirtual(struct network_driver *driver, > } > if (virNetDevTapCreateInBridgePort(network->def->bridge, > &macTapIfName, network->def->mac, > - 0, false, NULL, NULL) < 0) { > + false, 0, false, NULL, NULL) < 0) { > VIR_FREE(macTapIfName); > goto err0; > } > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 5a34504..671054c 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -180,7 +180,6 @@ qemuNetworkIfaceConnect(virDomainDefPtr def, > int tapfd = -1; > int vnet_hdr = 0; > bool template_ifname = false; > - unsigned char tapmac[VIR_MAC_BUFLEN]; > int actualType = virDomainNetGetActualType(net); > > if (actualType == VIR_DOMAIN_NET_TYPE_NETWORK) { > @@ -244,9 +243,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def, > net->model && STREQ(net->model, "virtio")) > vnet_hdr = 1; > > - memcpy(tapmac, net->mac, VIR_MAC_BUFLEN); > - tapmac[0] = 0xFE; /* Discourage bridge from using TAP dev MAC */ > - err = virNetDevTapCreateInBridgePort(brname, &net->ifname, tapmac, > + err = virNetDevTapCreateInBridgePort(brname, &net->ifname, net->mac, true, > vnet_hdr, true, &tapfd, > virDomainNetGetActualVirtPortProfile(net)); > virDomainAuditNetDevice(def, net, "/dev/net/tun", tapfd >= 0); > diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c > index dbbbfda..c7b29a0 100644 > --- a/src/uml/uml_conf.c > +++ b/src/uml/uml_conf.c > @@ -127,7 +127,6 @@ umlConnectTapDevice(virConnectPtr conn, > const char *bridge) > { > bool template_ifname = false; > - unsigned char tapmac[VIR_MAC_BUFLEN]; > > if (!net->ifname || > STRPREFIX(net->ifname, VIR_NET_GENERATED_PREFIX) || > @@ -139,9 +138,7 @@ umlConnectTapDevice(virConnectPtr conn, > template_ifname = true; > } > > - memcpy(tapmac, net->mac, VIR_MAC_BUFLEN); > - tapmac[0] = 0xFE; /* Discourage bridge from using TAP dev MAC */ > - if (virNetDevTapCreateInBridgePort(bridge, &net->ifname, tapmac, > + if (virNetDevTapCreateInBridgePort(bridge, &net->ifname, net->mac, true, > 0, true, NULL, > virDomainNetGetActualVirtPortProfile(net)) < 0) { > if (template_ifname) > diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c > index 0fce08d..868ba57 100644 > --- a/src/util/virnetdevtap.c > +++ b/src/util/virnetdevtap.c > @@ -22,6 +22,7 @@ > > #include <config.h> > > +#include "virmacaddr.h" > #include "virnetdevtap.h" > #include "virnetdev.h" > #include "virnetdevbridge.h" > @@ -248,6 +249,7 @@ int virNetDevTapDelete(const char *ifname ATTRIBUTE_UNUSED) > * @brname: the bridge name > * @ifname: the interface name (or name template) > * @macaddr: desired MAC address (VIR_MAC_BUFLEN long) > + * @discourage: whether bridge should be discouraged from using macaddr > * @vnet_hdr: whether to try enabling IFF_VNET_HDR > * @tapfd: file descriptor return value for the new tap device > * @virtPortProfile: bridge/port specific configuration > @@ -265,11 +267,14 @@ int virNetDevTapDelete(const char *ifname ATTRIBUTE_UNUSED) > int virNetDevTapCreateInBridgePort(const char *brname, > char **ifname, > const unsigned char *macaddr, > + bool discourage, > int vnet_hdr, > bool up, > int *tapfd, > virNetDevVPortProfilePtr virtPortProfile) > { > + unsigned char tapmac[VIR_MAC_BUFLEN]; > + > if (virNetDevTapCreate(ifname, vnet_hdr, tapfd) < 0) > return -1; > > @@ -279,7 +284,11 @@ int virNetDevTapCreateInBridgePort(const char *brname, > * seeing the kernel allocate random MAC for the TAP > * device before we set our static MAC. > */ > - if (virNetDevSetMAC(*ifname, macaddr) < 0) > + memcpy(tapmac, macaddr, VIR_MAC_BUFLEN); > + if (discourage) > + tapmac[0] = 0xFE; /* Discourage bridge from using TAP dev MAC */ > + > + if (virNetDevSetMAC(*ifname, tapmac) < 0) > goto error; > > /* We need to set the interface MTU before adding it > diff --git a/src/util/virnetdevtap.h b/src/util/virnetdevtap.h > index 918f3dc..fc50e22 100644 > --- a/src/util/virnetdevtap.h > +++ b/src/util/virnetdevtap.h > @@ -37,6 +37,7 @@ int virNetDevTapDelete(const char *ifname) > int virNetDevTapCreateInBridgePort(const char *brname, > char **ifname, > const unsigned char *macaddr, > + bool discourage, > int vnet_hdr, > bool up, > int *tapfd, -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list