src/libxl/libxl_driver.c | 4 ++-- src/libxl/xen_common.c | 25 +++++++++++++++---------- src/libxl/xen_common.h | 1 - src/libxl/xen_xl.c | 4 ++-- src/libxl/xen_xl.h | 2 +- src/libxl/xen_xm.c | 5 ++--- src/libxl/xen_xm.h | 2 +- tests/xlconfigtest.c | 7 +------ tests/xmconfigtest.c | 7 +------ 9 files changed, 25 insertions(+), 32 deletions(-)
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>
---
src/libxl/libxl_driver.c | 4 ++--
src/libxl/xen_common.c | 25 +++++++++++++++----------
src/libxl/xen_common.h | 1 -
src/libxl/xen_xl.c | 4 ++--
src/libxl/xen_xl.h | 2 +-
src/libxl/xen_xm.c | 5 ++---
src/libxl/xen_xm.h | 2 +-
tests/xlconfigtest.c | 7 +------
tests/xmconfigtest.c | 7 +------
9 files changed, 25 insertions(+), 32 deletions(-)
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index e42a3dc0a9..4d5eb920bf 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -2709,10 +2709,10 @@ libxlConnectDomainXMLToNative(virConnectPtr conn, const char * nativeFormat,
goto cleanup;
if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XL)) {
- if (!(conf = xenFormatXL(def, conn)))
+ if (!(conf = xenFormatXL(def)))
goto cleanup;
} else if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XM)) {
- if (!(conf = xenFormatXM(conn, def)))
+ if (!(conf = xenFormatXM(def)))
goto cleanup;
} else {
diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
index 79eb593432..0b2346d8b5 100644
--- a/src/libxl/xen_common.c
+++ b/src/libxl/xen_common.c
@@ -24,6 +24,7 @@
#include <config.h>
+#include "driver.h"
#include "internal.h"
#include "virerror.h"
#include "virconf.h"
@@ -1586,8 +1587,7 @@ xenMakeIPList(virNetDevIPInfo *guestIP)
}
static int
-xenFormatNet(virConnectPtr conn,
- virConfValue *list,
+xenFormatNet(virConfValue *list,
virDomainNetDef *net,
int hvm,
const char *vif_typename)
@@ -1649,13 +1649,21 @@ xenFormatNet(virConnectPtr conn,
case VIR_DOMAIN_NET_TYPE_NETWORK:
{
- virNetworkPtr network = virNetworkLookupByName(conn, net->data.network.name);
+ virConnectPtr conn = NULL;
+ virNetworkPtr network;
char *bridge;
- if (!network) {
+
+ if (!(conn = virGetConnectNetwork()))
+ return -1;
+
+ if (!(network = virNetworkLookupByName(conn, net->data.network.name))) {
virReportError(VIR_ERR_NO_NETWORK, "%s",
net->data.network.name);
+ virObjectUnref(conn);
return -1;
}
+ virObjectUnref(conn);
+
bridge = virNetworkGetBridgeName(network);
virObjectUnref(network);
if (!bridge) {
@@ -2304,7 +2312,6 @@ xenFormatSound(virConf *conf, virDomainDef *def)
static int
xenFormatVif(virConf *conf,
- virConnectPtr conn,
virDomainDef *def,
const char *vif_typename)
{
@@ -2317,8 +2324,7 @@ xenFormatVif(virConf *conf,
netVal->list = NULL;
for (i = 0; i < def->nnets; i++) {
- if (xenFormatNet(conn, netVal, def->nets[i],
- hvm, vif_typename) < 0)
+ if (xenFormatNet(netVal, def->nets[i], hvm, vif_typename) < 0)
return -1;
}
@@ -2336,7 +2342,6 @@ xenFormatVif(virConf *conf,
int
xenFormatConfigCommon(virConf *conf,
virDomainDef *def,
- virConnectPtr conn,
const char *nativeFormat)
{
if (xenFormatGeneralMeta(conf, def) < 0)
@@ -2364,10 +2369,10 @@ xenFormatConfigCommon(virConf *conf,
return -1;
if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XL)) {
- if (xenFormatVif(conf, conn, def, "vif") < 0)
+ if (xenFormatVif(conf, def, "vif") < 0)
return -1;
} else if (STREQ(nativeFormat, XEN_CONFIG_FORMAT_XM)) {
- if (xenFormatVif(conf, conn, def, "netfront") < 0)
+ if (xenFormatVif(conf, def, "netfront") < 0)
return -1;
} else {
virReportError(VIR_ERR_INVALID_ARG,
diff --git a/src/libxl/xen_common.h b/src/libxl/xen_common.h
index b21046e959..95408fa896 100644
--- a/src/libxl/xen_common.h
+++ b/src/libxl/xen_common.h
@@ -61,7 +61,6 @@ int xenParseConfigCommon(virConf *conf,
int xenFormatConfigCommon(virConf *conf,
virDomainDef *def,
- virConnectPtr conn,
const char *nativeFormat);
char *xenMakeIPList(virNetDevIPInfo *guestIP);
diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c
index f175359307..53f6871efc 100644
--- a/src/libxl/xen_xl.c
+++ b/src/libxl/xen_xl.c
@@ -2041,14 +2041,14 @@ xenFormatXLDomainNamespaceData(virConf *conf, virDomainDef *def)
}
virConf *
-xenFormatXL(virDomainDef *def, virConnectPtr conn)
+xenFormatXL(virDomainDef *def)
{
g_autoptr(virConf) conf = NULL;
if (!(conf = virConfNew()))
return NULL;
- if (xenFormatConfigCommon(conf, def, conn, XEN_CONFIG_FORMAT_XL) < 0)
+ if (xenFormatConfigCommon(conf, def, XEN_CONFIG_FORMAT_XL) < 0)
return NULL;
if (xenFormatXLOS(conf, def) < 0)
diff --git a/src/libxl/xen_xl.h b/src/libxl/xen_xl.h
index f8b1ebfde9..028b359b76 100644
--- a/src/libxl/xen_xl.h
+++ b/src/libxl/xen_xl.h
@@ -29,6 +29,6 @@ virDomainDef *xenParseXL(virConf *conn,
virCaps *caps,
virDomainXMLOption *xmlopt);
-virConf *xenFormatXL(virDomainDef *def, virConnectPtr);
+virConf *xenFormatXL(virDomainDef *def);
const char *xenTranslateCPUFeature(const char *feature_name, bool from_libxl);
diff --git a/src/libxl/xen_xm.c b/src/libxl/xen_xm.c
index 5705a5ec0c..274b35153b 100644
--- a/src/libxl/xen_xm.c
+++ b/src/libxl/xen_xm.c
@@ -543,15 +543,14 @@ G_STATIC_ASSERT(MAX_VIRT_CPUS <= sizeof(1UL) * CHAR_BIT);
* Convert a virDomainDef object into an XM config record.
*/
virConf *
-xenFormatXM(virConnectPtr conn,
- virDomainDef *def)
+xenFormatXM(virDomainDef *def)
{
g_autoptr(virConf) conf = NULL;
if (!(conf = virConfNew()))
return NULL;
- if (xenFormatConfigCommon(conf, def, conn, XEN_CONFIG_FORMAT_XM) < 0)
+ if (xenFormatConfigCommon(conf, def, XEN_CONFIG_FORMAT_XM) < 0)
return NULL;
if (xenFormatXMOS(conf, def) < 0)
diff --git a/src/libxl/xen_xm.h b/src/libxl/xen_xm.h
index afb4f51ff7..db2ae52581 100644
--- a/src/libxl/xen_xm.h
+++ b/src/libxl/xen_xm.h
@@ -26,7 +26,7 @@
#include "virconf.h"
#include "domain_conf.h"
-virConf *xenFormatXM(virConnectPtr conn, virDomainDef *def);
+virConf *xenFormatXM(virDomainDef *def);
virDomainDef *xenParseXM(virConf *conf,
virCaps *caps, virDomainXMLOption *xmlopt);
diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c
index 962a1f2c4b..00b6a355eb 100644
--- a/tests/xlconfigtest.c
+++ b/tests/xlconfigtest.c
@@ -65,17 +65,12 @@ testCompareParseXML(const char *xlcfg, const char *xml, bool replaceVars)
{
g_autofree char *gotxlcfgData = NULL;
g_autoptr(virConf) conf = NULL;
- g_autoptr(virConnect) conn = NULL;
int wrote = 4096;
g_autoptr(virDomainDef) def = NULL;
g_autofree char *replacedXML = NULL;
gotxlcfgData = g_new0(char, wrote);
- conn = virGetConnect();
- if (!conn)
- return -1;
-
if (replaceVars) {
if (!(replacedXML = testReplaceVarsXML(xml)))
return -1;
@@ -93,7 +88,7 @@ testCompareParseXML(const char *xlcfg, const char *xml, bool replaceVars)
return -1;
}
- if (!(conf = xenFormatXL(def, conn)))
+ if (!(conf = xenFormatXL(def)))
return -1;
if (virConfWriteMem(gotxlcfgData, &wrote, conf) < 0)
diff --git a/tests/xmconfigtest.c b/tests/xmconfigtest.c
index dbf9f7a4c7..30ad49f8b1 100644
--- a/tests/xmconfigtest.c
+++ b/tests/xmconfigtest.c
@@ -39,16 +39,11 @@ testCompareParseXML(const char *xmcfg, const char *xml)
{
g_autofree char *gotxmcfgData = NULL;
g_autoptr(virConf) conf = NULL;
- g_autoptr(virConnect) conn = NULL;
int wrote = 4096;
g_autoptr(virDomainDef) def = NULL;
gotxmcfgData = g_new0(char, wrote);
- conn = virGetConnect();
- if (!conn)
- return -1;
-
if (!(def = virDomainDefParseFile(xml, driver->xmlopt, NULL,
VIR_DOMAIN_DEF_PARSE_INACTIVE)))
return -1;
@@ -58,7 +53,7 @@ testCompareParseXML(const char *xmcfg, const char *xml)
return -1;
}
- if (!(conf = xenFormatXM(conn, def)))
+ if (!(conf = xenFormatXM(def)))
return -1;
if (virConfWriteMem(gotxmcfgData, &wrote, conf) < 0)
--
2.44.0
_______________________________________________
Devel mailing list -- devel@lists.libvirt.org
To unsubscribe send an email to devel-leave@lists.libvirt.org
On a Monday in 2024, Jim Fehlig via Devel wrote:
>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>
>---
> src/libxl/libxl_driver.c | 4 ++--
> src/libxl/xen_common.c | 25 +++++++++++++++----------
> src/libxl/xen_common.h | 1 -
> src/libxl/xen_xl.c | 4 ++--
> src/libxl/xen_xl.h | 2 +-
> src/libxl/xen_xm.c | 5 ++---
> src/libxl/xen_xm.h | 2 +-
> tests/xlconfigtest.c | 7 +------
> tests/xmconfigtest.c | 7 +------
> 9 files changed, 25 insertions(+), 32 deletions(-)
>
>diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
>index 79eb593432..0b2346d8b5 100644
>--- a/src/libxl/xen_common.c
>+++ b/src/libxl/xen_common.c
>@@ -24,6 +24,7 @@
>
> #include <config.h>
>
>+#include "driver.h"
> #include "internal.h"
> #include "virerror.h"
> #include "virconf.h"
>@@ -1586,8 +1587,7 @@ xenMakeIPList(virNetDevIPInfo *guestIP)
> }
>
> static int
>-xenFormatNet(virConnectPtr conn,
>- virConfValue *list,
>+xenFormatNet(virConfValue *list,
> virDomainNetDef *net,
> int hvm,
> const char *vif_typename)
>@@ -1649,13 +1649,21 @@ xenFormatNet(virConnectPtr conn,
>
> case VIR_DOMAIN_NET_TYPE_NETWORK:
> {
>- virNetworkPtr network = virNetworkLookupByName(conn, net->data.network.name);
>+ virConnectPtr conn = NULL;
You can use:
g_autoptr(virConnect) conn = NULL;
to avoid adding the unref on both branches.
Regardless of that:
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Jano
>+ virNetworkPtr network;
> char *bridge;
>- if (!network) {
>+
>+ if (!(conn = virGetConnectNetwork()))
>+ return -1;
>+
>+ if (!(network = virNetworkLookupByName(conn, net->data.network.name))) {
> virReportError(VIR_ERR_NO_NETWORK, "%s",
> net->data.network.name);
>+ virObjectUnref(conn);
> return -1;
> }
>+ virObjectUnref(conn);
>+
> bridge = virNetworkGetBridgeName(network);
> virObjectUnref(network);
> if (!bridge) {
_______________________________________________
Devel mailing list -- devel@lists.libvirt.org
To unsubscribe send an email to devel-leave@lists.libvirt.org
On 5/2/24 5:24 AM, Ján Tomko wrote:
> On a Monday in 2024, Jim Fehlig via Devel wrote:
>> 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>
>> ---
>> src/libxl/libxl_driver.c | 4 ++--
>> src/libxl/xen_common.c | 25 +++++++++++++++----------
>> src/libxl/xen_common.h | 1 -
>> src/libxl/xen_xl.c | 4 ++--
>> src/libxl/xen_xl.h | 2 +-
>> src/libxl/xen_xm.c | 5 ++---
>> src/libxl/xen_xm.h | 2 +-
>> tests/xlconfigtest.c | 7 +------
>> tests/xmconfigtest.c | 7 +------
>> 9 files changed, 25 insertions(+), 32 deletions(-)
>>
>> diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
>> index 79eb593432..0b2346d8b5 100644
>> --- a/src/libxl/xen_common.c
>> +++ b/src/libxl/xen_common.c
>> @@ -24,6 +24,7 @@
>>
>> #include <config.h>
>>
>> +#include "driver.h"
>> #include "internal.h"
>> #include "virerror.h"
>> #include "virconf.h"
>> @@ -1586,8 +1587,7 @@ xenMakeIPList(virNetDevIPInfo *guestIP)
>> }
>>
>> static int
>> -xenFormatNet(virConnectPtr conn,
>> - virConfValue *list,
>> +xenFormatNet(virConfValue *list,
>> virDomainNetDef *net,
>> int hvm,
>> const char *vif_typename)
>> @@ -1649,13 +1649,21 @@ xenFormatNet(virConnectPtr conn,
>>
>> case VIR_DOMAIN_NET_TYPE_NETWORK:
>> {
>> - virNetworkPtr network = virNetworkLookupByName(conn,
>> net->data.network.name);
>> + virConnectPtr conn = NULL;
>
> You can use:
>
> g_autoptr(virConnect) conn = NULL;
>
> to avoid adding the unref on both branches.
Ah right, thanks for the reminder. I squashed in the below diff before pushing.
Regards,
Jim
diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
index 0b2346d8b5..3a64f565f7 100644
--- a/src/libxl/xen_common.c
+++ b/src/libxl/xen_common.c
@@ -24,6 +24,7 @@
#include <config.h>
+#include "datatypes.h"
#include "driver.h"
#include "internal.h"
#include "virerror.h"
@@ -1649,7 +1650,7 @@ xenFormatNet(virConfValue *list,
case VIR_DOMAIN_NET_TYPE_NETWORK:
{
- virConnectPtr conn = NULL;
+ g_autoptr(virConnect) conn = NULL;
virNetworkPtr network;
char *bridge;
@@ -1659,10 +1660,8 @@ xenFormatNet(virConfValue *list,
if (!(network = virNetworkLookupByName(conn, net->data.network.name))) {
virReportError(VIR_ERR_NO_NETWORK, "%s",
net->data.network.name);
- virObjectUnref(conn);
return -1;
}
- virObjectUnref(conn);
bridge = virNetworkGetBridgeName(network);
virObjectUnref(network);
_______________________________________________
Devel mailing list -- devel@lists.libvirt.org
To unsubscribe send an email to devel-leave@lists.libvirt.org
© 2016 - 2026 Red Hat, Inc.