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