> ---
> 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