]> git.proxmox.com Git - qemu.git/commitdiff
slirp: Make IP packet ID consistent
authorJan Kiszka <jan.kiszka@siemens.com>
Wed, 24 Jun 2009 12:42:30 +0000 (14:42 +0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Mon, 29 Jun 2009 13:52:48 +0000 (08:52 -0500)
Currently, ip_id is always initialized to 0 on slirp startup (despite
the broken attempt to derive it from the clock). This is good for
reproducibility. But it is not preserved across save/restore. This patch
therefore drops the dead initialization code from ip_init and introduces
ip_id to the persistent slirp state.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
slirp/ip_input.c
slirp/slirp.c

index 0356eb587bb2f77c18f36d1d166e3ca422012e22..b07d3d5d5d3ff3f952cedd57d1e915246527c417 100644 (file)
@@ -59,7 +59,6 @@ void
 ip_init(void)
 {
        ipq.ip_link.next = ipq.ip_link.prev = &ipq.ip_link;
-       ip_id = tt.tv_sec & 0xffff;
        udp_init();
        tcp_init();
 }
index ea66c0cee78db7a5a9682547602faf5acf352a52..02f6fe50fc504bcacb543aced09fd9c5e6a99752 100644 (file)
@@ -234,7 +234,7 @@ void slirp_init(int restricted, struct in_addr vnetwork,
     vdhcp_startaddr = vdhcp_start;
     vnameserver_addr = vnameserver;
 
-    register_savevm("slirp", 0, 1, slirp_state_save, slirp_state_load, NULL);
+    register_savevm("slirp", 0, 2, slirp_state_save, slirp_state_load, NULL);
 }
 
 #define CONN_CANFSEND(so) (((so)->so_state & (SS_FCANTSENDMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED)
@@ -973,6 +973,8 @@ static void slirp_state_save(QEMUFile *f, void *opaque)
             slirp_socket_save(f, so);
         }
     qemu_put_byte(f, 0);
+
+    qemu_put_be16(f, ip_id);
 }
 
 static void slirp_tcp_load(QEMUFile *f, struct tcpcb *tp)
@@ -1103,5 +1105,9 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
         so->extra = (void *)ex_ptr->ex_exec;
     }
 
+    if (version_id >= 2) {
+        ip_id = qemu_get_be16(f);
+    }
+
     return 0;
 }