Add virNetwork support to virError in order that the network
on which the error occurred can be reported.
Note, the issue here is that virError is a public structure
and we're arguably breaking ABI if we enlarge it. However,
it's unlikely anyone would define a virError structure
themself.
Signed-off-by: Mark McLoughlin <markmc(a)redhat.com>
Index: libvirt/include/libvirt/virterror.h
===================================================================
--- libvirt.orig/include/libvirt/virterror.h
+++ libvirt/include/libvirt/virterror.h
@@ -72,6 +72,7 @@ struct _virError {
char *str3; /* extra string information */
int int1; /* extra number information */
int int2; /* extra number information */
+ virNetworkPtr net; /* the network if available */
};
/**
Index: libvirt/src/conf.c
===================================================================
--- libvirt.orig/src/conf.c
+++ libvirt/src/conf.c
@@ -95,7 +95,7 @@ virConfError(virConfPtr conf ATTRIBUTE_U
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
+ __virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
errmsg, info, NULL, line, 0, errmsg, info, line);
}
Index: libvirt/src/hash.c
===================================================================
--- libvirt.orig/src/hash.c
+++ libvirt/src/hash.c
@@ -617,7 +617,7 @@ virHashError(virConnectPtr conn, virErro
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
Index: libvirt/src/internal.h
===================================================================
--- libvirt.orig/src/internal.h
+++ libvirt/src/internal.h
@@ -200,6 +200,7 @@ char *virDomainGetVMInfo(virDomainPtr do
************************************************************************/
void __virRaiseError(virConnectPtr conn,
virDomainPtr dom,
+ virNetworkPtr net,
int domain,
int code,
virErrorLevel level,
Index: libvirt/src/libvirt.c
===================================================================
--- libvirt.orig/src/libvirt.c
+++ libvirt/src/libvirt.c
@@ -107,7 +107,7 @@ virLibConnError(virConnectPtr conn, virE
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
@@ -133,7 +133,7 @@ virLibDomainError(virDomainPtr domain, v
if (error != VIR_ERR_INVALID_DOMAIN) {
conn = domain->conn;
}
- __virRaiseError(conn, domain, VIR_FROM_DOM, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, domain, NULL, VIR_FROM_DOM, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
@@ -159,8 +159,7 @@ virLibNetworkError(virNetworkPtr network
if (error != VIR_ERR_INVALID_NETWORK) {
conn = network->conn;
}
- /* XXX: should be able to pass network pointer here */
- __virRaiseError(conn, NULL, VIR_FROM_NET, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, network, VIR_FROM_NET, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
Index: libvirt/src/proxy_internal.c
===================================================================
--- libvirt.orig/src/proxy_internal.c
+++ libvirt/src/proxy_internal.c
@@ -116,7 +116,7 @@ virProxyError(virConnectPtr conn, virErr
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, VIR_FROM_PROXY, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_PROXY, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
Index: libvirt/src/qemu_internal.c
===================================================================
--- libvirt.orig/src/qemu_internal.c
+++ libvirt/src/qemu_internal.c
@@ -140,7 +140,7 @@ qemuError(virConnectPtr con,
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(con, dom, VIR_FROM_QEMU, error, VIR_ERR_ERROR,
+ __virRaiseError(con, dom, NULL, VIR_FROM_QEMU, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info, 0);
}
Index: libvirt/src/sexpr.c
===================================================================
--- libvirt.orig/src/sexpr.c
+++ libvirt/src/sexpr.c
@@ -38,7 +38,7 @@ virSexprError(virErrorNumber error, cons
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, VIR_FROM_SEXPR, error, VIR_ERR_ERROR,
+ __virRaiseError(NULL, NULL, NULL, VIR_FROM_SEXPR, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
Index: libvirt/src/test.c
===================================================================
--- libvirt.orig/src/test.c
+++ libvirt/src/test.c
@@ -198,7 +198,7 @@ testError(virConnectPtr con,
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(con, dom, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+ __virRaiseError(con, dom, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info, 0);
}
Index: libvirt/src/virterror.c
===================================================================
--- libvirt.orig/src/virterror.c
+++ libvirt/src/virterror.c
@@ -17,7 +17,7 @@
#include "internal.h"
static virError lastErr = /* the last error */
-{ 0, 0, NULL, VIR_ERR_NONE, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+{ 0, 0, NULL, VIR_ERR_NONE, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL };
static virErrorFunc virErrorHandler = NULL; /* global error handlet */
static void *virUserData = NULL; /* associated data */
@@ -230,7 +230,7 @@ virConnSetErrorFunc(virConnectPtr conn,
void
virDefaultErrorFunc(virErrorPtr err)
{
- const char *lvl = "", *dom = "", *domain = "";
+ const char *lvl = "", *dom = "", *domain = "", *network
= "";
int len;
if ((err == NULL) || (err->code == VIR_ERR_OK))
@@ -277,24 +277,27 @@ virDefaultErrorFunc(virErrorPtr err)
}
if ((err->dom != NULL) && (err->code != VIR_ERR_INVALID_DOMAIN)) {
domain = err->dom->name;
+ } else if ((err->net != NULL) && (err->code !=
VIR_ERR_INVALID_NETWORK)) {
+ network = err->net->name;
}
len = strlen(err->message);
if ((err->domain == VIR_FROM_XML) && (err->code == VIR_ERR_XML_DETAIL)
&&
(err->int1 != 0))
- fprintf(stderr, "libvir: %s%s %s: line %d: %s",
- dom, lvl, domain, err->int1, err->message);
+ fprintf(stderr, "libvir: %s%s %s%s: line %d: %s",
+ dom, lvl, domain, network, err->int1, err->message);
else if ((len == 0) || (err->message[len - 1] != '\n'))
- fprintf(stderr, "libvir: %s%s %s: %s\n",
- dom, lvl, domain, err->message);
+ fprintf(stderr, "libvir: %s%s %s%s: %s\n",
+ dom, lvl, domain, network, err->message);
else
- fprintf(stderr, "libvir: %s%s %s: %s",
- dom, lvl, domain, err->message);
+ fprintf(stderr, "libvir: %s%s %s%s: %s",
+ dom, lvl, domain, network, err->message);
}
/**
* __virRaiseError:
* @conn: the connection to the hypervisor if available
* @dom: the domain if available
+ * @net: the network if available
* @domain: the virErrorDomain indicating where it's coming from
* @code: the virErrorNumber code for the error
* @level: the virErrorLevel for the error
@@ -310,7 +313,7 @@ virDefaultErrorFunc(virErrorPtr err)
* immediately if a callback is found and store it for later handling.
*/
void
-__virRaiseError(virConnectPtr conn, virDomainPtr dom,
+__virRaiseError(virConnectPtr conn, virDomainPtr dom, virNetworkPtr net,
int domain, int code, virErrorLevel level,
const char *str1, const char *str2, const char *str3,
int int1, int int2, const char *msg, ...)
@@ -349,6 +352,7 @@ __virRaiseError(virConnectPtr conn, virD
virResetError(to);
to->conn = conn;
to->dom = dom;
+ to->net = net;
to->domain = domain;
to->code = code;
to->message = str;
Index: libvirt/src/xen_internal.c
===================================================================
--- libvirt.orig/src/xen_internal.c
+++ libvirt/src/xen_internal.c
@@ -476,7 +476,7 @@ virXenError(virErrorNumber error, const
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+ __virRaiseError(NULL, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info, value);
}
Index: libvirt/src/xend_internal.c
===================================================================
--- libvirt.orig/src/xend_internal.c
+++ libvirt/src/xend_internal.c
@@ -153,7 +153,7 @@ virXendError(virConnectPtr conn, virErro
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
@@ -174,7 +174,7 @@ virXendErrorInt(virConnectPtr conn, virE
return;
errmsg = __virErrorMsg(error, NULL);
- __virRaiseError(conn, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
errmsg, NULL, NULL, val, 0, errmsg, val);
}
Index: libvirt/src/xm_internal.c
===================================================================
--- libvirt.orig/src/xm_internal.c
+++ libvirt/src/xm_internal.c
@@ -116,7 +116,7 @@ xenXMError(virConnectPtr conn, virErrorN
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
Index: libvirt/src/xml.c
===================================================================
--- libvirt.orig/src/xml.c
+++ libvirt/src/xml.c
@@ -34,7 +34,7 @@ virXMLError(virErrorNumber error, const
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, VIR_FROM_XML, error, VIR_ERR_ERROR,
+ __virRaiseError(NULL, NULL, NULL, VIR_FROM_XML, error, VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info, value);
}
Index: libvirt/src/xmlrpc.c
===================================================================
--- libvirt.orig/src/xmlrpc.c
+++ libvirt/src/xmlrpc.c
@@ -39,7 +39,7 @@ static void xmlRpcError(virErrorNumber e
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, VIR_FROM_RPC, error, VIR_ERR_ERROR,
+ __virRaiseError(NULL, NULL, NULL, VIR_FROM_RPC, error, VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info, value);
}
Index: libvirt/src/xs_internal.c
===================================================================
--- libvirt.orig/src/xs_internal.c
+++ libvirt/src/xs_internal.c
@@ -106,7 +106,7 @@ virXenStoreError(virConnectPtr conn, vir
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(conn, NULL, VIR_FROM_XENSTORE, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_XENSTORE, error, VIR_ERR_ERROR,
errmsg, info, NULL, 0, 0, errmsg, info);
}
--