[libvirt] [PATCH] Allow updating names in DHCP hosts by matching IPs.

Ján Tomko jtomko at redhat.com
Tue Jul 8 16:47:21 UTC 2014


Also fix the error message if an IPv6 host with no MAC
is not found.

https://bugzilla.redhat.com/show_bug.cgi?id=991290
---
 src/conf/network_conf.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 909631b..ce4d4d8 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -3480,11 +3480,13 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
 
     if (command == VIR_NETWORK_UPDATE_COMMAND_MODIFY) {
 
-        /* search for the entry with this (mac|name),
+        /* search for the entry with this (ip|mac|name),
          * and update the IP+(mac|name) */
         for (i = 0; i < ipdef->nhosts; i++) {
             if ((host.mac &&
                  !virMacAddrCompare(host.mac, ipdef->hosts[i].mac)) ||
+                (VIR_SOCKET_ADDR_VALID(&host.ip) &&
+                 virSocketAddrEqual(&host.ip, &ipdef->hosts[i].ip)) ||
                 (host.name &&
                  STREQ_NULLABLE(host.name, ipdef->hosts[i].name))) {
                 break;
@@ -3492,10 +3494,14 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
         }
 
         if (i == ipdef->nhosts) {
+            char *ip = virSocketAddrFormat(&host.ip);
             virReportError(VIR_ERR_OPERATION_INVALID,
                            _("couldn't locate an existing dhcp host entry with "
-                             "\"mac='%s'\" in network '%s'"),
-                           host.mac, def->name);
+                             "\"mac='%s'\" \"name='%s'\" \"ip='%s'\" in"
+                             " network '%s'"),
+                           host.mac ? host.mac : _("unknown"), host.name,
+                           ip ? ip : _("unknown"), def->name);
+            VIR_FREE(ip);
             goto cleanup;
         }
 
@@ -3524,8 +3530,8 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
                                _("there is an existing dhcp host entry in "
                                  "network '%s' that matches "
                                  "\"<host mac='%s' name='%s' ip='%s'/>\""),
-                               def->name, host.mac, host.name,
-                               ip ? ip : "unknown");
+                               def->name, host.mac ? host.mac : _("unknown"),
+                               host.name, ip ? ip : _("unknown"));
                 VIR_FREE(ip);
                 goto cleanup;
             }
-- 
1.8.5.5




More information about the libvir-list mailing list