aboutsummaryrefslogtreecommitdiff
path: root/slirp.c
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2009-06-24 14:42:31 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-06-29 08:52:50 -0500
commit16f7094801480524cbd231939691c433c29f3491 (patch)
treedbe74c21574722228569229ae481cb5ee1da32ca /slirp.c
parent3a33877a1624e9fca97ddde86f7ab4794fa510fd (diff)
downloadslirp-16f7094801480524cbd231939691c433c29f3491.zip
slirp-16f7094801480524cbd231939691c433c29f3491.tar.gz
slirp-16f7094801480524cbd231939691c433c29f3491.tar.bz2
slirp: Save/restore bootp client states
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'slirp.c')
-rw-r--r--slirp.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/slirp.c b/slirp.c
index 085d469..67dad75 100644
--- a/slirp.c
+++ b/slirp.c
@@ -222,7 +222,7 @@ Slirp *slirp_init(int restricted, struct in_addr vnetwork,
slirp->opaque = opaque;
- register_savevm("slirp", 0, 2, slirp_state_save, slirp_state_load, slirp);
+ register_savevm("slirp", 0, 3, slirp_state_save, slirp_state_load, slirp);
TAILQ_INSERT_TAIL(&slirp_instances, slirp, entry);
@@ -941,6 +941,16 @@ static void slirp_socket_save(QEMUFile *f, struct socket *so)
slirp_tcp_save(f, so->so_tcpcb);
}
+static void slirp_bootp_save(QEMUFile *f, Slirp *slirp)
+{
+ int i;
+
+ 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 void slirp_state_save(QEMUFile *f, void *opaque)
{
Slirp *slirp = opaque;
@@ -960,6 +970,8 @@ 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);
}
static void slirp_tcp_load(QEMUFile *f, struct tcpcb *tp)
@@ -1056,6 +1068,16 @@ static int slirp_socket_load(QEMUFile *f, struct socket *so)
return 0;
}
+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;
@@ -1095,5 +1117,9 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
slirp->ip_id = qemu_get_be16(f);
}
+ if (version_id >= 3) {
+ slirp_bootp_load(f, slirp);
+ }
+
return 0;
}