mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Added new option to virsh net-dumpxml called --inactive
The above option helps to differentiate between implicit and explicit interface pools.
This commit is contained in:
parent
42c81d18c2
commit
52d064f42d
@ -1882,6 +1882,10 @@ int virNodeGetCellsFreeMemory(virConnectPtr conn,
|
|||||||
* Virtual Networks API
|
* Virtual Networks API
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
VIR_NETWORK_XML_INACTIVE = (1 << 0), /* dump inactive network information */
|
||||||
|
} virNetworkXMLFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virNetwork:
|
* virNetwork:
|
||||||
*
|
*
|
||||||
|
@ -1448,7 +1448,7 @@ virPortGroupDefFormat(virBufferPtr buf,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *virNetworkDefFormat(const virNetworkDefPtr def)
|
char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags)
|
||||||
{
|
{
|
||||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
unsigned char *uuid;
|
unsigned char *uuid;
|
||||||
@ -1484,7 +1484,8 @@ char *virNetworkDefFormat(const virNetworkDefPtr def)
|
|||||||
virBufferEscapeString(&buf, " <pf dev='%s'/>\n",
|
virBufferEscapeString(&buf, " <pf dev='%s'/>\n",
|
||||||
def->forwardPfs[0].dev);
|
def->forwardPfs[0].dev);
|
||||||
|
|
||||||
if (def->nForwardIfs) {
|
if (def->nForwardIfs &&
|
||||||
|
(!def->nForwardPfs || !(flags & VIR_NETWORK_XML_INACTIVE))) {
|
||||||
for (ii = 0; ii < def->nForwardIfs; ii++) {
|
for (ii = 0; ii < def->nForwardIfs; ii++) {
|
||||||
virBufferEscapeString(&buf, " <interface dev='%s'/>\n",
|
virBufferEscapeString(&buf, " <interface dev='%s'/>\n",
|
||||||
def->forwardIfs[ii].dev);
|
def->forwardIfs[ii].dev);
|
||||||
@ -1601,7 +1602,7 @@ int virNetworkSaveConfig(const char *configDir,
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
char *xml;
|
char *xml;
|
||||||
|
|
||||||
if (!(xml = virNetworkDefFormat(def)))
|
if (!(xml = virNetworkDefFormat(def, 0)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virNetworkSaveXML(configDir, def, xml))
|
if (virNetworkSaveXML(configDir, def, xml))
|
||||||
|
@ -227,7 +227,7 @@ virNetworkDefPtr virNetworkDefParseFile(const char *filename);
|
|||||||
virNetworkDefPtr virNetworkDefParseNode(xmlDocPtr xml,
|
virNetworkDefPtr virNetworkDefParseNode(xmlDocPtr xml,
|
||||||
xmlNodePtr root);
|
xmlNodePtr root);
|
||||||
|
|
||||||
char *virNetworkDefFormat(const virNetworkDefPtr def);
|
char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags);
|
||||||
|
|
||||||
static inline const char *
|
static inline const char *
|
||||||
virNetworkDefForwardIf(const virNetworkDefPtr def, size_t n)
|
virNetworkDefForwardIf(const virNetworkDefPtr def, size_t n)
|
||||||
|
@ -9835,11 +9835,16 @@ error:
|
|||||||
/**
|
/**
|
||||||
* virNetworkGetXMLDesc:
|
* virNetworkGetXMLDesc:
|
||||||
* @network: a network object
|
* @network: a network object
|
||||||
* @flags: extra flags; not used yet, so callers should always pass 0
|
* @flags: bitwise-OR of virNetworkXMLFlags
|
||||||
*
|
*
|
||||||
* Provide an XML description of the network. The description may be reused
|
* Provide an XML description of the network. The description may be reused
|
||||||
* later to relaunch the network with virNetworkCreateXML().
|
* later to relaunch the network with virNetworkCreateXML().
|
||||||
*
|
*
|
||||||
|
* Normally, if a network included a physical function, the output includes
|
||||||
|
* all virtual functions tied to that physical interface. If @flags includes
|
||||||
|
* VIR_NETWORK_XML_INACTIVE, then the expansion of virtual interfaces is
|
||||||
|
* not performed.
|
||||||
|
*
|
||||||
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
|
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
|
||||||
* the caller must free() the returned value.
|
* the caller must free() the returned value.
|
||||||
*/
|
*/
|
||||||
|
@ -2533,7 +2533,7 @@ static char *networkGetXMLDesc(virNetworkPtr net,
|
|||||||
virNetworkObjPtr network;
|
virNetworkObjPtr network;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
virCheckFlags(0, NULL);
|
virCheckFlags(VIR_NETWORK_XML_INACTIVE, NULL);
|
||||||
|
|
||||||
networkDriverLock(driver);
|
networkDriverLock(driver);
|
||||||
network = virNetworkFindByUUID(&driver->networks, net->uuid);
|
network = virNetworkFindByUUID(&driver->networks, net->uuid);
|
||||||
@ -2545,7 +2545,7 @@ static char *networkGetXMLDesc(virNetworkPtr net,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virNetworkDefFormat(network->def);
|
ret = virNetworkDefFormat(network->def, flags);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (network)
|
if (network)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* test.c: A "mock" hypervisor for use by application unit tests
|
* test.c: A "mock" hypervisor for use by application unit tests
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2011 Red Hat, Inc.
|
* Copyright (C) 2006-2012 Red Hat, Inc.
|
||||||
* Copyright (C) 2006 Daniel P. Berrange
|
* Copyright (C) 2006 Daniel P. Berrange
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
@ -3233,7 +3233,7 @@ static char *testNetworkGetXMLDesc(virNetworkPtr network,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virNetworkDefFormat(privnet->def);
|
ret = virNetworkDefFormat(privnet->def, flags);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (privnet)
|
if (privnet)
|
||||||
|
@ -8098,7 +8098,7 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr network,
|
|||||||
VBOX_UTF16_FREE(networkInterfaceNameUtf16);
|
VBOX_UTF16_FREE(networkInterfaceNameUtf16);
|
||||||
VBOX_RELEASE(host);
|
VBOX_RELEASE(host);
|
||||||
|
|
||||||
ret = virNetworkDefFormat(def);
|
ret = virNetworkDefFormat(def, 0);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virNetworkDefFree(def);
|
virNetworkDefFree(def);
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
#include "testutilsqemu.h"
|
#include "testutilsqemu.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
testCompareXMLToXMLFiles(const char *inxml, const char *outxml)
|
testCompareXMLToXMLFiles(const char *inxml, const char *outxml,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
char *inXmlData = NULL;
|
char *inXmlData = NULL;
|
||||||
char *outXmlData = NULL;
|
char *outXmlData = NULL;
|
||||||
@ -30,7 +31,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *outxml)
|
|||||||
if (!(dev = virNetworkDefParseString(inXmlData)))
|
if (!(dev = virNetworkDefParseString(inXmlData)))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (!(actual = virNetworkDefFormat(dev)))
|
if (!(actual = virNetworkDefFormat(dev, flags)))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (STRNEQ(outXmlData, actual)) {
|
if (STRNEQ(outXmlData, actual)) {
|
||||||
@ -48,21 +49,27 @@ testCompareXMLToXMLFiles(const char *inxml, const char *outxml)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct testInfo {
|
||||||
|
const char *name;
|
||||||
|
unsigned int flags;
|
||||||
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
testCompareXMLToXMLHelper(const void *data)
|
testCompareXMLToXMLHelper(const void *data)
|
||||||
{
|
{
|
||||||
|
const struct testInfo *info = data;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
char *inxml = NULL;
|
char *inxml = NULL;
|
||||||
char *outxml = NULL;
|
char *outxml = NULL;
|
||||||
|
|
||||||
if (virAsprintf(&inxml, "%s/networkxml2xmlin/%s.xml",
|
if (virAsprintf(&inxml, "%s/networkxml2xmlin/%s.xml",
|
||||||
abs_srcdir, (const char*)data) < 0 ||
|
abs_srcdir, info->name) < 0 ||
|
||||||
virAsprintf(&outxml, "%s/networkxml2xmlout/%s.xml",
|
virAsprintf(&outxml, "%s/networkxml2xmlout/%s.xml",
|
||||||
abs_srcdir, (const char*)data) < 0) {
|
abs_srcdir, info->name) < 0) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = testCompareXMLToXMLFiles(inxml, outxml);
|
result = testCompareXMLToXMLFiles(inxml, outxml, info->flags);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
free(inxml);
|
free(inxml);
|
||||||
@ -76,10 +83,14 @@ mymain(void)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
#define DO_TEST(name) \
|
#define DO_TEST_FULL(name, flags) \
|
||||||
if (virtTestRun("Network XML-2-XML " name, \
|
do { \
|
||||||
1, testCompareXMLToXMLHelper, (name)) < 0) \
|
const struct testInfo info = {name, flags}; \
|
||||||
ret = -1
|
if (virtTestRun("Network XML-2-XML " name, \
|
||||||
|
1, testCompareXMLToXMLHelper, &info) < 0) \
|
||||||
|
ret = -1; \
|
||||||
|
} while (0)
|
||||||
|
#define DO_TEST(name) DO_TEST_FULL(name, 0)
|
||||||
|
|
||||||
DO_TEST("isolated-network");
|
DO_TEST("isolated-network");
|
||||||
DO_TEST("routed-network");
|
DO_TEST("routed-network");
|
||||||
@ -93,6 +104,7 @@ mymain(void)
|
|||||||
DO_TEST("host-bridge-net");
|
DO_TEST("host-bridge-net");
|
||||||
DO_TEST("vepa-net");
|
DO_TEST("vepa-net");
|
||||||
DO_TEST("bandwidth-network");
|
DO_TEST("bandwidth-network");
|
||||||
|
DO_TEST_FULL("passthrough-pf", VIR_NETWORK_XML_INACTIVE);
|
||||||
|
|
||||||
return (ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
return (ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -7286,6 +7286,7 @@ static const vshCmdInfo info_network_dumpxml[] = {
|
|||||||
|
|
||||||
static const vshCmdOptDef opts_network_dumpxml[] = {
|
static const vshCmdOptDef opts_network_dumpxml[] = {
|
||||||
{"network", VSH_OT_DATA, VSH_OFLAG_REQ, N_("network name or uuid")},
|
{"network", VSH_OT_DATA, VSH_OFLAG_REQ, N_("network name or uuid")},
|
||||||
|
{"inactive", VSH_OT_BOOL, VSH_OFLAG_NONE, N_("network information of an inactive domain")},
|
||||||
{NULL, 0, 0, NULL}
|
{NULL, 0, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -7295,6 +7296,8 @@ cmdNetworkDumpXML(vshControl *ctl, const vshCmd *cmd)
|
|||||||
virNetworkPtr network;
|
virNetworkPtr network;
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
char *dump;
|
char *dump;
|
||||||
|
unsigned int flags = 0;
|
||||||
|
int inactive;
|
||||||
|
|
||||||
if (!vshConnectionUsability(ctl, ctl->conn))
|
if (!vshConnectionUsability(ctl, ctl->conn))
|
||||||
return false;
|
return false;
|
||||||
@ -7302,7 +7305,12 @@ cmdNetworkDumpXML(vshControl *ctl, const vshCmd *cmd)
|
|||||||
if (!(network = vshCommandOptNetwork(ctl, cmd, NULL)))
|
if (!(network = vshCommandOptNetwork(ctl, cmd, NULL)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
dump = virNetworkGetXMLDesc(network, 0);
|
inactive = vshCommandOptBool (cmd, "inactive");
|
||||||
|
if (inactive)
|
||||||
|
flags |= VIR_NETWORK_XML_INACTIVE;
|
||||||
|
|
||||||
|
dump = virNetworkGetXMLDesc(network, flags);
|
||||||
|
|
||||||
if (dump != NULL) {
|
if (dump != NULL) {
|
||||||
vshPrint(ctl, "%s", dump);
|
vshPrint(ctl, "%s", dump);
|
||||||
VIR_FREE(dump);
|
VIR_FREE(dump);
|
||||||
|
@ -1523,9 +1523,11 @@ not instantiated.
|
|||||||
Destroy (stop) a given virtual network specified by its name or UUID. This
|
Destroy (stop) a given virtual network specified by its name or UUID. This
|
||||||
takes effect immediately.
|
takes effect immediately.
|
||||||
|
|
||||||
=item B<net-dumpxml> I<network>
|
=item B<net-dumpxml> I<network> [I<--inactive>]
|
||||||
|
|
||||||
Output the virtual network information as an XML dump to stdout.
|
Output the virtual network information as an XML dump to stdout.
|
||||||
|
If I<--inactive> is specified, then physical functions are not
|
||||||
|
expanded into their associated virtual functions.
|
||||||
|
|
||||||
=item B<net-edit> I<network>
|
=item B<net-edit> I<network>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user