
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 :|