aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-03-01 12:26:14 +0000
committerIan Campbell <ian.campbell@citrix.com>2012-03-01 12:26:14 +0000
commit5c5a36663a1d54ff519df792e7d1dae22d181932 (patch)
tree19f2d07a8aaa0f834b18be1e734b52b5c6990013 /tools
parentb5f5a358b5368ed6e1f20ab61ee4634b0791811d (diff)
downloadxen-5c5a36663a1d54ff519df792e7d1dae22d181932.tar.gz
xen-5c5a36663a1d54ff519df792e7d1dae22d181932.tar.bz2
xen-5c5a36663a1d54ff519df792e7d1dae22d181932.zip
libxl: nic: use _init/_setdefault
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/libxl/libxl.c58
-rw-r--r--tools/libxl/libxl.h2
-rw-r--r--tools/libxl/libxl_internal.h1
-rw-r--r--tools/libxl/xl_cmdimpl.c4
4 files changed, 40 insertions, 25 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 40f79e27ff..33a2e00801 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1677,32 +1677,43 @@ int libxl_device_disk_local_detach(libxl_ctx *ctx, libxl_device_disk *disk)
}
/******************************************************************************/
-int libxl_device_nic_init(libxl_ctx *ctx, libxl_device_nic *nic)
+void libxl_device_nic_init(libxl_device_nic *nic)
{
- const uint8_t *r;
- libxl_uuid uuid;
-
- libxl_uuid_generate(&uuid);
- r = libxl_uuid_bytearray(&uuid);
memset(nic, '\0', sizeof(*nic));
+}
+
+int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic)
+{
+ if (!nic->mtu)
+ nic->mtu = 1492;
+ if (!nic->model) {
+ nic->model = strdup("rtl8139");
+ if (!nic->model) return ERROR_NOMEM;
+ }
+ if (!nic->mac[0] && !nic->mac[1] && !nic->mac[2] &&
+ !nic->mac[3] && !nic->mac[4] && !nic->mac[5]) {
+ const uint8_t *r;
+ libxl_uuid uuid;
- 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 )
+ 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;
- nic->nictype = LIBXL_NIC_TYPE_IOEMU;
+ if (!nic->nictype)
+ nic->nictype = LIBXL_NIC_TYPE_IOEMU;
return 0;
}
@@ -1729,6 +1740,9 @@ int libxl_device_nic_add(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic)
char *dompath, **l;
unsigned int nb, rc;
+ rc = libxl__device_nic_setdefault(gc, nic);
+ if (rc) goto out;
+
front = flexarray_make(16, 1);
if (!front) {
rc = ERROR_NOMEM;
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 770d3bbea1..68fb1a45e6 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -524,7 +524,7 @@ 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);
/* Network Interfaces */
-int libxl_device_nic_init(libxl_ctx *ctx, libxl_device_nic *nic);
+void libxl_device_nic_init(libxl_device_nic *nic);
int libxl_device_nic_add(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic);
int libxl_device_nic_remove(libxl_ctx *ctx, uint32_t domid,
libxl_device_nic *nic,
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 590047eb2e..4a9148ca32 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -193,6 +193,7 @@ _hidden int libxl__domain_build_info_setdefault(libxl__gc *gc,
libxl_domain_build_info *b_info);
_hidden int libxl__device_disk_setdefault(libxl__gc *gc,
libxl_device_disk *disk);
+_hidden int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic);
struct libxl__evgen_domain_death {
uint32_t domid;
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 70810eb335..fe60ab58cb 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -844,7 +844,7 @@ static void parse_config_data(const char *configfile_filename_report,
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(ctx, nic) );
+ libxl_device_nic_init(nic);
nic->devid = d_config->num_vifs;
if (default_vifscript) {
@@ -4614,7 +4614,7 @@ int main_networkattach(int argc, char **argv)
fprintf(stderr, "%s is an invalid domain identifier\n", argv[optind]);
return 1;
}
- libxl_device_nic_init(ctx, &nic);
+ libxl_device_nic_init(&nic);
for (argv += optind+1, argc -= optind+1; argc > 0; ++argv, --argc) {
if (MATCH_OPTION("type", *argv, oparg)) {
if (!strcmp("vif", oparg)) {