From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32809) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a7OzL-0005zU-JB for qemu-devel@nongnu.org; Fri, 11 Dec 2015 09:48:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a7OzH-0000x5-8x for qemu-devel@nongnu.org; Fri, 11 Dec 2015 09:48:03 -0500 Received: from mx1.redhat.com ([209.132.183.28]:33529) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a7OzH-0000ww-1G for qemu-devel@nongnu.org; Fri, 11 Dec 2015 09:47:59 -0500 References: <20151211001505.GV2905@var.home> <1449792930-27293-1-git-send-email-samuel.thibault@ens-lyon.org> <1449792930-27293-4-git-send-email-samuel.thibault@ens-lyon.org> From: Thomas Huth Message-ID: <566AE218.50008@redhat.com> Date: Fri, 11 Dec 2015 15:47:52 +0100 MIME-Version: 1.0 In-Reply-To: <1449792930-27293-4-git-send-email-samuel.thibault@ens-lyon.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 04/18] slirp: Make Socket structure IPv6 compatible List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Samuel Thibault , qemu-devel@nongnu.org Cc: zhanghailiang , Li Zhijian , Stefan Hajnoczi , Jason Wang , Dave Gilbert , Vasiliy Tolstov , Huangpeng , Gonglei , Jan Kiszka , Yang Hongyang , Guillaume Subiron On 11/12/15 01:15, Samuel Thibault wrote: > From: Guillaume Subiron >=20 > This patch replaces foreign and local address/port couples in Socket > structure by 2 sockaddr_storage which can be casted in sockaddr_in. > Direct access to address and port is still possible thanks to some > \#define, so retrocompatibility of the existing code is assured. >=20 > The ss_family field of sockaddr_storage is declared after each socket > creation. >=20 > The whole structure is also saved/restored when a Qemu session is > saved/restored. >=20 > Signed-off-by: Guillaume Subiron > Signed-off-by: Samuel Thibault > --- [...] > diff --git a/slirp/slirp.c b/slirp/slirp.c > index 66c4196..0937ee0 100644 > --- a/slirp/slirp.c > +++ b/slirp/slirp.c > @@ -1028,10 +1028,26 @@ static void slirp_sbuf_save(QEMUFile *f, struct= sbuf *sbuf) > static void slirp_socket_save(QEMUFile *f, struct socket *so) > { > qemu_put_be32(f, so->so_urgc); > - qemu_put_be32(f, so->so_faddr.s_addr); > - qemu_put_be32(f, so->so_laddr.s_addr); > - qemu_put_be16(f, so->so_fport); > - qemu_put_be16(f, so->so_lport); > + qemu_put_be16(f, so->so_ffamily); > + switch (so->so_ffamily) { > + case AF_INET: > + qemu_put_be32(f, so->so_faddr.s_addr); > + qemu_put_be16(f, so->so_fport); > + break; > + default: > + fprintf(stderr, > + "so_ffamily unknown, unable to save so_faddr and so_fp= ort\n"); > + } > + qemu_put_be16(f, so->so_lfamily); > + switch (so->so_lfamily) { > + case AF_INET: > + qemu_put_be32(f, so->so_laddr.s_addr); > + qemu_put_be16(f, so->so_lport); > + break; > + default: > + fprintf(stderr, > + "so_ffamily unknown, unable to save so_laddr and so_lp= ort\n"); > + } > qemu_put_byte(f, so->so_iptos); > qemu_put_byte(f, so->so_emu); > qemu_put_byte(f, so->so_type); > @@ -1151,10 +1167,26 @@ static int slirp_socket_load(QEMUFile *f, struc= t socket *so) > return -ENOMEM; > =20 > so->so_urgc =3D qemu_get_be32(f); > - so->so_faddr.s_addr =3D qemu_get_be32(f); > - so->so_laddr.s_addr =3D qemu_get_be32(f); > - so->so_fport =3D qemu_get_be16(f); > - so->so_lport =3D qemu_get_be16(f); > + so->so_ffamily =3D qemu_get_be16(f); > + switch (so->so_ffamily) { > + case AF_INET: > + so->so_faddr.s_addr =3D qemu_get_be32(f); > + so->so_fport =3D qemu_get_be16(f); > + break; > + default: > + fprintf(stderr, > + "so_ffamily unknown, unable to restore so_faddr and so= _lport\n"); > + } > + so->so_lfamily =3D qemu_get_be16(f); > + switch (so->so_lfamily) { > + case AF_INET: > + so->so_laddr.s_addr =3D qemu_get_be32(f); > + so->so_lport =3D qemu_get_be16(f); > + break; > + default: > + fprintf(stderr, > + "so_ffamily unknown, unable to restore so_laddr and so= _lport\n"); > + } Since you're changing the layout of the save data here, I think you have to bump the version_id number in the register_savevm() call in slirp_init() to make it clear that the new layout is incompatible. > so->so_iptos =3D qemu_get_byte(f); > so->so_emu =3D qemu_get_byte(f); > so->so_type =3D qemu_get_byte(f); > diff --git a/slirp/socket.c b/slirp/socket.c > index 1673e3a..bf603c9 100644 > --- a/slirp/socket.c > +++ b/slirp/socket.c [...] Remaining parts of the patch look fine to me. Thomas