return 0;
}
+static void libxl__update_config_nic(libxl__gc *gc, libxl_device_nic *dst,
+ const libxl_device_nic *src)
+{
+ dst->devid = src->devid;
+ dst->nictype = src->nictype;
+ libxl_mac_copy(CTX, &dst->mac, &src->mac);
+}
+
static void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
libxl_device_nic *nic,
libxl__ao_device *aodev)
return COMPARE_DEVID(d1, d2);
}
+static void libxl_device_nic_update_config(libxl__gc *gc, void *d, void *s)
+{
+ libxl__update_config_nic(gc, d, s);
+}
+
DEFINE_DEVICE_TYPE_STRUCT(disk,
.merge = libxl_device_disk_merge,
.dm_needed = libxl_device_disk_dm_needed,
.skip_attach = 1
);
-DEFINE_DEVICE_TYPE_STRUCT(nic);
+DEFINE_DEVICE_TYPE_STRUCT(nic,
+ .update_config = libxl_device_nic_update_config
+);
/*
* Local variables:
libxl_domain_config *dst,
const libxl_domain_config *src)
{
- int i;
+ int i, idx, num;
+ const struct libxl_device_type *dt;
+
+ for (idx = 0;; idx++) {
+ dt = device_type_tbl[idx];
+ if (!dt)
+ break;
- /* update network interface information */
- for (i = 0; i < src->num_nics; i++)
- libxl__update_config_nic(gc, &dst->nics[i], &src->nics[i]);
+ num = *libxl__device_type_get_num(dt, src);
+ if (!dt->update_config || !num)
+ continue;
- /* update vtpm information */
- for (i = 0; i < src->num_vtpms; i++)
- libxl__update_config_vtpm(gc, &dst->vtpms[i], &src->vtpms[i]);
+ for (i = 0; i < num; i++)
+ dt->update_config(gc, libxl__device_type_get_elem(dt, dst, i),
+ libxl__device_type_get_elem(dt, src, i));
+ }
/* update guest UUID */
libxl_uuid_copy(CTX, &dst->c_info.uuid, &src->c_info.uuid);
int (*compare)(void *, void *);
void (*merge)(libxl_ctx *, void *, void *);
int (*dm_needed)(void *, unsigned);
+ void (*update_config)(libxl__gc *, void *, void *);
};
#define DEFINE_DEVICE_TYPE_STRUCT_X(name, sname, ...) \
void libxl__update_domain_configuration(libxl__gc *gc,
libxl_domain_config *dst,
const libxl_domain_config *src);
-static inline void libxl__update_config_nic(libxl__gc *gc,
- libxl_device_nic *dst,
- const libxl_device_nic *src)
-{
- dst->devid = src->devid;
- dst->nictype = src->nictype;
- libxl_mac_copy(CTX, &dst->mac, &src->mac);
-}
-
-static inline void libxl__update_config_vtpm(libxl__gc *gc,
- libxl_device_vtpm *dst,
- libxl_device_vtpm *src)
-{
- dst->devid = src->devid;
- libxl_uuid_copy(CTX, &dst->uuid, &src->uuid);
-}
/* Target memory in xenstore is different from what user has
* asked for. The difference is video_memkb + (possible) fudge.
return 0;
}
+static void libxl__update_config_vtpm(libxl__gc *gc, libxl_device_vtpm *dst,
+ libxl_device_vtpm *src)
+{
+ dst->devid = src->devid;
+ libxl_uuid_copy(CTX, &dst->uuid, &src->uuid);
+}
+
static void libxl__device_vtpm_add(libxl__egc *egc, uint32_t domid,
libxl_device_vtpm *vtpm,
libxl__ao_device *aodev)
free(list);
}
+static void libxl_device_vtpm_update_config(libxl__gc *gc, void *d, void *s)
+{
+ libxl__update_config_vtpm(gc, d, s);
+}
+
LIBXL_DEFINE_DEVICE_ADD(vtpm)
static LIBXL_DEFINE_DEVICES_ADD(vtpm)
LIBXL_DEFINE_DEVICE_REMOVE(vtpm)
-DEFINE_DEVICE_TYPE_STRUCT(vtpm);
+DEFINE_DEVICE_TYPE_STRUCT(vtpm,
+ .update_config = libxl_device_vtpm_update_config
+);
/*
* Local variables: