]> git.proxmox.com Git - qemu.git/blobdiff - slirp/slirp.c
Merge remote-tracking branch 'kwolf/for-anthony' into staging
[qemu.git] / slirp / slirp.c
index 655b3f40c87dc26beda943966586d8477e80a5b2..38e0a2193ae63282fc4ce96f687ba7bc49a2f9c1 100644 (file)
@@ -29,6 +29,8 @@
 
 /* host loopback address */
 struct in_addr loopback_addr;
+/* host loopback network mask */
+unsigned long loopback_mask;
 
 /* emulated hosts use the MAC addr 52:55:IP:IP:IP:IP */
 static const uint8_t special_ethaddr[ETH_ALEN] = {
@@ -191,6 +193,7 @@ static void slirp_init_once(void)
 #endif
 
     loopback_addr.s_addr = htonl(INADDR_LOOPBACK);
+    loopback_mask = htonl(IN_CLASSA_NET);
 }
 
 static void slirp_state_save(QEMUFile *f, void *opaque);
@@ -246,6 +249,9 @@ void slirp_cleanup(Slirp *slirp)
 
     unregister_savevm(NULL, "slirp", slirp);
 
+    ip_cleanup(slirp);
+    m_cleanup(slirp);
+
     g_free(slirp->tftp_prefix);
     g_free(slirp->bootp_filename);
     g_free(slirp);
@@ -255,6 +261,13 @@ void slirp_cleanup(Slirp *slirp)
 #define CONN_CANFRCV(so) (((so)->so_state & (SS_FCANTRCVMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED)
 #define UPD_NFDS(x) if (nfds < (x)) nfds = (x)
 
+void slirp_update_timeout(uint32_t *timeout)
+{
+    if (!QTAILQ_EMPTY(&slirp_instances)) {
+        *timeout = MIN(1000, *timeout);
+    }
+}
+
 void slirp_select_fill(int *pnfds,
                        fd_set *readfds, fd_set *writefds, fd_set *xfds)
 {
@@ -581,12 +594,7 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds,
                 }
        }
 
-       /*
-        * See if we can start outputting
-        */
-       if (slirp->if_queued) {
-           if_start(slirp);
-       }
+        if_start(slirp);
     }
 
        /* clear global file descriptor sets.
@@ -818,7 +826,7 @@ int slirp_add_exec(Slirp *slirp, int do_pty, const void *args,
 ssize_t slirp_send(struct socket *so, const void *buf, size_t len, int flags)
 {
        if (so->s == -1 && so->extra) {
-               qemu_chr_write(so->extra, buf, len);
+               qemu_chr_fe_write(so->extra, buf, len);
                return len;
        }