Allow updating names in DHCP hosts by matching IPs.

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

https://bugzilla.redhat.com/show_bug.cgi?id=991290
This commit is contained in:
Ján Tomko 2014-07-08 18:27:55 +02:00
parent 3d8d18f673
commit 2d49518a53

View File

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