On Tue, Oct 13, 2009 at 04:14:00PM +0200, Daniel Veillard wrote: > + > + /* > + * check at least the 2 first IP match i.e on same class C subnet > + */ > + for (i = 0; i < 2;i++) { > + if (ip4s[i] != ip4e[i]) { > + virNetworkReportError(conn, VIR_ERR_INTERNAL_ERROR, > + _("start and end of DHCP range do not match '%s' and '%s'"), > + start, end); > + return(-1); > + } > + } Shouldn't we be comparing each of DHCP addresses against the 'netmask' field we have in virNetworkDef instead. It'd be nice to have a separate function for this like virSocketAddrInNetwork(struct sockaddr_storage *address, struct sockaddr_storage *netmask); since there's a couple of other places we ought todo this kind of validation. > + ret = ip4e[3] - ip4s[3] + 256 * (ip4e[2] - ip4s[2]); It would be nice to have this in a callable function too int virSocketAddrRange(struct sockaddr_storage *start, struct sockaddr_storage *end); > + > + /* > + * a bit of sanity checking on the range > + * Should we complain for a range of more than 10,000 ? > + */ Its probably sufficient to leave dnsmasq to do validation. > + if (ret < 0) { > + virNetworkReportError(conn, VIR_ERR_INTERNAL_ERROR, > + _("start and end of DHCP range swapped '%s' and '%s'"), > + start, end); > + return(-1); > + } > + > + /* include the boundaries */ > + ret++; > diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h > index e983a01..2960e8b 100644 > --- a/src/conf/network_conf.h > +++ b/src/conf/network_conf.h > @@ -45,6 +45,7 @@ typedef virNetworkDHCPRangeDef *virNetworkDHCPRangeDefPtr; > struct _virNetworkDHCPRangeDef { > char *start; > char *end; > + int size; > }; Regards,x Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list