diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 5f3132c4cd..79d3010f05 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -2533,6 +2533,7 @@ static char *networkGetXMLDesc(virNetworkPtr net, { struct network_driver *driver = net->conn->networkPrivateData; virNetworkObjPtr network; + virNetworkDefPtr def; char *ret = NULL; virCheckFlags(VIR_NETWORK_XML_INACTIVE, NULL); @@ -2547,7 +2548,12 @@ static char *networkGetXMLDesc(virNetworkPtr net, goto cleanup; } - ret = virNetworkDefFormat(network->def, flags); + if ((flags & VIR_NETWORK_XML_INACTIVE) && network->newDef) + def = network->newDef; + else + def = network->def; + + ret = virNetworkDefFormat(def, flags); cleanup: if (network) diff --git a/tools/virsh.c b/tools/virsh.c index 90ea43d827..98305c0d7e 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -15823,13 +15823,29 @@ static const vshCmdOptDef opts_network_edit[] = { {NULL, 0, 0, NULL} }; +static char *vshNetworkGetXMLDesc(virNetworkPtr network) +{ + unsigned int flags = VIR_NETWORK_XML_INACTIVE; + char *doc = virNetworkGetXMLDesc(network, flags); + + if (!doc && last_error->code == VIR_ERR_INVALID_ARG) { + /* The server side libvirt doesn't support + * VIR_NETWORK_XML_INACTIVE, so retry without it. + */ + virFreeError(last_error); + last_error = NULL; + flags &= ~VIR_NETWORK_XML_INACTIVE; + doc = virNetworkGetXMLDesc(network, flags); + } + return doc; +} + static bool cmdNetworkEdit(vshControl *ctl, const vshCmd *cmd) { bool ret = false; virNetworkPtr network = NULL; virNetworkPtr network_edited = NULL; - unsigned int flags = 0; if (!vshConnectionUsability(ctl, ctl->conn)) goto cleanup; @@ -15838,7 +15854,7 @@ cmdNetworkEdit(vshControl *ctl, const vshCmd *cmd) if (network == NULL) goto cleanup; -#define EDIT_GET_XML virNetworkGetXMLDesc(network, flags) +#define EDIT_GET_XML vshNetworkGetXMLDesc(network) #define EDIT_NOT_CHANGED \ vshPrint(ctl, _("Network %s XML configuration not changed.\n"), \ virNetworkGetName (network)); \ diff --git a/tools/virsh.pod b/tools/virsh.pod index 6553825d7b..6ca316e746 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1823,7 +1823,7 @@ Edit the XML configuration file for a network. This is equivalent to: - virsh net-dumpxml network > network.xml + virsh net-dumpxml --inactive network > network.xml vi network.xml (or make changes with your other text editor) virsh net-define network.xml