Commit de1d099a authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/thibault/tags/samuel-thibault-2' into staging



slirp updates (2)

# gpg: Signature made Thu 31 Mar 2016 23:19:08 BST using RSA key ID FB6B2F1D
# gpg: Good signature from "Samuel Thibault <samuel.thibault@gnu.org>"
# gpg:                 aka "Samuel Thibault <sthibault@debian.org>"
# gpg:                 aka "Samuel Thibault <samuel.thibault@inria.fr>"
# gpg:                 aka "Samuel Thibault <samuel.thibault@labri.fr>"
# gpg:                 aka "Samuel Thibault <samuel.thibault@ens-lyon.org>"
# gpg: WARNING: This key is not certified with sufficiently trusted signatures!
# gpg:          It is not certain that the signature belongs to the owner.
# Primary key fingerprint: 900C B024 B679 31D4 0F82  304B D017 8C76 7D06 9EE6
#      Subkey fingerprint: F632 74CD C630 0873 CB3D  29D9 E3E5 1CE8 FB6B 2F1D

* remotes/thibault/tags/samuel-thibault-2:
  slirp: Fix migration from older versions of QEMU to the current one

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 57528a3f eaf136f9
Loading
Loading
Loading
Loading
+26 −18
Original line number Diff line number Diff line
@@ -1233,12 +1233,19 @@ static int slirp_sbuf_load(QEMUFile *f, struct sbuf *sbuf)
    return 0;
}

static int slirp_socket_load(QEMUFile *f, struct socket *so)
static int slirp_socket_load(QEMUFile *f, struct socket *so, int version_id)
{
    if (tcp_attach(so) < 0)
        return -ENOMEM;

    so->so_urgc = qemu_get_be32(f);
    if (version_id <= 3) {
        so->so_ffamily = AF_INET;
        so->so_faddr.s_addr = qemu_get_be32(f);
        so->so_laddr.s_addr = qemu_get_be32(f);
        so->so_fport = qemu_get_be16(f);
        so->so_lport = qemu_get_be16(f);
    } else {
        so->so_ffamily = qemu_get_be16(f);
        switch (so->so_ffamily) {
        case AF_INET:
@@ -1247,7 +1254,7 @@ static int slirp_socket_load(QEMUFile *f, struct socket *so)
            break;
        default:
            error_report(
                "so_ffamily unknown, unable to restore so_faddr and so_lport\n");
                "so_ffamily unknown, unable to restore so_faddr and so_lport");
        }
        so->so_lfamily = qemu_get_be16(f);
        switch (so->so_lfamily) {
@@ -1257,7 +1264,8 @@ static int slirp_socket_load(QEMUFile *f, struct socket *so)
            break;
        default:
            error_report(
                "so_ffamily unknown, unable to restore so_laddr and so_lport\n");
                "so_ffamily unknown, unable to restore so_laddr and so_lport");
        }
    }
    so->so_iptos = qemu_get_byte(f);
    so->so_emu = qemu_get_byte(f);
@@ -1294,7 +1302,7 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
        if (!so)
            return -ENOMEM;

        ret = slirp_socket_load(f, so);
        ret = slirp_socket_load(f, so, version_id);

        if (ret < 0)
            return ret;