/* creates network intereface for VM */ int createVifNetwork (virConnectPtr conn, xen_vm vm, char *device, char *bridge, char *mac) { xen_session *session = ((struct _xenapiPrivate *)(conn->privateData))->session; xen_vm xvm = NULL; char *uuid = NULL; xen_vm_get_uuid(session, &uuid, vm); if (uuid) { if (!xen_vm_get_by_uuid(session, &xvm, uuid)) return -1; VIR_FREE(uuid); } xen_vm_record_opt *vm_opt = xen_vm_record_opt_alloc(); vm_opt->is_record = 0; vm_opt->u.handle = xvm; xen_network_set *net_set = NULL; xen_network_record *net_rec = NULL; int cnt = 0; if (xen_network_get_all(session, &net_set)) { for(cnt = 0; cnt < net_set->size; cnt++) { if (xen_network_get_record(session, &net_rec, net_set->contents[cnt])) { if (STREQ(net_rec->bridge, bridge)) { break; } else { xen_network_record_free(net_rec); } } } } if (cnt < net_set->size && net_rec) { xen_network network = NULL; xen_network_get_by_uuid(session, &network, net_rec->uuid); xen_network_record_opt *network_opt = xen_network_record_opt_alloc(); network_opt->is_record = 0; network_opt->u.handle = network; xen_vif_record *vif_record = xen_vif_record_alloc(); vif_record->mac = mac; vif_record->vm = vm_opt; vif_record->network = network_opt; xen_vif vif = NULL; vif_record->other_config = xen_string_string_map_alloc(0); vif_record->runtime_properties = xen_string_string_map_alloc(0); vif_record->qos_algorithm_params = xen_string_string_map_alloc(0); vif_record->device = strdup(device); xen_vif_create(session, &vif, vif_record); if (!vif) { xen_vif_free(vif); xen_vif_record_free(vif_record); xen_network_record_free(net_rec); xen_network_set_free(net_set); return 0; } xen_vif_record_free(vif_record); xen_network_record_free(net_rec); } if (net_set != NULL) xen_network_set_free(net_set); return -1; }
/***************************************************************************** * Function to get a provider specific resource identified by an id * * @param res_uuid - resource identifier for the provider specific resource * @param session - handle to the xen_utils_session object * @param prov_res - provide_resource object to be filled in with the provider * specific resource * @return CMPIrc error codes *****************************************************************************/ static CMPIrc xen_resource_record_get_from_id( char *res_uuid, /* in */ xen_utils_session *session, /* in */ provider_resource *prov_res /* in , out */ ) { char buf[MAX_INSTANCEID_LEN]; _CMPIStrncpySystemNameFromID(buf, res_uuid, sizeof(buf)); xen_network network; if(!xen_network_get_by_uuid(session->xen, &network, res_uuid)) { xen_utils_trace_error(session->xen, __FILE__, __LINE__); return CMPI_RC_ERR_NOT_FOUND; } _CMPIStrncpyDeviceNameFromID(buf, res_uuid, sizeof(buf)); /* Generate raw data for the single resource. */ int settingdatanum; if(strcmp(buf, "NetworkConnectionMinimum") == 0) settingdatanum = 0; else if(strcmp(buf, "NetworkConnectionMaximum") == 0) settingdatanum = 1; else if(strcmp(buf, "NetworkConnectionIncrement") == 0) settingdatanum = 2; else if(strcmp(buf, "NetworkConnectionDefault") == 0) settingdatanum = 3; else return CMPI_RC_ERR_FAILED; populate_resource(session, prov_res, network, settingdatanum); xen_network_free(network); return CMPI_RC_OK; }