On 12/04/2014 04:07 PM, Kyle DeFrancia wrote: > This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=907779 > > A <dhcp> element can exist in only one IPv4 address and one IPv6 > address per network. This patch enforces that in virNetworkUpdate. > --- > Rebased to latest master, hopefully this works better. It took awhile to figure out the problem - whatever method you used to send this patch wrapped long lines and combined them together. I had to break up and re-format the places I've indicated below with ^^^. Aside from that I just combined the multiple lines of the for() (because combined they were still below the 80 character limit) and added another blank line before and after the new function. ACK and pushed. Thanks for the bugfix! (Next time it would save some trouble if you directly used "git send-email" to sent patches) > My original message: > https://www.redhat.com/archives/libvir-list/2014-November/msg00989.html > > src/conf/network_conf.c | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c > index 97719ed..92aa9d5 100644 > --- a/src/conf/network_conf.c > +++ b/src/conf/network_conf.c > @@ -3480,6 +3480,31 @@ virNetworkIpDefByIndex(virNetworkDefPtr def, int > parentIndex) } ^^^^^^ > static int > +virNetworkDefUpdateCheckMultiDHCP(virNetworkDefPtr def, > + virNetworkIpDefPtr ipdef) > +{ > + int family = VIR_SOCKET_ADDR_FAMILY(&ipdef->address); > + size_t i; > + virNetworkIpDefPtr ip; > + > + for (i = 0; > + (ip = virNetworkDefGetIpByIndex(def, family, i)); > + i++) { > + if (ip != ipdef) { > + if (ip->nranges || ip->nhosts) { > + virReportError(VIR_ERR_OPERATION_INVALID, > + _("dhcp is supported only for a " > + "single %s address on each network"), > + (family == AF_INET) ? "IPv4" : "IPv6"); > + return -1; > + } > + } > + } > + > + return 0; > +} > + > +static int > virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, > unsigned int command, > int parentIndex, > @@ -3544,6 +3569,9 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr > def, } else if ((command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) || ^^^ > (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST)) { > > + if (virNetworkDefUpdateCheckMultiDHCP(def, ipdef) < 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 && > @@ -3651,6 +3679,9 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr > def, if ((command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) || ^^^^^^ > (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST)) { > > + if (virNetworkDefUpdateCheckMultiDHCP(def, ipdef) < 0) > + goto cleanup; > + > if (i < ipdef->nranges) { > char *startip = virSocketAddrFormat(&range.start); > char *endip = virSocketAddrFormat(&range.end); -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list