[libvirt] [PATCH 2/2] Generate a MAC when loading a config instead of package update

Ján Tomko jtomko at redhat.com
Tue Nov 11 09:42:33 UTC 2014


Partially reverts commit 5754dbd.

The code in the specfile adds a MAC address to every <bridge>,
even for <forward mode='bridge'> 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 the previous
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 6fcaa3e..43b3899 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1606,48 +1606,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|\(<bridge.*$\)|\0\n  <mac address='52:54:00:$mac4:$mac5:$mac6'/>|" \
-           $dir/$file
-         if test $? != 0
-         then
-             echo "failed to add <mac address='52:54:00:$mac4:$mac5:$mac6'/>" \
-                  "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 f36be63..4c16bb4 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -3155,6 +3155,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.
          */
-- 
2.0.4




More information about the libvir-list mailing list