Commit 0a1f851eb7f3eee5f980a0bdb6687eeee1b60a71

Authored by Jan Kiszka
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 }
... ...