[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 21 of 27 v3] libxl: convert NIC handling to device API
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1318941402 -3600 # Node ID 576b80340b0e92360792399d67aa26002b2771fc # Parent c245f495b53be00648e2bae4911675142e72e9c8 libxl: convert NIC handling to device API Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> diff -r c245f495b53b -r 576b80340b0e tools/libxl/libxl.c --- a/tools/libxl/libxl.c Tue Oct 18 13:36:42 2011 +0100 +++ b/tools/libxl/libxl.c Tue Oct 18 13:36:42 2011 +0100 @@ -1187,32 +1187,46 @@ int libxl_device_disk_local_detach(libxl } /******************************************************************************/ -int libxl_device_nic_init(libxl_device_nic *nic_info, int devnum) +int libxl_device_nic_init(libxl_ctx *ctx, libxl_device_nic *nic) { const uint8_t *r; libxl_uuid uuid; libxl_uuid_generate(&uuid); r = libxl_uuid_bytearray(&uuid); - memset(nic_info, '\0', sizeof(*nic_info)); - - nic_info->backend_domid = 0; - nic_info->devid = devnum; - nic_info->mtu = 1492; - nic_info->model = strdup("rtl8139"); - nic_info->mac[0] = 0x00; - nic_info->mac[1] = 0x16; - nic_info->mac[2] = 0x3e; - nic_info->mac[3] = r[0] & 0x7f; - nic_info->mac[4] = r[1]; - nic_info->mac[5] = r[2]; - nic_info->ifname = NULL; - nic_info->bridge = strdup("xenbr0"); - nic_info->ip = NULL; - if ( asprintf(&nic_info->script, "%s/vif-bridge", + memset(nic, '\0', sizeof(*nic)); + + nic->backend_domid = 0; + nic->devid = -1; + nic->mtu = 1492; + nic->model = strdup("rtl8139"); + 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]; + nic->ifname = NULL; + nic->bridge = strdup("xenbr0"); + nic->ip = NULL; + if ( asprintf(&nic->script, "%s/vif-bridge", libxl_xen_script_dir_path()) < 0 ) return ERROR_FAIL; - nic_info->nictype = LIBXL_NIC_TYPE_IOEMU; + nic->nictype = LIBXL_NIC_TYPE_IOEMU; + return 0; +} + +static int libxl__device_from_nic(libxl__gc *gc, uint32_t domid, + libxl_device_nic *nic, + libxl__device *device) +{ + device->backend_devid = nic->devid; + device->backend_domid = nic->backend_domid; + device->backend_kind = LIBXL__DEVICE_KIND_VIF; + device->devid = nic->devid; + device->domid = domid; + device->kind = LIBXL__DEVICE_KIND_VIF; + return 0; } @@ -1249,12 +1263,8 @@ int libxl_device_nic_add(libxl_ctx *ctx, } } - device.backend_devid = nic->devid; - device.backend_domid = nic->backend_domid; - device.backend_kind = LIBXL__DEVICE_KIND_VIF; - device.devid = nic->devid; - device.domid = domid; - device.kind = LIBXL__DEVICE_KIND_VIF; + rc = libxl__device_from_nic(&gc, domid, nic, &device); + if ( rc != 0 ) goto out_free; flexarray_append(back, "frontend-id"); flexarray_append(back, libxl__sprintf(&gc, "%d", domid)); @@ -1305,29 +1315,37 @@ out: return rc; } -int libxl_device_nic_del(libxl_ctx *ctx, uint32_t domid, - libxl_device_nic *nic, int wait) +int libxl_device_nic_remove(libxl_ctx *ctx, uint32_t domid, + libxl_device_nic *nic) { libxl__gc gc = LIBXL_INIT_GC(ctx); libxl__device device; int rc; - device.backend_devid = nic->devid; - device.backend_domid = nic->backend_domid; - device.backend_kind = LIBXL__DEVICE_KIND_VIF; - device.devid = nic->devid; - device.domid = domid; - device.kind = LIBXL__DEVICE_KIND_VIF; - - if (wait) - rc = libxl__device_remove(&gc, &device, wait); - else - rc = libxl__device_destroy(&gc, &device); - + rc = libxl__device_from_nic(&gc, domid, nic, &device); + if (rc != 0) goto out; + + rc = libxl__device_remove(&gc, &device, 1); +out: libxl__free_all(&gc); return rc; } +int libxl_device_nic_destroy(libxl_ctx *ctx, uint32_t domid, + libxl_device_nic *nic) +{ + libxl__gc gc = LIBXL_INIT_GC(ctx); + libxl__device device; + int rc; + + rc = libxl__device_from_nic(&gc, domid, nic, &device); + if (rc != 0) goto out; + + rc = libxl__device_destroy(&gc, &device); +out: + libxl__free_all(&gc); + return rc; +} static void libxl__device_nic_from_xs_be(libxl__gc *gc, const char *be_path, libxl_device_nic *nic) diff -r c245f495b53b -r 576b80340b0e tools/libxl/libxl.h --- a/tools/libxl/libxl.h Tue Oct 18 13:36:42 2011 +0100 +++ b/tools/libxl/libxl.h Tue Oct 18 13:36:42 2011 +0100 @@ -463,9 +463,12 @@ int libxl_cdrom_insert(libxl_ctx *ctx, u char * libxl_device_disk_local_attach(libxl_ctx *ctx, libxl_device_disk *disk); int libxl_device_disk_local_detach(libxl_ctx *ctx, libxl_device_disk *disk); -int libxl_device_nic_init(libxl_device_nic *nic, int dev_num); +/* Network Interfaces */ +int libxl_device_nic_init(libxl_ctx *ctx, libxl_device_nic *nic); int libxl_device_nic_add(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic); -int libxl_device_nic_del(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic, int wait); +int libxl_device_nic_remove(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic); +int libxl_device_nic_destroy(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic); + libxl_device_nic *libxl_device_nic_list(libxl_ctx *ctx, uint32_t domid, int *num); int libxl_device_nic_getinfo(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic, libxl_nicinfo *nicinfo); diff -r c245f495b53b -r 576b80340b0e tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Tue Oct 18 13:36:42 2011 +0100 +++ b/tools/libxl/xl_cmdimpl.c Tue Oct 18 13:36:42 2011 +0100 @@ -762,7 +762,8 @@ static void parse_config_data(const char d_config->vifs = (libxl_device_nic *) realloc(d_config->vifs, sizeof (libxl_device_nic) * (d_config->num_vifs+1)); nic = d_config->vifs + d_config->num_vifs; - CHK_ERRNO( libxl_device_nic_init(nic, d_config->num_vifs) ); + CHK_ERRNO( libxl_device_nic_init(ctx, nic) ); + nic->devid = d_config->num_vifs; if (default_vifscript) { free(nic->script); @@ -3972,7 +3973,7 @@ int main_networkattach(int argc, char ** fprintf(stderr, "%s is an invalid domain identifier\n", argv[optind]); return 1; } - libxl_device_nic_init(&nic, -1); + libxl_device_nic_init(ctx, &nic); for (argv += optind+1, argc -= optind+1; argc > 0; ++argv, --argc) { if (MATCH_OPTION("type", *argv, oparg)) { if (!strcmp("vif", oparg)) { @@ -4089,7 +4090,7 @@ int main_networkdetach(int argc, char ** return 1; } } - if (libxl_device_nic_del(ctx, domid, &nic, 1)) { + if (libxl_device_nic_remove(ctx, domid, &nic)) { fprintf(stderr, "libxl_device_nic_del failed.\n"); return 1; } diff -r c245f495b53b -r 576b80340b0e tools/ocaml/libs/xl/genwrap.py --- a/tools/ocaml/libs/xl/genwrap.py Tue Oct 18 13:36:42 2011 +0100 +++ b/tools/ocaml/libs/xl/genwrap.py Tue Oct 18 13:36:42 2011 +0100 @@ -33,9 +33,7 @@ functions = { # ( name , [type1,type2,.. "device_console": [ ("add", ["t", "domid", "unit"]), ], "device_disk": DEVICE_FUNCTIONS, - "device_nic": [ ("add", ["t", "domid", "unit"]), - ("del", ["t", "domid", "unit"]), - ], + "device_nic": DEVICE_FUNCTIONS, "device_pci": [ ("add", ["t", "domid", "unit"]), ("remove", ["t", "domid", "unit"]), ("shutdown", ["domid", "unit"]), diff -r c245f495b53b -r 576b80340b0e tools/ocaml/libs/xl/xenlight_stubs.c --- a/tools/ocaml/libs/xl/xenlight_stubs.c Tue Oct 18 13:36:42 2011 +0100 +++ b/tools/ocaml/libs/xl/xenlight_stubs.c Tue Oct 18 13:36:42 2011 +0100 @@ -281,7 +281,7 @@ value stub_xl_device_nic_del(value info, device_nic_val(&gc, &lg, &c_info, info); INIT_CTX(); - ret = libxl_device_nic_del(ctx, Int_val(domid), &c_info, 0); + ret = libxl_device_nic_remove(ctx, Int_val(domid), &c_info); if (ret != 0) failwith_xl("nic_del", &lg); FREE_CTX(); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |