Commit 0a1f851eb7f3eee5f980a0bdb6687eeee1b60a71
Committed by
Anthony Liguori
1 parent
b1c99fcd
slirp: Save/restore bootp client states
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
1 changed file
with
27 additions
and
1 deletions
slirp/slirp.c
| ... | ... | @@ -222,7 +222,7 @@ Slirp *slirp_init(int restricted, struct in_addr vnetwork, |
| 222 | 222 | |
| 223 | 223 | slirp->opaque = opaque; |
| 224 | 224 | |
| 225 | - register_savevm("slirp", 0, 2, slirp_state_save, slirp_state_load, slirp); | |
| 225 | + register_savevm("slirp", 0, 3, slirp_state_save, slirp_state_load, slirp); | |
| 226 | 226 | |
| 227 | 227 | TAILQ_INSERT_TAIL(&slirp_instances, slirp, entry); |
| 228 | 228 | |
| ... | ... | @@ -942,6 +942,16 @@ static void slirp_socket_save(QEMUFile *f, struct socket *so) |
| 942 | 942 | slirp_tcp_save(f, so->so_tcpcb); |
| 943 | 943 | } |
| 944 | 944 | |
| 945 | +static void slirp_bootp_save(QEMUFile *f, Slirp *slirp) | |
| 946 | +{ | |
| 947 | + int i; | |
| 948 | + | |
| 949 | + for (i = 0; i < NB_BOOTP_CLIENTS; i++) { | |
| 950 | + qemu_put_be16(f, slirp->bootp_clients[i].allocated); | |
| 951 | + qemu_put_buffer(f, slirp->bootp_clients[i].macaddr, 6); | |
| 952 | + } | |
| 953 | +} | |
| 954 | + | |
| 945 | 955 | static void slirp_state_save(QEMUFile *f, void *opaque) |
| 946 | 956 | { |
| 947 | 957 | Slirp *slirp = opaque; |
| ... | ... | @@ -961,6 +971,8 @@ static void slirp_state_save(QEMUFile *f, void *opaque) |
| 961 | 971 | qemu_put_byte(f, 0); |
| 962 | 972 | |
| 963 | 973 | qemu_put_be16(f, slirp->ip_id); |
| 974 | + | |
| 975 | + slirp_bootp_save(f, slirp); | |
| 964 | 976 | } |
| 965 | 977 | |
| 966 | 978 | static void slirp_tcp_load(QEMUFile *f, struct tcpcb *tp) |
| ... | ... | @@ -1057,6 +1069,16 @@ static int slirp_socket_load(QEMUFile *f, struct socket *so) |
| 1057 | 1069 | return 0; |
| 1058 | 1070 | } |
| 1059 | 1071 | |
| 1072 | +static void slirp_bootp_load(QEMUFile *f, Slirp *slirp) | |
| 1073 | +{ | |
| 1074 | + int i; | |
| 1075 | + | |
| 1076 | + for (i = 0; i < NB_BOOTP_CLIENTS; i++) { | |
| 1077 | + slirp->bootp_clients[i].allocated = qemu_get_be16(f); | |
| 1078 | + qemu_get_buffer(f, slirp->bootp_clients[i].macaddr, 6); | |
| 1079 | + } | |
| 1080 | +} | |
| 1081 | + | |
| 1060 | 1082 | static int slirp_state_load(QEMUFile *f, void *opaque, int version_id) |
| 1061 | 1083 | { |
| 1062 | 1084 | Slirp *slirp = opaque; |
| ... | ... | @@ -1096,5 +1118,9 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id) |
| 1096 | 1118 | slirp->ip_id = qemu_get_be16(f); |
| 1097 | 1119 | } |
| 1098 | 1120 | |
| 1121 | + if (version_id >= 3) { | |
| 1122 | + slirp_bootp_load(f, slirp); | |
| 1123 | + } | |
| 1124 | + | |
| 1099 | 1125 | return 0; |
| 1100 | 1126 | } | ... | ... |