void xl_ctx_alloc(void) { if (libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, (xentoollog_logger*)logger)) { fprintf(stderr, "cannot init xl context\n"); exit(1); } libxl_childproc_setmode(ctx, &childproc_hooks, 0); }
int hyperxl_initialize_driver(hyperxl_driver** pdriver, bool verbose) { #ifndef LIBXL_HAVE_BUILDINFO_KERNEL return -1; #else hyperxl_driver *driver; const libxl_version_info* version = NULL; uint32_t mem = 0; xentoollog_level log_level = XTL_INFO; *pdriver = (hyperxl_driver*)malloc(sizeof(hyperxl_driver)); if ( *pdriver == NULL ) { return -1; } driver = *pdriver; if (verbose) { log_level = XTL_DEBUG; } driver->logger = (xentoollog_logger*)xtl_createlogger_hyperxl(log_level, 0); if (driver->logger == NULL) { goto release_driver; } if(libxl_ctx_alloc(&driver->ctx, LIBXL_VERSION, 0, driver->logger)) { goto close_logger; } libxl_childproc_setmode(driver->ctx, &libxl_child_hooks, driver->ctx); version = libxl_get_version_info(driver->ctx); if (version == NULL) { goto free_ctx; } driver->version = version->xen_version_major * 1000000 + version->xen_version_minor * 1000; driver->capabilities = strdup(version->capabilities); if(libxl_get_free_memory(driver->ctx, &mem)) { goto free_ctx; } libxl_event_register_callbacks(driver->ctx, &ev_hooks, driver); return 0; free_ctx: libxl_ctx_free(driver->ctx); close_logger: xtl_logger_destroy(driver->logger); release_driver: free(driver); driver = NULL; return -1; #endif //LIBXL_HAVE_BUILDINFO_KERNEL }