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

Split src/util/network.{c,h} into 5 pieces

The src/util/network.c file is a dumping ground for many different
APIs. Split it up into 5 pieces, along functional lines

 - src/util/virnetdevbandwidth.c: virNetDevBandwidth type & helper APIs
 - src/util/virnetdevvportprofile.c: virNetDevVPortProfile type & helper APIs
 - src/util/virsocketaddr.c: virSocketAddr and APIs
 - src/conf/netdev_bandwidth_conf.c: XML parsing / formatting
   for virNetDevBandwidth
 - src/conf/netdev_vport_profile_conf.c: XML parsing / formatting
   for virNetDevVPortProfile

* src/util/network.c, src/util/network.h: Split into 5 pieces
* src/conf/netdev_bandwidth_conf.c, src/conf/netdev_bandwidth_conf.h,
  src/conf/netdev_vport_profile_conf.c, src/conf/netdev_vport_profile_conf.h,
  src/util/virnetdevbandwidth.c, src/util/virnetdevbandwidth.h,
  src/util/virnetdevvportprofile.c, src/util/virnetdevvportprofile.h,
  src/util/virsocketaddr.c, src/util/virsocketaddr.h: New pieces
* daemon/libvirtd.h, daemon/remote.c, src/conf/domain_conf.c,
  src/conf/domain_conf.h, src/conf/network_conf.c,
  src/conf/network_conf.h, src/conf/nwfilter_conf.h,
  src/esx/esx_util.h, src/network/bridge_driver.c,
  src/qemu/qemu_conf.c, src/rpc/virnetsocket.c,
  src/rpc/virnetsocket.h, src/util/dnsmasq.h, src/util/interface.h,
  src/util/iptables.h, src/util/macvtap.c, src/util/macvtap.h,
  src/util/virnetdev.h, src/util/virnetdevtap.c,
  tools/virsh.c: Update include files
