Store the range size when adding a DHCP range

* src/conf/network_conf.h: extend the structure to store the range
* src/conf/network_conf.c: before adding a range parse the IP addresses
  do some checking and keep the size
This commit is contained in:
Daniel Veillard 2009-11-06 17:50:54 +01:00
parent 784b5030c1
commit 8a659e3186
2 changed files with 39 additions and 4 deletions

View File

@ -36,6 +36,7 @@
#include "virterror_internal.h"
#include "datatypes.h"
#include "network_conf.h"
#include "network.h"
#include "memory.h"
#include "xml.h"
#include "uuid.h"
@ -230,15 +231,47 @@ virNetworkDHCPRangeDefParseXML(virConnectPtr conn,
while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE &&
xmlStrEqual(cur->name, BAD_CAST "range")) {
xmlChar *start, *end;
char *start, *end;
virSocketAddr saddr, eaddr;
int range;
if (!(start = xmlGetProp(cur, BAD_CAST "start"))) {
if (!(start = (char *) xmlGetProp(cur, BAD_CAST "start"))) {
cur = cur->next;
continue;
}
if (!(end = xmlGetProp(cur, BAD_CAST "end"))) {
cur = cur->next;
if (!(end = (char *) xmlGetProp(cur, BAD_CAST "end"))) {
xmlFree(start);
cur = cur->next;
continue;
}
if (virSocketParseAddr(start, &saddr, 0) < 0) {
virNetworkReportError(conn, VIR_ERR_XML_ERROR,
_("cannot parse dhcp start address '%s'"),
start);
xmlFree(start);
xmlFree(end);
cur = cur->next;
continue;
}
if (virSocketParseAddr(end, &eaddr, 0) < 0) {
virNetworkReportError(conn, VIR_ERR_XML_ERROR,
_("cannot parse dhcp end address '%s'"),
end);
xmlFree(start);
xmlFree(end);
cur = cur->next;
continue;
}
range = virSocketGetRange(&saddr, &eaddr);
if (range < 0) {
virNetworkReportError(conn, VIR_ERR_XML_ERROR,
_("dhcp range '%s' to '%s' invalid"),
start, end);
xmlFree(start);
xmlFree(end);
cur = cur->next;
continue;
}
@ -250,6 +283,7 @@ virNetworkDHCPRangeDefParseXML(virConnectPtr conn,
}
def->ranges[def->nranges].start = (char *)start;
def->ranges[def->nranges].end = (char *)end;
def->ranges[def->nranges].size = range;
def->nranges++;
} else if (cur->type == XML_ELEMENT_NODE &&
xmlStrEqual(cur->name, BAD_CAST "host")) {

View File

@ -45,6 +45,7 @@ typedef virNetworkDHCPRangeDef *virNetworkDHCPRangeDefPtr;
struct _virNetworkDHCPRangeDef {
char *start;
char *end;
int size;
};
typedef struct _virNetworkDHCPHostDef virNetworkDHCPHostDef;