aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDr. David Alan Gilbert <dgilbert@redhat.com>2017-04-03 18:18:43 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2017-04-29 18:44:16 +0200
commitaa5e2421f3e838a3f58ea951138043da37033ac6 (patch)
treea0146201eda32254e3690ad18fe11b9c24b81997
parentdb683a5ab88c45c46fff2d4396af26f62aa5237f (diff)
downloadslirp-aa5e2421f3e838a3f58ea951138043da37033ac6.zip
slirp-aa5e2421f3e838a3f58ea951138043da37033ac6.tar.gz
slirp-aa5e2421f3e838a3f58ea951138043da37033ac6.tar.bz2
slirp: VMStatify remaining except for loop
This converts the remaining components, except for the top level loop, to VMState. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
-rw-r--r--slirp.c47
1 files changed, 17 insertions, 30 deletions
diff --git a/slirp.c b/slirp.c
index c6a00a3..ce648a4 100644
--- a/slirp.c
+++ b/slirp.c
@@ -1390,15 +1390,22 @@ static const VMStateDescription vmstate_slirp_socket = {
VMSTATE_END_OF_LIST() }
};
-static void slirp_bootp_save(QEMUFile *f, Slirp *slirp)
-{
- int i;
+static const VMStateDescription vmstate_slirp_bootp_client = {
+ .name = "slirp_bootpclient",
+ .fields = (VMStateField[]){ VMSTATE_UINT16(allocated, BOOTPClient),
+ VMSTATE_BUFFER(macaddr, BOOTPClient),
+ VMSTATE_END_OF_LIST() }
+};
- for (i = 0; i < NB_BOOTP_CLIENTS; i++) {
- qemu_put_be16(f, slirp->bootp_clients[i].allocated);
- qemu_put_buffer(f, slirp->bootp_clients[i].macaddr, 6);
- }
-}
+static const VMStateDescription vmstate_slirp = {
+ .name = "slirp",
+ .version_id = 4,
+ .fields = (VMStateField[]){ VMSTATE_UINT16_V(ip_id, Slirp, 2),
+ VMSTATE_STRUCT_ARRAY(
+ bootp_clients, Slirp, NB_BOOTP_CLIENTS, 3,
+ vmstate_slirp_bootp_client, BOOTPClient),
+ VMSTATE_END_OF_LIST() }
+};
static void slirp_state_save(QEMUFile *f, void *opaque)
{
@@ -1418,22 +1425,10 @@ static void slirp_state_save(QEMUFile *f, void *opaque)
}
qemu_put_byte(f, 0);
- qemu_put_be16(f, slirp->ip_id);
-
- slirp_bootp_save(f, slirp);
+ vmstate_save_state(f, &vmstate_slirp, slirp, NULL);
}
-static void slirp_bootp_load(QEMUFile *f, Slirp *slirp)
-{
- int i;
-
- for (i = 0; i < NB_BOOTP_CLIENTS; i++) {
- slirp->bootp_clients[i].allocated = qemu_get_be16(f);
- qemu_get_buffer(f, slirp->bootp_clients[i].macaddr, 6);
- }
-}
-
static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
{
Slirp *slirp = opaque;
@@ -1468,13 +1463,5 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
so->extra = (void *)ex_ptr->ex_exec;
}
- if (version_id >= 2) {
- slirp->ip_id = qemu_get_be16(f);
- }
-
- if (version_id >= 3) {
- slirp_bootp_load(f, slirp);
- }
-
- return 0;
+ return vmstate_load_state(f, &vmstate_slirp, slirp, version_id);
}