mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-08 20:51:26 +00:00
Reverse logic allowing partial DHCP host XML
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. (cherry picked from commit cf602e7c597830a2d949017fe71f06b5f542c805)
This commit is contained in:
parent
42f971b1b4
commit
b9bc69ba28
@ -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 ||
|
||||
|
Loading…
x
Reference in New Issue
Block a user