From nobody Sun Apr 28 23:33:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 14881413332171018.091789771318; Sun, 26 Feb 2017 12:35:33 -0800 (PST) Received: from localhost ([::1]:48229 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5XX-0000ow-Ku for importer@patchew.org; Sun, 26 Feb 2017 15:35:31 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49934) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5Pb-0003Zi-RR for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ci5PX-0007cA-Df for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:19 -0500 Received: from hera.aquilenet.fr ([141.255.128.1]:52261) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5PX-0007c0-3n for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:15 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id 90A31B5B2; Sun, 26 Feb 2017 21:27:14 +0100 (CET) Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3r8HWEdNlVMw; Sun, 26 Feb 2017 21:27:12 +0100 (CET) Received: from var.youpi.perso.aquilenet.fr (unknown [IPv6:2a01:cb19:181:c200:3602:86ff:fe2c:6a19]) by hera.aquilenet.fr (Postfix) with ESMTPSA id 7A77DB5B4; Sun, 26 Feb 2017 21:27:12 +0100 (CET) Received: from samy by var.youpi.perso.aquilenet.fr with local (Exim 4.88) (envelope-from ) id 1ci5PT-0000Ys-Cf; Sun, 26 Feb 2017 21:27:11 +0100 X-Virus-Scanned: Debian amavisd-new at aquilenet.fr From: Samuel Thibault To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sun, 26 Feb 2017 21:27:05 +0100 Message-Id: <20170226202709.2114-2-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> References: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 141.255.128.1 Subject: [Qemu-devel] [PULL 1/5] slirp: VMState conversion; tcpcb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jan.kiszka@siemens.com, "Dr. David Alan Gilbert" , stefanha@redhat.com, Samuel Thibault Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Dr. David Alan Gilbert" Convert the migration of the struct tcpcb to use a VMStateDescription, the rest of it will come later. Mostly mechanical, except for conversion of some 'char' to uint8_t to ensure portability. Signed-off-by: Dr. David Alan Gilbert Reviewed-by: Samuel Thibault Reviewed-by: Juan Quintela Signed-off-by: Samuel Thibault --- slirp/slirp.c | 149 ++++++++++++++++++++--------------------------------= ---- slirp/tcp_var.h | 6 +-- 2 files changed, 57 insertions(+), 98 deletions(-) diff --git a/slirp/slirp.c b/slirp/slirp.c index 60539de7a3..276d8cb486 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -1129,53 +1129,62 @@ void slirp_socket_recv(Slirp *slirp, struct in_addr= guest_addr, int guest_port, tcp_output(sototcpcb(so)); } =20 -static void slirp_tcp_save(QEMUFile *f, struct tcpcb *tp) +static int slirp_tcp_post_load(void *opaque, int version) { - int i; + tcp_template((struct tcpcb *)opaque); =20 - qemu_put_sbe16(f, tp->t_state); - for (i =3D 0; i < TCPT_NTIMERS; i++) - qemu_put_sbe16(f, tp->t_timer[i]); - qemu_put_sbe16(f, tp->t_rxtshift); - qemu_put_sbe16(f, tp->t_rxtcur); - qemu_put_sbe16(f, tp->t_dupacks); - qemu_put_be16(f, tp->t_maxseg); - qemu_put_sbyte(f, tp->t_force); - qemu_put_be16(f, tp->t_flags); - qemu_put_be32(f, tp->snd_una); - qemu_put_be32(f, tp->snd_nxt); - qemu_put_be32(f, tp->snd_up); - qemu_put_be32(f, tp->snd_wl1); - qemu_put_be32(f, tp->snd_wl2); - qemu_put_be32(f, tp->iss); - qemu_put_be32(f, tp->snd_wnd); - qemu_put_be32(f, tp->rcv_wnd); - qemu_put_be32(f, tp->rcv_nxt); - qemu_put_be32(f, tp->rcv_up); - qemu_put_be32(f, tp->irs); - qemu_put_be32(f, tp->rcv_adv); - qemu_put_be32(f, tp->snd_max); - qemu_put_be32(f, tp->snd_cwnd); - qemu_put_be32(f, tp->snd_ssthresh); - qemu_put_sbe16(f, tp->t_idle); - qemu_put_sbe16(f, tp->t_rtt); - qemu_put_be32(f, tp->t_rtseq); - qemu_put_sbe16(f, tp->t_srtt); - qemu_put_sbe16(f, tp->t_rttvar); - qemu_put_be16(f, tp->t_rttmin); - qemu_put_be32(f, tp->max_sndwnd); - qemu_put_byte(f, tp->t_oobflags); - qemu_put_byte(f, tp->t_iobc); - qemu_put_sbe16(f, tp->t_softerror); - qemu_put_byte(f, tp->snd_scale); - qemu_put_byte(f, tp->rcv_scale); - qemu_put_byte(f, tp->request_r_scale); - qemu_put_byte(f, tp->requested_s_scale); - qemu_put_be32(f, tp->ts_recent); - qemu_put_be32(f, tp->ts_recent_age); - qemu_put_be32(f, tp->last_ack_sent); + return 0; } =20 +static const VMStateDescription vmstate_slirp_tcp =3D { + .name =3D "slirp-tcp", + .version_id =3D 0, + .post_load =3D slirp_tcp_post_load, + .fields =3D (VMStateField[]) { + VMSTATE_INT16(t_state, struct tcpcb), + VMSTATE_INT16_ARRAY(t_timer, struct tcpcb, TCPT_NTIMERS), + VMSTATE_INT16(t_rxtshift, struct tcpcb), + VMSTATE_INT16(t_rxtcur, struct tcpcb), + VMSTATE_INT16(t_dupacks, struct tcpcb), + VMSTATE_UINT16(t_maxseg, struct tcpcb), + VMSTATE_UINT8(t_force, struct tcpcb), + VMSTATE_UINT16(t_flags, struct tcpcb), + VMSTATE_UINT32(snd_una, struct tcpcb), + VMSTATE_UINT32(snd_nxt, struct tcpcb), + VMSTATE_UINT32(snd_up, struct tcpcb), + VMSTATE_UINT32(snd_wl1, struct tcpcb), + VMSTATE_UINT32(snd_wl2, struct tcpcb), + VMSTATE_UINT32(iss, struct tcpcb), + VMSTATE_UINT32(snd_wnd, struct tcpcb), + VMSTATE_UINT32(rcv_wnd, struct tcpcb), + VMSTATE_UINT32(rcv_nxt, struct tcpcb), + VMSTATE_UINT32(rcv_up, struct tcpcb), + VMSTATE_UINT32(irs, struct tcpcb), + VMSTATE_UINT32(rcv_adv, struct tcpcb), + VMSTATE_UINT32(snd_max, struct tcpcb), + VMSTATE_UINT32(snd_cwnd, struct tcpcb), + VMSTATE_UINT32(snd_ssthresh, struct tcpcb), + VMSTATE_INT16(t_idle, struct tcpcb), + VMSTATE_INT16(t_rtt, struct tcpcb), + VMSTATE_UINT32(t_rtseq, struct tcpcb), + VMSTATE_INT16(t_srtt, struct tcpcb), + VMSTATE_INT16(t_rttvar, struct tcpcb), + VMSTATE_UINT16(t_rttmin, struct tcpcb), + VMSTATE_UINT32(max_sndwnd, struct tcpcb), + VMSTATE_UINT8(t_oobflags, struct tcpcb), + VMSTATE_UINT8(t_iobc, struct tcpcb), + VMSTATE_INT16(t_softerror, struct tcpcb), + VMSTATE_UINT8(snd_scale, struct tcpcb), + VMSTATE_UINT8(rcv_scale, struct tcpcb), + VMSTATE_UINT8(request_r_scale, struct tcpcb), + VMSTATE_UINT8(requested_s_scale, struct tcpcb), + VMSTATE_UINT32(ts_recent, struct tcpcb), + VMSTATE_UINT32(ts_recent_age, struct tcpcb), + VMSTATE_UINT32(last_ack_sent, struct tcpcb), + VMSTATE_END_OF_LIST() + } +}; + static void slirp_sbuf_save(QEMUFile *f, struct sbuf *sbuf) { uint32_t off; @@ -1218,7 +1227,7 @@ static void slirp_socket_save(QEMUFile *f, struct soc= ket *so) qemu_put_be32(f, so->so_state); slirp_sbuf_save(f, &so->so_rcv); slirp_sbuf_save(f, &so->so_snd); - slirp_tcp_save(f, so->so_tcpcb); + vmstate_save_state(f, &vmstate_slirp_tcp, so->so_tcpcb, 0); } =20 static void slirp_bootp_save(QEMUFile *f, Slirp *slirp) @@ -1254,54 +1263,6 @@ static void slirp_state_save(QEMUFile *f, void *opaq= ue) slirp_bootp_save(f, slirp); } =20 -static void slirp_tcp_load(QEMUFile *f, struct tcpcb *tp) -{ - int i; - - tp->t_state =3D qemu_get_sbe16(f); - for (i =3D 0; i < TCPT_NTIMERS; i++) - tp->t_timer[i] =3D qemu_get_sbe16(f); - tp->t_rxtshift =3D qemu_get_sbe16(f); - tp->t_rxtcur =3D qemu_get_sbe16(f); - tp->t_dupacks =3D qemu_get_sbe16(f); - tp->t_maxseg =3D qemu_get_be16(f); - tp->t_force =3D qemu_get_sbyte(f); - tp->t_flags =3D qemu_get_be16(f); - tp->snd_una =3D qemu_get_be32(f); - tp->snd_nxt =3D qemu_get_be32(f); - tp->snd_up =3D qemu_get_be32(f); - tp->snd_wl1 =3D qemu_get_be32(f); - tp->snd_wl2 =3D qemu_get_be32(f); - tp->iss =3D qemu_get_be32(f); - tp->snd_wnd =3D qemu_get_be32(f); - tp->rcv_wnd =3D qemu_get_be32(f); - tp->rcv_nxt =3D qemu_get_be32(f); - tp->rcv_up =3D qemu_get_be32(f); - tp->irs =3D qemu_get_be32(f); - tp->rcv_adv =3D qemu_get_be32(f); - tp->snd_max =3D qemu_get_be32(f); - tp->snd_cwnd =3D qemu_get_be32(f); - tp->snd_ssthresh =3D qemu_get_be32(f); - tp->t_idle =3D qemu_get_sbe16(f); - tp->t_rtt =3D qemu_get_sbe16(f); - tp->t_rtseq =3D qemu_get_be32(f); - tp->t_srtt =3D qemu_get_sbe16(f); - tp->t_rttvar =3D qemu_get_sbe16(f); - tp->t_rttmin =3D qemu_get_be16(f); - tp->max_sndwnd =3D qemu_get_be32(f); - tp->t_oobflags =3D qemu_get_byte(f); - tp->t_iobc =3D qemu_get_byte(f); - tp->t_softerror =3D qemu_get_sbe16(f); - tp->snd_scale =3D qemu_get_byte(f); - tp->rcv_scale =3D qemu_get_byte(f); - tp->request_r_scale =3D qemu_get_byte(f); - tp->requested_s_scale =3D qemu_get_byte(f); - tp->ts_recent =3D qemu_get_be32(f); - tp->ts_recent_age =3D qemu_get_be32(f); - tp->last_ack_sent =3D qemu_get_be32(f); - tcp_template(tp); -} - static int slirp_sbuf_load(QEMUFile *f, struct sbuf *sbuf) { uint32_t off, sb_cc, sb_datalen; @@ -1367,9 +1328,7 @@ static int slirp_socket_load(QEMUFile *f, struct sock= et *so, int version_id) return -ENOMEM; if (slirp_sbuf_load(f, &so->so_snd) < 0) return -ENOMEM; - slirp_tcp_load(f, so->so_tcpcb); - - return 0; + return vmstate_load_state(f, &vmstate_slirp_tcp, so->so_tcpcb, 0); } =20 static void slirp_bootp_load(QEMUFile *f, Slirp *slirp) diff --git a/slirp/tcp_var.h b/slirp/tcp_var.h index 0f8f187c5c..895ef6df1e 100644 --- a/slirp/tcp_var.h +++ b/slirp/tcp_var.h @@ -48,7 +48,7 @@ struct tcpcb { short t_rxtcur; /* current retransmit value */ short t_dupacks; /* consecutive dup acks recd */ u_short t_maxseg; /* maximum segment size */ - char t_force; /* 1 if forcing out a byte */ + uint8_t t_force; /* 1 if forcing out a byte */ u_short t_flags; #define TF_ACKNOW 0x0001 /* ack peer immediately */ #define TF_DELACK 0x0002 /* ack, but try to delay it */ @@ -109,8 +109,8 @@ struct tcpcb { uint32_t max_sndwnd; /* largest window peer has offered */ =20 /* out-of-band data */ - char t_oobflags; /* have some */ - char t_iobc; /* input character */ + uint8_t t_oobflags; /* have some */ + uint8_t t_iobc; /* input character */ #define TCPOOB_HAVEDATA 0x01 #define TCPOOB_HADDATA 0x02 short t_softerror; /* possible error not yet reported */ --=20 2.11.0 From nobody Sun Apr 28 23:33:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1488140937548659.1920101967116; Sun, 26 Feb 2017 12:28:57 -0800 (PST) Received: from localhost ([::1]:48191 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5R9-0004OU-6k for importer@patchew.org; Sun, 26 Feb 2017 15:28:55 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49924) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5Pa-0003ZW-Fg for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ci5PZ-0007cX-2m for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:18 -0500 Received: from hera.aquilenet.fr ([2a01:474::1]:56808) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5PY-0007cO-PT for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:17 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id 0BA41B5B5; Sun, 26 Feb 2017 21:27:16 +0100 (CET) Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ffz7u-8El6h9; Sun, 26 Feb 2017 21:27:14 +0100 (CET) Received: from var.youpi.perso.aquilenet.fr (unknown [IPv6:2a01:cb19:181:c200:3602:86ff:fe2c:6a19]) by hera.aquilenet.fr (Postfix) with ESMTPSA id B85D2B5B8; Sun, 26 Feb 2017 21:27:12 +0100 (CET) Received: from samy by var.youpi.perso.aquilenet.fr with local (Exim 4.88) (envelope-from ) id 1ci5PT-0000Yu-DL; Sun, 26 Feb 2017 21:27:11 +0100 X-Virus-Scanned: Debian amavisd-new at aquilenet.fr From: Samuel Thibault To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sun, 26 Feb 2017 21:27:06 +0100 Message-Id: <20170226202709.2114-3-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> References: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a01:474::1 Subject: [Qemu-devel] [PULL 2/5] slirp: VMStatify sbuf X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jan.kiszka@siemens.com, "Dr. David Alan Gilbert" , stefanha@redhat.com, Samuel Thibault Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Dr. David Alan Gilbert" Convert the sbuf structure to a VMStateDescription. Note this uses the VMSTATE_WITH_TMP mechanism to calculate and reload the offsets based on the pointers. Signed-off-by: Dr. David Alan Gilbert Reviewed-by: David Gibson Reviewed-by: Juan Quintela Signed-off-by: Samuel Thibault --- slirp/sbuf.h | 4 +- slirp/slirp.c | 116 ++++++++++++++++++++++++++++++++++++++----------------= ---- 2 files changed, 78 insertions(+), 42 deletions(-) diff --git a/slirp/sbuf.h b/slirp/sbuf.h index efcec39a6b..a722ecb629 100644 --- a/slirp/sbuf.h +++ b/slirp/sbuf.h @@ -12,8 +12,8 @@ #define sbspace(sb) ((sb)->sb_datalen - (sb)->sb_cc) =20 struct sbuf { - u_int sb_cc; /* actual chars in buffer */ - u_int sb_datalen; /* Length of data */ + uint32_t sb_cc; /* actual chars in buffer */ + uint32_t sb_datalen; /* Length of data */ char *sb_wptr; /* write pointer. points to where the next * bytes should be written in the sbuf */ char *sb_rptr; /* read pointer. points to where the next diff --git a/slirp/slirp.c b/slirp/slirp.c index 276d8cb486..178c2b6d14 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -1185,19 +1185,72 @@ static const VMStateDescription vmstate_slirp_tcp = =3D { } }; =20 -static void slirp_sbuf_save(QEMUFile *f, struct sbuf *sbuf) +/* The sbuf has a pair of pointers that are migrated as offsets; + * we calculate the offsets and restore the pointers using + * pre_save/post_load on a tmp structure. + */ +struct sbuf_tmp { + struct sbuf *parent; + uint32_t roff, woff; +}; + +static void sbuf_tmp_pre_save(void *opaque) +{ + struct sbuf_tmp *tmp =3D opaque; + tmp->woff =3D tmp->parent->sb_wptr - tmp->parent->sb_data; + tmp->roff =3D tmp->parent->sb_rptr - tmp->parent->sb_data; +} + +static int sbuf_tmp_post_load(void *opaque, int version) { - uint32_t off; - - qemu_put_be32(f, sbuf->sb_cc); - qemu_put_be32(f, sbuf->sb_datalen); - off =3D (uint32_t)(sbuf->sb_wptr - sbuf->sb_data); - qemu_put_sbe32(f, off); - off =3D (uint32_t)(sbuf->sb_rptr - sbuf->sb_data); - qemu_put_sbe32(f, off); - qemu_put_buffer(f, (unsigned char*)sbuf->sb_data, sbuf->sb_datalen); + struct sbuf_tmp *tmp =3D opaque; + uint32_t requested_len =3D tmp->parent->sb_datalen; + + /* Allocate the buffer space used by the field after the tmp */ + sbreserve(tmp->parent, tmp->parent->sb_datalen); + + if (tmp->parent->sb_datalen !=3D requested_len) { + return -ENOMEM; + } + if (tmp->woff >=3D requested_len || + tmp->roff >=3D requested_len) { + error_report("invalid sbuf offsets r/w=3D%u/%u len=3D%u", + tmp->roff, tmp->woff, requested_len); + return -EINVAL; + } + + tmp->parent->sb_wptr =3D tmp->parent->sb_data + tmp->woff; + tmp->parent->sb_rptr =3D tmp->parent->sb_data + tmp->roff; + + return 0; } =20 + +static const VMStateDescription vmstate_slirp_sbuf_tmp =3D { + .name =3D "slirp-sbuf-tmp", + .post_load =3D sbuf_tmp_post_load, + .pre_save =3D sbuf_tmp_pre_save, + .version_id =3D 0, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32(woff, struct sbuf_tmp), + VMSTATE_UINT32(roff, struct sbuf_tmp), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_slirp_sbuf =3D { + .name =3D "slirp-sbuf", + .version_id =3D 0, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32(sb_cc, struct sbuf), + VMSTATE_UINT32(sb_datalen, struct sbuf), + VMSTATE_WITH_TMP(struct sbuf, struct sbuf_tmp, vmstate_slirp_sbuf_= tmp), + VMSTATE_VBUFFER_UINT32(sb_data, struct sbuf, 0, NULL, sb_datalen), + VMSTATE_END_OF_LIST() + } +}; + + static void slirp_socket_save(QEMUFile *f, struct socket *so) { qemu_put_be32(f, so->so_urgc); @@ -1225,8 +1278,9 @@ static void slirp_socket_save(QEMUFile *f, struct soc= ket *so) qemu_put_byte(f, so->so_emu); qemu_put_byte(f, so->so_type); qemu_put_be32(f, so->so_state); - slirp_sbuf_save(f, &so->so_rcv); - slirp_sbuf_save(f, &so->so_snd); + /* TODO: Build vmstate at this level */ + vmstate_save_state(f, &vmstate_slirp_sbuf, &so->so_rcv, 0); + vmstate_save_state(f, &vmstate_slirp_sbuf, &so->so_snd, 0); vmstate_save_state(f, &vmstate_slirp_tcp, so->so_tcpcb, 0); } =20 @@ -1263,31 +1317,9 @@ static void slirp_state_save(QEMUFile *f, void *opaq= ue) slirp_bootp_save(f, slirp); } =20 -static int slirp_sbuf_load(QEMUFile *f, struct sbuf *sbuf) -{ - uint32_t off, sb_cc, sb_datalen; - - sb_cc =3D qemu_get_be32(f); - sb_datalen =3D qemu_get_be32(f); - - sbreserve(sbuf, sb_datalen); - - if (sbuf->sb_datalen !=3D sb_datalen) - return -ENOMEM; - - sbuf->sb_cc =3D sb_cc; - - off =3D qemu_get_sbe32(f); - sbuf->sb_wptr =3D sbuf->sb_data + off; - off =3D qemu_get_sbe32(f); - sbuf->sb_rptr =3D sbuf->sb_data + off; - qemu_get_buffer(f, (unsigned char*)sbuf->sb_data, sbuf->sb_datalen); - - return 0; -} - static int slirp_socket_load(QEMUFile *f, struct socket *so, int version_i= d) { + int ret =3D 0; if (tcp_attach(so) < 0) return -ENOMEM; =20 @@ -1324,11 +1356,15 @@ static int slirp_socket_load(QEMUFile *f, struct so= cket *so, int version_id) so->so_emu =3D qemu_get_byte(f); so->so_type =3D qemu_get_byte(f); so->so_state =3D qemu_get_be32(f); - if (slirp_sbuf_load(f, &so->so_rcv) < 0) - return -ENOMEM; - if (slirp_sbuf_load(f, &so->so_snd) < 0) - return -ENOMEM; - return vmstate_load_state(f, &vmstate_slirp_tcp, so->so_tcpcb, 0); + /* TODO: VMState at this level */ + ret =3D vmstate_load_state(f, &vmstate_slirp_sbuf, &so->so_rcv, 0); + if (!ret) { + ret =3D vmstate_load_state(f, &vmstate_slirp_sbuf, &so->so_snd, 0); + } + if (!ret) { + ret =3D vmstate_load_state(f, &vmstate_slirp_tcp, so->so_tcpcb, 0); + } + return ret; } =20 static void slirp_bootp_load(QEMUFile *f, Slirp *slirp) --=20 2.11.0 From nobody Sun Apr 28 23:33:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1488140939375465.15380164796625; Sun, 26 Feb 2017 12:28:59 -0800 (PST) Received: from localhost ([::1]:48195 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5RC-0004R1-48 for importer@patchew.org; Sun, 26 Feb 2017 15:28:58 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49932) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5Pb-0003Zg-RL for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ci5PZ-0007cn-R4 for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:19 -0500 Received: from hera.aquilenet.fr ([141.255.128.1]:52284) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5PZ-0007cg-K8 for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:17 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id 1A234B5B7; Sun, 26 Feb 2017 21:27:17 +0100 (CET) Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id i7TYZzPk_0eC; Sun, 26 Feb 2017 21:27:15 +0100 (CET) Received: from var.youpi.perso.aquilenet.fr (unknown [IPv6:2a01:cb19:181:c200:3602:86ff:fe2c:6a19]) by hera.aquilenet.fr (Postfix) with ESMTPSA id B21E1B8D3; Sun, 26 Feb 2017 21:27:12 +0100 (CET) Received: from samy by var.youpi.perso.aquilenet.fr with local (Exim 4.88) (envelope-from ) id 1ci5PT-0000Yw-E1; Sun, 26 Feb 2017 21:27:11 +0100 X-Virus-Scanned: Debian amavisd-new at aquilenet.fr From: Samuel Thibault To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sun, 26 Feb 2017 21:27:07 +0100 Message-Id: <20170226202709.2114-4-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> References: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 141.255.128.1 Subject: [Qemu-devel] [PULL 3/5] slirp: Common lhost/fhost union X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jan.kiszka@siemens.com, "Dr. David Alan Gilbert" , stefanha@redhat.com, Samuel Thibault Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: "Dr. David Alan Gilbert" The socket structure has a pair of unions for lhost and fhost addresses; the unions are identical so split them out into a separate union declaration. Signed-off-by: Dr. David Alan Gilbert Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Juan Quintela Signed-off-by: Samuel Thibault --- slirp/socket.h | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/slirp/socket.h b/slirp/socket.h index 8feed2aea4..c1be77eaf3 100644 --- a/slirp/socket.h +++ b/slirp/socket.h @@ -15,6 +15,12 @@ * Our socket structure */ =20 +union slirp_sockaddr { + struct sockaddr_storage ss; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; +}; + struct socket { struct socket *so_next,*so_prev; /* For a linked list of sockets */ =20 @@ -31,22 +37,14 @@ struct socket { struct tcpiphdr *so_ti; /* Pointer to the original ti within * so_mconn, for non-blocking connections */ int so_urgc; - union { /* foreign host */ - struct sockaddr_storage ss; - struct sockaddr_in sin; - struct sockaddr_in6 sin6; - } fhost; + union slirp_sockaddr fhost; /* Foreign host */ #define so_faddr fhost.sin.sin_addr #define so_fport fhost.sin.sin_port #define so_faddr6 fhost.sin6.sin6_addr #define so_fport6 fhost.sin6.sin6_port #define so_ffamily fhost.ss.ss_family =20 - union { /* local host */ - struct sockaddr_storage ss; - struct sockaddr_in sin; - struct sockaddr_in6 sin6; - } lhost; + union slirp_sockaddr lhost; /* Local host */ #define so_laddr lhost.sin.sin_addr #define so_lport lhost.sin.sin_port #define so_laddr6 lhost.sin6.sin6_addr --=20 2.11.0 From nobody Sun Apr 28 23:33:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1488141150912770.246229902344; Sun, 26 Feb 2017 12:32:30 -0800 (PST) Received: from localhost ([::1]:48214 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5Ub-0007AN-O7 for importer@patchew.org; Sun, 26 Feb 2017 15:32:29 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49933) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5Pb-0003Zh-RP for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ci5PY-0007cK-6R for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:19 -0500 Received: from hera.aquilenet.fr ([141.255.128.1]:52267) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5PX-0007cG-SG for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:16 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id 5DC1BB5B4; Sun, 26 Feb 2017 21:27:15 +0100 (CET) Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8BEUO3VGjSOJ; Sun, 26 Feb 2017 21:27:13 +0100 (CET) Received: from var.youpi.perso.aquilenet.fr (unknown [IPv6:2a01:cb19:181:c200:3602:86ff:fe2c:6a19]) by hera.aquilenet.fr (Postfix) with ESMTPSA id 96282B5B5; Sun, 26 Feb 2017 21:27:12 +0100 (CET) Received: from samy by var.youpi.perso.aquilenet.fr with local (Exim 4.88) (envelope-from ) id 1ci5PT-0000Yy-Ei; Sun, 26 Feb 2017 21:27:11 +0100 X-Virus-Scanned: Debian amavisd-new at aquilenet.fr From: Samuel Thibault To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sun, 26 Feb 2017 21:27:08 +0100 Message-Id: <20170226202709.2114-5-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> References: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 141.255.128.1 Subject: [Qemu-devel] [PULL 4/5] slirp: VMStatify socket level X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jan.kiszka@siemens.com, "Dr. David Alan Gilbert" , stefanha@redhat.com, Samuel Thibault Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Dr. David Alan Gilbert" Working up the stack, this replaces the slirp_socket_load/save with VMState definitions. A place holder for IPv6 support is added as a comment; it needs testing once the rest of the IPv6 code is there. Signed-off-by: Dr. David Alan Gilbert Reviewed-by: Juan Quintela Signed-off-by: Samuel Thibault --- slirp/slirp.c | 170 ++++++++++++++++++++++++++++++-----------------------= ---- slirp/socket.h | 6 +- 2 files changed, 93 insertions(+), 83 deletions(-) diff --git a/slirp/slirp.c b/slirp/slirp.c index 178c2b6d14..6583de8769 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -1250,40 +1250,99 @@ static const VMStateDescription vmstate_slirp_sbuf = =3D { } }; =20 +static bool slirp_older_than_v4(void *opaque, int version_id) +{ + return version_id < 4; +} =20 -static void slirp_socket_save(QEMUFile *f, struct socket *so) +static bool slirp_family_inet(void *opaque, int version_id) { - qemu_put_be32(f, so->so_urgc); - 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: - error_report("so_ffamily unknown, unable to save so_faddr and" - " so_fport"); - } - 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: - error_report("so_ffamily unknown, unable to save so_laddr and" - " so_lport"); + union slirp_sockaddr *ssa =3D (union slirp_sockaddr *)opaque; + return ssa->ss.ss_family =3D=3D AF_INET; +} + +static int slirp_socket_pre_load(void *opaque) +{ + struct socket *so =3D opaque; + if (tcp_attach(so) < 0) { + return -ENOMEM; } - qemu_put_byte(f, so->so_iptos); - qemu_put_byte(f, so->so_emu); - qemu_put_byte(f, so->so_type); - qemu_put_be32(f, so->so_state); - /* TODO: Build vmstate at this level */ - vmstate_save_state(f, &vmstate_slirp_sbuf, &so->so_rcv, 0); - vmstate_save_state(f, &vmstate_slirp_sbuf, &so->so_snd, 0); - vmstate_save_state(f, &vmstate_slirp_tcp, so->so_tcpcb, 0); + /* Older versions don't load these fields */ + so->so_ffamily =3D AF_INET; + so->so_lfamily =3D AF_INET; + return 0; } =20 +#ifndef _WIN32 +#define VMSTATE_SS_FAMILY(f, s) VMSTATE_UINT16(f, s) +#define VMSTATE_SIN4_ADDR(f, s, t) VMSTATE_UINT32_TEST(f, s, t) +#else +/* Win has a signed family number */ +#define VMSTATE_SS_FAMILY(f, s) VMSTATE_INT16(f, s) +/* Win uses u_long rather than uint32_t - but it's still 32bits long */ +#define VMSTATE_SIN4_ADDR(f, s, t) VMSTATE_SINGLE_TEST(f, s, t, 0, \ + vmstate_info_uint32, u_long) +#endif + +static const VMStateDescription vmstate_slirp_socket_addr =3D { + .name =3D "slirp-socket-addr", + .version_id =3D 4, + .fields =3D (VMStateField[]) { + VMSTATE_SS_FAMILY(ss.ss_family, union slirp_sockaddr), + VMSTATE_SIN4_ADDR(sin.sin_addr.s_addr, union slirp_sockaddr, + slirp_family_inet), + VMSTATE_UINT16_TEST(sin.sin_port, union slirp_sockaddr, + slirp_family_inet), + +#if 0 + /* Untested: Needs checking by someone with IPv6 test */ + VMSTATE_BUFFER_TEST(sin6.sin6_addr, union slirp_sockaddr, + slirp_family_inet6), + VMSTATE_UINT16_TEST(sin6.sin6_port, union slirp_sockaddr, + slirp_family_inet6), + VMSTATE_UINT32_TEST(sin6.sin6_flowinfo, union slirp_sockaddr, + slirp_family_inet6), + VMSTATE_UINT32_TEST(sin6.sin6_scope_id, union slirp_sockaddr, + slirp_family_inet6), +#endif + + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_slirp_socket =3D { + .name =3D "slirp-socket", + .version_id =3D 4, + .pre_load =3D slirp_socket_pre_load, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32(so_urgc, struct socket), + /* Pre-v4 versions */ + VMSTATE_SIN4_ADDR(so_faddr.s_addr, struct socket, + slirp_older_than_v4), + VMSTATE_SIN4_ADDR(so_laddr.s_addr, struct socket, + slirp_older_than_v4), + VMSTATE_UINT16_TEST(so_fport, struct socket, slirp_older_than_v4), + VMSTATE_UINT16_TEST(so_lport, struct socket, slirp_older_than_v4), + /* v4 and newer */ + VMSTATE_STRUCT(fhost, struct socket, 4, vmstate_slirp_socket_addr, + union slirp_sockaddr), + VMSTATE_STRUCT(lhost, struct socket, 4, vmstate_slirp_socket_addr, + union slirp_sockaddr), + + VMSTATE_UINT8(so_iptos, struct socket), + VMSTATE_UINT8(so_emu, struct socket), + VMSTATE_UINT8(so_type, struct socket), + VMSTATE_INT32(so_state, struct socket), + VMSTATE_STRUCT(so_rcv, struct socket, 0, vmstate_slirp_sbuf, + struct sbuf), + VMSTATE_STRUCT(so_snd, struct socket, 0, vmstate_slirp_sbuf, + struct sbuf), + VMSTATE_STRUCT_POINTER(so_tcpcb, struct socket, vmstate_slirp_tcp, + struct tcpcb), + VMSTATE_END_OF_LIST() + } +}; + static void slirp_bootp_save(QEMUFile *f, Slirp *slirp) { int i; @@ -1308,7 +1367,7 @@ static void slirp_state_save(QEMUFile *f, void *opaqu= e) continue; =20 qemu_put_byte(f, 42); - slirp_socket_save(f, so); + vmstate_save_state(f, &vmstate_slirp_socket, so, NULL); } qemu_put_byte(f, 0); =20 @@ -1317,55 +1376,6 @@ static void slirp_state_save(QEMUFile *f, void *opaq= ue) slirp_bootp_save(f, slirp); } =20 -static int slirp_socket_load(QEMUFile *f, struct socket *so, int version_i= d) -{ - int ret =3D 0; - if (tcp_attach(so) < 0) - return -ENOMEM; - - so->so_urgc =3D qemu_get_be32(f); - if (version_id <=3D 3) { - so->so_ffamily =3D AF_INET; - 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); - } else { - 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: - error_report( - "so_ffamily unknown, unable to restore so_faddr and so_lpo= rt"); - } - 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: - error_report( - "so_ffamily unknown, unable to restore so_laddr and so_lpo= rt"); - } - } - so->so_iptos =3D qemu_get_byte(f); - so->so_emu =3D qemu_get_byte(f); - so->so_type =3D qemu_get_byte(f); - so->so_state =3D qemu_get_be32(f); - /* TODO: VMState at this level */ - ret =3D vmstate_load_state(f, &vmstate_slirp_sbuf, &so->so_rcv, 0); - if (!ret) { - ret =3D vmstate_load_state(f, &vmstate_slirp_sbuf, &so->so_snd, 0); - } - if (!ret) { - ret =3D vmstate_load_state(f, &vmstate_slirp_tcp, so->so_tcpcb, 0); - } - return ret; -} =20 static void slirp_bootp_load(QEMUFile *f, Slirp *slirp) { @@ -1389,7 +1399,7 @@ static int slirp_state_load(QEMUFile *f, void *opaque= , int version_id) if (!so) return -ENOMEM; =20 - ret =3D slirp_socket_load(f, so, version_id); + ret =3D vmstate_load_state(f, &vmstate_slirp_socket, so, version_i= d); =20 if (ret < 0) return ret; diff --git a/slirp/socket.h b/slirp/socket.h index c1be77eaf3..2f224bc34f 100644 --- a/slirp/socket.h +++ b/slirp/socket.h @@ -36,7 +36,7 @@ struct socket { * PING reply's */ struct tcpiphdr *so_ti; /* Pointer to the original ti within * so_mconn, for non-blocking connections */ - int so_urgc; + uint32_t so_urgc; union slirp_sockaddr fhost; /* Foreign host */ #define so_faddr fhost.sin.sin_addr #define so_fport fhost.sin.sin_port @@ -54,8 +54,8 @@ struct socket { uint8_t so_iptos; /* Type of service */ uint8_t so_emu; /* Is the socket emulated? */ =20 - u_char so_type; /* Type of socket, UDP or TCP */ - int so_state; /* internal state flags SS_*, below */ + uint8_t so_type; /* Type of socket, UDP or TCP */ + int32_t so_state; /* internal state flags SS_*, below */ =20 struct tcpcb *so_tcpcb; /* pointer to TCP protocol control block */ u_int so_expire; /* When the socket will expire */ --=20 2.11.0 From nobody Sun Apr 28 23:33:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1488141150970839.9318701032234; Sun, 26 Feb 2017 12:32:30 -0800 (PST) Received: from localhost ([::1]:48215 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5Ub-0007AU-Pi for importer@patchew.org; Sun, 26 Feb 2017 15:32:29 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49931) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5Pb-0003Zf-R4 for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ci5PZ-0007cd-Ce for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:19 -0500 Received: from hera.aquilenet.fr ([141.255.128.1]:52279) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ci5PZ-0007cR-5B for qemu-devel@nongnu.org; Sun, 26 Feb 2017 15:27:17 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id A3537B5B8; Sun, 26 Feb 2017 21:27:16 +0100 (CET) Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id A5DJyiC1GlVO; Sun, 26 Feb 2017 21:27:16 +0100 (CET) Received: from var.youpi.perso.aquilenet.fr (unknown [IPv6:2a01:cb19:181:c200:3602:86ff:fe2c:6a19]) by hera.aquilenet.fr (Postfix) with ESMTPSA id A4D78B5B7; Sun, 26 Feb 2017 21:27:12 +0100 (CET) Received: from samy by var.youpi.perso.aquilenet.fr with local (Exim 4.88) (envelope-from ) id 1ci5PT-0000Z0-FP; Sun, 26 Feb 2017 21:27:11 +0100 X-Virus-Scanned: Debian amavisd-new at aquilenet.fr From: Samuel Thibault To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sun, 26 Feb 2017 21:27:09 +0100 Message-Id: <20170226202709.2114-6-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> References: <20170226202709.2114-1-samuel.thibault@ens-lyon.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 141.255.128.1 Subject: [Qemu-devel] [PULL 5/5] slirp: VMStatify remaining except for loop X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jan.kiszka@siemens.com, "Dr. David Alan Gilbert" , stefanha@redhat.com, Samuel Thibault Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Dr. David Alan Gilbert" This converts the remaining components, except for the top level loop, to VMState. Signed-off-by: Dr. David Alan Gilbert Reviewed-by: Juan Quintela Signed-off-by: Samuel Thibault --- slirp/slirp.c | 48 +++++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/slirp/slirp.c b/slirp/slirp.c index 6583de8769..f8ee7f9d95 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -1343,15 +1343,25 @@ static const VMStateDescription vmstate_slirp_socke= t =3D { } }; =20 -static void slirp_bootp_save(QEMUFile *f, Slirp *slirp) -{ - int i; +static const VMStateDescription vmstate_slirp_bootp_client =3D { + .name =3D "slirp_bootpclient", + .fields =3D (VMStateField[]) { + VMSTATE_UINT16(allocated, BOOTPClient), + VMSTATE_BUFFER(macaddr, BOOTPClient), + VMSTATE_END_OF_LIST() + } +}; =20 - for (i =3D 0; i < NB_BOOTP_CLIENTS; i++) { - qemu_put_be16(f, slirp->bootp_clients[i].allocated); - qemu_put_buffer(f, slirp->bootp_clients[i].macaddr, 6); +static const VMStateDescription vmstate_slirp =3D { + .name =3D "slirp", + .version_id =3D 4, + .fields =3D (VMStateField[]) { + VMSTATE_UINT16_V(ip_id, Slirp, 2), + VMSTATE_STRUCT_ARRAY(bootp_clients, Slirp, NB_BOOTP_CLIENTS, 3, + vmstate_slirp_bootp_client, BOOTPClient), + VMSTATE_END_OF_LIST() } -} +}; =20 static void slirp_state_save(QEMUFile *f, void *opaque) { @@ -1371,22 +1381,10 @@ static void slirp_state_save(QEMUFile *f, void *opa= que) } qemu_put_byte(f, 0); =20 - qemu_put_be16(f, slirp->ip_id); - - slirp_bootp_save(f, slirp); + vmstate_save_state(f, &vmstate_slirp, slirp, NULL); } =20 =20 -static void slirp_bootp_load(QEMUFile *f, Slirp *slirp) -{ - int i; - - for (i =3D 0; i < NB_BOOTP_CLIENTS; i++) { - slirp->bootp_clients[i].allocated =3D qemu_get_be16(f); - qemu_get_buffer(f, slirp->bootp_clients[i].macaddr, 6); - } -} - static int slirp_state_load(QEMUFile *f, void *opaque, int version_id) { Slirp *slirp =3D opaque; @@ -1421,13 +1419,5 @@ static int slirp_state_load(QEMUFile *f, void *opaqu= e, int version_id) so->extra =3D (void *)ex_ptr->ex_exec; } =20 - if (version_id >=3D 2) { - slirp->ip_id =3D qemu_get_be16(f); - } - - if (version_id >=3D 3) { - slirp_bootp_load(f, slirp); - } - - return 0; + return vmstate_load_state(f, &vmstate_slirp, slirp, version_id); } --=20 2.11.0