上级 df64f480
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
# include "qemu_protocol.h" # include "qemu_protocol.h"
# include "logging.h" # include "logging.h"
# include "threads.h" # include "threads.h"
# include "network.h"
# if HAVE_SASL # if HAVE_SASL
# include "virnetsaslcontext.h" # include "virnetsaslcontext.h"
# endif # endif
......
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
#include "util.h" #include "util.h"
#include "stream.h" #include "stream.h"
#include "uuid.h" #include "uuid.h"
#include "network.h"
#include "libvirt/libvirt-qemu.h" #include "libvirt/libvirt-qemu.h"
#include "command.h" #include "command.h"
#include "intprops.h" #include "intprops.h"
......
...@@ -8,6 +8,8 @@ src/conf/cpu_conf.c ...@@ -8,6 +8,8 @@ src/conf/cpu_conf.c
src/conf/domain_conf.c src/conf/domain_conf.c
src/conf/domain_event.c src/conf/domain_event.c
src/conf/interface_conf.c src/conf/interface_conf.c
src/conf/netdev_bandwidth_conf.c
src/conf/netdev_vport_profile_conf.c
src/conf/network_conf.c src/conf/network_conf.c
src/conf/node_device_conf.c src/conf/node_device_conf.c
src/conf/nwfilter_conf.c src/conf/nwfilter_conf.c
...@@ -116,7 +118,6 @@ src/util/iptables.c ...@@ -116,7 +118,6 @@ src/util/iptables.c
src/util/json.c src/util/json.c
src/util/macvtap.c src/util/macvtap.c
src/util/netlink.c src/util/netlink.c
src/util/network.c
src/util/pci.c src/util/pci.c
src/util/processinfo.c src/util/processinfo.c
src/util/sexpr.c src/util/sexpr.c
...@@ -130,6 +131,7 @@ src/util/virnetdev.c ...@@ -130,6 +131,7 @@ src/util/virnetdev.c
src/util/virnetdevbridge.c src/util/virnetdevbridge.c
src/util/virnetdevtap.c src/util/virnetdevtap.c
src/util/virpidfile.c src/util/virpidfile.c
src/util/virsocketaddr.c
src/util/virterror.c src/util/virterror.c
src/util/xml.c src/util/xml.c
src/vbox/vbox_MSCOMGlue.c src/vbox/vbox_MSCOMGlue.c
......
...@@ -73,7 +73,6 @@ UTIL_SOURCES = \ ...@@ -73,7 +73,6 @@ UTIL_SOURCES = \
util/pci.c util/pci.h \ util/pci.c util/pci.h \
util/processinfo.c util/processinfo.h \ util/processinfo.c util/processinfo.h \
util/hostusb.c util/hostusb.h \ util/hostusb.c util/hostusb.h \
util/network.c util/network.h \
util/interface.c util/interface.h \ util/interface.c util/interface.h \
util/qparams.c util/qparams.h \ util/qparams.c util/qparams.h \
util/sexpr.c util/sexpr.h \ util/sexpr.c util/sexpr.h \
...@@ -94,8 +93,11 @@ UTIL_SOURCES = \ ...@@ -94,8 +93,11 @@ UTIL_SOURCES = \
util/virkeycode.c util/virkeycode.h \ util/virkeycode.c util/virkeycode.h \
util/virkeymaps.h \ util/virkeymaps.h \
util/virnetdev.h util/virnetdev.c \ util/virnetdev.h util/virnetdev.c \
util/virnetdevbandwidth.h util/virnetdevbandwidth.c \
util/virnetdevbridge.h util/virnetdevbridge.c \ util/virnetdevbridge.h util/virnetdevbridge.c \
util/virnetdevtap.h util/virnetdevtap.c util/virnetdevtap.h util/virnetdevtap.c \
util/virnetdevvportprofile.h util/virnetdevvportprofile.c \
util/virsocketaddr.h util/virsocketaddr.c
EXTRA_DIST += $(srcdir)/util/virkeymaps.h $(srcdir)/util/keymaps.csv \ EXTRA_DIST += $(srcdir)/util/virkeymaps.h $(srcdir)/util/keymaps.csv \
$(srcdir)/util/virkeycode-mapgen.py $(srcdir)/util/virkeycode-mapgen.py
...@@ -126,6 +128,10 @@ LOCK_DRIVER_SANLOCK_SOURCES = \ ...@@ -126,6 +128,10 @@ LOCK_DRIVER_SANLOCK_SOURCES = \
locking/lock_driver_sanlock.c locking/lock_driver_sanlock.c
NETDEV_CONF_SOURCES = \
conf/netdev_bandwidth_conf.h conf/netdev_bandwidth_conf.c \
conf/netdev_vport_profile_conf.h conf/netdev_vport_profile_conf.c
# XML configuration format handling sources # XML configuration format handling sources
# Domain driver generic impl APIs # Domain driver generic impl APIs
DOMAIN_CONF_SOURCES = \ DOMAIN_CONF_SOURCES = \
...@@ -173,6 +179,7 @@ CPU_CONF_SOURCES = \ ...@@ -173,6 +179,7 @@ CPU_CONF_SOURCES = \
conf/cpu_conf.c conf/cpu_conf.h conf/cpu_conf.c conf/cpu_conf.h
CONF_SOURCES = \ CONF_SOURCES = \
$(NETDEV_CONF_SOURCES) \
$(DOMAIN_CONF_SOURCES) \ $(DOMAIN_CONF_SOURCES) \
$(DOMAIN_EVENT_SOURCES) \ $(DOMAIN_EVENT_SOURCES) \
$(NETWORK_CONF_SOURCES) \ $(NETWORK_CONF_SOURCES) \
...@@ -1479,6 +1486,7 @@ libvirt_lxc_SOURCES = \ ...@@ -1479,6 +1486,7 @@ libvirt_lxc_SOURCES = \
$(UTIL_SOURCES) \ $(UTIL_SOURCES) \
$(NODE_INFO_SOURCES) \ $(NODE_INFO_SOURCES) \
$(ENCRYPTION_CONF_SOURCES) \ $(ENCRYPTION_CONF_SOURCES) \
$(NETDEV_CONF_SOURCES) \
$(DOMAIN_CONF_SOURCES) \ $(DOMAIN_CONF_SOURCES) \
$(SECRET_CONF_SOURCES) \ $(SECRET_CONF_SOURCES) \
$(CPU_CONF_SOURCES) \ $(CPU_CONF_SOURCES) \
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include "buf.h" #include "buf.h"
#include "c-ctype.h" #include "c-ctype.h"
#include "logging.h" #include "logging.h"
#include "network.h"
#include "nwfilter_conf.h" #include "nwfilter_conf.h"
#include "ignore-value.h" #include "ignore-value.h"
#include "storage_file.h" #include "storage_file.h"
...@@ -50,6 +49,8 @@ ...@@ -50,6 +49,8 @@
#include "bitmap.h" #include "bitmap.h"
#include "count-one-bits.h" #include "count-one-bits.h"
#include "secret_conf.h" #include "secret_conf.h"
#include "netdev_vport_profile_conf.h"
#include "netdev_bandwidth_conf.h"
#define VIR_FROM_THIS VIR_FROM_DOMAIN #define VIR_FROM_THIS VIR_FROM_DOMAIN
......
...@@ -35,11 +35,13 @@ ...@@ -35,11 +35,13 @@
# include "util.h" # include "util.h"
# include "threads.h" # include "threads.h"
# include "hash.h" # include "hash.h"
# include "network.h" # include "virsocketaddr.h"
# include "nwfilter_params.h" # include "nwfilter_params.h"
# include "nwfilter_conf.h" # include "nwfilter_conf.h"
# include "macvtap.h" # include "macvtap.h"
# include "sysinfo.h" # include "sysinfo.h"
# include "virnetdevvportprofile.h"
# include "virnetdevbandwidth.h"
/* Different types of hypervisor */ /* Different types of hypervisor */
/* NB: Keep in sync with virDomainVirtTypeToString impl */ /* NB: Keep in sync with virDomainVirtTypeToString impl */
......
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Michal Privoznik <mprivozn@redhat.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#include <config.h>
#include "netdev_bandwidth_conf.h"
#include "virterror_internal.h"
#include "util.h"
#include "memory.h"
#define VIR_FROM_THIS VIR_FROM_NONE
#define virNetDevError(code, ...) \
virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__)
static int
virNetDevBandwidthParseRate(xmlNodePtr node, virNetDevBandwidthRatePtr rate)
{
int ret = -1;
char *average = NULL;
char *peak = NULL;
char *burst = NULL;
if (!node || !rate) {
virNetDevError(VIR_ERR_INVALID_ARG, "%s",
_("invalid argument supplied"));
return -1;
}
average = virXMLPropString(node, "average");
peak = virXMLPropString(node, "peak");
burst = virXMLPropString(node, "burst");
if (average) {
if (virStrToLong_ull(average, NULL, 10, &rate->average) < 0) {
virNetDevError(VIR_ERR_CONFIG_UNSUPPORTED,
_("could not convert %s"),
average);
goto cleanup;
}
} else {
virNetDevError(VIR_ERR_XML_DETAIL, "%s",
_("Missing mandatory average attribute"));
goto cleanup;
}
if (peak && virStrToLong_ull(peak, NULL, 10, &rate->peak) < 0) {
virNetDevError(VIR_ERR_CONFIG_UNSUPPORTED,
_("could not convert %s"),
peak);
goto cleanup;
}
if (burst && virStrToLong_ull(burst, NULL, 10, &rate->burst) < 0) {
virNetDevError(VIR_ERR_CONFIG_UNSUPPORTED,
_("could not convert %s"),
burst);
goto cleanup;
}
ret = 0;
cleanup:
VIR_FREE(average);
VIR_FREE(peak);
VIR_FREE(burst);
return ret;
}
/**
* virNetDevBandwidthParse:
* @node: XML node
*
* Parse bandwidth XML and return pointer to structure
*
* Returns !NULL on success, NULL on error.
*/
virNetDevBandwidthPtr
virNetDevBandwidthParse(xmlNodePtr node)
{
virNetDevBandwidthPtr def = NULL;
xmlNodePtr cur = node->children;
xmlNodePtr in = NULL, out = NULL;
if (VIR_ALLOC(def) < 0) {
virReportOOMError();
return NULL;
}
if (!node || !xmlStrEqual(node->name, BAD_CAST "bandwidth")) {
virNetDevError(VIR_ERR_INVALID_ARG, "%s",
_("invalid argument supplied"));
goto error;
}
while (cur) {
if (cur->type == XML_ELEMENT_NODE) {
if (xmlStrEqual(cur->name, BAD_CAST "inbound")) {
if (in) {
virNetDevError(VIR_ERR_XML_DETAIL, "%s",
_("Only one child <inbound> "
"element allowed"));
goto error;
}
in = cur;
} else if (xmlStrEqual(cur->name, BAD_CAST "outbound")) {
if (out) {
virNetDevError(VIR_ERR_XML_DETAIL, "%s",
_("Only one child <outbound> "
"element allowed"));
goto error;
}
out = cur;
}
/* Silently ignore unknown elements */
}
cur = cur->next;
}
if (in) {
if (VIR_ALLOC(def->in) < 0) {
virReportOOMError();
goto error;
}
if (virNetDevBandwidthParseRate(in, def->in) < 0) {
/* helper reported error for us */
goto error;
}
}
if (out) {
if (VIR_ALLOC(def->out) < 0) {
virReportOOMError();
goto error;
}
if (virNetDevBandwidthParseRate(out, def->out) < 0) {
/* helper reported error for us */
goto error;
}
}
return def;
error:
virNetDevBandwidthFree(def);
return NULL;
}
static int
virNetDevBandwidthRateFormat(virNetDevBandwidthRatePtr def,
virBufferPtr buf,
const char *elem_name)
{
if (!buf || !elem_name)
return -1;
if (!def)
return 0;
if (def->average) {
virBufferAsprintf(buf, " <%s average='%llu'", elem_name,
def->average);
if (def->peak)
virBufferAsprintf(buf, " peak='%llu'", def->peak);
if (def->burst)
virBufferAsprintf(buf, " burst='%llu'", def->burst);
virBufferAddLit(buf, "/>\n");
}
return 0;
}
/**
* virNetDevBandwidthDefFormat:
* @def: Data source
* @buf: Buffer to print to
*
* Formats bandwidth and prepend each line with @indent.
* @buf may use auto-indentation.
*
* Returns 0 on success, else -1.
*/
int
virNetDevBandwidthFormat(virNetDevBandwidthPtr def, virBufferPtr buf)
{
int ret = -1;
if (!buf)
goto cleanup;
if (!def) {
ret = 0;
goto cleanup;
}
virBufferAddLit(buf, "<bandwidth>\n");
if (virNetDevBandwidthRateFormat(def->in, buf, "inbound") < 0 ||
virNetDevBandwidthRateFormat(def->out, buf, "outbound") < 0)
goto cleanup;
virBufferAddLit(buf, "</bandwidth>\n");
ret = 0;
cleanup:
return ret;
}
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Michal Privoznik <mprivozn@redhat.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#ifndef __VIR_NETDEV_BANDWIDTH_CONF_H__
# define __VIR_NETDEV_BANDWIDTH_CONF_H__
# include "internal.h"
# include "virnetdevbandwidth.h"
# include "buf.h"
# include "xml.h"
virNetDevBandwidthPtr virNetDevBandwidthParse(xmlNodePtr node)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevBandwidthFormat(virNetDevBandwidthPtr def,
virBufferPtr buf)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
#endif /* __VIR_NETDEV_BANDWIDTH_CONF_H__ */
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Stefan Berger <stefanb@us.ibm.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#include <config.h>
#include "netdev_vport_profile_conf.h"
#include "virterror_internal.h"
#include "memory.h"
#define VIR_FROM_THIS VIR_FROM_NONE
#define virNetDevError(code, ...) \
virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__)
VIR_ENUM_IMPL(virNetDevVPort, VIR_NETDEV_VPORT_PROFILE_LAST,
"none",
"802.1Qbg",
"802.1Qbh")
virNetDevVPortProfilePtr
virNetDevVPortProfileParse(xmlNodePtr node)
{
char *virtPortType;
char *virtPortManagerID = NULL;
char *virtPortTypeID = NULL;
char *virtPortTypeIDVersion = NULL;
char *virtPortInstanceID = NULL;
char *virtPortProfileID = NULL;
virNetDevVPortProfilePtr virtPort = NULL;
xmlNodePtr cur = node->children;
if (VIR_ALLOC(virtPort) < 0) {
virReportOOMError();
return NULL;
}
virtPortType = virXMLPropString(node, "type");
if (!virtPortType) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("missing virtualportprofile type"));
goto error;
}
if ((virtPort->virtPortType = virNetDevVPortTypeFromString(virtPortType)) <= 0) {
virNetDevError(VIR_ERR_XML_ERROR,
_("unknown virtualportprofile type %s"), virtPortType);
goto error;
}
while (cur != NULL) {
if (xmlStrEqual(cur->name, BAD_CAST "parameters")) {
virtPortManagerID = virXMLPropString(cur, "managerid");
virtPortTypeID = virXMLPropString(cur, "typeid");
virtPortTypeIDVersion = virXMLPropString(cur, "typeidversion");
virtPortInstanceID = virXMLPropString(cur, "instanceid");
virtPortProfileID = virXMLPropString(cur, "profileid");
break;
}
cur = cur->next;
}
switch (virtPort->virtPortType) {
case VIR_NETDEV_VPORT_PROFILE_8021QBG:
if (virtPortManagerID != NULL && virtPortTypeID != NULL &&
virtPortTypeIDVersion != NULL) {
unsigned int val;
if (virStrToLong_ui(virtPortManagerID, NULL, 0, &val)) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("cannot parse value of managerid parameter"));
goto error;
}
if (val > 0xff) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("value of managerid out of range"));
goto error;
}
virtPort->u.virtPort8021Qbg.managerID = (uint8_t)val;
if (virStrToLong_ui(virtPortTypeID, NULL, 0, &val)) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("cannot parse value of typeid parameter"));
goto error;
}
if (val > 0xffffff) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("value for typeid out of range"));
goto error;
}
virtPort->u.virtPort8021Qbg.typeID = (uint32_t)val;
if (virStrToLong_ui(virtPortTypeIDVersion, NULL, 0, &val)) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("cannot parse value of typeidversion parameter"));
goto error;
}
if (val > 0xff) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("value of typeidversion out of range"));
goto error;
}
virtPort->u.virtPort8021Qbg.typeIDVersion = (uint8_t)val;
if (virtPortInstanceID != NULL) {
if (virUUIDParse(virtPortInstanceID,
virtPort->u.virtPort8021Qbg.instanceID)) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("cannot parse instanceid parameter as a uuid"));
goto error;
}
} else {
if (virUUIDGenerate(virtPort->u.virtPort8021Qbg.instanceID)) {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("cannot generate a random uuid for instanceid"));
goto error;
}
}
virtPort->virtPortType = VIR_NETDEV_VPORT_PROFILE_8021QBG;
} else {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("a parameter is missing for 802.1Qbg description"));
goto error;
}
break;
case VIR_NETDEV_VPORT_PROFILE_8021QBH:
if (virtPortProfileID != NULL) {
if (virStrcpyStatic(virtPort->u.virtPort8021Qbh.profileID,
virtPortProfileID) != NULL) {
virtPort->virtPortType = VIR_NETDEV_VPORT_PROFILE_8021QBH;
} else {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("profileid parameter too long"));
goto error;
}
} else {
virNetDevError(VIR_ERR_XML_ERROR, "%s",
_("profileid parameter is missing for 802.1Qbh descripion"));
goto error;
}
break;
default:
virNetDevError(VIR_ERR_XML_ERROR,
_("unexpected virtualport type %d"), virtPort->virtPortType);
goto error;
}
cleanup:
VIR_FREE(virtPortManagerID);
VIR_FREE(virtPortTypeID);
VIR_FREE(virtPortTypeIDVersion);
VIR_FREE(virtPortInstanceID);
VIR_FREE(virtPortProfileID);
VIR_FREE(virtPortType);
return virtPort;
error:
VIR_FREE(virtPort);
goto cleanup;
}
int
virNetDevVPortProfileFormat(virNetDevVPortProfilePtr virtPort,
virBufferPtr buf)
{
char uuidstr[VIR_UUID_STRING_BUFLEN];
if (!virtPort || virtPort->virtPortType == VIR_NETDEV_VPORT_PROFILE_NONE)
return 0;
virBufferAsprintf(buf, "<virtualport type='%s'>\n",
virNetDevVPortTypeToString(virtPort->virtPortType));
switch (virtPort->virtPortType) {
case VIR_NETDEV_VPORT_PROFILE_8021QBG:
virUUIDFormat(virtPort->u.virtPort8021Qbg.instanceID,
uuidstr);
virBufferAsprintf(buf,
" <parameters managerid='%d' typeid='%d' "
"typeidversion='%d' instanceid='%s'/>\n",
virtPort->u.virtPort8021Qbg.managerID,
virtPort->u.virtPort8021Qbg.typeID,
virtPort->u.virtPort8021Qbg.typeIDVersion,
uuidstr);
break;
case VIR_NETDEV_VPORT_PROFILE_8021QBH:
virBufferAsprintf(buf,
" <parameters profileid='%s'/>\n",
virtPort->u.virtPort8021Qbh.profileID);
break;
default:
virNetDevError(VIR_ERR_XML_ERROR,
_("unexpected virtualport type %d"), virtPort->virtPortType);
return -1;
}
virBufferAddLit(buf, "</virtualport>\n");
return 0;
}
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Stefan Berger <stefanb@us.ibm.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#ifndef __VIR_NETDEV_VPORT_PROFILE_CONF_H__
# define __VIR_NETDEV_VPORT_PROFILE_CONF_H__
# include "internal.h"
# include "virnetdevvportprofile.h"
# include "buf.h"
# include "xml.h"
virNetDevVPortProfilePtr
virNetDevVPortProfileParse(xmlNodePtr node);
int
virNetDevVPortProfileFormat(virNetDevVPortProfilePtr virtPort,
virBufferPtr buf);
#endif /* __VIR_NETDEV_VPORT_PROFILE_CONF_H__ */
...@@ -34,7 +34,8 @@ ...@@ -34,7 +34,8 @@
#include "virterror_internal.h" #include "virterror_internal.h"
#include "datatypes.h" #include "datatypes.h"
#include "network_conf.h" #include "network_conf.h"
#include "network.h" #include "netdev_vport_profile_conf.h"
#include "netdev_bandwidth_conf.h"
#include "memory.h" #include "memory.h"
#include "xml.h" #include "xml.h"
#include "uuid.h" #include "uuid.h"
......
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
# include "internal.h" # include "internal.h"
# include "threads.h" # include "threads.h"
# include "network.h" # include "virsocketaddr.h"
# include "virnetdevbandwidth.h"
# include "virnetdevvportprofile.h"
# include "util.h" # include "util.h"
enum virNetworkForwardType { enum virNetworkForwardType {
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
# include "hash.h" # include "hash.h"
# include "xml.h" # include "xml.h"
# include "buf.h" # include "buf.h"
# include "network.h" # include "virsocketaddr.h"
/* XXX /* XXX
* The config parser/structs should not be using platform specific * The config parser/structs should not be using platform specific
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
# define __ESX_UTIL_H__ # define __ESX_UTIL_H__
# include <libxml/uri.h> # include <libxml/uri.h>
# include <netdb.h>
# include "internal.h" # include "internal.h"
typedef struct _esxUtil_ParsedUri esxUtil_ParsedUri; typedef struct _esxUtil_ParsedUri esxUtil_ParsedUri;
......
...@@ -58,7 +58,6 @@ ...@@ -58,7 +58,6 @@
#include "interface.h" #include "interface.h"
#include "logging.h" #include "logging.h"
#include "dnsmasq.h" #include "dnsmasq.h"
#include "util/network.h"
#include "configmake.h" #include "configmake.h"
#include "ignore-value.h" #include "ignore-value.h"
#include "virnetdev.h" #include "virnetdev.h"
......
...@@ -49,7 +49,6 @@ ...@@ -49,7 +49,6 @@
#include "xml.h" #include "xml.h"
#include "nodeinfo.h" #include "nodeinfo.h"
#include "logging.h" #include "logging.h"
#include "network.h"
#include "macvtap.h" #include "macvtap.h"
#include "cpu/cpu.h" #include "cpu/cpu.h"
#include "domain_nwfilter.h" #include "domain_nwfilter.h"
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <signal.h> #include <signal.h>
#include <fcntl.h> #include <fcntl.h>
#include <netdb.h>
#ifdef HAVE_NETINET_TCP_H #ifdef HAVE_NETINET_TCP_H
# include <netinet/tcp.h> # include <netinet/tcp.h>
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#ifndef __VIR_NET_SOCKET_H__ #ifndef __VIR_NET_SOCKET_H__
# define __VIR_NET_SOCKET_H__ # define __VIR_NET_SOCKET_H__
# include "network.h" # include "virsocketaddr.h"
# include "command.h" # include "command.h"
# include "virnettlscontext.h" # include "virnettlscontext.h"
# ifdef HAVE_SASL # ifdef HAVE_SASL
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#ifndef __DNSMASQ_H__ #ifndef __DNSMASQ_H__
# define __DNSMASQ_H__ # define __DNSMASQ_H__
# include "network.h" # include "virsocketaddr.h"
typedef struct typedef struct
{ {
......
...@@ -25,7 +25,7 @@ struct nlattr; ...@@ -25,7 +25,7 @@ struct nlattr;
# endif # endif
# include "datatypes.h" # include "datatypes.h"
# include "network.h" # include "virsocketaddr.h"
# define NET_SYSFS "/sys/class/net/" # define NET_SYSFS "/sys/class/net/"
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#ifndef __QEMUD_IPTABLES_H__ #ifndef __QEMUD_IPTABLES_H__
# define __QEMUD_IPTABLES_H__ # define __QEMUD_IPTABLES_H__
# include "network.h" # include "virsocketaddr.h"
typedef struct _iptablesContext iptablesContext; typedef struct _iptablesContext iptablesContext;
......
...@@ -50,7 +50,6 @@ ...@@ -50,7 +50,6 @@
#include "util.h" #include "util.h"
#include "macvtap.h" #include "macvtap.h"
#include "network.h"
VIR_ENUM_IMPL(virMacvtapMode, VIR_MACVTAP_MODE_LAST, VIR_ENUM_IMPL(virMacvtapMode, VIR_MACVTAP_MODE_LAST,
"vepa", "vepa",
......
...@@ -23,7 +23,10 @@ ...@@ -23,7 +23,10 @@
#ifndef __UTIL_MACVTAP_H__ #ifndef __UTIL_MACVTAP_H__
# define __UTIL_MACVTAP_H__ # define __UTIL_MACVTAP_H__
# include <config.h> # include "internal.h"
# include "virsocketaddr.h"
# include "virnetdevbandwidth.h"
# include "virnetdevvportprofile.h"
/* the mode type for macvtap devices */ /* the mode type for macvtap devices */
enum virMacvtapMode { enum virMacvtapMode {
...@@ -50,9 +53,6 @@ enum virVMOperationType { ...@@ -50,9 +53,6 @@ enum virVMOperationType {
# if WITH_MACVTAP # if WITH_MACVTAP
# include "internal.h"
# include "network.h"
int openMacvtapTap(const char *ifname, int openMacvtapTap(const char *ifname,
const unsigned char *macaddress, const unsigned char *macaddress,
const char *linkdev, const char *linkdev,
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#ifndef __VIR_NETDEV_H__ #ifndef __VIR_NETDEV_H__
# define __VIR_NETDEV_H__ # define __VIR_NETDEV_H__
# include "network.h" # include "virsocketaddr.h"
int virNetDevExists(const char *brname) int virNetDevExists(const char *brname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
......
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Michal Privoznik <mprivozn@redhat.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#include <config.h>
#include "virnetdevbandwidth.h"
#include "command.h"
#include "memory.h"
#include "virterror_internal.h"
#include "ignore-value.h"
#define VIR_FROM_THIS VIR_FROM_NONE
void
virNetDevBandwidthFree(virNetDevBandwidthPtr def)
{
if (!def)
return;
VIR_FREE(def->in);
VIR_FREE(def->out);
VIR_FREE(def);
}
/**
* virNetDevBandwidthSet:
* @ifname: on which interface
* @bandwidth: rates to set (may be NULL)
*
* This function enables QoS on specified interface
* and set given traffic limits for both, incoming
* and outgoing traffic. Any previous setting get
* overwritten.
*
* Return 0 on success, -1 otherwise.
*/
int
virNetDevBandwidthSet(const char *ifname,
virNetDevBandwidthPtr bandwidth)
{
int ret = -1;
virCommandPtr cmd = NULL;
char *average = NULL;
char *peak = NULL;
char *burst = NULL;
if (!bandwidth) {
/* nothing to be enabled */
ret = 0;
goto cleanup;
}
ignore_value(virNetDevBandwidthClear(ifname));
if (bandwidth->in) {
if (virAsprintf(&average, "%llukbps", bandwidth->in->average) < 0)
goto cleanup;
if (bandwidth->in->peak &&
(virAsprintf(&peak, "%llukbps", bandwidth->in->peak) < 0))
goto cleanup;
if (bandwidth->in->burst &&
(virAsprintf(&burst, "%llukb", bandwidth->in->burst) < 0))
goto cleanup;
cmd = virCommandNew(TC);
virCommandAddArgList(cmd, "qdisc", "add", "dev", ifname, "root",
"handle", "1:", "htb", "default", "1", NULL);
if (virCommandRun(cmd, NULL) < 0)
goto cleanup;
virCommandFree(cmd);
cmd = virCommandNew(TC);
virCommandAddArgList(cmd,"class", "add", "dev", ifname, "parent",
"1:", "classid", "1:1", "htb", NULL);
virCommandAddArgList(cmd, "rate", average, NULL);
if (peak)
virCommandAddArgList(cmd, "ceil", peak, NULL);
if (burst)
virCommandAddArgList(cmd, "burst", burst, NULL);
if (virCommandRun(cmd, NULL) < 0)
goto cleanup;
virCommandFree(cmd);
cmd = virCommandNew(TC);
virCommandAddArgList(cmd,"filter", "add", "dev", ifname, "parent",
"1:0", "protocol", "ip", "handle", "1", "fw",
"flowid", "1", NULL);
if (virCommandRun(cmd, NULL) < 0)
goto cleanup;
VIR_FREE(average);
VIR_FREE(peak);
VIR_FREE(burst);
}
if (bandwidth->out) {
if (virAsprintf(&average, "%llukbps", bandwidth->out->average) < 0)
goto cleanup;
if (virAsprintf(&burst, "%llukb", bandwidth->out->burst ?
bandwidth->out->burst : bandwidth->out->average) < 0)
goto cleanup;
virCommandFree(cmd);
cmd = virCommandNew(TC);
virCommandAddArgList(cmd, "qdisc", "add", "dev", ifname,
"ingress", NULL);
if (virCommandRun(cmd, NULL) < 0)
goto cleanup;
virCommandFree(cmd);
cmd = virCommandNew(TC);
virCommandAddArgList(cmd, "filter", "add", "dev", ifname, "parent",
"ffff:", "protocol", "ip", "u32", "match", "ip",
"src", "0.0.0.0/0", "police", "rate", average,
"burst", burst, "mtu", burst, "drop", "flowid",
":1", NULL);
if (virCommandRun(cmd, NULL) < 0)
goto cleanup;
}
ret = 0;
cleanup:
virCommandFree(cmd);
VIR_FREE(average);
VIR_FREE(peak);
VIR_FREE(burst);
return ret;
}
/**
* virNetDevBandwidthClear:
* @ifname: on which interface
*
* This function tries to disable QoS on specified interface
* by deleting root and ingress qdisc. However, this may fail
* if we try to remove the default one.
*
* Return 0 on success, -1 otherwise.
*/
int
virNetDevBandwidthClear(const char *ifname)
{
int ret = 0;
virCommandPtr cmd = NULL;
cmd = virCommandNew(TC);
virCommandAddArgList(cmd, "qdisc", "del", "dev", ifname, "root", NULL);
if (virCommandRun(cmd, NULL) < 0)
ret = -1;
virCommandFree(cmd);
cmd = virCommandNew(TC);
virCommandAddArgList(cmd, "qdisc", "del", "dev", ifname, "ingress", NULL);
if (virCommandRun(cmd, NULL) < 0)
ret = -1;
virCommandFree(cmd);
return ret;
}
/*
* virNetDevBandwidthCopy:
* @dest: destination
* @src: source (may be NULL)
*
* Returns -1 on OOM error (which gets reported),
* 0 otherwise.
*/
int
virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest,
const virNetDevBandwidthPtr src)
{
int ret = -1;
*dest = NULL;
if (!src) {
/* nothing to be copied */
return 0;
}
if (VIR_ALLOC(*dest) < 0) {
virReportOOMError();
goto cleanup;
}
if (src->in) {
if (VIR_ALLOC((*dest)->in) < 0) {
virReportOOMError();
goto cleanup;
}
memcpy((*dest)->in, src->in, sizeof(*src->in));
}
if (src->out) {
if (VIR_ALLOC((*dest)->out) < 0) {
virReportOOMError();
VIR_FREE((*dest)->in);
goto cleanup;
}
memcpy((*dest)->out, src->out, sizeof(*src->out));
}
ret = 0;
cleanup:
if (ret < 0) {
virNetDevBandwidthFree(*dest);
*dest = NULL;
}
return ret;
}
bool
virNetDevBandwidthEqual(virNetDevBandwidthPtr a,
virNetDevBandwidthPtr b)
{
if (!a && !b)
return true;
if (!a || !b)
return false;
/* in */
if (a->in->average != b->in->average ||
a->in->peak != b->in->peak ||
a->in->burst != b->in->burst)
return false;
/*out*/
if (a->out->average != b->out->average ||
a->out->peak != b->out->peak ||
a->out->burst != b->out->burst)
return false;
return true;
}
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Michal Privoznik <mprivozn@redhat.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#ifndef __VIR_NETDEV_BANDWIDTH_H__
# define __VIR_NETDEV_BANDWIDTH_H__
# include "internal.h"
typedef struct _virNetDevBandwidthRate virNetDevBandwidthRate;
typedef virNetDevBandwidthRate *virNetDevBandwidthRatePtr;
struct _virNetDevBandwidthRate {
unsigned long long average; /* kbytes/s */
unsigned long long peak; /* kbytes/s */
unsigned long long burst; /* kbytes */
};
typedef struct _virNetDevBandwidth virNetDevBandwidth;
typedef virNetDevBandwidth *virNetDevBandwidthPtr;
struct _virNetDevBandwidth {
virNetDevBandwidthRatePtr in, out;
};
void virNetDevBandwidthFree(virNetDevBandwidthPtr def);
int virNetDevBandwidthSet(const char *ifname, virNetDevBandwidthPtr bandwidth)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevBandwidthClear(const char *ifname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest, const virNetDevBandwidthPtr src)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
bool virNetDevBandwidthEqual(virNetDevBandwidthPtr a, virNetDevBandwidthPtr b);
#endif /* __VIR_NETDEV_BANDWIDTH_H__ */
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "virterror_internal.h" #include "virterror_internal.h"
#include "memory.h" #include "memory.h"
#include "logging.h" #include "logging.h"
#include "util.h"
#include <sys/ioctl.h> #include <sys/ioctl.h>
#ifdef HAVE_NET_IF_H #ifdef HAVE_NET_IF_H
......
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Stefan Berger <stefanb@us.ibm.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#include <config.h>
#include "virnetdevvportprofile.h"
bool
virNetDevVPortProfileEqual(virNetDevVPortProfilePtr a, virNetDevVPortProfilePtr b)
{
/* NULL resistant */
if (!a && !b)
return true;
if (!a || !b)
return false;
if (a->virtPortType != b->virtPortType)
return false;
switch (a->virtPortType) {
case VIR_NETDEV_VPORT_PROFILE_NONE:
break;
case VIR_NETDEV_VPORT_PROFILE_8021QBG:
if (a->u.virtPort8021Qbg.managerID != b->u.virtPort8021Qbg.managerID ||
a->u.virtPort8021Qbg.typeID != b->u.virtPort8021Qbg.typeID ||
a->u.virtPort8021Qbg.typeIDVersion != b->u.virtPort8021Qbg.typeIDVersion ||
memcmp(a->u.virtPort8021Qbg.instanceID, b->u.virtPort8021Qbg.instanceID, VIR_UUID_BUFLEN) != 0)
return false;
break;
case VIR_NETDEV_VPORT_PROFILE_8021QBH:
if (STRNEQ(a->u.virtPort8021Qbh.profileID, b->u.virtPort8021Qbh.profileID))
return false;
break;
default:
break;
}
return true;
}
/*
* Copyright (C) 2009-2011 Red Hat, Inc.
*
* 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
*
* Authors:
* Stefan Berger <stefanb@us.ibm.com>
* Daniel P. Berrange <berrange@redhat.com>
*/
#ifndef __VIR_NETDEV_VPORT_PROFILE_H__
# define __VIR_NETDEV_VPORT_PROFILE_H__
# include "internal.h"
# include "uuid.h"
# include "util.h"
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX 40
enum virNetDevVPortProfile {
VIR_NETDEV_VPORT_PROFILE_NONE,
VIR_NETDEV_VPORT_PROFILE_8021QBG,
VIR_NETDEV_VPORT_PROFILE_8021QBH,
VIR_NETDEV_VPORT_PROFILE_LAST,
};
VIR_ENUM_DECL(virNetDevVPort)
/* profile data for macvtap (VEPA) */
typedef struct _virNetDevVPortProfile virNetDevVPortProfile;
typedef virNetDevVPortProfile *virNetDevVPortProfilePtr;
struct _virNetDevVPortProfile {
enum virNetDevVPortProfile virtPortType;
union {
struct {
uint8_t managerID;
uint32_t typeID; /* 24 bit valid */
uint8_t typeIDVersion;
unsigned char instanceID[VIR_UUID_BUFLEN];
} virtPort8021Qbg;
struct {
char profileID[LIBVIRT_IFLA_VF_PORT_PROFILE_MAX];
} virtPort8021Qbh;
} u;
};
bool virNetDevVPortProfileEqual(virNetDevVPortProfilePtr a,
virNetDevVPortProfilePtr b);
#endif /* __VIR_NETDEV_VPORT_PROFILE_H__ */
/* /*
* network.h: network helper APIs for libvirt
*
* Copyright (C) 2009-2011 Red Hat, Inc. * Copyright (C) 2009-2011 Red Hat, Inc.
* *
* See COPYING.LIB for the License of this software * 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.
* *
* Daniel Veillard <veillard@redhat.com> * 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
*
* Authors:
* Daniel Veillard <veillard@redhat.com>
* Laine Stump <laine@laine.org>
* Daniel P. Berrange <berrange@redhat.com>
*/ */
#ifndef __VIR_NETWORK_H__ #ifndef __VIR_SOCKETADDR_H__
# define __VIR_NETWORK_H__ # define __VIR_SOCKETADDR_H__
# include "internal.h" # include "internal.h"
# include "buf.h"
# include "util.h"
# include <sys/types.h> # include <netinet/in.h>
# include <sys/socket.h> # include <sys/socket.h>
# ifdef HAVE_SYS_UN_H # ifdef HAVE_SYS_UN_H
# include <sys/un.h> # include <sys/un.h>
# endif # endif
# include <netdb.h>
# include <netinet/in.h>
# include <xml.h>
typedef struct { typedef struct {
union { union {
...@@ -48,20 +56,6 @@ typedef struct { ...@@ -48,20 +56,6 @@ typedef struct {
typedef virSocketAddr *virSocketAddrPtr; typedef virSocketAddr *virSocketAddrPtr;
typedef struct _virNetDevBandwidthRate virNetDevBandwidthRate;
typedef virNetDevBandwidthRate *virNetDevBandwidthRatePtr;
struct _virNetDevBandwidthRate {
unsigned long long average; /* kbytes/s */
unsigned long long peak; /* kbytes/s */
unsigned long long burst; /* kbytes */
};
typedef struct _virNetDevBandwidth virNetDevBandwidth;
typedef virNetDevBandwidth *virNetDevBandwidthPtr;
struct _virNetDevBandwidth {
virNetDevBandwidthRatePtr in, out;
};
int virSocketAddrParse(virSocketAddrPtr addr, int virSocketAddrParse(virSocketAddrPtr addr,
const char *val, const char *val,
int family); int family);
...@@ -107,67 +101,4 @@ int virSocketAddrPrefixToNetmask(unsigned int prefix, ...@@ -107,67 +101,4 @@ int virSocketAddrPrefixToNetmask(unsigned int prefix,
virSocketAddrPtr netmask, virSocketAddrPtr netmask,
int family); int family);
/* virtualPortProfile utilities */ #endif /* __VIR_SOCKETADDR_H__ */
# ifdef IFLA_VF_PORT_PROFILE_MAX
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX IFLA_VF_PORT_PROFILE_MAX
# else
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX 40
# endif
enum virNetDevVPortProfile {
VIR_NETDEV_VPORT_PROFILE_NONE,
VIR_NETDEV_VPORT_PROFILE_8021QBG,
VIR_NETDEV_VPORT_PROFILE_8021QBH,
VIR_NETDEV_VPORT_PROFILE_LAST,
};
VIR_ENUM_DECL(virNetDevVPort)
/* profile data for macvtap (VEPA) */
typedef struct _virNetDevVPortProfile virNetDevVPortProfile;
typedef virNetDevVPortProfile *virNetDevVPortProfilePtr;
struct _virNetDevVPortProfile {
enum virNetDevVPortProfile virtPortType;
union {
struct {
uint8_t managerID;
uint32_t typeID; /* 24 bit valid */
uint8_t typeIDVersion;
unsigned char instanceID[VIR_UUID_BUFLEN];
} virtPort8021Qbg;
struct {
char profileID[LIBVIRT_IFLA_VF_PORT_PROFILE_MAX];
} virtPort8021Qbh;
} u;
};
virNetDevVPortProfilePtr
virNetDevVPortProfileParse(xmlNodePtr node);
int
virNetDevVPortProfileFormat(virNetDevVPortProfilePtr virtPort,
virBufferPtr buf);
bool virNetDevVPortProfileEqual(virNetDevVPortProfilePtr a,
virNetDevVPortProfilePtr b);
virNetDevBandwidthPtr virNetDevBandwidthParse(xmlNodePtr node)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
void virNetDevBandwidthFree(virNetDevBandwidthPtr def);
int virNetDevBandwidthFormat(virNetDevBandwidthPtr def,
virBufferPtr buf)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int virNetDevBandwidthSet(const char *ifname, virNetDevBandwidthPtr bandwidth)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevBandwidthClear(const char *ifname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest, const virNetDevBandwidthPtr src)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
bool virNetDevBandwidthEqual(virNetDevBandwidthPtr a, virNetDevBandwidthPtr b);
#endif /* __VIR_NETWORK_H__ */
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "network.h" #include "virsocketaddr.h"
#include "testutils.h" #include "testutils.h"
#include "logging.h" #include "logging.h"
#include "memory.h" #include "memory.h"
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include "logging.h" #include "logging.h"
#include "virfile.h" #include "virfile.h"
#include "command.h" #include "command.h"
#include "network.h" #include "virsocketaddr.h"
#include "gnutls_1_0_compat.h" #include "gnutls_1_0_compat.h"
#if !defined WIN32 && HAVE_LIBTASN1_H && !defined GNUTLS_1_0_COMPAT #if !defined WIN32 && HAVE_LIBTASN1_H && !defined GNUTLS_1_0_COMPAT
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
#include "threads.h" #include "threads.h"
#include "command.h" #include "command.h"
#include "virkeycode.h" #include "virkeycode.h"
#include "network.h" #include "virnetdevbandwidth.h"
static char *progname; static char *progname;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册