diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2009-06-24 14:42:31 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-06-29 08:52:50 -0500 |
commit | 16f7094801480524cbd231939691c433c29f3491 (patch) | |
tree | dbe74c21574722228569229ae481cb5ee1da32ca /slirp.c | |
parent | 3a33877a1624e9fca97ddde86f7ab4794fa510fd (diff) | |
download | slirp-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.c | 28 |
1 files changed, 27 insertions, 1 deletions
@@ -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; } |