/* 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; }
// automatically generated. Do not modify static void testNetworks(xen_session *session) { printf("\nGet all the Network Records\n"); xen_network_set *network_set; bool d = xen_network_get_all(session, &network_set); if (d) { size_t i = 0; for (; i < network_set->size; ++i) { xen_network_record *network_record; xen_network_get_record(session, &network_record, network_set->contents[i]); char *handle = (char*) network_record->handle; char *opaque = (char*) network_set->contents[i]; if (strcmp(handle, opaque) == 0) printf("identical: %s\n", opaque); else printf("record->handle[%s] v.s. set->contents[%d][%s]\n", opaque, i, handle); xen_network_record_free(network_record); } } else { print_error(session); } xen_network_set_free(network_set); printf("\n==============================================\n\n"); }
/******************************************************** * Function to enumerate provider specific resource * * @param session - handle to a xen_utils_session object * @param resources - pointer to the provider_resource_list * object, the provider specific resource defined above * is a member of this struct * @return CMPIrc error codes ********************************************************/ static CMPIrc xen_resource_list_enum( xen_utils_session *session, provider_resource_list *resources ) { xen_network_set *net_set = NULL; if(!xen_network_get_all(session->xen, &net_set) || net_set->size ==0) { _SBLIM_TRACE(_SBLIM_TRACE_LEVEL_ERROR, ("--- Unable to obtain network list")); return CMPI_RC_ERR_FAILED; } local_net_cap_list * ctx = calloc(sizeof(local_net_cap_list), 1); if(ctx == NULL) return CMPI_RC_ERR_FAILED; ctx->network_set = net_set; ctx->currentsettingdatanum = 0; ctx->currentnetnum = 0; resources->ctx = ctx; return CMPI_RC_OK; }