]> xenbits.xensource.com Git - people/dariof/libvirt.git/commitdiff
Reverse logic allowing partial DHCP host XML
authorJán Tomko <jtomko@redhat.com>
Wed, 31 Jul 2013 11:25:59 +0000 (13:25 +0200)
committerJán Tomko <jtomko@redhat.com>
Wed, 7 Aug 2013 14:31:12 +0000 (16:31 +0200)
Before, missing attributes were only OK when adding entries;
modification and deletion required all of them.

Now, only deletion works with missing attributes, as long as
the host is uniquely identified.

src/conf/network_conf.c

index e3998f374cd4b3e624cd0ae1bc7b6a115cb36791..9141bbb2ab042be3776b07027f0316dcfd9da187 100644 (file)
@@ -3297,6 +3297,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
     int ret = -1;
     virNetworkIpDefPtr ipdef = virNetworkIpDefByIndex(def, parentIndex);
     virNetworkDHCPHostDef host;
+    bool partialOkay = (command == VIR_NETWORK_UPDATE_COMMAND_DELETE);
 
     memset(&host, 0, sizeof(host));
 
@@ -3307,13 +3308,11 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
     if (!ipdef)
         goto cleanup;
 
-    /* parse the xml into a virNetworkDHCPHostDef */
-    if (command == VIR_NETWORK_UPDATE_COMMAND_MODIFY) {
+    if (virNetworkDHCPHostDefParseXML(def->name, ipdef, ctxt->node,
+                                      &host, partialOkay) < 0)
+        goto cleanup;
 
-        if (virNetworkDHCPHostDefParseXML(def->name, ipdef,
-                                          ctxt->node, &host, false) < 0) {
-            goto cleanup;
-        }
+    if (command == VIR_NETWORK_UPDATE_COMMAND_MODIFY) {
 
         /* search for the entry with this (mac|name),
          * and update the IP+(mac|name) */
@@ -3345,11 +3344,6 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
     } else if ((command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) ||
                (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST)) {
 
-        if (virNetworkDHCPHostDefParseXML(def->name, ipdef,
-                                          ctxt->node, &host, true) < 0) {
-            goto cleanup;
-        }
-
         /* log error if an entry with same name/address/ip already exists */
         for (i = 0; i < ipdef->nhosts; i++) {
             if ((host.mac &&
@@ -3379,11 +3373,6 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
             goto cleanup;
     } else if (command == VIR_NETWORK_UPDATE_COMMAND_DELETE) {
 
-        if (virNetworkDHCPHostDefParseXML(def->name, ipdef,
-                                          ctxt->node, &host, false) < 0) {
-            goto cleanup;
-        }
-
         /* find matching entry - all specified attributes must match */
         for (i = 0; i < ipdef->nhosts; i++) {
             if ((!host.mac ||