libxl: Fix domxml-to-native conversion

Similar to commit 57d084febe, another case of the libxl driver not
adapting to modular daemons. When converting configuration that
contains a type='network' interface, the converter calls
virNetworkLookupByName, passing the hypervisor connection object
instead of a connection to virtnetworkd. E.g.

> cat dom.xml
...
    <interface type='network'>
      <source network='default'/>
    </interface>
...
> virsh net-info default
Name:           default
UUID:           25a5b089-1e71-4956-99aa-df2213bbb407
Active:         yes
Persistent:     no
Autostart:      no
Bridge:         virbr0
> virsh domxml-to-native xen-xl dom.xml
error: Network not found: default

Acquire a connection to virtnetworkd and use it when calling
virNetwork* APIs.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Jim Fehlig 2024-04-29 14:50:07 -06:00
parent fa54595178
commit 3146305fd3
9 changed files with 24 additions and 32 deletions

View File

@ -2709,10 +2709,10 @@ libxlConnectDomainXMLToNative(virConnectPtr conn, const char * nativeFormat,
goto cleanup; goto cleanup;
if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XL)) { if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XL)) {
if (!(conf = xenFormatXL(def, conn))) if (!(conf = xenFormatXL(def)))
goto cleanup; goto cleanup;
} else if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XM)) { } else if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XM)) {
if (!(conf = xenFormatXM(conn, def))) if (!(conf = xenFormatXM(def)))
goto cleanup; goto cleanup;
} else { } else {

View File

@ -24,6 +24,8 @@
#include <config.h> #include <config.h>
#include "datatypes.h"
#include "driver.h"
#include "internal.h" #include "internal.h"
#include "virerror.h" #include "virerror.h"
#include "virconf.h" #include "virconf.h"
@ -1586,8 +1588,7 @@ xenMakeIPList(virNetDevIPInfo *guestIP)
} }
static int static int
xenFormatNet(virConnectPtr conn, xenFormatNet(virConfValue *list,
virConfValue *list,
virDomainNetDef *net, virDomainNetDef *net,
int hvm, int hvm,
const char *vif_typename) const char *vif_typename)
@ -1649,13 +1650,19 @@ xenFormatNet(virConnectPtr conn,
case VIR_DOMAIN_NET_TYPE_NETWORK: case VIR_DOMAIN_NET_TYPE_NETWORK:
{ {
virNetworkPtr network = virNetworkLookupByName(conn, net->data.network.name); g_autoptr(virConnect) conn = NULL;
virNetworkPtr network;
char *bridge; char *bridge;
if (!network) {
if (!(conn = virGetConnectNetwork()))
return -1;
if (!(network = virNetworkLookupByName(conn, net->data.network.name))) {
virReportError(VIR_ERR_NO_NETWORK, "%s", virReportError(VIR_ERR_NO_NETWORK, "%s",
net->data.network.name); net->data.network.name);
return -1; return -1;
} }
bridge = virNetworkGetBridgeName(network); bridge = virNetworkGetBridgeName(network);
virObjectUnref(network); virObjectUnref(network);
if (!bridge) { if (!bridge) {
@ -2304,7 +2311,6 @@ xenFormatSound(virConf *conf, virDomainDef *def)
static int static int
xenFormatVif(virConf *conf, xenFormatVif(virConf *conf,
virConnectPtr conn,
virDomainDef *def, virDomainDef *def,
const char *vif_typename) const char *vif_typename)
{ {
@ -2317,8 +2323,7 @@ xenFormatVif(virConf *conf,
netVal->list = NULL; netVal->list = NULL;
for (i = 0; i < def->nnets; i++) { for (i = 0; i < def->nnets; i++) {
if (xenFormatNet(conn, netVal, def->nets[i], if (xenFormatNet(netVal, def->nets[i], hvm, vif_typename) < 0)
hvm, vif_typename) < 0)
return -1; return -1;
} }
@ -2336,7 +2341,6 @@ xenFormatVif(virConf *conf,
int int
xenFormatConfigCommon(virConf *conf, xenFormatConfigCommon(virConf *conf,
virDomainDef *def, virDomainDef *def,
virConnectPtr conn,
const char *nativeFormat) const char *nativeFormat)
{ {
if (xenFormatGeneralMeta(conf, def) < 0) if (xenFormatGeneralMeta(conf, def) < 0)
@ -2364,10 +2368,10 @@ xenFormatConfigCommon(virConf *conf,
return -1; return -1;
if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XL)) { if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XL)) {
if (xenFormatVif(conf, conn, def, "vif") < 0) if (xenFormatVif(conf, def, "vif") < 0)
return -1; return -1;
} else if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XM)) { } else if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XM)) {
if (xenFormatVif(conf, conn, def, "netfront") < 0) if (xenFormatVif(conf, def, "netfront") < 0)
return -1; return -1;
} else { } else {
virReportError(VIR_ERR_INVALID_ARG, virReportError(VIR_ERR_INVALID_ARG,

View File

@ -61,7 +61,6 @@ int xenParseConfigCommon(virConf *conf,
int xenFormatConfigCommon(virConf *conf, int xenFormatConfigCommon(virConf *conf,
virDomainDef *def, virDomainDef *def,
virConnectPtr conn,
const char *nativeFormat); const char *nativeFormat);
char *xenMakeIPList(virNetDevIPInfo *guestIP); char *xenMakeIPList(virNetDevIPInfo *guestIP);

View File

@ -2041,14 +2041,14 @@ xenFormatXLDomainNamespaceData(virConf *conf, virDomainDef *def)
} }
virConf * virConf *
xenFormatXL(virDomainDef *def, virConnectPtr conn) xenFormatXL(virDomainDef *def)
{ {
g_autoptr(virConf) conf = NULL; g_autoptr(virConf) conf = NULL;
if (!(conf = virConfNew())) if (!(conf = virConfNew()))
return NULL; return NULL;
if (xenFormatConfigCommon(conf, def, conn, XEN_CONFIG_FORMAT_XL) < 0) if (xenFormatConfigCommon(conf, def, XEN_CONFIG_FORMAT_XL) < 0)
return NULL; return NULL;
if (xenFormatXLOS(conf, def) < 0) if (xenFormatXLOS(conf, def) < 0)

View File

@ -29,6 +29,6 @@ virDomainDef *xenParseXL(virConf *conn,
virCaps *caps, virCaps *caps,
virDomainXMLOption *xmlopt); virDomainXMLOption *xmlopt);
virConf *xenFormatXL(virDomainDef *def, virConnectPtr); virConf *xenFormatXL(virDomainDef *def);
const char *xenTranslateCPUFeature(const char *feature_name, bool from_libxl); const char *xenTranslateCPUFeature(const char *feature_name, bool from_libxl);

View File

@ -543,15 +543,14 @@ G_STATIC_ASSERT(MAX_VIRT_CPUS <= sizeof(1UL) * CHAR_BIT);
* Convert a virDomainDef object into an XM config record. * Convert a virDomainDef object into an XM config record.
*/ */
virConf * virConf *
xenFormatXM(virConnectPtr conn, xenFormatXM(virDomainDef *def)
virDomainDef *def)
{ {
g_autoptr(virConf) conf = NULL; g_autoptr(virConf) conf = NULL;
if (!(conf = virConfNew())) if (!(conf = virConfNew()))
return NULL; return NULL;
if (xenFormatConfigCommon(conf, def, conn, XEN_CONFIG_FORMAT_XM) < 0) if (xenFormatConfigCommon(conf, def, XEN_CONFIG_FORMAT_XM) < 0)
return NULL; return NULL;
if (xenFormatXMOS(conf, def) < 0) if (xenFormatXMOS(conf, def) < 0)

View File

@ -26,7 +26,7 @@
#include "virconf.h" #include "virconf.h"
#include "domain_conf.h" #include "domain_conf.h"
virConf *xenFormatXM(virConnectPtr conn, virDomainDef *def); virConf *xenFormatXM(virDomainDef *def);
virDomainDef *xenParseXM(virConf *conf, virDomainDef *xenParseXM(virConf *conf,
virCaps *caps, virDomainXMLOption *xmlopt); virCaps *caps, virDomainXMLOption *xmlopt);

View File

@ -65,17 +65,12 @@ testCompareParseXML(const char *xlcfg, const char *xml, bool replaceVars)
{ {
g_autofree char *gotxlcfgData = NULL; g_autofree char *gotxlcfgData = NULL;
g_autoptr(virConf) conf = NULL; g_autoptr(virConf) conf = NULL;
g_autoptr(virConnect) conn = NULL;
int wrote = 4096; int wrote = 4096;
g_autoptr(virDomainDef) def = NULL; g_autoptr(virDomainDef) def = NULL;
g_autofree char *replacedXML = NULL; g_autofree char *replacedXML = NULL;
gotxlcfgData = g_new0(char, wrote); gotxlcfgData = g_new0(char, wrote);
conn = virGetConnect();
if (!conn)
return -1;
if (replaceVars) { if (replaceVars) {
if (!(replacedXML = testReplaceVarsXML(xml))) if (!(replacedXML = testReplaceVarsXML(xml)))
return -1; return -1;
@ -93,7 +88,7 @@ testCompareParseXML(const char *xlcfg, const char *xml, bool replaceVars)
return -1; return -1;
} }
if (!(conf = xenFormatXL(def, conn))) if (!(conf = xenFormatXL(def)))
return -1; return -1;
if (virConfWriteMem(gotxlcfgData, &wrote, conf) < 0) if (virConfWriteMem(gotxlcfgData, &wrote, conf) < 0)

View File

@ -39,16 +39,11 @@ testCompareParseXML(const char *xmcfg, const char *xml)
{ {
g_autofree char *gotxmcfgData = NULL; g_autofree char *gotxmcfgData = NULL;
g_autoptr(virConf) conf = NULL; g_autoptr(virConf) conf = NULL;
g_autoptr(virConnect) conn = NULL;
int wrote = 4096; int wrote = 4096;
g_autoptr(virDomainDef) def = NULL; g_autoptr(virDomainDef) def = NULL;
gotxmcfgData = g_new0(char, wrote); gotxmcfgData = g_new0(char, wrote);
conn = virGetConnect();
if (!conn)
return -1;
if (!(def = virDomainDefParseFile(xml, driver->xmlopt, NULL, if (!(def = virDomainDefParseFile(xml, driver->xmlopt, NULL,
VIR_DOMAIN_DEF_PARSE_INACTIVE))) VIR_DOMAIN_DEF_PARSE_INACTIVE)))
return -1; return -1;
@ -58,7 +53,7 @@ testCompareParseXML(const char *xmcfg, const char *xml)
return -1; return -1;
} }
if (!(conf = xenFormatXM(conn, def))) if (!(conf = xenFormatXM(def)))
return -1; return -1;
if (virConfWriteMem(gotxmcfgData, &wrote, conf) < 0) if (virConfWriteMem(gotxmcfgData, &wrote, conf) < 0)