static int init_dsps(libxl__domain_suspend_state *dsps) { int rc = ERROR_FAIL; libxl_domain_type type; STATE_AO_GC(dsps->ao); libxl__xswait_init(&dsps->pvcontrol); libxl__ev_evtchn_init(&dsps->guest_evtchn); libxl__ev_xswatch_init(&dsps->guest_watch); libxl__ev_time_init(&dsps->guest_timeout); type = libxl__domain_type(gc, dsps->domid); if (type == LIBXL_DOMAIN_TYPE_INVALID) goto out; dsps->type = type; dsps->guest_evtchn.port = -1; dsps->guest_evtchn_lockfd = -1; dsps->guest_responded = 0; dsps->dm_savefile = libxl__device_model_savefile(gc, dsps->domid); /* Secondary vm is not created, so we cannot get evtchn port */ rc = 0; out: return rc; }
int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic, uint32_t domid, bool hotplug) { int rc; if (!nic->mtu) nic->mtu = 1492; if (!nic->model) { nic->model = strdup("rtl8139"); if (!nic->model) return ERROR_NOMEM; } if (libxl__mac_is_default(&nic->mac)) { const uint8_t *r; libxl_uuid uuid; libxl_uuid_generate(&uuid); r = libxl_uuid_bytearray(&uuid); nic->mac[0] = 0x00; nic->mac[1] = 0x16; nic->mac[2] = 0x3e; nic->mac[3] = r[0] & 0x7f; nic->mac[4] = r[1]; nic->mac[5] = r[2]; } if (!nic->bridge) { nic->bridge = strdup("xenbr0"); if (!nic->bridge) return ERROR_NOMEM; } if ( !nic->script && asprintf(&nic->script, "%s/vif-bridge", libxl__xen_script_dir_path()) < 0 ) return ERROR_FAIL; rc = libxl__resolve_domid(gc, nic->backend_domname, &nic->backend_domid); if (rc < 0) return rc; switch (libxl__domain_type(gc, domid)) { case LIBXL_DOMAIN_TYPE_HVM: if (!nic->nictype) { if (hotplug || (libxl__device_model_version_running(gc, domid) == LIBXL_DEVICE_MODEL_VERSION_NONE)) nic->nictype = LIBXL_NIC_TYPE_VIF; else nic->nictype = LIBXL_NIC_TYPE_VIF_IOEMU; } break; case LIBXL_DOMAIN_TYPE_PV: if (nic->nictype == LIBXL_NIC_TYPE_VIF_IOEMU) { LOG(ERROR, "trying to create PV guest with an emulated interface"); return ERROR_INVAL; } nic->nictype = LIBXL_NIC_TYPE_VIF; break; case LIBXL_DOMAIN_TYPE_INVALID: return ERROR_FAIL; default: abort(); } return rc; }