/**
* virXenError:
+ * @conn: connection, if known
* @error: the error number
* @info: extra information string
* @value: extra information number
* Handle an error at the xend daemon interface
*/
static void
-virXenError(virErrorNumber error, const char *info, int value)
+virXenError(virConnectPtr conn,
+ virErrorNumber error, const char *info, int value)
{
const char *errmsg;
return;
errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info, value);
}
/**
* virXenErrorFunc:
+ * @conn: connection, if known
* @error: the error number
* @func: the function failing
* @info: extra information string
* Handle an error at the xend daemon interface
*/
static void
-virXenErrorFunc(virErrorNumber error, const char *func, const char *info,
+virXenErrorFunc(virConnectPtr conn,
+ virErrorNumber error, const char *func, const char *info,
int value)
{
char fullinfo[1000];
if (func != NULL) {
snprintf(fullinfo, 999, "%s: %s", func, info);
fullinfo[999] = 0;
- __virRaiseError(NULL, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
errmsg, fullinfo, NULL, value, 0, errmsg, fullinfo,
value);
} else {
- __virRaiseError(NULL, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+ __virRaiseError(conn, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
errmsg, info, NULL, value, 0, errmsg, info,
value);
}
hc.arg[0] = (unsigned long) op;
if (lock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " locking", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " locking", sizeof(*op));
return (-1);
}
ret = ioctl(handle, xen_ioctl_hypercall_cmd, (unsigned long) &hc);
if (ret < 0) {
- virXenError(VIR_ERR_XEN_CALL, " ioctl ", xen_ioctl_hypercall_cmd);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " ioctl ", xen_ioctl_hypercall_cmd);
}
if (unlock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
ret = -1;
}
hc.arg[0] = (unsigned long) op;
if (lock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " locking", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " locking", sizeof(*op));
return (-1);
}
ret = ioctl(handle, xen_ioctl_hypercall_cmd, (unsigned long) &hc);
if (ret < 0) {
- virXenError(VIR_ERR_XEN_CALL, " ioctl ", xen_ioctl_hypercall_cmd);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " ioctl ", xen_ioctl_hypercall_cmd);
}
if (unlock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
ret = -1;
}
hc.arg[0] = (unsigned long) op;
if (lock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " locking", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " locking", sizeof(*op));
return (-1);
}
ret = ioctl(handle, xen_ioctl_hypercall_cmd, (unsigned long) &hc);
if (ret < 0) {
- virXenError(VIR_ERR_XEN_CALL, " sys ioctl ", xen_ioctl_hypercall_cmd);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " sys ioctl ", xen_ioctl_hypercall_cmd);
}
if (unlock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
ret = -1;
}
hc.arg[0] = (unsigned long) op;
if (lock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " locking", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " locking", sizeof(*op));
return (-1);
}
ret = ioctl(handle, xen_ioctl_hypercall_cmd, (unsigned long) &hc);
if (ret < 0) {
- virXenError(VIR_ERR_XEN_CALL, " ioctl ", xen_ioctl_hypercall_cmd);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " ioctl ", xen_ioctl_hypercall_cmd);
}
if (unlock_pages(op, sizeof(dom0_op_t)) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
+ virXenError(NULL, VIR_ERR_XEN_CALL, " releasing", sizeof(*op));
ret = -1;
}
if (lock_pages(XEN_GETDOMAININFOLIST_DATA(dominfos),
XEN_GETDOMAININFO_SIZE * maxids) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " locking",
+ virXenError(NULL, VIR_ERR_XEN_CALL, " locking",
XEN_GETDOMAININFO_SIZE * maxids);
return (-1);
}
}
if (unlock_pages(XEN_GETDOMAININFOLIST_DATA(dominfos),
XEN_GETDOMAININFO_SIZE * maxids) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " release",
+ virXenError(NULL, VIR_ERR_XEN_CALL, " release",
XEN_GETDOMAININFO_SIZE * maxids);
ret = -1;
}
xenUnifiedPrivatePtr priv;
if ((domain == NULL) || (domain->conn == NULL)) {
- virXenErrorFunc(VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+ virXenErrorFunc(NULL, VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"domain or conn is NULL", 0);
return NULL;
}
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
if (priv->handle < 0 || domain->id < 0) {
- virXenErrorFunc(VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+ virXenErrorFunc(domain->conn, VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"priv->handle or domain->id invalid", 0);
return NULL;
}
* TODO: check on Xen 3.0.3
*/
if (dom_interface_version < 5) {
- virXenErrorFunc(VIR_ERR_NO_XEN, __FUNCTION__,
+ virXenErrorFunc(domain->conn, VIR_ERR_NO_XEN, __FUNCTION__,
"unsupported in dom interface < 5", 0);
return NULL;
}
xenUnifiedPrivatePtr priv;
if ((domain == NULL) || (domain->conn == NULL)) {
- virXenErrorFunc(VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+ virXenErrorFunc(NULL, VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"domain or conn is NULL", 0);
return -1;
}
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
if (priv->handle < 0 || domain->id < 0) {
- virXenErrorFunc(VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+ virXenErrorFunc(domain->conn, VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"priv->handle or domain->id invalid", 0);
return -1;
}
* TODO: check on Xen 3.0.3
*/
if (dom_interface_version < 5) {
- virXenErrorFunc(VIR_ERR_NO_XEN, __FUNCTION__,
+ virXenErrorFunc(domain->conn, VIR_ERR_NO_XEN, __FUNCTION__,
"unsupported in dom interface < 5", 0);
return -1;
}
*nparams = 2;
break;
default:
- virXenErrorFunc(VIR_ERR_INVALID_ARG, __FUNCTION__,
+ virXenErrorFunc(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
"Unknown scheduler", op_sys.u.getschedulerid.sched_id);
return -1;
}
char buf[256];
if ((domain == NULL) || (domain->conn == NULL)) {
- virXenErrorFunc (VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+ virXenErrorFunc (NULL, VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"domain or conn is NULL", 0);
return -1;
}
if ((nparams == 0) || (params == NULL)) {
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+ virXenErrorFunc (domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
"Noparameters given", 0);
return(-1);
}
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
if (priv->handle < 0 || domain->id < 0) {
- virXenErrorFunc (VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+ virXenErrorFunc (domain->conn, VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"priv->handle or domain->id invalid", 0);
return -1;
}
* TODO: check on Xen 3.0.3
*/
if (dom_interface_version < 5) {
- virXenErrorFunc(VIR_ERR_NO_XEN, __FUNCTION__,
+ virXenErrorFunc(domain->conn, VIR_ERR_NO_XEN, __FUNCTION__,
"unsupported in dom interface < 5", 0);
return -1;
}
val = params[i].value.ui;
if ((val < 1) || (val > USHRT_MAX)) {
snprintf(buf, sizeof(buf), _("Credit scheduler weight parameter (%d) is out of range (1-65535)"), val);
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__, buf, val);
+ virXenErrorFunc (domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__, buf, val);
return(-1);
}
op_dom.u.getschedinfo.u.credit.weight = val;
val = params[i].value.ui;
if (val > USHRT_MAX) {
snprintf(buf, sizeof(buf), _("Credit scheduler cap parameter (%d) is out of range (0-65535)"), val);
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__, buf, val);
+ virXenErrorFunc (domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__, buf, val);
return(-1);
}
op_dom.u.getschedinfo.u.credit.cap = val;
cap_set = 1;
} else {
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
- "Credit scheduler accepts 'cap' and 'weight' integer parameters",
+ virXenErrorFunc (domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
+ "Credit scheduler accepts 'cap' and 'weight' integer parameters",
0);
return(-1);
}
break;
}
default:
- virXenErrorFunc(VIR_ERR_INVALID_ARG, __FUNCTION__,
+ virXenErrorFunc(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
"Unknown scheduler", op_sys.u.getschedulerid.sched_id);
return -1;
}
priv = (xenUnifiedPrivatePtr) dom->conn->privateData;
return xenLinuxDomainBlockStats (priv, dom, path, stats);
#else
- virXenErrorFunc (VIR_ERR_NO_SUPPORT, __FUNCTION__,
+ virXenErrorFunc (dom->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__,
"block statistics not supported on this platform",
dom->id);
return -1;
* domain.
*/
if (sscanf (path, "vif%d.%d", &rqdomid, &device) != 2) {
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+ virXenErrorFunc (dom->conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
"invalid path, should be vif<domid>.<n>.", 0);
return -1;
}
if (rqdomid != dom->id) {
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+ virXenErrorFunc (dom->conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
"invalid path, vif<domid> should match this domain ID", 0);
return -1;
}
return linuxDomainInterfaceStats (dom->conn, path, stats);
#else
- virXenErrorFunc (VIR_ERR_NO_SUPPORT, __FUNCTION__,
+ virXenErrorFunc (dom->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__,
"/proc/net/dev: Interface not found", 0);
return -1;
#endif
xen_op_v2_dom op;
if (lock_pages(cpumap, maplen) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " locking", maplen);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " locking", maplen);
return (-1);
}
memset(&op, 0, sizeof(op));
ret = xenHypervisorDoV2Dom(handle, &op);
if (unlock_pages(cpumap, maplen) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " release", maplen);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " release", maplen);
ret = -1;
}
} else {
}
if ((cpumap != NULL) && (maplen > 0)) {
if (lock_pages(cpumap, maplen) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " locking", maplen);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " locking", maplen);
return (-1);
}
memset(cpumap, 0, maplen);
}
ret = xenHypervisorDoV2Dom(handle, &op);
if (unlock_pages(cpumap, maplen) < 0) {
- virXenError(VIR_ERR_XEN_CALL, " release", maplen);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " release", maplen);
ret = -1;
}
}
char error[100];
regerror (errcode, &flags_hvm_rec, error, sizeof error);
regfree (&flags_hvm_rec);
- virXenError (VIR_ERR_INTERNAL_ERROR, error, 0);
+ virXenError (NULL, VIR_ERR_INTERNAL_ERROR, error, 0);
in_init = 0;
return -1;
}
regerror (errcode, &flags_pae_rec, error, sizeof error);
regfree (&flags_pae_rec);
regfree (&flags_hvm_rec);
- virXenError (VIR_ERR_INTERNAL_ERROR, error, 0);
+ virXenError (NULL, VIR_ERR_INTERNAL_ERROR, error, 0);
in_init = 0;
return -1;
}
regfree (&xen_cap_rec);
regfree (&flags_pae_rec);
regfree (&flags_hvm_rec);
- virXenError (VIR_ERR_INTERNAL_ERROR, error, 0);
+ virXenError (NULL, VIR_ERR_INTERNAL_ERROR, error, 0);
in_init = 0;
return -1;
}
*/
hypervisor_version = -1;
- virXenError(VIR_ERR_XEN_CALL, " ioctl ", IOCTL_PRIVCMD_HYPERCALL);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " ioctl ", IOCTL_PRIVCMD_HYPERCALL);
close(fd);
in_init = 0;
return(-1);
*/
hypervisor_version = -1;
- virXenError(VIR_ERR_XEN_CALL, " ioctl ", IOCTL_PRIVCMD_HYPERCALL);
+ virXenError(NULL, VIR_ERR_XEN_CALL, " ioctl ", IOCTL_PRIVCMD_HYPERCALL);
close(fd);
in_init = 0;
if (ipt)
ret = open(XEN_HYPERVISOR_SOCKET, O_RDWR);
if (ret < 0) {
- virXenError(VIR_ERR_NO_XEN, XEN_HYPERVISOR_SOCKET, 0);
+ virXenError(conn, VIR_ERR_NO_XEN, XEN_HYPERVISOR_SOCKET, 0);
return (-1);
}
xenHypervisorGetType(virConnectPtr conn)
{
if (!VIR_IS_CONNECT(conn)) {
- virXenError(VIR_ERR_INVALID_CONN, __FUNCTION__, 0);
+ virXenError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__, 0);
return (NULL);
}
return("Xen");
* Return the capabilities of this hypervisor.
*/
char *
-xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
+xenHypervisorMakeCapabilitiesXML(virConnectPtr conn,
const char *hostmachine,
FILE *cpuinfo, FILE *capabilities)
{
/* Construct the final XML. */
xml = virBufferNew (1024);
if (!xml) {
- virXenError(VIR_ERR_NO_MEMORY, __FUNCTION__, 0);
+ virXenError(conn, VIR_ERR_NO_MEMORY, __FUNCTION__, 0);
return NULL;
}
r = virBufferVSprintf (xml,
return xml_str;
vir_buffer_failed:
- virXenError(VIR_ERR_NO_MEMORY, __FUNCTION__, 0);
+ virXenError(conn, VIR_ERR_NO_MEMORY, __FUNCTION__, 0);
topology_failed:
virBufferFree (xml);
return NULL;
retry:
if (!(XEN_GETDOMAININFOLIST_ALLOC(dominfos, maxids))) {
- virXenError(VIR_ERR_NO_MEMORY, _("allocating %d domain info"),
+ virXenError(conn, VIR_ERR_NO_MEMORY, _("allocating %d domain info"),
maxids);
return(-1);
}
return (-1);
if (!(XEN_GETDOMAININFOLIST_ALLOC(dominfos, maxids))) {
- virXenError(VIR_ERR_NO_MEMORY, "allocating %d domain info",
+ virXenError(conn, VIR_ERR_NO_MEMORY, "allocating %d domain info",
maxids);
return(-1);
}
retry:
if (!(XEN_GETDOMAININFOLIST_ALLOC(dominfos, maxids))) {
- virXenError(VIR_ERR_NO_MEMORY, "allocating %d domain info",
+ virXenError(conn, VIR_ERR_NO_MEMORY, "allocating %d domain info",
maxids);
return(NULL);
}
int nbNodeCells;
if (conn == NULL) {
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+ virXenErrorFunc (conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
"invalid argument", 0);
return -1;
}
nbNodeCells = xenNbCells(conn);
if (nbNodeCells < 0) {
- virXenErrorFunc (VIR_ERR_XEN_CALL, __FUNCTION__,
+ virXenErrorFunc (conn, VIR_ERR_XEN_CALL, __FUNCTION__,
"cannot determine actual number of cells",0);
return(-1);
}
if ((maxCells < 1) || (startCell >= nbNodeCells)) {
- virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
+ virXenErrorFunc (conn, VIR_ERR_INVALID_ARG, __FUNCTION__,
"invalid argument", 0);
return -1;
}
* Support only sys_interface_version >=4
*/
if (sys_interface_version < 4) {
- virXenErrorFunc (VIR_ERR_XEN_CALL, __FUNCTION__,
+ virXenErrorFunc (conn, VIR_ERR_XEN_CALL, __FUNCTION__,
"unsupported in sys interface < 4", 0);
return -1;
}
priv = (xenUnifiedPrivatePtr) conn->privateData;
if (priv->handle < 0) {
- virXenErrorFunc (VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
+ virXenErrorFunc (conn, VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"priv->handle invalid", 0);
return -1;
}