From a47ae7c004e92f959b45808ca82326e8559c2f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 11 Nov 2014 09:16:09 +0100 Subject: [PATCH] Generate a MAC when loading a config instead of package update Partially reverts commit 5754dbd. The code in the specfile adds a MAC address to every , even for for which we don't support changing MAC addresses. Remove it completely. For new networks, we have been adding MAC addresses on definition/creation since the commit mentioned above. For existing networks (pre-0.9.0), the MAC is added by this commit. https://bugzilla.redhat.com/show_bug.cgi?id=1156367 --- libvirt.spec.in | 42 ----------------------------------------- src/conf/network_conf.c | 4 ++++ 2 files changed, 4 insertions(+), 42 deletions(-) diff --git a/libvirt.spec.in b/libvirt.spec.in index 3edb7bde08..bda28e72a5 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -1643,48 +1643,6 @@ exit 0 %post daemon - %if %{with_network} -# All newly defined networks will have a mac address for the bridge -# auto-generated, but networks already existing at the time of upgrade -# will not. We need to go through all the network configs, look for -# those that don't have a mac address, and add one. - -network_files=$( (cd %{_localstatedir}/lib/libvirt/network && \ - grep -L "mac address" *.xml; \ - cd %{_sysconfdir}/libvirt/qemu/networks && \ - grep -L "mac address" *.xml) 2>/dev/null \ - | sort -u) - -for file in $network_files -do - # each file exists in either the config or state directory (or both) and - # does not have a mac address specified in either. We add the same mac - # address to both files (or just one, if the other isn't there) - - mac4=`printf '%X' $(($RANDOM % 256))` - mac5=`printf '%X' $(($RANDOM % 256))` - mac6=`printf '%X' $(($RANDOM % 256))` - for dir in %{_localstatedir}/lib/libvirt/network \ - %{_sysconfdir}/libvirt/qemu/networks - do - if test -f $dir/$file - then - sed -i.orig -e \ - "s|\(|" \ - $dir/$file - if test $? != 0 - then - echo "failed to add " \ - "to $dir/$file" - mv -f $dir/$file.orig $dir/$file - else - rm -f $dir/$file.orig - fi - fi - done -done - %endif - %if %{with_systemd} %if %{with_systemd_macros} %systemd_post virtlockd.socket libvirtd.service libvirtd.socket diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 5052f7c2e7..97719ed536 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -3139,6 +3139,10 @@ virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, def->forward.type == VIR_NETWORK_FORWARD_NAT || def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { + if (!def->mac_specified) { + virNetworkSetBridgeMacAddr(def); + virNetworkSaveConfig(configDir, def); + } /* Generate a bridge if none is specified, but don't check for collisions * if a bridge is hardcoded, so the network is at least defined. */