Coverage report for src/libvirt.c.gcov
-: 0:Source:libvirt.c
-: 0:Graph:./libvirt_la-libvirt.gcno
-: 0:Data:./libvirt_la-libvirt.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:/*
-: 2: * libvirt.c: Main interfaces for the libvirt library to handle virtualization
-: 3: * domains from a process running in domain 0
-: 4: *
-: 5: * Copyright (C) 2005,2006 Red Hat, Inc.
-: 6: *
-: 7: * See COPYING.LIB for the License of this software
-: 8: *
-: 9: * Daniel Veillard <veillard@redhat.com>
-: 10: */
-: 11:
-: 12:#include "libvirt/libvirt.h"
-: 13:
-: 14:#include <stdio.h>
-: 15:#include <stdlib.h>
-: 16:#include <string.h>
-: 17:#include <sys/types.h>
-: 18:#include <sys/stat.h>
-: 19:#include <unistd.h>
-: 20:
-: 21:#include <libxml/parser.h>
-: 22:#include <libxml/xpath.h>
-: 23:
-: 24:#include <xs.h>
-: 25:
-: 26:#include "internal.h"
-: 27:#include "driver.h"
-: 28:#include "xen_internal.h"
-: 29:#include "xend_internal.h"
-: 30:#include "xs_internal.h"
-: 31:#include "proxy_internal.h"
-: 32:#include "xml.h"
-: 33:#include "test.h"
-: 34:
-: 35:/*
-: 36: * TODO:
-: 37: * - use lock to protect against concurrent accesses ?
-: 38: * - use reference counting to garantee coherent pointer state ?
-: 39: * - memory wrappers for malloc/free ?
-: 40: */
-: 41:
-: 42:static virDriverPtr virDriverTab[MAX_DRIVERS];
-: 43:static int initialized = 0;
-: 44:
-: 45:/**
-: 46: * virInitialize:
-: 47: *
-: 48: * Initialize the library. It's better to call this routine at startup
-: 49: * in multithreaded applications to avoid potential race when initializing
-: 50: * the library.
-: 51: *
-: 52: * Returns 0 in case of success, -1 in case of error
-: 53: */
-: 54:int
-: 55:virInitialize(void)
function virInitialize called 0 returned 0% blocks executed 0%
#####: 56:{
-: 57: int i;
-: 58:
#####: 59: if (initialized)
branch 0 never executed
branch 1 never executed
#####: 60: return(0);
#####: 61: initialized = 1;
-: 62:
-: 63: /*
-: 64: * should not be needed but...
-: 65: */
#####: 66: for (i = 0;i < MAX_DRIVERS;i++)
branch 0 never executed
branch 1 never executed
#####: 67: virDriverTab[i] = NULL;
-: 68:
-: 69: /*
-: 70: * Note that the order is important the first ones have a higher priority
-: 71: */
#####: 72: xenHypervisorRegister();
call 0 never executed
#####: 73: xenProxyRegister();
call 0 never executed
#####: 74: xenDaemonRegister();
call 0 never executed
#####: 75: xenStoreRegister();
call 0 never executed
#####: 76: testRegister();
call 0 never executed
#####: 77: return(0);
-: 78:}
-: 79:
-: 80:
-: 81:
-: 82:/**
-: 83: * virLibConnError:
-: 84: * @conn: the connection if available
-: 85: * @error: the error noumber
-: 86: * @info: extra information string
-: 87: *
-: 88: * Handle an error at the connection level
-: 89: */
-: 90:static void
-: 91:virLibConnError(virConnectPtr conn, virErrorNumber error, const char *info)
function virLibConnError called 0 returned 0% blocks executed 0%
#####: 92:{
-: 93: const char *errmsg;
-: 94:
#####: 95: if (error == VIR_ERR_OK)
branch 0 never executed
branch 1 never executed
#####: 96: return;
-: 97:
#####: 98: errmsg = __virErrorMsg(error, info);
call 0 never executed
#####: 99: __virRaiseError(conn, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
call 0 never executed
-: 100: errmsg, info, NULL, 0, 0, errmsg, info);
-: 101:}
-: 102:
-: 103:/**
-: 104: * virLibConnError:
-: 105: * @conn: the connection if available
-: 106: * @error: the error noumber
-: 107: * @info: extra information string
-: 108: *
-: 109: * Handle an error at the connection level
-: 110: */
-: 111:static void
-: 112:virLibDomainError(virDomainPtr domain, virErrorNumber error,
-: 113: const char *info)
function virLibDomainError called 0 returned 0% blocks executed 0%
#####: 114:{
#####: 115: virConnectPtr conn = NULL;
-: 116: const char *errmsg;
-: 117:
#####: 118: if (error == VIR_ERR_OK)
branch 0 never executed
branch 1 never executed
#####: 119: return;
-: 120:
#####: 121: errmsg = __virErrorMsg(error, info);
call 0 never executed
#####: 122: if (error != VIR_ERR_INVALID_DOMAIN) {
branch 0 never executed
branch 1 never executed
#####: 123: conn = domain->conn;
-: 124: }
#####: 125: __virRaiseError(conn, domain, VIR_FROM_DOM, error, VIR_ERR_ERROR,
call 0 never executed
-: 126: errmsg, info, NULL, 0, 0, errmsg, info);
-: 127:}
-: 128:
-: 129:/**
-: 130: * virRegisterDriver:
-: 131: * @driver: pointer to a driver block
-: 132: *
-: 133: * Register a virtualization driver
-: 134: *
-: 135: * Returns the driver priority or -1 in case of error.
-: 136: */
-: 137:int
-: 138:virRegisterDriver(virDriverPtr driver)
function virRegisterDriver called 0 returned 0% blocks executed 0%
#####: 139:{
-: 140: int i;
-: 141:
#####: 142: if (!initialized)
branch 0 never executed
branch 1 never executed
#####: 143: virInitialize();
call 0 never executed
-: 144:
#####: 145: if (driver == NULL) {
branch 0 never executed
branch 1 never executed
#####: 146: virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 147: return(-1);
-: 148: }
#####: 149: for (i = 0;i < MAX_DRIVERS;i++) {
branch 0 never executed
branch 1 never executed
#####: 150: if (virDriverTab[i] == driver)
branch 0 never executed
branch 1 never executed
#####: 151: return(i);
-: 152: }
#####: 153: for (i = 0;i < MAX_DRIVERS;i++) {
branch 0 never executed
branch 1 never executed
#####: 154: if (virDriverTab[i] == NULL) {
branch 0 never executed
branch 1 never executed
#####: 155: virDriverTab[i] = driver;
#####: 156: return(i);
-: 157: }
-: 158: }
#####: 159: virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 160: return(-1);
-: 161:}
-: 162:
-: 163:/**
-: 164: * virGetVersion:
-: 165: * @libVer: return value for the library version (OUT)
-: 166: * @type: the type of connection/driver looked at
-: 167: * @typeVer: return value for the version of the hypervisor (OUT)
-: 168: *
-: 169: * Provides two information back, @libVer is the version of the library
-: 170: * while @typeVer will be the version of the hypervisor type @type against
-: 171: * which the library was compiled. If @type is NULL, "Xen" is assumed, if
-: 172: * @type is unknown or not availble, an error code will be returned and
-: 173: * @typeVer will be 0.
-: 174: *
-: 175: * Returns -1 in case of failure, 0 otherwise, and values for @libVer and
-: 176: * @typeVer have the format major * 1,000,000 + minor * 1,000 + release.
-: 177: */
-: 178:int
-: 179:virGetVersion(unsigned long *libVer, const char *type,
-: 180: unsigned long *typeVer)
function virGetVersion called 0 returned 0% blocks executed 0%
#####: 181:{
-: 182: int i;
-: 183:
#####: 184: if (!initialized)
branch 0 never executed
branch 1 never executed
#####: 185: virInitialize();
call 0 never executed
-: 186:
#####: 187: if (libVer == NULL)
branch 0 never executed
branch 1 never executed
#####: 188: return (-1);
#####: 189: *libVer = LIBVIR_VERSION_NUMBER;
-: 190:
#####: 191: if (typeVer != NULL) {
branch 0 never executed
branch 1 never executed
#####: 192: if (type == NULL)
branch 0 never executed
branch 1 never executed
#####: 193: type = "Xen";
#####: 194: for (i = 0;i < MAX_DRIVERS;i++) {
branch 0 never executed
branch 1 never executed
#####: 195: if ((virDriverTab[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 196: (!strcmp(virDriverTab[i]->name, type))) {
call 0 never executed
#####: 197: *typeVer = virDriverTab[i]->ver;
#####: 198: break;
-: 199: }
-: 200: }
#####: 201: if (i >= MAX_DRIVERS) {
branch 0 never executed
branch 1 never executed
#####: 202: *typeVer = 0;
#####: 203: virLibConnError(NULL, VIR_ERR_NO_SUPPORT, type);
call 0 never executed
#####: 204: return (-1);
-: 205: }
-: 206: }
#####: 207: return (0);
-: 208:}
-: 209:
-: 210:/**
-: 211: * virConnectOpen:
-: 212: * @name: optional argument currently unused, pass NULL
-: 213: *
-: 214: * This function should be called first to get a connection to the
-: 215: * Hypervisor and xen store
-: 216: *
-: 217: * Returns a pointer to the hypervisor connection or NULL in case of error
-: 218: */
-: 219:virConnectPtr
-: 220:virConnectOpen(const char *name)
function virConnectOpen called 0 returned 0% blocks executed 0%
#####: 221:{
#####: 222: int i, res, for_xen = 0;
#####: 223: virConnectPtr ret = NULL;
-: 224:
#####: 225: if (!initialized)
branch 0 never executed
branch 1 never executed
#####: 226: virInitialize();
call 0 never executed
-: 227:
#####: 228: if (name == NULL) {
branch 0 never executed
branch 1 never executed
#####: 229: name = "Xen";
#####: 230: for_xen = 1;
#####: 231: } else if (!strncasecmp(name, "xen", 3)) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 232: for_xen = 1;
-: 233: }
-: 234:
#####: 235: ret = virGetConnect();
call 0 never executed
#####: 236: if (ret == NULL) {
branch 0 never executed
branch 1 never executed
#####: 237: virLibConnError(NULL, VIR_ERR_NO_MEMORY, "Allocating connection");
call 0 never executed
#####: 238: goto failed;
-: 239: }
-: 240:
#####: 241: for (i = 0;i < MAX_DRIVERS;i++) {
branch 0 never executed
branch 1 never executed
#####: 242: if ((virDriverTab[i] != NULL) && (virDriverTab[i]->open != NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 243: res = virDriverTab[i]->open(ret, name, VIR_DRV_OPEN_QUIET);
call 0 never executed
-: 244: /*
-: 245: * For a default connect to Xen make sure we manage to contact
-: 246: * all related drivers.
-: 247: */
#####: 248: if ((res < 0) && (for_xen) &&
branch 0 never executed
branch 1 never executed
call 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
-: 249: (!strncasecmp(virDriverTab[i]->name, "xen", 3)) &&
-: 250: (virDriverTab[i]->no != VIR_DRV_XEN_PROXY))
#####: 251: goto failed;
#####: 252: if (res == 0)
branch 0 never executed
branch 1 never executed
#####: 253: ret->drivers[ret->nb_drivers++] = virDriverTab[i];
-: 254: }
-: 255: }
-: 256:
#####: 257: if (ret->nb_drivers == 0) {
branch 0 never executed
branch 1 never executed
-: 258: /* we failed to find an adequate driver */
#####: 259: virLibConnError(NULL, VIR_ERR_NO_SUPPORT, name);
call 0 never executed
#####: 260: goto failed;
-: 261: }
-: 262:
#####: 263: return (ret);
-: 264:
#####: 265:failed:
#####: 266: if (ret != NULL) {
branch 0 never executed
branch 1 never executed
#####: 267: for (i = 0;i < ret->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 268: if ((ret->drivers[i] != NULL) && (ret->drivers[i]->close != NULL))
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 269: ret->drivers[i]->close(ret);
call 0 never executed
-: 270: }
#####: 271: virFreeConnect(ret);
call 0 never executed
-: 272: }
#####: 273: return (NULL);
-: 274:}
-: 275:
-: 276:/**
-: 277: * virConnectOpenReadOnly:
-: 278: * @name: optional argument currently unused, pass NULL
-: 279: *
-: 280: * This function should be called first to get a restricted connection to the
-: 281: * libbrary functionalities. The set of APIs usable are then restricted
-: 282: * on the available methods to control the domains.
-: 283: *
-: 284: * Returns a pointer to the hypervisor connection or NULL in case of error
-: 285: */
-: 286:virConnectPtr
-: 287:virConnectOpenReadOnly(const char *name)
function virConnectOpenReadOnly called 0 returned 0% blocks executed 0%
#####: 288:{
-: 289: int i, res;
#####: 290: virConnectPtr ret = NULL;
-: 291:
#####: 292: if (!initialized)
branch 0 never executed
branch 1 never executed
#####: 293: virInitialize();
call 0 never executed
-: 294:
#####: 295: if (name == NULL)
branch 0 never executed
branch 1 never executed
#####: 296: name = "Xen";
-: 297:
#####: 298: ret = virGetConnect();
call 0 never executed
#####: 299: if (ret == NULL) {
branch 0 never executed
branch 1 never executed
#####: 300: virLibConnError(NULL, VIR_ERR_NO_MEMORY, "Allocating connection");
call 0 never executed
#####: 301: goto failed;
-: 302: }
-: 303:
#####: 304: for (i = 0;i < MAX_DRIVERS;i++) {
branch 0 never executed
branch 1 never executed
#####: 305: if ((virDriverTab[i] != NULL) && (virDriverTab[i]->open != NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 306: res = virDriverTab[i]->open(ret, name,
call 0 never executed
-: 307: VIR_DRV_OPEN_QUIET | VIR_DRV_OPEN_RO);
#####: 308: if (res == 0)
branch 0 never executed
branch 1 never executed
#####: 309: ret->drivers[ret->nb_drivers++] = virDriverTab[i];
-: 310:
-: 311: }
-: 312: }
#####: 313: if (ret->nb_drivers == 0) {
branch 0 never executed
branch 1 never executed
#####: 314: if (name == NULL)
branch 0 never executed
branch 1 never executed
#####: 315: virLibConnError(NULL, VIR_ERR_NO_CONNECT,
call 0 never executed
-: 316: "could not connect to Xen Daemon nor Xen Store");
-: 317: else
-: 318: /* we failed to find an adequate driver */
#####: 319: virLibConnError(NULL, VIR_ERR_NO_SUPPORT, name);
call 0 never executed
-: 320: goto failed;
-: 321: }
#####: 322: ret->flags = VIR_CONNECT_RO;
-: 323:
#####: 324: return (ret);
-: 325:
#####: 326:failed:
#####: 327: if (ret != NULL) {
branch 0 never executed
branch 1 never executed
#####: 328: for (i = 0;i < ret->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 329: if ((ret->drivers[i] != NULL) && (ret->drivers[i]->close != NULL))
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 330: ret->drivers[i]->close(ret);
call 0 never executed
-: 331: }
#####: 332: virFreeConnect(ret);
call 0 never executed
-: 333: }
#####: 334: return (NULL);
-: 335:}
-: 336:
-: 337:/**
-: 338: * virConnectClose:
-: 339: * @conn: pointer to the hypervisor connection
-: 340: *
-: 341: * This function closes the connection to the Hypervisor. This should
-: 342: * not be called if further interaction with the Hypervisor are needed
-: 343: * especially if there is running domain which need further monitoring by
-: 344: * the application.
-: 345: *
-: 346: * Returns 0 in case of success or -1 in case of error.
-: 347: */
-: 348:int
-: 349:virConnectClose(virConnectPtr conn)
function virConnectClose called 0 returned 0% blocks executed 0%
#####: 350:{
-: 351: int i;
-: 352:
#####: 353: if (!VIR_IS_CONNECT(conn))
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 354: return (-1);
#####: 355: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 356: if ((conn->drivers[i] != NULL) && (conn->drivers[i]->close != NULL))
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 357: conn->drivers[i]->close(conn);
call 0 never executed
-: 358: }
#####: 359: if (virFreeConnect(conn) < 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 360: return (-1);
#####: 361: return (0);
-: 362:}
-: 363:
-: 364:/**
-: 365: * virConnectGetType:
-: 366: * @conn: pointer to the hypervisor connection
-: 367: *
-: 368: * Get the name of the Hypervisor software used.
-: 369: *
-: 370: * Returns NULL in case of error, a static zero terminated string otherwise.
-: 371: */
-: 372:const char *
-: 373:virConnectGetType(virConnectPtr conn)
function virConnectGetType called 0 returned 0% blocks executed 0%
#####: 374:{
-: 375: int i;
-: 376: const char *ret;
-: 377:
#####: 378: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 379: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 380: return (NULL);
-: 381: }
#####: 382: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 383: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 384: (conn->drivers[i]->type != NULL)) {
#####: 385: ret = conn->drivers[i]->type(conn);
call 0 never executed
#####: 386: if (ret != NULL)
branch 0 never executed
branch 1 never executed
#####: 387: return(ret);
-: 388: }
-: 389: }
#####: 390: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 391: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 392: (conn->drivers[i]->name != NULL)) {
#####: 393: return(conn->drivers[i]->name);
-: 394: }
-: 395: }
#####: 396: return(NULL);
-: 397:}
-: 398:
-: 399:/**
-: 400: * virConnectGetVersion:
-: 401: * @conn: pointer to the hypervisor connection
-: 402: * @hvVer: return value for the version of the running hypervisor (OUT)
-: 403: *
-: 404: * Get the version level of the Hypervisor running. This may work only with
-: 405: * hypervisor call, i.e. with priviledged access to the hypervisor, not
-: 406: * with a Read-Only connection.
-: 407: *
-: 408: * Returns -1 in case of error, 0 otherwise. if the version can't be
-: 409: * extracted by lack of capacities returns 0 and @hvVer is 0, otherwise
-: 410: * @hvVer value is major * 1,000,000 + minor * 1,000 + release
-: 411: */
-: 412:int
-: 413:virConnectGetVersion(virConnectPtr conn, unsigned long *hvVer)
function virConnectGetVersion called 0 returned 0% blocks executed 0%
#####: 414:{
-: 415: int ret, i;
-: 416:
#####: 417: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 418: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 419: return (-1);
-: 420: }
-: 421:
#####: 422: if (hvVer == NULL) {
branch 0 never executed
branch 1 never executed
#####: 423: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 424: return (-1);
-: 425: }
-: 426:
#####: 427: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 428: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 429: (conn->drivers[i]->version != NULL)) {
#####: 430: ret = conn->drivers[i]->version(conn, hvVer);
call 0 never executed
#####: 431: if (ret == 0)
branch 0 never executed
branch 1 never executed
#####: 432: return(0);
-: 433: }
-: 434: }
#####: 435: return (-1);
-: 436:}
-: 437:
-: 438:/**
-: 439: * virConnectListDomains:
-: 440: * @conn: pointer to the hypervisor connection
-: 441: * @ids: array to collect the list of IDs of active domains
-: 442: * @maxids: size of @ids
-: 443: *
-: 444: * Collect the list of active domains, and store their ID in @maxids
-: 445: *
-: 446: * Returns the number of domain found or -1 in case of error
-: 447: */
-: 448:int
-: 449:virConnectListDomains(virConnectPtr conn, int *ids, int maxids)
function virConnectListDomains called 0 returned 0% blocks executed 0%
#####: 450:{
#####: 451: int ret = -1;
-: 452: int i;
-: 453:
#####: 454: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 455: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 456: return (-1);
-: 457: }
-: 458:
#####: 459: if ((ids == NULL) || (maxids <= 0)) {
branch 0 never executed
branch 1 never executed
#####: 460: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 461: return (-1);
-: 462: }
-: 463:
-: 464: /* Go though the driver registered entry points */
#####: 465: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 466: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 467: (conn->drivers[i]->listDomains != NULL)) {
#####: 468: ret = conn->drivers[i]->listDomains(conn, ids, maxids);
call 0 never executed
#####: 469: if (ret >= 0)
branch 0 never executed
branch 1 never executed
#####: 470: return(ret);
-: 471: }
-: 472: }
-: 473:
#####: 474: return (-1);
-: 475:}
-: 476:
-: 477:/**
-: 478: * virConnectNumOfDomains:
-: 479: * @conn: pointer to the hypervisor connection
-: 480: *
-: 481: * Provides the number of active domains.
-: 482: *
-: 483: * Returns the number of domain found or -1 in case of error
-: 484: */
-: 485:int
-: 486:virConnectNumOfDomains(virConnectPtr conn)
function virConnectNumOfDomains called 0 returned 0% blocks executed 0%
#####: 487:{
#####: 488: int ret = -1;
-: 489: int i;
-: 490:
#####: 491: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 492: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 493: return (-1);
-: 494: }
-: 495:
-: 496: /* Go though the driver registered entry points */
#####: 497: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 498: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 499: (conn->drivers[i]->numOfDomains != NULL)) {
#####: 500: ret = conn->drivers[i]->numOfDomains(conn);
call 0 never executed
#####: 501: if (ret >= 0)
branch 0 never executed
branch 1 never executed
#####: 502: return(ret);
-: 503: }
-: 504: }
-: 505:
#####: 506: return(-1);
-: 507:}
-: 508:
-: 509:/**
-: 510: * virDomainCreateLinux:
-: 511: * @conn: pointer to the hypervisor connection
-: 512: * @xmlDesc: an XML description of the domain
-: 513: * @flags: an optional set of virDomainFlags
-: 514: *
-: 515: * Launch a new Linux guest domain, based on an XML description similar
-: 516: * to the one returned by virDomainGetXMLDesc()
-: 517: * This function may requires priviledged access to the hypervisor.
-: 518: *
-: 519: * Returns a new domain object or NULL in case of failure
-: 520: */
-: 521:virDomainPtr
-: 522:virDomainCreateLinux(virConnectPtr conn, const char *xmlDesc,
-: 523: unsigned int flags)
function virDomainCreateLinux called 0 returned 0% blocks executed 0%
#####: 524:{
-: 525: virDomainPtr ret;
-: 526: int i;
-: 527:
#####: 528: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 529: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 530: return (NULL);
-: 531: }
#####: 532: if (xmlDesc == NULL) {
branch 0 never executed
branch 1 never executed
#####: 533: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 534: return (NULL);
-: 535: }
#####: 536: if (conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 537: virLibConnError(conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 538: return (NULL);
-: 539: }
-: 540:
#####: 541: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 542: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 543: (conn->drivers[i]->domainCreateLinux != NULL)) {
#####: 544: ret = conn->drivers[i]->domainCreateLinux(conn, xmlDesc, flags);
call 0 never executed
#####: 545: if (ret != NULL)
branch 0 never executed
branch 1 never executed
#####: 546: return(ret);
-: 547: }
-: 548: }
#####: 549: return(NULL);
-: 550:}
-: 551:
-: 552:
-: 553:/**
-: 554: * virDomainLookupByID:
-: 555: * @conn: pointer to the hypervisor connection
-: 556: * @id: the domain ID number
-: 557: *
-: 558: * Try to find a domain based on the hypervisor ID number
-: 559: *
-: 560: * Returns a new domain object or NULL in case of failure
-: 561: */
-: 562:virDomainPtr
-: 563:virDomainLookupByID(virConnectPtr conn, int id)
function virDomainLookupByID called 0 returned 0% blocks executed 0%
#####: 564:{
-: 565: virDomainPtr ret;
-: 566: int i;
-: 567:
#####: 568: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 569: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 570: return (NULL);
-: 571: }
#####: 572: if (id < 0) {
branch 0 never executed
branch 1 never executed
#####: 573: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 574: return (NULL);
-: 575: }
-: 576:
-: 577: /* Go though the driver registered entry points */
#####: 578: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 579: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 580: (conn->drivers[i]->domainLookupByID != NULL)) {
#####: 581: ret = conn->drivers[i]->domainLookupByID(conn, id);
call 0 never executed
#####: 582: if (ret)
branch 0 never executed
branch 1 never executed
#####: 583: return(ret);
-: 584: }
-: 585: }
-: 586:
#####: 587: return (NULL);
-: 588:}
-: 589:
-: 590:/**
-: 591: * virDomainLookupByUUID:
-: 592: * @conn: pointer to the hypervisor connection
-: 593: * @uuid: the raw UUID for the domain
-: 594: *
-: 595: * Try to lookup a domain on the given hypervisor based on its UUID.
-: 596: *
-: 597: * Returns a new domain object or NULL in case of failure
-: 598: */
-: 599:virDomainPtr
-: 600:virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
function virDomainLookupByUUID called 0 returned 0% blocks executed 0%
#####: 601:{
-: 602: virDomainPtr ret;
-: 603: int i;
-: 604:
#####: 605: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 606: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 607: return (NULL);
-: 608: }
#####: 609: if (uuid == NULL) {
branch 0 never executed
branch 1 never executed
#####: 610: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 611: return (NULL);
-: 612: }
-: 613:
-: 614: /* Go though the driver registered entry points */
#####: 615: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 616: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 617: (conn->drivers[i]->domainLookupByUUID != NULL)) {
#####: 618: ret = conn->drivers[i]->domainLookupByUUID(conn, uuid);
call 0 never executed
#####: 619: if (ret)
branch 0 never executed
branch 1 never executed
#####: 620: return(ret);
-: 621: }
-: 622: }
-: 623:
#####: 624: return (NULL);
-: 625:}
-: 626:
-: 627:/**
-: 628: * virDomainLookupByUUIDString:
-: 629: * @conn: pointer to the hypervisor connection
-: 630: * @uuidstr: the string UUID for the domain
-: 631: *
-: 632: * Try to lookup a domain on the given hypervisor based on its UUID.
-: 633: *
-: 634: * Returns a new domain object or NULL in case of failure
-: 635: */
-: 636:virDomainPtr
-: 637:virDomainLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
function virDomainLookupByUUIDString called 0 returned 0% blocks executed 0%
#####: 638:{
-: 639: int raw[16], i;
-: 640: unsigned char uuid[16];
-: 641: int ret;
-: 642:
#####: 643: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 644: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 645: return (NULL);
-: 646: }
#####: 647: if (uuidstr == NULL) {
branch 0 never executed
branch 1 never executed
#####: 648: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 649: return (NULL);
-: 650:
-: 651: }
-: 652: /* XXX: sexpr_uuid() also supports 'xxxx-xxxx-xxxx-xxxx' format.
-: 653: * We needn't it here. Right?
-: 654: */
#####: 655: ret = sscanf(uuidstr,
call 0 never executed
-: 656: "%02x%02x%02x%02x-"
-: 657: "%02x%02x-"
-: 658: "%02x%02x-"
-: 659: "%02x%02x-"
-: 660: "%02x%02x%02x%02x%02x%02x",
-: 661: raw + 0, raw + 1, raw + 2, raw + 3,
-: 662: raw + 4, raw + 5, raw + 6, raw + 7,
-: 663: raw + 8, raw + 9, raw + 10, raw + 11,
-: 664: raw + 12, raw + 13, raw + 14, raw + 15);
-: 665:
#####: 666: if (ret!=16) {
branch 0 never executed
branch 1 never executed
#####: 667: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 668: return (NULL);
-: 669: }
#####: 670: for (i = 0; i < 16; i++)
branch 0 never executed
branch 1 never executed
#####: 671: uuid[i] = raw[i] & 0xFF;
-: 672:
#####: 673: return virDomainLookupByUUID(conn, &uuid[0]);
call 0 never executed
-: 674:}
-: 675:
-: 676:/**
-: 677: * virDomainLookupByName:
-: 678: * @conn: pointer to the hypervisor connection
-: 679: * @name: name for the domain
-: 680: *
-: 681: * Try to lookup a domain on the given hypervisor based on its name.
-: 682: *
-: 683: * Returns a new domain object or NULL in case of failure
-: 684: */
-: 685:virDomainPtr
-: 686:virDomainLookupByName(virConnectPtr conn, const char *name)
function virDomainLookupByName called 0 returned 0% blocks executed 0%
#####: 687:{
#####: 688: virDomainPtr ret = NULL;
-: 689: int i;
-: 690:
#####: 691: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 692: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 693: return (NULL);
-: 694: }
#####: 695: if (name == NULL) {
branch 0 never executed
branch 1 never executed
#####: 696: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 697: return (NULL);
-: 698: }
-: 699:
-: 700: /* Go though the driver registered entry points */
#####: 701: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 702: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 703: (conn->drivers[i]->domainLookupByName != NULL)) {
#####: 704: ret = conn->drivers[i]->domainLookupByName(conn, name);
call 0 never executed
#####: 705: if (ret)
branch 0 never executed
branch 1 never executed
#####: 706: return(ret);
-: 707: }
-: 708: }
#####: 709: return (NULL);
-: 710:}
-: 711:
-: 712:/**
-: 713: * virDomainDestroy:
-: 714: * @domain: a domain object
-: 715: *
-: 716: * Destroy the domain object. The running instance is shutdown if not down
-: 717: * already and all resources used by it are given back to the hypervisor.
-: 718: * The data structure is freed and should not be used thereafter if the
-: 719: * call does not return an error.
-: 720: * This function may requires priviledged access
-: 721: *
-: 722: * Returns 0 in case of success and -1 in case of failure.
-: 723: */
-: 724:int
-: 725:virDomainDestroy(virDomainPtr domain)
function virDomainDestroy called 0 returned 0% blocks executed 0%
#####: 726:{
-: 727: int i;
-: 728: virConnectPtr conn;
-: 729:
#####: 730: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 731: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 732: return (-1);
-: 733: }
-: 734:
#####: 735: conn = domain->conn;
#####: 736: if (conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 737: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 738: return (-1);
-: 739: }
-: 740:
-: 741: /*
-: 742: * Go though the driver registered entry points but use the
-: 743: * XEN_HYPERVISOR directly only as a last mechanism
-: 744: */
#####: 745: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 746: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 747: (conn->drivers[i]->no != VIR_DRV_XEN_HYPERVISOR) &&
-: 748: (conn->drivers[i]->domainDestroy != NULL)) {
#####: 749: if (conn->drivers[i]->domainDestroy(domain) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 750: return (0);
-: 751: }
-: 752: }
#####: 753: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 754: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 755: (conn->drivers[i]->no == VIR_DRV_XEN_HYPERVISOR) &&
-: 756: (conn->drivers[i]->domainDestroy != NULL)) {
#####: 757: if (conn->drivers[i]->domainDestroy(domain) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 758: return (0);
-: 759: }
-: 760: }
-: 761:
#####: 762: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 763: return (-1);
-: 764:}
-: 765:
-: 766:/**
-: 767: * virDomainFree:
-: 768: * @domain: a domain object
-: 769: *
-: 770: * Free the domain object. The running instance is kept alive.
-: 771: * The data structure is freed and should not be used thereafter.
-: 772: *
-: 773: * Returns 0 in case of success and -1 in case of failure.
-: 774: */
-: 775:int
-: 776:virDomainFree(virDomainPtr domain)
function virDomainFree called 0 returned 0% blocks executed 0%
#####: 777:{
#####: 778: if (!VIR_IS_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 779: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 780: return (-1);
-: 781: }
#####: 782: if (virFreeDomain(domain->conn, domain) < 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 783: return (-1);
#####: 784: return(0);
-: 785:}
-: 786:
-: 787:/**
-: 788: * virDomainSuspend:
-: 789: * @domain: a domain object
-: 790: *
-: 791: * Suspends an active domain, the process is frozen without further access
-: 792: * to CPU resources and I/O but the memory used by the domain at the
-: 793: * hypervisor level will stay allocated. Use virDomainResume() to reactivate
-: 794: * the domain.
-: 795: * This function may requires priviledged access.
-: 796: *
-: 797: * Returns 0 in case of success and -1 in case of failure.
-: 798: */
-: 799:int
-: 800:virDomainSuspend(virDomainPtr domain)
function virDomainSuspend called 0 returned 0% blocks executed 0%
#####: 801:{
-: 802: int i;
-: 803: virConnectPtr conn;
-: 804:
#####: 805: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 806: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 807: return (-1);
-: 808: }
#####: 809: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 810: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 811: return (-1);
-: 812: }
-: 813:
#####: 814: conn = domain->conn;
-: 815:
-: 816: /*
-: 817: * Go though the driver registered entry points but use the
-: 818: * XEN_HYPERVISOR directly only as a last mechanism
-: 819: */
#####: 820: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 821: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 822: (conn->drivers[i]->no != VIR_DRV_XEN_HYPERVISOR) &&
-: 823: (conn->drivers[i]->domainSuspend != NULL)) {
#####: 824: if (conn->drivers[i]->domainSuspend(domain) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 825: return (0);
-: 826: }
-: 827: }
#####: 828: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 829: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 830: (conn->drivers[i]->no == VIR_DRV_XEN_HYPERVISOR) &&
-: 831: (conn->drivers[i]->domainSuspend != NULL)) {
#####: 832: if (conn->drivers[i]->domainSuspend(domain) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 833: return (0);
-: 834: }
-: 835: }
-: 836:
#####: 837: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 838: return (-1);
-: 839:}
-: 840:
-: 841:/**
-: 842: * virDomainResume:
-: 843: * @domain: a domain object
-: 844: *
-: 845: * Resume an suspended domain, the process is restarted from the state where
-: 846: * it was frozen by calling virSuspendDomain().
-: 847: * This function may requires priviledged access
-: 848: *
-: 849: * Returns 0 in case of success and -1 in case of failure.
-: 850: */
-: 851:int
-: 852:virDomainResume(virDomainPtr domain)
function virDomainResume called 0 returned 0% blocks executed 0%
#####: 853:{
-: 854: int i;
-: 855: virConnectPtr conn;
-: 856:
#####: 857: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 858: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 859: return (-1);
-: 860: }
#####: 861: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 862: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 863: return (-1);
-: 864: }
-: 865:
#####: 866: conn = domain->conn;
-: 867:
-: 868: /*
-: 869: * Go though the driver registered entry points but use the
-: 870: * XEN_HYPERVISOR directly only as a last mechanism
-: 871: */
#####: 872: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 873: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 874: (conn->drivers[i]->no != VIR_DRV_XEN_HYPERVISOR) &&
-: 875: (conn->drivers[i]->domainResume != NULL)) {
#####: 876: if (conn->drivers[i]->domainResume(domain) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 877: return(0);
-: 878: }
-: 879: }
#####: 880: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 881: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 882: (conn->drivers[i]->no == VIR_DRV_XEN_HYPERVISOR) &&
-: 883: (conn->drivers[i]->domainResume != NULL)) {
#####: 884: if (conn->drivers[i]->domainResume(domain) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 885: return(0);
-: 886: }
-: 887: }
-: 888:
#####: 889: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 890: return (-1);
-: 891:}
-: 892:
-: 893:/**
-: 894: * virDomainSave:
-: 895: * @domain: a domain object
-: 896: * @to: path for the output file
-: 897: *
-: 898: * This method will suspend a domain and save its memory contents to
-: 899: * a file on disk. After the call, if successful, the domain is not
-: 900: * listed as running anymore (this may be a problem).
-: 901: * Use virDomainRestore() to restore a domain after saving.
-: 902: *
-: 903: * Returns 0 in case of success and -1 in case of failure.
-: 904: */
-: 905:int
-: 906:virDomainSave(virDomainPtr domain, const char *to)
function virDomainSave called 0 returned 0% blocks executed 0%
#####: 907:{
-: 908: int ret, i;
-: 909: char filepath[4096];
-: 910: virConnectPtr conn;
-: 911:
#####: 912: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 913: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 914: return (-1);
-: 915: }
#####: 916: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 917: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 918: return (-1);
-: 919: }
#####: 920: conn = domain->conn;
#####: 921: if (to == NULL) {
branch 0 never executed
branch 1 never executed
#####: 922: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 923: return (-1);
-: 924: }
-: 925:
-: 926: /*
-: 927: * We must absolutize the file path as the save is done out of process
-: 928: * TODO: check for URI when libxml2 is linked in.
-: 929: */
#####: 930: if (to[0] != '/') {
branch 0 never executed
branch 1 never executed
-: 931: unsigned int len, t;
-: 932:
#####: 933: t = strlen(to);
call 0 never executed
#####: 934: if (getcwd(filepath, sizeof(filepath) - (t + 3)) == NULL)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 935: return (-1);
#####: 936: len = strlen(filepath);
call 0 never executed
-: 937: /* that should be covered by getcwd() semantic, but be 100% sure */
#####: 938: if (len > sizeof(filepath) - (t + 3))
branch 0 never executed
branch 1 never executed
#####: 939: return (-1);
#####: 940: filepath[len] = '/';
#####: 941: strcpy(&filepath[len + 1], to);
call 0 never executed
#####: 942: to = &filepath[0];
-: 943:
-: 944: }
-: 945:
-: 946: /* Go though the driver registered entry points */
#####: 947: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 948: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 949: (conn->drivers[i]->domainSave != NULL)) {
#####: 950: ret = conn->drivers[i]->domainSave(domain, to);
call 0 never executed
#####: 951: if (ret == 0)
branch 0 never executed
branch 1 never executed
#####: 952: return(0);
-: 953: }
-: 954: }
#####: 955: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 956: return (-1);
-: 957:}
-: 958:
-: 959:/**
-: 960: * virDomainRestore:
-: 961: * @conn: pointer to the hypervisor connection
-: 962: * @from: path to the
-: 963: *
-: 964: * This method will restore a domain saved to disk by virDomainSave().
-: 965: *
-: 966: * Returns 0 in case of success and -1 in case of failure.
-: 967: */
-: 968:int
-: 969:virDomainRestore(virConnectPtr conn, const char *from)
function virDomainRestore called 0 returned 0% blocks executed 0%
#####: 970:{
-: 971: int ret, i;
-: 972: char filepath[4096];
-: 973:
#####: 974: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 975: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 976: return (-1);
-: 977: }
#####: 978: if (conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 979: virLibConnError(conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 980: return (-1);
-: 981: }
#####: 982: if (from == NULL) {
branch 0 never executed
branch 1 never executed
#####: 983: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 984: return (-1);
-: 985: }
-: 986:
-: 987: /*
-: 988: * We must absolutize the file path as the restore is done out of process
-: 989: * TODO: check for URI when libxml2 is linked in.
-: 990: */
#####: 991: if (from[0] != '/') {
branch 0 never executed
branch 1 never executed
-: 992: unsigned int len, t;
-: 993:
#####: 994: t = strlen(from);
call 0 never executed
#####: 995: if (getcwd(filepath, sizeof(filepath) - (t + 3)) == NULL)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 996: return (-1);
#####: 997: len = strlen(filepath);
call 0 never executed
-: 998: /* that should be covered by getcwd() semantic, but be 100% sure */
#####: 999: if (len > sizeof(filepath) - (t + 3))
branch 0 never executed
branch 1 never executed
#####: 1000: return (-1);
#####: 1001: filepath[len] = '/';
#####: 1002: strcpy(&filepath[len + 1], from);
call 0 never executed
#####: 1003: from = &filepath[0];
-: 1004: }
-: 1005:
-: 1006: /* Go though the driver registered entry points */
#####: 1007: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1008: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1009: (conn->drivers[i]->domainSave != NULL)) {
#####: 1010: ret = conn->drivers[i]->domainRestore(conn, from);
call 0 never executed
#####: 1011: if (ret == 0)
branch 0 never executed
branch 1 never executed
#####: 1012: return(0);
-: 1013: }
-: 1014: }
#####: 1015: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1016: return (-1);
-: 1017:}
-: 1018:
-: 1019:/**
-: 1020: * virDomainShutdown:
-: 1021: * @domain: a domain object
-: 1022: *
-: 1023: * Shutdown a domain, the domain object is still usable there after but
-: 1024: * the domain OS is being stopped. Note that the guest OS may ignore the
-: 1025: * request.
-: 1026: *
-: 1027: * TODO: should we add an option for reboot, knowing it may not be doable
-: 1028: * in the general case ?
-: 1029: *
-: 1030: * Returns 0 in case of success and -1 in case of failure.
-: 1031: */
-: 1032:int
-: 1033:virDomainShutdown(virDomainPtr domain)
function virDomainShutdown called 0 returned 0% blocks executed 0%
#####: 1034:{
#####: 1035: int ret = -1, i;
-: 1036: virConnectPtr conn;
-: 1037:
#####: 1038: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1039: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1040: return (-1);
-: 1041: }
#####: 1042: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1043: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1044: return (-1);
-: 1045: }
-: 1046:
#####: 1047: conn = domain->conn;
-: 1048:
-: 1049: /* Go though the driver registered entry points */
#####: 1050: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1051: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1052: (conn->drivers[i]->domainShutdown != NULL)) {
#####: 1053: if (conn->drivers[i]->domainShutdown(domain) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1054: ret = 0;
-: 1055: }
-: 1056: }
-: 1057:
#####: 1058: if (ret != 0) {
branch 0 never executed
branch 1 never executed
#####: 1059: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1060: return (ret);
-: 1061: }
-: 1062:
#####: 1063: return (ret);
-: 1064:}
-: 1065:
-: 1066:/**
-: 1067: * virDomainReboot:
-: 1068: * @domain: a domain object
-: 1069: * @flags: extra flags for the reboot operation, not used yet
-: 1070: *
-: 1071: * Reboot a domain, the domain object is still usable there after but
-: 1072: * the domain OS is being stopped for a restart.
-: 1073: * Note that the guest OS may ignore the request.
-: 1074: *
-: 1075: * Returns 0 in case of success and -1 in case of failure.
-: 1076: */
-: 1077:int
-: 1078:virDomainReboot(virDomainPtr domain, unsigned int flags)
function virDomainReboot called 0 returned 0% blocks executed 0%
#####: 1079:{
#####: 1080: int ret = -1, i;
-: 1081: virConnectPtr conn;
-: 1082:
#####: 1083: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1084: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1085: return (-1);
-: 1086: }
#####: 1087: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1088: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1089: return (-1);
-: 1090: }
-: 1091:
#####: 1092: conn = domain->conn;
-: 1093:
-: 1094: /* Go though the driver registered entry points */
#####: 1095: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1096: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1097: (conn->drivers[i]->domainReboot != NULL)) {
#####: 1098: if (conn->drivers[i]->domainReboot(domain, flags) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1099: ret = 0;
-: 1100: }
-: 1101: }
-: 1102:
#####: 1103: if (ret != 0) {
branch 0 never executed
branch 1 never executed
#####: 1104: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1105: return (ret);
-: 1106: }
-: 1107:
#####: 1108: return (ret);
-: 1109:}
-: 1110:
-: 1111:/**
-: 1112: * virDomainGetName:
-: 1113: * @domain: a domain object
-: 1114: *
-: 1115: * Get the public name for that domain
-: 1116: *
-: 1117: * Returns a pointer to the name or NULL, the string need not be deallocated
-: 1118: * its lifetime will be the same as the domain object.
-: 1119: */
-: 1120:const char *
-: 1121:virDomainGetName(virDomainPtr domain)
function virDomainGetName called 0 returned 0% blocks executed 0%
#####: 1122:{
#####: 1123: if (!VIR_IS_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1124: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1125: return (NULL);
-: 1126: }
#####: 1127: return (domain->name);
-: 1128:}
-: 1129:
-: 1130:/**
-: 1131: * virDomainGetUUID:
-: 1132: * @domain: a domain object
-: 1133: * @uuid: pointer to a 16 bytes array
-: 1134: *
-: 1135: * Get the UUID for a domain
-: 1136: *
-: 1137: * Returns -1 in case of error, 0 in case of success
-: 1138: */
-: 1139:int
-: 1140:virDomainGetUUID(virDomainPtr domain, unsigned char *uuid)
function virDomainGetUUID called 0 returned 0% blocks executed 0%
#####: 1141:{
#####: 1142: if (!VIR_IS_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1143: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1144: return (-1);
-: 1145: }
#####: 1146: if (uuid == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1147: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1148: return (-1);
-: 1149: }
-: 1150:
#####: 1151: if (domain->handle == 0) {
branch 0 never executed
branch 1 never executed
#####: 1152: memset(uuid, 0, 16);
call 0 never executed
-: 1153: } else {
#####: 1154: if ((domain->uuid[0] == 0) && (domain->uuid[1] == 0) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1155: (domain->uuid[2] == 0) && (domain->uuid[3] == 0) &&
-: 1156: (domain->uuid[4] == 0) && (domain->uuid[5] == 0) &&
-: 1157: (domain->uuid[6] == 0) && (domain->uuid[7] == 0) &&
-: 1158: (domain->uuid[8] == 0) && (domain->uuid[9] == 0) &&
-: 1159: (domain->uuid[10] == 0) && (domain->uuid[11] == 0) &&
-: 1160: (domain->uuid[12] == 0) && (domain->uuid[13] == 0) &&
-: 1161: (domain->uuid[14] == 0) && (domain->uuid[15] == 0))
#####: 1162: xenDaemonDomainLookupByName_ids(domain->conn, domain->name,
call 0 never executed
-: 1163: &domain->uuid[0]);
#####: 1164: memcpy(uuid, &domain->uuid[0], 16);
call 0 never executed
-: 1165: }
#####: 1166: return (0);
-: 1167:}
-: 1168:
-: 1169:/**
-: 1170: * virDomainGetUUIDString:
-: 1171: * @domain: a domain object
-: 1172: * @buf: pointer to a 37 bytes array
-: 1173: *
-: 1174: * Get the UUID for a domain as string. For more information about
-: 1175: * UUID see RFC4122.
-: 1176: *
-: 1177: * Returns -1 in case of error, 0 in case of success
-: 1178: */
-: 1179:int
-: 1180:virDomainGetUUIDString(virDomainPtr domain, char *buf)
function virDomainGetUUIDString called 0 returned 0% blocks executed 0%
#####: 1181:{
-: 1182: unsigned char uuid[16];
-: 1183:
#####: 1184: if (!VIR_IS_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1185: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1186: return (-1);
-: 1187: }
#####: 1188: if (buf == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1189: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1190: return (-1);
-: 1191: }
-: 1192:
#####: 1193: if (virDomainGetUUID(domain, &uuid[0]))
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1194: return (-1);
-: 1195:
#####: 1196: snprintf(buf, 37,
call 0 never executed
-: 1197: "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-: 1198: uuid[0], uuid[1], uuid[2], uuid[3],
-: 1199: uuid[4], uuid[5], uuid[6], uuid[7],
-: 1200: uuid[8], uuid[9], uuid[10], uuid[11],
-: 1201: uuid[12], uuid[13], uuid[14], uuid[15]);
#####: 1202: return (0);
-: 1203:}
-: 1204:
-: 1205:/**
-: 1206: * virDomainGetID:
-: 1207: * @domain: a domain object
-: 1208: *
-: 1209: * Get the hypervisor ID number for the domain
-: 1210: *
-: 1211: * Returns the domain ID number or (unsigned int) -1 in case of error
-: 1212: */
-: 1213:unsigned int
-: 1214:virDomainGetID(virDomainPtr domain)
function virDomainGetID called 0 returned 0% blocks executed 0%
#####: 1215:{
#####: 1216: if (!VIR_IS_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1217: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1218: return ((unsigned int) -1);
-: 1219: }
#####: 1220: return (domain->handle);
-: 1221:}
-: 1222:
-: 1223:/**
-: 1224: * virDomainGetOSType:
-: 1225: * @domain: a domain object
-: 1226: *
-: 1227: * Get the type of domain operation system.
-: 1228: *
-: 1229: * Returns the new string or NULL in case of error, the string must be
-: 1230: * freed by the caller.
-: 1231: */
-: 1232:char *
-: 1233:virDomainGetOSType(virDomainPtr domain)
function virDomainGetOSType called 0 returned 0% blocks executed 0%
#####: 1234:{
#####: 1235: char *vm, *str = NULL;
-: 1236:
#####: 1237: if (!VIR_IS_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1238: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1239: return (NULL);
-: 1240: }
-: 1241:
#####: 1242: vm = virDomainGetVM(domain);
call 0 never executed
#####: 1243: if (vm) {
branch 0 never executed
branch 1 never executed
#####: 1244: str = virDomainGetVMInfo(domain, vm, "image/ostype");
call 0 never executed
#####: 1245: free(vm);
call 0 never executed
-: 1246: }
#####: 1247: if (str == NULL)
branch 0 never executed
branch 1 never executed
#####: 1248: str = strdup("linux");
branch 0 never executed
branch 1 never executed
call 2 never executed
call 3 never executed
branch 4 never executed
branch 5 never executed
call 6 never executed
-: 1249:
#####: 1250: return (str);
-: 1251:}
-: 1252:
-: 1253:/**
-: 1254: * virDomainGetMaxMemory:
-: 1255: * @domain: a domain object or NULL
-: 1256: *
-: 1257: * Retrieve the maximum amount of physical memory allocated to a
-: 1258: * domain. If domain is NULL, then this get the amount of memory reserved
-: 1259: * to Domain0 i.e. the domain where the application runs.
-: 1260: *
-: 1261: * Returns the memory size in kilobytes or 0 in case of error.
-: 1262: */
-: 1263:unsigned long
-: 1264:virDomainGetMaxMemory(virDomainPtr domain)
function virDomainGetMaxMemory called 0 returned 0% blocks executed 0%
#####: 1265:{
#####: 1266: unsigned long ret = 0;
-: 1267: virConnectPtr conn;
-: 1268: int i;
-: 1269:
#####: 1270: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1271: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1272: return (0);
-: 1273: }
-: 1274:
#####: 1275: conn = domain->conn;
-: 1276:
-: 1277: /*
-: 1278: * in that case instead of trying only though one method try all availble.
-: 1279: * If needed that can be changed back if it's a performcance problem.
-: 1280: */
#####: 1281: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1282: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1283: (conn->drivers[i]->domainGetMaxMemory != NULL)) {
#####: 1284: ret = conn->drivers[i]->domainGetMaxMemory(domain);
call 0 never executed
#####: 1285: if (ret != 0)
branch 0 never executed
branch 1 never executed
#####: 1286: return(ret);
-: 1287: }
-: 1288: }
#####: 1289: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1290: return (-1);
-: 1291:}
-: 1292:
-: 1293:/**
-: 1294: * virDomainSetMaxMemory:
-: 1295: * @domain: a domain object or NULL
-: 1296: * @memory: the memory size in kilobytes
-: 1297: *
-: 1298: * Dynamically change the maximum amount of physical memory allocated to a
-: 1299: * domain. If domain is NULL, then this change the amount of memory reserved
-: 1300: * to Domain0 i.e. the domain where the application runs.
-: 1301: * This function requires priviledged access to the hypervisor.
-: 1302: *
-: 1303: * Returns 0 in case of success and -1 in case of failure.
-: 1304: */
-: 1305:int
-: 1306:virDomainSetMaxMemory(virDomainPtr domain, unsigned long memory)
function virDomainSetMaxMemory called 0 returned 0% blocks executed 0%
#####: 1307:{
#####: 1308: int ret = -1 , i;
-: 1309: virConnectPtr conn;
-: 1310:
#####: 1311: if (domain == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1312: TODO
call 0 never executed
#####: 1313: return (-1);
-: 1314: }
#####: 1315: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1316: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1317: return (-1);
-: 1318: }
#####: 1319: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1320: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1321: return (-1);
-: 1322: }
#####: 1323: if (memory < 4096) {
branch 0 never executed
branch 1 never executed
#####: 1324: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1325: return (-1);
-: 1326: }
#####: 1327: conn = domain->conn;
-: 1328:
-: 1329: /*
-: 1330: * in that case instead of trying only though one method try all availble.
-: 1331: * If needed that can be changed back if it's a performcance problem.
-: 1332: */
#####: 1333: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1334: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1335: (conn->drivers[i]->domainSetMaxMemory != NULL)) {
#####: 1336: if (conn->drivers[i]->domainSetMaxMemory(domain, memory) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1337: ret = 0;
-: 1338: }
-: 1339: }
#####: 1340: if (ret != 0) {
branch 0 never executed
branch 1 never executed
#####: 1341: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1342: return (-1);
-: 1343: }
#####: 1344: return (ret);
-: 1345:}
-: 1346:
-: 1347:/**
-: 1348: * virDomainSetMemory:
-: 1349: * @domain: a domain object or NULL
-: 1350: * @memory: the memory size in kilobytes
-: 1351: *
-: 1352: * Dynamically change the target amount of physical memory allocated to a
-: 1353: * domain. If domain is NULL, then this change the amount of memory reserved
-: 1354: * to Domain0 i.e. the domain where the application runs.
-: 1355: * This function may requires priviledged access to the hypervisor.
-: 1356: *
-: 1357: * Returns 0 in case of success and -1 in case of failure.
-: 1358: */
-: 1359:int
-: 1360:virDomainSetMemory(virDomainPtr domain, unsigned long memory)
function virDomainSetMemory called 0 returned 0% blocks executed 0%
#####: 1361:{
#####: 1362: int ret = -1 , i;
-: 1363: virConnectPtr conn;
-: 1364:
#####: 1365: if (domain == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1366: TODO
call 0 never executed
#####: 1367: return (-1);
-: 1368: }
#####: 1369: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1370: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1371: return (-1);
-: 1372: }
#####: 1373: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1374: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1375: return (-1);
-: 1376: }
#####: 1377: if (memory < 4096) {
branch 0 never executed
branch 1 never executed
#####: 1378: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1379: return (-1);
-: 1380: }
-: 1381:
#####: 1382: conn = domain->conn;
-: 1383:
-: 1384: /*
-: 1385: * in that case instead of trying only though one method try all availble.
-: 1386: * If needed that can be changed back if it's a performcance problem.
-: 1387: */
#####: 1388: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1389: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1390: (conn->drivers[i]->domainSetMemory != NULL)) {
#####: 1391: if (conn->drivers[i]->domainSetMemory(domain, memory) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1392: ret = 0;
-: 1393: }
-: 1394: }
#####: 1395: if (ret != 0) {
branch 0 never executed
branch 1 never executed
#####: 1396: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1397: return (-1);
-: 1398: }
#####: 1399: return (ret);
-: 1400:}
-: 1401:
-: 1402:/**
-: 1403: * virDomainGetInfo:
-: 1404: * @domain: a domain object
-: 1405: * @info: pointer to a virDomainInfo structure allocated by the user
-: 1406: *
-: 1407: * Extract information about a domain. Note that if the connection
-: 1408: * used to get the domain is limited only a partial set of the information
-: 1409: * can be extracted.
-: 1410: *
-: 1411: * Returns 0 in case of success and -1 in case of failure.
-: 1412: */
-: 1413:int
-: 1414:virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
function virDomainGetInfo called 0 returned 0% blocks executed 0%
#####: 1415:{
-: 1416: int i;
-: 1417:
#####: 1418: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1419: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1420: return (-1);
-: 1421: }
#####: 1422: if (info == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1423: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1424: return (-1);
-: 1425: }
-: 1426:
#####: 1427: memset(info, 0, sizeof(virDomainInfo));
call 0 never executed
-: 1428:
#####: 1429: for (i = 0;i < domain->conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1430: if ((domain->conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1431: (domain->conn->drivers[i]->domainGetInfo != NULL)) {
#####: 1432: if (domain->conn->drivers[i]->domainGetInfo(domain, info) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1433: return 0;
-: 1434: }
-: 1435: }
-: 1436:
#####: 1437: return (-1);
-: 1438:}
-: 1439:
-: 1440:/**
-: 1441: * virDomainGetXMLDesc:
-: 1442: * @domain: a domain object
-: 1443: * @flags: and OR'ed set of extraction flags, not used yet
-: 1444: *
-: 1445: * Provide an XML description of the domain. The description may be reused
-: 1446: * later to relaunch the domain with virDomainCreateLinux().
-: 1447: *
-: 1448: * Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
-: 1449: * the caller must free() the returned value.
-: 1450: */
-: 1451:char *
-: 1452:virDomainGetXMLDesc(virDomainPtr domain, int flags)
function virDomainGetXMLDesc called 0 returned 0% blocks executed 0%
#####: 1453:{
-: 1454: int i;
#####: 1455: char *ret = NULL;
#####: 1456: if (!VIR_IS_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1457: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1458: return (NULL);
-: 1459: }
#####: 1460: if (flags != 0) {
branch 0 never executed
branch 1 never executed
#####: 1461: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1462: return (NULL);
-: 1463: }
-: 1464:
#####: 1465: for (i = 0;i < domain->conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1466: if ((domain->conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1467: (domain->conn->drivers[i]->domainDumpXML != NULL)) {
#####: 1468: ret = domain->conn->drivers[i]->domainDumpXML(domain, flags);
call 0 never executed
#####: 1469: if (ret)
branch 0 never executed
branch 1 never executed
#####: 1470: break;
-: 1471: }
-: 1472: }
#####: 1473: if (!ret) {
branch 0 never executed
branch 1 never executed
#####: 1474: virLibConnError(domain->conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1475: return (NULL);
-: 1476: }
#####: 1477: return(ret);
-: 1478:}
-: 1479:
-: 1480:/**
-: 1481: * virNodeGetInfo:
-: 1482: * @conn: pointer to the hypervisor connection
-: 1483: * @info: pointer to a virNodeInfo structure allocated by the user
-: 1484: *
-: 1485: * Extract hardware information about the node.
-: 1486: *
-: 1487: * Returns 0 in case of success and -1 in case of failure.
-: 1488: */
-: 1489:int
function virNodeGetInfo called 0 returned 0% blocks executed 0%
#####: 1490:virNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info) {
-: 1491: int i;
#####: 1492: int ret = -1;
-: 1493:
#####: 1494: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1495: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 1496: return (-1);
-: 1497: }
#####: 1498: if (info == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1499: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1500: return (-1);
-: 1501: }
-: 1502:
#####: 1503: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1504: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1505: (conn->drivers[i]->nodeGetInfo != NULL)) {
#####: 1506: ret = conn->drivers[i]->nodeGetInfo(conn, info);
call 0 never executed
#####: 1507: if (ret == 0)
branch 0 never executed
branch 1 never executed
#####: 1508: break;
-: 1509: }
-: 1510: }
#####: 1511: if (ret != 0) {
branch 0 never executed
branch 1 never executed
#####: 1512: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1513: return (-1);
-: 1514: }
#####: 1515: return(0);
-: 1516:}
-: 1517:
-: 1518:/************************************************************************
-: 1519: * *
-: 1520: * Handling of defined but not running domains *
-: 1521: * *
-: 1522: ************************************************************************/
-: 1523:
-: 1524:/**
-: 1525: * virDomainDefineXML:
-: 1526: * @conn: pointer to the hypervisor connection
-: 1527: * @xml: the XML description for the domain, preferably in UTF-8
-: 1528: *
-: 1529: * define a domain, but does not start it
-: 1530: *
-: 1531: * Returns NULL in case of error, a pointer to the domain otherwise
-: 1532: */
-: 1533:virDomainPtr
function virDomainDefineXML called 0 returned 0% blocks executed 0%
#####: 1534:virDomainDefineXML(virConnectPtr conn, const char *xml) {
#####: 1535: virDomainPtr ret = NULL;
#####: 1536: const char *name = NULL;
#####: 1537: xmlDocPtr doc = NULL;
#####: 1538: xmlXPathObjectPtr obj = NULL;
#####: 1539: xmlXPathContextPtr ctxt = NULL;
-: 1540:
#####: 1541: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1542: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 1543: return (NULL);
-: 1544: }
#####: 1545: if (conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1546: virLibConnError(conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1547: return (NULL);
-: 1548: }
#####: 1549: if (xml == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1550: virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1551: return (NULL);
-: 1552: }
-: 1553:
-: 1554: /*
-: 1555: * Check the XML description is at least well formed and extract the
-: 1556: * name.
-: 1557: * TODO: a full validation based on RNG for example should be done there
-: 1558: */
#####: 1559: doc = xmlReadMemory(xml, strlen(xml), "domain_define.xml", NULL, 0);
call 0 never executed
call 1 never executed
#####: 1560: if (doc == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1561: virLibConnError(conn, VIR_ERR_XML_ERROR, __FUNCTION__);
call 0 never executed
#####: 1562: goto done;
-: 1563: }
#####: 1564: ctxt = xmlXPathNewContext(doc);
call 0 never executed
#####: 1565: if (ctxt == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1566: goto done;
-: 1567: }
#####: 1568: obj = xmlXPathEval(BAD_CAST "string(/domain/name[1])", ctxt);
call 0 never executed
#####: 1569: if ((obj == NULL) || (obj->type != XPATH_STRING) ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 1570: (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
#####: 1571: virLibConnError(conn, VIR_ERR_NO_NAME, xml);
call 0 never executed
#####: 1572: goto done;
-: 1573: }
#####: 1574: name = (const char *) obj->stringval;
-: 1575:
-: 1576: /*
-: 1577: * Now look it up in the domain pool and check it's not an already run
-: 1578: * domain.
-: 1579: */
#####: 1580: ret = virGetDomain(conn, name, NULL);
call 0 never executed
#####: 1581: if (ret == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1582: goto done;
-: 1583: }
-: 1584: /*
-: 1585: * TODO: the lifecycle of domains, especially predefined ones need to be
-: 1586: * explicitely written down
-: 1587: */
#####: 1588: if (ret->handle != -1) {
branch 0 never executed
branch 1 never executed
#####: 1589: virLibConnError(conn, VIR_ERR_DOM_EXIST, name);
call 0 never executed
#####: 1590: virFreeDomain(conn, ret);
call 0 never executed
#####: 1591: ret = NULL;
#####: 1592: goto done;
-: 1593: }
#####: 1594: if ((ret->uses > 1) && (!(ret->flags & DOMAIN_IS_DEFINED))) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1595: virLibConnError(conn, VIR_ERR_DOM_EXIST, name);
call 0 never executed
#####: 1596: virFreeDomain(conn, ret);
call 0 never executed
#####: 1597: ret = NULL;
#####: 1598: goto done;
-: 1599: }
#####: 1600: ret->flags |= DOMAIN_IS_DEFINED;
#####: 1601: if (ret->xml != NULL) {
branch 0 never executed
branch 1 never executed
#####: 1602: free(ret->xml);
call 0 never executed
-: 1603: }
#####: 1604: ret->xml = strdup(xml);
call 0 never executed
#####: 1605: if (ret->xml == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1606: virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 1607: virFreeDomain(conn, ret);
call 0 never executed
#####: 1608: ret = NULL;
#####: 1609: goto done;
-: 1610: }
-: 1611: /* TODO shall we keep a list of defined domains there ? */
-: 1612:
#####: 1613:done:
#####: 1614: if (obj != NULL)
branch 0 never executed
branch 1 never executed
#####: 1615: xmlXPathFreeObject(obj);
call 0 never executed
#####: 1616: if (ctxt != NULL)
branch 0 never executed
branch 1 never executed
#####: 1617: xmlXPathFreeContext(ctxt);
call 0 never executed
#####: 1618: if (doc != NULL)
branch 0 never executed
branch 1 never executed
#####: 1619: xmlFreeDoc(doc);
call 0 never executed
#####: 1620: return(ret);
-: 1621:}
-: 1622:
-: 1623:/**
-: 1624: * virDomainUndefine:
-: 1625: * @domain: pointer to a defined domain
-: 1626: *
-: 1627: * undefine a domain but does not stop it if it is running
-: 1628: *
-: 1629: * Returns 0 in case of success, -1 in case of error
-: 1630: */
-: 1631:int
function virDomainUndefine called 0 returned 0% blocks executed 0%
#####: 1632:virDomainUndefine(virDomainPtr domain) {
-: 1633: int ret;
-: 1634:
#####: 1635: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1636: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1637: return (-1);
-: 1638: }
#####: 1639: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1640: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1641: return (-1);
-: 1642: }
-: 1643:
-: 1644: /* TODO shall we keep a list of defined domains there ? */
-: 1645:
#####: 1646: ret = virFreeDomain(domain->conn, domain);
call 0 never executed
#####: 1647: if (ret < 0)
branch 0 never executed
branch 1 never executed
#####: 1648: return(-1);
#####: 1649: return(0);
-: 1650:}
-: 1651:
-: 1652:/**
-: 1653: * virConnectListDefinedDomains:
-: 1654: * @conn: pointer to the hypervisor connection
-: 1655: * @names: pointer to an array to store the names
-: 1656: * @maxnames: size of the array
-: 1657: *
-: 1658: * list the defined domains, stores the pointers to the names in @names
-: 1659: *
-: 1660: * Returns the number of names provided in the array or -1 in case of error
-: 1661: */
-: 1662:int
-: 1663:virConnectListDefinedDomains(virConnectPtr conn, const char **names,
function virConnectListDefinedDomains called 0 returned 0% blocks executed 0%
#####: 1664: int maxnames) {
#####: 1665: TODO
call 0 never executed
#####: 1666: return(-1);
-: 1667:}
-: 1668:
-: 1669:/**
-: 1670: * virDomainCreate:
-: 1671: * @domain: pointer to a defined domain
-: 1672: *
-: 1673: * launch a defined domain. If the call succeed the domain moves from the
-: 1674: * defined to the running domains pools.
-: 1675: *
-: 1676: * Returns 0 in case of success, -1 in case of error
-: 1677: */
-: 1678:int
function virDomainCreate called 0 returned 0% blocks executed 0%
#####: 1679:virDomainCreate(virDomainPtr domain) {
-: 1680:
#####: 1681: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1682: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1683: return (-1);
-: 1684: }
#####: 1685: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1686: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1687: return (-1);
-: 1688: }
#####: 1689: return(-1);
-: 1690:}
-: 1691:
-: 1692:/**
-: 1693: * virDomainSetVcpus:
-: 1694: * @domain: pointer to domain object, or NULL for Domain0
-: 1695: * @nvcpus: the new number of virtual CPUs for this domain
-: 1696: *
-: 1697: * Dynamically change the number of virtual CPUs used by the domain.
-: 1698: * Note that this call may fail if the underlying virtualization hypervisor
-: 1699: * does not support it or if growing the number is arbitrary limited.
-: 1700: * This function requires priviledged access to the hypervisor.
-: 1701: *
-: 1702: * Returns 0 in case of success, -1 in case of failure.
-: 1703: */
-: 1704:
-: 1705:int
-: 1706:virDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
function virDomainSetVcpus called 0 returned 0% blocks executed 0%
#####: 1707:{
-: 1708: int i;
-: 1709: virConnectPtr conn;
-: 1710:
#####: 1711: if (domain == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1712: TODO
call 0 never executed
#####: 1713: return (-1);
-: 1714: }
#####: 1715: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1716: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1717: return (-1);
-: 1718: }
#####: 1719: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1720: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1721: return (-1);
-: 1722: }
-: 1723:
#####: 1724: if (nvcpus < 1) {
branch 0 never executed
branch 1 never executed
#####: 1725: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1726: return (-1);
-: 1727: }
#####: 1728: conn = domain->conn;
-: 1729:
-: 1730: /*
-: 1731: * Go though the driver registered entry points but use the
-: 1732: * XEN_HYPERVISOR directly only as a last mechanism
-: 1733: */
#####: 1734: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1735: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 1736: (conn->drivers[i]->no != VIR_DRV_XEN_HYPERVISOR) &&
-: 1737: (conn->drivers[i]->domainSetVcpus != NULL)) {
#####: 1738: if (conn->drivers[i]->domainSetVcpus(domain, nvcpus) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1739: return(0);
-: 1740: }
-: 1741: }
#####: 1742: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1743: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 1744: (conn->drivers[i]->no == VIR_DRV_XEN_HYPERVISOR) &&
-: 1745: (conn->drivers[i]->domainSetVcpus != NULL)) {
#####: 1746: if (conn->drivers[i]->domainSetVcpus(domain, nvcpus) == 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1747: return(0);
-: 1748: }
-: 1749: }
-: 1750:
#####: 1751: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1752: return (-1);
-: 1753:}
-: 1754:
-: 1755:/**
-: 1756: * virDomainPinVcpu:
-: 1757: * @domain: pointer to domain object, or NULL for Domain0
-: 1758: * @vcpu: virtual CPU number
-: 1759: * @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN)
-: 1760: * Each bit set to 1 means that corresponding CPU is usable.
-: 1761: * Bytes are stored in little-endian order: CPU0-7, 8-15...
-: 1762: * In each byte, lowest CPU number is least significant bit.
-: 1763: * @maplen: number of bytes in cpumap, from 1 up to size of CPU map in
-: 1764: * underlying virtualization system (Xen...).
-: 1765: * If maplen < size, missing bytes are set to zero.
-: 1766: * If maplen > size, failure code is returned.
-: 1767: *
-: 1768: * Dynamically change the real CPUs which can be allocated to a virtual CPU.
-: 1769: * This function requires priviledged access to the hypervisor.
-: 1770: *
-: 1771: * Returns 0 in case of success, -1 in case of failure.
-: 1772: */
-: 1773:int
-: 1774:virDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
-: 1775: unsigned char *cpumap, int maplen)
function virDomainPinVcpu called 0 returned 0% blocks executed 0%
#####: 1776:{
-: 1777: int i;
-: 1778: virConnectPtr conn;
-: 1779:
#####: 1780: if (domain == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1781: TODO
call 0 never executed
#####: 1782: return (-1);
-: 1783: }
#####: 1784: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1785: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1786: return (-1);
-: 1787: }
#####: 1788: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1789: virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1790: return (-1);
-: 1791: }
-: 1792:
#####: 1793: if ((vcpu > 32000) || (cpumap == NULL) || (maplen < 1)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 1794: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1795: return (-1);
-: 1796: }
#####: 1797: conn = domain->conn;
-: 1798:
-: 1799: /*
-: 1800: * Go though the driver registered entry points
-: 1801: */
#####: 1802: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1803: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1804: (conn->drivers[i]->domainPinVcpu != NULL)) {
#####: 1805: if (conn->drivers[i]->domainPinVcpu(domain, vcpu,
call 0 never executed
branch 1 never executed
branch 2 never executed
-: 1806: cpumap, maplen) == 0)
#####: 1807: return(0);
-: 1808: }
-: 1809: }
#####: 1810: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1811: return (-1);
-: 1812:}
-: 1813:
-: 1814:/**
-: 1815: * virDomainGetVcpus:
-: 1816: * @domain: pointer to domain object, or NULL for Domain0
-: 1817: * @info: pointer to an array of virVcpuInfo structures (OUT)
-: 1818: * @maxinfo: number of structures in info array
-: 1819: * @cpumaps: pointer to an bit map of real CPUs for all vcpus of this
-: 1820: * domain (in 8-bit bytes) (OUT)
-: 1821: * If cpumaps is NULL, then no cupmap information is returned by the API.
-: 1822: * It's assumed there is <maxinfo> cpumap in cpumaps array.
-: 1823: * The memory allocated to cpumaps must be (maxinfo * maplen) bytes
-: 1824: * (ie: calloc(maxinfo, maplen)).
-: 1825: * One cpumap inside cpumaps has the format described in
-: 1826: * virDomainPinVcpu() API.
-: 1827: * @maplen: number of bytes in one cpumap, from 1 up to size of CPU map in
-: 1828: * underlying virtualization system (Xen...).
-: 1829: *
-: 1830: * Extract information about virtual CPUs of domain, store it in info array
-: 1831: * and also in cpumaps if this pointer is'nt NULL.
-: 1832: *
-: 1833: * Returns the number of info filled in case of success, -1 in case of failure.
-: 1834: */
-: 1835:int
-: 1836:virDomainGetVcpus(virDomainPtr domain, virVcpuInfoPtr info, int maxinfo,
-: 1837: unsigned char *cpumaps, int maplen)
function virDomainGetVcpus called 0 returned 0% blocks executed 0%
#####: 1838:{
-: 1839: int ret;
-: 1840: int i;
-: 1841: virConnectPtr conn;
-: 1842:
#####: 1843: if (domain == NULL) {
branch 0 never executed
branch 1 never executed
#####: 1844: TODO
call 0 never executed
#####: 1845: return (-1);
-: 1846: }
#####: 1847: if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
#####: 1848: virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
call 0 never executed
#####: 1849: return (-1);
-: 1850: }
#####: 1851: if ((info == NULL) || (maxinfo < 1)) {
branch 0 never executed
branch 1 never executed
#####: 1852: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1853: return (-1);
-: 1854: }
#####: 1855: if (cpumaps != NULL && maplen < 1) {
branch 0 never executed
branch 1 never executed
#####: 1856: virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 1857: return (-1);
-: 1858: }
#####: 1859: conn = domain->conn;
-: 1860:
-: 1861: /*
-: 1862: * Go though the driver registered entry points
-: 1863: */
#####: 1864: for (i = 0;i < conn->nb_drivers;i++) {
branch 0 never executed
branch 1 never executed
#####: 1865: if ((conn->drivers[i] != NULL) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 1866: (conn->drivers[i]->domainGetVcpus != NULL)) {
#####: 1867: ret = conn->drivers[i]->domainGetVcpus(domain, info, maxinfo,
call 0 never executed
-: 1868: cpumaps, maplen);
#####: 1869: if (ret >= 0)
branch 0 never executed
branch 1 never executed
#####: 1870: return(ret);
-: 1871: }
-: 1872: }
#####: 1873: virLibConnError(conn, VIR_ERR_CALL_FAILED, __FUNCTION__);
call 0 never executed
#####: 1874: return (-1);
-: 1875:}