VIR_FREE(def->ips);
for (i = 0; i < def->nroutes; i++)
- virNetworkRouteDefFree(def->routes[i]);
+ virNetDevIPRouteFree(def->routes[i]);
VIR_FREE(def->routes);
virDomainDeviceInfoClear(&def->info);
VIR_FREE(def->source.caps.u.net.ips[i]);
VIR_FREE(def->source.caps.u.net.ips);
for (i = 0; i < def->source.caps.u.net.nroutes; i++)
- virNetworkRouteDefFree(def->source.caps.u.net.routes[i]);
+ virNetDevIPRouteFree(def->source.caps.u.net.routes[i]);
VIR_FREE(def->source.caps.u.net.routes);
break;
}
return ret;
}
-static virDomainNetIPDefPtr
+static virNetDevIPAddrPtr
virDomainNetIPParseXML(xmlNodePtr node)
{
/* Parse the prefix in every case */
- virDomainNetIPDefPtr ip = NULL, ret = NULL;
+ virNetDevIPAddrPtr ip = NULL, ret = NULL;
char *prefixStr = NULL;
unsigned int prefixValue = 0;
char *familyStr = NULL;
if (nipnodes) {
size_t i;
for (i = 0; i < nipnodes; i++) {
- virDomainNetIPDefPtr ip = virDomainNetIPParseXML(ipnodes[i]);
+ virNetDevIPAddrPtr ip = virDomainNetIPParseXML(ipnodes[i]);
if (!ip)
goto error;
if (nroutenodes) {
size_t i;
for (i = 0; i < nroutenodes; i++) {
- virNetworkRouteDefPtr route = NULL;
+ virNetDevIPRoutePtr route = NULL;
- if (!(route = virNetworkRouteDefParseXML(_("Domain hostdev device"),
- routenodes[i],
- ctxt)))
+ if (!(route = virNetDevIPRouteParseXML(_("Domain hostdev device"),
+ routenodes[i],
+ ctxt)))
goto error;
if (VIR_APPEND_ELEMENT(def->source.caps.u.net.routes,
def->source.caps.u.net.nroutes, route) < 0) {
- virNetworkRouteDefFree(route);
+ virNetDevIPRouteFree(route);
goto error;
}
}
int family,
unsigned int prefix)
{
- virDomainNetIPDefPtr ipDef = NULL;
+ virNetDevIPAddrPtr ipDef = NULL;
if (VIR_ALLOC(ipDef) < 0)
return -1;
int ret, val;
size_t i;
size_t nips = 0;
- virDomainNetIPDefPtr *ips = NULL;
+ virNetDevIPAddrPtr *ips = NULL;
size_t nroutes = 0;
- virNetworkRouteDefPtr *routes = NULL;
+ virNetDevIPRoutePtr *routes = NULL;
if (VIR_ALLOC(def) < 0)
return NULL;
ctxt->node = tmpnode;
}
} else if (xmlStrEqual(cur->name, BAD_CAST "ip")) {
- virDomainNetIPDefPtr ip = NULL;
+ virNetDevIPAddrPtr ip = NULL;
if (!(ip = virDomainNetIPParseXML(cur)))
goto error;
if (VIR_APPEND_ELEMENT(ips, nips, ip) < 0)
goto error;
} else if (xmlStrEqual(cur->name, BAD_CAST "route")) {
- virNetworkRouteDefPtr route = NULL;
- if (!(route = virNetworkRouteDefParseXML(_("Domain interface"),
- cur, ctxt)))
+ virNetDevIPRoutePtr route = NULL;
+ if (!(route = virNetDevIPRouteParseXML(_("Domain interface"),
+ cur, ctxt)))
goto error;
if (VIR_APPEND_ELEMENT(routes, nroutes, route) < 0) {
- virNetworkRouteDefFree(route);
+ virNetDevIPRouteFree(route);
goto error;
}
} else if (!ifname &&
}
static int
-virDomainNetIPsFormat(virBufferPtr buf, virDomainNetIPDefPtr *ips, size_t nips)
+virDomainNetIPsFormat(virBufferPtr buf, virNetDevIPAddrPtr *ips, size_t nips)
{
size_t i;
static int
virDomainNetRoutesFormat(virBufferPtr buf,
- virNetworkRouteDefPtr *routes,
+ virNetDevIPRoutePtr *routes,
size_t nroutes)
{
size_t i;
for (i = 0; i < nroutes; i++)
- if (virNetworkRouteDefFormat(buf, routes[i]) < 0)
+ if (virNetDevIPRouteFormat(buf, routes[i]) < 0)
return -1;
return 0;
}
# include "numa_conf.h"
# include "virnetdevmacvlan.h"
# include "virsysinfo.h"
+# include "virnetdevip.h"
# include "virnetdevvportprofile.h"
# include "virnetdevbandwidth.h"
# include "virnetdevvlan.h"
VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST
} virDomainHostdevCapsType;
-typedef struct _virDomainNetIPDef virDomainNetIPDef;
-typedef virDomainNetIPDef *virDomainNetIPDefPtr;
-struct _virDomainNetIPDef {
- virSocketAddr address; /* ipv4 or ipv6 address */
- unsigned int prefix; /* number of 1 bits in the net mask */
-};
-
typedef struct _virDomainHostdevCaps virDomainHostdevCaps;
typedef virDomainHostdevCaps *virDomainHostdevCapsPtr;
struct _virDomainHostdevCaps {
struct {
char *iface;
size_t nips;
- virDomainNetIPDefPtr *ips;
+ virNetDevIPAddrPtr *ips;
size_t nroutes;
- virNetworkRouteDefPtr *routes;
+ virNetDevIPRoutePtr *routes;
} net;
} u;
};
int trustGuestRxFilters; /* enum virTristateBool */
int linkstate;
size_t nips;
- virDomainNetIPDefPtr *ips;
+ virNetDevIPAddrPtr *ips;
size_t nroutes;
- virNetworkRouteDefPtr *routes;
+ virNetDevIPRoutePtr *routes;
};
/* Used for prefix of ifname of any network name generated dynamically
VIR_FREE(def->ips);
for (i = 0; i < def->nroutes && def->routes; i++)
- virNetworkRouteDefFree(def->routes[i]);
+ virNetDevIPRouteFree(def->routes[i]);
VIR_FREE(def->routes);
for (i = 0; i < def->nPortGroups && def->portGroups; i++)
}
/* return routes[index], or NULL if there aren't enough routes */
-virNetworkRouteDefPtr
+virNetDevIPRoutePtr
virNetworkDefGetRouteByIndex(const virNetworkDef *def,
int family, size_t n)
{
/* find the nth route of type "family" */
for (i = 0; i < def->nroutes; i++) {
- virSocketAddrPtr addr = virNetworkRouteDefGetAddress(def->routes[i]);
+ virSocketAddrPtr addr = virNetDevIPRouteGetAddress(def->routes[i]);
if (VIR_SOCKET_ADDR_IS_FAMILY(addr, family)
&& (n-- <= 0)) {
return def->routes[i];
goto error;
/* parse each definition */
for (i = 0; i < nRoutes; i++) {
- virNetworkRouteDefPtr route = NULL;
+ virNetDevIPRoutePtr route = NULL;
- if (!(route = virNetworkRouteDefParseXML(def->name,
- routeNodes[i],
- ctxt)))
+ if (!(route = virNetDevIPRouteParseXML(def->name,
+ routeNodes[i],
+ ctxt)))
goto error;
def->routes[i] = route;
def->nroutes++;
size_t j;
virSocketAddr testAddr, testGw;
bool addrMatch;
- virNetworkRouteDefPtr gwdef = def->routes[i];
- virSocketAddrPtr gateway = virNetworkRouteDefGetGateway(gwdef);
+ virNetDevIPRoutePtr gwdef = def->routes[i];
+ virSocketAddrPtr gateway = virNetDevIPRouteGetGateway(gwdef);
addrMatch = false;
for (j = 0; j < nips; j++) {
virNetworkIPDefPtr def2 = &def->ips[j];
}
for (i = 0; i < def->nroutes; i++) {
- if (virNetworkRouteDefFormat(buf, def->routes[i]) < 0)
+ if (virNetDevIPRouteFormat(buf, def->routes[i]) < 0)
goto error;
}
virNetworkIPDefPtr ips; /* ptr to array of IP addresses on this network */
size_t nroutes;
- virNetworkRouteDefPtr *routes; /* ptr to array of static routes on this interface */
+ virNetDevIPRoutePtr *routes; /* ptr to array of static routes on this interface */
virNetworkDNSDef dns; /* dns related configuration */
virNetDevVPortProfilePtr virtPortProfile;
virNetworkIPDefPtr
virNetworkDefGetIPByIndex(const virNetworkDef *def,
int family, size_t n);
-virNetworkRouteDefPtr
+virNetDevIPRoutePtr
virNetworkDefGetRouteByIndex(const virNetworkDef *def,
int family, size_t n);
int virNetworkIPDefPrefix(const virNetworkIPDef *def);
#define VIR_FROM_THIS VIR_FROM_NETWORK
-struct _virNetworkRouteDef {
- char *family; /* ipv4 or ipv6 - default is ipv4 */
- virSocketAddr address; /* Routed Network IP address */
-
- /* One or the other of the following two will be used for a given
- * Network address, but never both. The parser guarantees this.
- * The virSocketAddrGetIPPrefix() can be used to get a
- * valid prefix.
- */
- virSocketAddr netmask; /* ipv4 - either netmask or prefix specified */
- unsigned int prefix; /* ipv6 - only prefix allowed */
- bool has_prefix; /* prefix= was specified */
- unsigned int metric; /* value for metric (defaults to 1) */
- bool has_metric; /* metric= was specified */
- virSocketAddr gateway; /* gateway IP address for ip-route */
-};
-
-void
-virNetworkRouteDefFree(virNetworkRouteDefPtr def)
-{
- if (!def)
- return;
- VIR_FREE(def->family);
- VIR_FREE(def);
-}
-
-virNetworkRouteDefPtr
-virNetworkRouteDefCreate(const char *errorDetail,
- const char *family,
- const char *address,
- const char *netmask,
- const char *gateway,
- unsigned int prefix,
- bool hasPrefix,
- unsigned int metric,
- bool hasMetric)
+virNetDevIPRoutePtr
+virNetDevIPRouteCreate(const char *errorDetail,
+ const char *family,
+ const char *address,
+ const char *netmask,
+ const char *gateway,
+ unsigned int prefix,
+ bool hasPrefix,
+ unsigned int metric,
+ bool hasMetric)
{
- virNetworkRouteDefPtr def = NULL;
+ virNetDevIPRoutePtr def = NULL;
virSocketAddr testAddr;
if (VIR_ALLOC(def) < 0)
return def;
error:
- virNetworkRouteDefFree(def);
+ virNetDevIPRouteFree(def);
return NULL;
}
-virNetworkRouteDefPtr
-virNetworkRouteDefParseXML(const char *errorDetail,
- xmlNodePtr node,
- xmlXPathContextPtr ctxt)
+virNetDevIPRoutePtr
+virNetDevIPRouteParseXML(const char *errorDetail,
+ xmlNodePtr node,
+ xmlXPathContextPtr ctxt)
{
/*
- * virNetworkRouteDef object is already allocated as part
+ * virNetDevIPRoute object is already allocated as part
* of an array. On failure clear: it out, but don't free it.
*/
- virNetworkRouteDefPtr def = NULL;
+ virNetDevIPRoutePtr def = NULL;
xmlNodePtr save;
char *family = NULL;
char *address = NULL, *netmask = NULL;
}
}
- def = virNetworkRouteDefCreate(errorDetail, family, address, netmask,
- gateway, prefix, hasPrefix, metric,
- hasMetric);
+ def = virNetDevIPRouteCreate(errorDetail, family, address, netmask,
+ gateway, prefix, hasPrefix, metric,
+ hasMetric);
cleanup:
ctxt->node = save;
}
int
-virNetworkRouteDefFormat(virBufferPtr buf,
- const virNetworkRouteDef *def)
+virNetDevIPRouteFormat(virBufferPtr buf,
+ const virNetDevIPRoute *def)
{
int result = -1;
char *addr = NULL;
cleanup:
return result;
}
-
-virSocketAddrPtr
-virNetworkRouteDefGetAddress(virNetworkRouteDefPtr def)
-{
- if (def)
- return &def->address;
-
- return NULL;
-}
-
-int
-virNetworkRouteDefGetPrefix(virNetworkRouteDefPtr def)
-{
- int prefix = 0;
- virSocketAddr zero;
-
- if (!def)
- return -1;
-
- /* this creates an all-0 address of the appropriate family */
- ignore_value(virSocketAddrParse(&zero,
- (VIR_SOCKET_ADDR_IS_FAMILY(&def->address, AF_INET)
- ? VIR_SOCKET_ADDR_IPV4_ALL
- : VIR_SOCKET_ADDR_IPV6_ALL),
- VIR_SOCKET_ADDR_FAMILY(&def->address)));
-
- if (virSocketAddrEqual(&def->address, &zero)) {
- if (def->has_prefix && def->prefix == 0)
- prefix = 0;
- else if ((VIR_SOCKET_ADDR_IS_FAMILY(&def->netmask, AF_INET) &&
- virSocketAddrEqual(&def->netmask, &zero)))
- prefix = 0;
- else
- prefix = virSocketAddrGetIPPrefix(&def->address, &def->netmask,
- def->prefix);
- } else {
- prefix = virSocketAddrGetIPPrefix(&def->address, &def->netmask,
- def->prefix);
- }
-
- return prefix;
-}
-
-unsigned int
-virNetworkRouteDefGetMetric(virNetworkRouteDefPtr def)
-{
- if (def && def->has_metric && def->metric > 0)
- return def->metric;
-
- return 1;
-}
-
-virSocketAddrPtr
-virNetworkRouteDefGetGateway(virNetworkRouteDefPtr def)
-{
- if (def)
- return &def->gateway;
- return NULL;
-}
# include "internal.h"
# include "virbuffer.h"
# include "virsocketaddr.h"
-
-typedef struct _virNetworkRouteDef virNetworkRouteDef;
-typedef virNetworkRouteDef *virNetworkRouteDefPtr;
-
-void
-virNetworkRouteDefFree(virNetworkRouteDefPtr def);
-
-virNetworkRouteDefPtr
-virNetworkRouteDefCreate(const char *networkName,
- const char *family,
- const char *address,
- const char *netmask,
- const char *gateway,
- unsigned int prefix,
- bool hasPrefix,
- unsigned int metric,
- bool hasMetric);
-
-virNetworkRouteDefPtr
-virNetworkRouteDefParseXML(const char *networkName,
- xmlNodePtr node,
- xmlXPathContextPtr ctxt);
+# include "virnetdevip.h"
+
+virNetDevIPRoutePtr
+virNetDevIPRouteCreate(const char *networkName,
+ const char *family,
+ const char *address,
+ const char *netmask,
+ const char *gateway,
+ unsigned int prefix,
+ bool hasPrefix,
+ unsigned int metric,
+ bool hasMetric);
+
+virNetDevIPRoutePtr
+virNetDevIPRouteParseXML(const char *networkName,
+ xmlNodePtr node,
+ xmlXPathContextPtr ctxt);
int
-virNetworkRouteDefFormat(virBufferPtr buf,
- const virNetworkRouteDef *def);
-
-virSocketAddrPtr
-virNetworkRouteDefGetAddress(virNetworkRouteDefPtr def);
-
-int
-virNetworkRouteDefGetPrefix(virNetworkRouteDefPtr def);
-
-unsigned int
-virNetworkRouteDefGetMetric(virNetworkRouteDefPtr def);
-
-virSocketAddrPtr
-virNetworkRouteDefGetGateway(virNetworkRouteDefPtr def);
+virNetDevIPRouteFormat(virBufferPtr buf,
+ const virNetDevIPRoute *def);
#endif /* __NETWORKCOMMON_CONF_H__ */
# conf/networkcommon_conf.h
-virNetworkRouteDefCreate;
-virNetworkRouteDefFormat;
-virNetworkRouteDefFree;
-virNetworkRouteDefGetAddress;
-virNetworkRouteDefGetGateway;
-virNetworkRouteDefGetMetric;
-virNetworkRouteDefGetPrefix;
-virNetworkRouteDefParseXML;
+virNetDevIPRouteCreate;
+virNetDevIPRouteFormat;
+virNetDevIPRouteParseXML;
# conf/node_device_conf.h
virNetDevIPAddrDel;
virNetDevIPAddrGet;
virNetDevIPRouteAdd;
+virNetDevIPRouteFree;
+virNetDevIPRouteGetAddress;
+virNetDevIPRouteGetGateway;
+virNetDevIPRouteGetMetric;
+virNetDevIPRouteGetPrefix;
virNetDevIPWaitDadFinish;
goto error_out;
for (j = 0; j < netDef->nips; j++) {
- virDomainNetIPDefPtr ip = netDef->ips[j];
+ virNetDevIPAddrPtr ip = netDef->ips[j];
int prefix;
char *ipStr = virSocketAddrFormat(&ip->address);
/* Set the routes */
for (j = 0; j < netDef->nroutes; j++) {
- virNetworkRouteDefPtr route = netDef->routes[j];
+ virNetDevIPRoutePtr route = netDef->routes[j];
if (virNetDevIPRouteAdd(newname,
- virNetworkRouteDefGetAddress(route),
- virNetworkRouteDefGetPrefix(route),
- virNetworkRouteDefGetGateway(route),
- virNetworkRouteDefGetMetric(route)) < 0) {
+ virNetDevIPRouteGetAddress(route),
+ virNetDevIPRouteGetPrefix(route),
+ virNetDevIPRouteGetGateway(route),
+ virNetDevIPRouteGetMetric(route)) < 0) {
goto error_out;
}
VIR_FREE(toStr);
char *macvlanmode;
char *vlanid;
char *name;
- virDomainNetIPDefPtr *ips;
+ virNetDevIPAddrPtr *ips;
size_t nips;
char *gateway_ipv4;
char *gateway_ipv6;
static int
lxcAddNetworkRouteDefinition(const char *address,
int family,
- virNetworkRouteDefPtr **routes,
+ virNetDevIPRoutePtr **routes,
size_t *nroutes)
{
- virNetworkRouteDefPtr route = NULL;
+ virNetDevIPRoutePtr route = NULL;
char *familyStr = NULL;
char *zero = NULL;
if (VIR_STRDUP(familyStr, family == AF_INET ? "ipv4" : "ipv6") < 0)
goto error;
- if (!(route = virNetworkRouteDefCreate(_("Domain interface"), familyStr,
- zero, NULL, address, 0, false,
- 0, false)))
+ if (!(route = virNetDevIPRouteCreate(_("Domain interface"), familyStr,
+ zero, NULL, address, 0, false,
+ 0, false)))
goto error;
if (VIR_APPEND_ELEMENT(*routes, *nroutes, route) < 0)
error:
VIR_FREE(familyStr);
VIR_FREE(zero);
- virNetworkRouteDefFree(route);
+ virNetDevIPRouteFree(route);
return -1;
}
STREQ(name, "lxc.network.ipv6")) {
int family = AF_INET;
char **ipparts = NULL;
- virDomainNetIPDefPtr ip = NULL;
+ virNetDevIPAddrPtr ip = NULL;
if (VIR_ALLOC(ip) < 0)
return -1;
/* add an IP (static) route to a bridge */
static int
networkAddRouteToBridge(virNetworkObjPtr network,
- virNetworkRouteDefPtr routedef)
+ virNetDevIPRoutePtr routedef)
{
- int prefix = virNetworkRouteDefGetPrefix(routedef);
- unsigned int metric = virNetworkRouteDefGetMetric(routedef);
- virSocketAddrPtr addr = virNetworkRouteDefGetAddress(routedef);
- virSocketAddrPtr gateway = virNetworkRouteDefGetGateway(routedef);
+ int prefix = virNetDevIPRouteGetPrefix(routedef);
+ unsigned int metric = virNetDevIPRouteGetMetric(routedef);
+ virSocketAddrPtr addr = virNetDevIPRouteGetAddress(routedef);
+ virSocketAddrPtr gateway = virNetDevIPRouteGetGateway(routedef);
if (prefix < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
bool v4present = false, v6present = false;
virErrorPtr save_err = NULL;
virNetworkIPDefPtr ipdef;
- virNetworkRouteDefPtr routedef;
+ virNetDevIPRoutePtr routedef;
char *macTapIfName = NULL;
int tapfd = -1;
virSocketAddrPtr gateway = NULL;
routedef = network->def->routes[i];
- gateway = virNetworkRouteDefGetGateway(routedef);
+ gateway = virNetDevIPRouteGetGateway(routedef);
/* Add the IP route to the bridge */
/* ignore errors, error msg will be generated */
char iface[17], dest[128], mask[128];
unsigned int addr_val, mask_val;
virNetworkIPDefPtr ipdef;
- virNetworkRouteDefPtr routedef;
+ virNetDevIPRoutePtr routedef;
int num;
size_t i;
i++) {
virSocketAddr r_mask, r_addr;
- virSocketAddrPtr tmp_addr = virNetworkRouteDefGetAddress(routedef);
- int r_prefix = virNetworkRouteDefGetPrefix(routedef);
+ virSocketAddrPtr tmp_addr = virNetDevIPRouteGetAddress(routedef);
+ int r_prefix = virNetDevIPRouteGetPrefix(routedef);
if (!tmp_addr ||
virSocketAddrMaskByPrefix(tmp_addr, r_prefix, &r_addr) < 0 ||
_("Unable to get IP address on this platform"));
return -1;
}
+
+/* manipulating the virNetDevIPRoute object */
+void
+virNetDevIPRouteFree(virNetDevIPRoutePtr def)
+{
+ if (!def)
+ return;
+ VIR_FREE(def->family);
+ VIR_FREE(def);
+}
+
+virSocketAddrPtr
+virNetDevIPRouteGetAddress(virNetDevIPRoutePtr def)
+{
+ if (def)
+ return &def->address;
+
+ return NULL;
+}
+
+int
+virNetDevIPRouteGetPrefix(virNetDevIPRoutePtr def)
+{
+ int prefix = 0;
+ virSocketAddr zero;
+
+ if (!def)
+ return -1;
+
+ /* this creates an all-0 address of the appropriate family */
+ ignore_value(virSocketAddrParse(&zero,
+ (VIR_SOCKET_ADDR_IS_FAMILY(&def->address, AF_INET)
+ ? VIR_SOCKET_ADDR_IPV4_ALL
+ : VIR_SOCKET_ADDR_IPV6_ALL),
+ VIR_SOCKET_ADDR_FAMILY(&def->address)));
+
+ if (virSocketAddrEqual(&def->address, &zero)) {
+ if (def->has_prefix && def->prefix == 0)
+ prefix = 0;
+ else if ((VIR_SOCKET_ADDR_IS_FAMILY(&def->netmask, AF_INET) &&
+ virSocketAddrEqual(&def->netmask, &zero)))
+ prefix = 0;
+ else
+ prefix = virSocketAddrGetIPPrefix(&def->address, &def->netmask,
+ def->prefix);
+ } else {
+ prefix = virSocketAddrGetIPPrefix(&def->address, &def->netmask,
+ def->prefix);
+ }
+
+ return prefix;
+}
+
+unsigned int
+virNetDevIPRouteGetMetric(virNetDevIPRoutePtr def)
+{
+ if (def && def->has_metric && def->metric > 0)
+ return def->metric;
+
+ return 1;
+}
+
+virSocketAddrPtr
+virNetDevIPRouteGetGateway(virNetDevIPRoutePtr def)
+{
+ if (def)
+ return &def->gateway;
+ return NULL;
+}
# include "virsocketaddr.h"
+typedef struct {
+ virSocketAddr address; /* ipv4 or ipv6 address */
+ unsigned int prefix; /* number of 1 bits in the net mask */
+} virNetDevIPAddr, *virNetDevIPAddrPtr;
+
+typedef struct {
+ char *family; /* ipv4 or ipv6 - default is ipv4 */
+ virSocketAddr address; /* Routed Network IP address */
+
+ /* One or the other of the following two will be used for a given
+ * Network address, but never both. The parser guarantees this.
+ * The virSocketAddrGetIPPrefix() can be used to get a
+ * valid prefix.
+ */
+ virSocketAddr netmask; /* ipv4 - either netmask or prefix specified */
+ unsigned int prefix; /* ipv6 - only prefix allowed */
+ bool has_prefix; /* prefix= was specified */
+ unsigned int metric; /* value for metric (defaults to 1) */
+ bool has_metric; /* metric= was specified */
+ virSocketAddr gateway; /* gateway IP address for ip-route */
+} virNetDevIPRoute, *virNetDevIPRoutePtr;
+
/* manipulating/querying the netdev */
int virNetDevIPAddrAdd(const char *ifname,
virSocketAddr *addr,
int virNetDevIPWaitDadFinish(virSocketAddrPtr *addrs, size_t count)
ATTRIBUTE_NONNULL(1);
+/* virNetDevIPRoute object */
+void virNetDevIPRouteFree(virNetDevIPRoutePtr def);
+virSocketAddrPtr virNetDevIPRouteGetAddress(virNetDevIPRoutePtr def);
+int virNetDevIPRouteGetPrefix(virNetDevIPRoutePtr def);
+unsigned int virNetDevIPRouteGetMetric(virNetDevIPRoutePtr def);
+virSocketAddrPtr virNetDevIPRouteGetGateway(virNetDevIPRoutePtr def);
+
#endif /* __VIR_NETDEVIP_H__ */