diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e11ad987a6..072c970e7d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -8855,6 +8855,9 @@ virDomainNetDefFormat(virBufferPtr buf, virBufferAddLit(buf, " \n"); } + if (virBandwidthDefFormat(buf, def->bandwidth, " ") < 0) + return -1; + if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0) return -1; diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 01c094cba2..1ef80dc01d 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -1329,6 +1329,9 @@ char *virNetworkDefFormat(const virNetworkDefPtr def) if (virNetworkDNSDefFormat(&buf, def->dns) < 0) goto error; + if (virBandwidthDefFormat(&buf, def->bandwidth, " ") < 0) + goto error; + for (ii = 0; ii < def->nips; ii++) { if (virNetworkIpDefFormat(&buf, &def->ips[ii]) < 0) goto error; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 5d7faa0877..2efe9412c5 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -710,6 +710,7 @@ nlComm; # network.h +virBandwidthDefFormat; virBandwidthDefFree; virBandwidthDefParseNode; virSocketAddrBroadcast; diff --git a/src/util/network.c b/src/util/network.c index 2ba6f768fb..5639219816 100644 --- a/src/util/network.c +++ b/src/util/network.c @@ -1030,3 +1030,75 @@ virBandwidthDefFree(virBandwidthPtr def) VIR_FREE(def->out); VIR_FREE(def); } + +static int +virBandwidthChildDefFormat(virBufferPtr buf, + virRatePtr def, + const char *elem_name) +{ + if (!buf || !def || !elem_name) + return -1; + + 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; +} + +/** + * virBandwidthDefFormat: + * @buf: Buffer to print to + * @def: Data source + * @indent: prepend all lines printed with this + * + * Formats bandwidth and prepend each line with @indent. + * Passing NULL to @indent is equivalent passing "". + * + * Returns 0 on success, else -1. + */ +int +virBandwidthDefFormat(virBufferPtr buf, + virBandwidthPtr def, + const char *indent) +{ + int ret = -1; + + if (!buf) + goto cleanup; + + if (!def) { + ret = 0; + goto cleanup; + } + + if (!indent) + indent = ""; + + virBufferAsprintf(buf, "%s\n", indent); + if (def->in) { + virBufferAsprintf(buf, "%s ", indent); + if (virBandwidthChildDefFormat(buf, def->in, "inbound") < 0) + goto cleanup; + } + + if (def->out) { + virBufferAsprintf(buf, "%s ", indent); + if (virBandwidthChildDefFormat(buf, def->out, "outbound") < 0) + goto cleanup; + } + + virBufferAsprintf(buf, "%s\n", indent); + + ret = 0; + +cleanup: + return ret; +} diff --git a/src/util/network.h b/src/util/network.h index 4d35388c61..d0181fddfa 100644 --- a/src/util/network.h +++ b/src/util/network.h @@ -152,4 +152,7 @@ virVirtualPortProfileFormat(virBufferPtr buf, virBandwidthPtr virBandwidthDefParseNode(xmlNodePtr node); void virBandwidthDefFree(virBandwidthPtr def); +int virBandwidthDefFormat(virBufferPtr buf, + virBandwidthPtr def, + const char *indent); #endif /* __VIR_NETWORK_H__ */