提交 747fad66 编写于 作者: D Daniel P. Berrange

Generic APIs for network XML configuration

上级 69582431
Fri Jul 11 11:35:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
Generic APIs for network XML configuration
* include/libvirt/virterror.h, src/virterror.c: Added new
scope VIR_FROM_NETWORK
* src/Makefile.am, po/POTFILES.in: Added network_conf.{c,h}
* src/xml.c, src/xml.h: Added virXPathULong function
* src/network_conf.c, src/network_conf.h: Added generic
APIs for network XML configuration
Fri Jul 11 10:55:59 BST 2008 Daniel P. Berrange <berrange@redhat.com> Fri Jul 11 10:55:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_conf.c: Fix booting off CDROM devices * src/qemu_conf.c: Fix booting off CDROM devices
......
...@@ -56,6 +56,7 @@ typedef enum { ...@@ -56,6 +56,7 @@ typedef enum {
VIR_FROM_STATS_LINUX, /* Error in the Linux Stats code */ VIR_FROM_STATS_LINUX, /* Error in the Linux Stats code */
VIR_FROM_LXC, /* Error from Linux Container driver */ VIR_FROM_LXC, /* Error from Linux Container driver */
VIR_FROM_STORAGE, /* Error from storage driver */ VIR_FROM_STORAGE, /* Error from storage driver */
VIR_FROM_NETWORK, /* Error from network config */
} virErrorDomain; } virErrorDomain;
......
...@@ -9,6 +9,7 @@ src/libvirt.c ...@@ -9,6 +9,7 @@ src/libvirt.c
src/lxc_conf.c src/lxc_conf.c
src/lxc_container.c src/lxc_container.c
src/lxc_driver.c src/lxc_driver.c
src/network_conf.c
src/openvz_conf.c src/openvz_conf.c
src/openvz_driver.c src/openvz_driver.c
src/proxy_internal.c src/proxy_internal.c
......
...@@ -52,6 +52,7 @@ CLIENT_SOURCES = \ ...@@ -52,6 +52,7 @@ CLIENT_SOURCES = \
driver.h \ driver.h \
proxy_internal.c proxy_internal.h \ proxy_internal.c proxy_internal.h \
conf.c conf.h \ conf.c conf.h \
network_conf.c network_conf.h \
xm_internal.c xm_internal.h \ xm_internal.c xm_internal.h \
remote_internal.c remote_internal.h \ remote_internal.c remote_internal.h \
bridge.c bridge.h \ bridge.c bridge.h \
......
此差异已折叠。
/*
* network_conf.h: network XML handling
*
* Copyright (C) 2006-2008 Red Hat, Inc.
* Copyright (C) 2006-2008 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Daniel P. Berrange <berrange@redhat.com>
*/
#ifndef __NETWORK_CONF_H__
#define __NETWORK_CONF_H__
#include "internal.h"
/* 2 possible types of forwarding */
enum virNetworkForwardType {
VIR_NETWORK_FORWARD_NONE = 0,
VIR_NETWORK_FORWARD_NAT,
VIR_NETWORK_FORWARD_ROUTE,
VIR_NETWORK_FORWARD_LAST,
};
typedef struct _virNetworkDHCPRangeDef virNetworkDHCPRangeDef;
typedef virNetworkDHCPRangeDef *virNetworkDHCPRangeDefPtr;
struct _virNetworkDHCPRangeDef {
char *start;
char *end;
};
typedef struct _virNetworkDef virNetworkDef;
typedef virNetworkDef *virNetworkDefPtr;
struct _virNetworkDef {
unsigned char uuid[VIR_UUID_BUFLEN];
char *name;
char *bridge; /* Name of bridge device */
unsigned long delay; /* Bridge forward delay (ms) */
int stp : 1; /* Spanning tree protocol */
int forwardType; /* One of virNetworkForwardType constants */
char *forwardDev; /* Destination device for forwarding */
char *ipAddress; /* Bridge IP address */
char *netmask;
char *network;
unsigned int nranges; /* Zero or more dhcp ranges */
virNetworkDHCPRangeDefPtr ranges;
};
typedef struct _virNetworkObj virNetworkObj;
typedef virNetworkObj *virNetworkObjPtr;
struct _virNetworkObj {
pid_t dnsmasqPid;
unsigned int active : 1;
unsigned int autostart : 1;
unsigned int persistent : 1;
char *configFile; /* Persistent config file path */
char *autostartLink; /* Symlink path for autostart */
virNetworkDefPtr def; /* The current definition */
virNetworkDefPtr newDef; /* New definition to activate at shutdown */
virNetworkObjPtr next;
};
static inline int
virNetworkIsActive(const virNetworkObjPtr net)
{
return net->active;
}
virNetworkObjPtr virNetworkFindByUUID(const virNetworkObjPtr nets,
const unsigned char *uuid);
virNetworkObjPtr virNetworkFindByName(const virNetworkObjPtr nets,
const char *name);
void virNetworkDefFree(virNetworkDefPtr def);
void virNetworkObjFree(virNetworkObjPtr net);
virNetworkObjPtr virNetworkAssignDef(virConnectPtr conn,
virNetworkObjPtr *nets,
const virNetworkDefPtr def);
void virNetworkRemoveInactive(virNetworkObjPtr *nets,
const virNetworkObjPtr net);
virNetworkDefPtr virNetworkDefParseString(virConnectPtr conn,
const char *xmlStr);
virNetworkDefPtr virNetworkDefParseFile(virConnectPtr conn,
const char *filename);
virNetworkDefPtr virNetworkDefParseNode(virConnectPtr conn,
xmlDocPtr xml,
xmlNodePtr root);
char *virNetworkDefFormat(virConnectPtr conn,
const virNetworkDefPtr def);
int virNetworkSaveConfig(virConnectPtr conn,
const char *configDir,
const char *autostartDir,
virNetworkObjPtr net);
virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn,
virNetworkObjPtr *nets,
const char *configDir,
const char *autostartDir,
const char *file);
int virNetworkLoadAllConfigs(virConnectPtr conn,
virNetworkObjPtr *nets,
const char *configDir,
const char *autostartDir);
int virNetworkDeleteConfig(virConnectPtr conn,
virNetworkObjPtr net);
#endif /* __NETWORK_CONF_H__ */
...@@ -304,6 +304,9 @@ virDefaultErrorFunc(virErrorPtr err) ...@@ -304,6 +304,9 @@ virDefaultErrorFunc(virErrorPtr err)
case VIR_FROM_STORAGE: case VIR_FROM_STORAGE:
dom = "Storage "; dom = "Storage ";
break; break;
case VIR_FROM_NETWORK:
dom = "Network Config ";
break;
} }
if ((err->dom != NULL) && (err->code != VIR_ERR_INVALID_DOMAIN)) { if ((err->dom != NULL) && (err->code != VIR_ERR_INVALID_DOMAIN)) {
......
...@@ -499,6 +499,58 @@ virXPathLong(const char *xpath, xmlXPathContextPtr ctxt, long *value) ...@@ -499,6 +499,58 @@ virXPathLong(const char *xpath, xmlXPathContextPtr ctxt, long *value)
return (ret); return (ret);
} }
/**
* virXPathULong:
* @xpath: the XPath string to evaluate
* @ctxt: an XPath context
* @value: the returned long value
*
* Convenience function to evaluate an XPath number
*
* Returns 0 in case of success in which case @value is set,
* or -1 if the XPath evaluation failed or -2 if the
* value doesn't have a long format.
*/
int
virXPathULong(const char *xpath, xmlXPathContextPtr ctxt, unsigned long *value)
{
xmlXPathObjectPtr obj;
xmlNodePtr relnode;
int ret = 0;
if ((ctxt == NULL) || (xpath == NULL) || (value == NULL)) {
virXMLError(NULL, VIR_ERR_INTERNAL_ERROR,
_("Invalid parameter to virXPathNumber()"), 0);
return (-1);
}
relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
if ((obj != NULL) && (obj->type == XPATH_STRING) &&
(obj->stringval != NULL) && (obj->stringval[0] != 0)) {
char *conv = NULL;
long val;
val = strtoul((const char *) obj->stringval, &conv, 10);
if (conv == (const char *) obj->stringval) {
ret = -2;
} else {
*value = val;
}
} else if ((obj != NULL) && (obj->type == XPATH_NUMBER) &&
(!(isnan(obj->floatval)))) {
*value = (unsigned long) obj->floatval;
if (*value != obj->floatval) {
ret = -2;
}
} else {
ret = -1;
}
xmlXPathFreeObject(obj);
ctxt->node = relnode;
return (ret);
}
/** /**
* virXPathBoolean: * virXPathBoolean:
* @xpath: the XPath string to evaluate * @xpath: the XPath string to evaluate
......
...@@ -26,6 +26,9 @@ int virXPathNumber (const char *xpath, ...@@ -26,6 +26,9 @@ int virXPathNumber (const char *xpath,
int virXPathLong (const char *xpath, int virXPathLong (const char *xpath,
xmlXPathContextPtr ctxt, xmlXPathContextPtr ctxt,
long *value); long *value);
int virXPathULong (const char *xpath,
xmlXPathContextPtr ctxt,
unsigned long *value);
xmlNodePtr virXPathNode (const char *xpath, xmlNodePtr virXPathNode (const char *xpath,
xmlXPathContextPtr ctxt); xmlXPathContextPtr ctxt);
int virXPathNodeSet (const char *xpath, int virXPathNodeSet (const char *xpath,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册