slirp: VMState conversion; tcpcb
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 <dgilbert@redhat.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
parent
7d1724976f
commit
e3ec38ffd6
149
slirp/slirp.c
149
slirp/slirp.c
@ -1133,53 +1133,62 @@ void slirp_socket_recv(Slirp *slirp, struct in_addr guest_addr, int guest_port,
|
||||
tcp_output(sototcpcb(so));
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
qemu_put_sbe16(f, tp->t_state);
|
||||
for (i = 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;
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_slirp_tcp = {
|
||||
.name = "slirp-tcp",
|
||||
.version_id = 0,
|
||||
.post_load = slirp_tcp_post_load,
|
||||
.fields = (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;
|
||||
@ -1222,7 +1231,7 @@ static void slirp_socket_save(QEMUFile *f, struct socket *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);
|
||||
}
|
||||
|
||||
static void slirp_bootp_save(QEMUFile *f, Slirp *slirp)
|
||||
@ -1258,54 +1267,6 @@ static void slirp_state_save(QEMUFile *f, void *opaque)
|
||||
slirp_bootp_save(f, slirp);
|
||||
}
|
||||
|
||||
static void slirp_tcp_load(QEMUFile *f, struct tcpcb *tp)
|
||||
{
|
||||
int i;
|
||||
|
||||
tp->t_state = qemu_get_sbe16(f);
|
||||
for (i = 0; i < TCPT_NTIMERS; i++)
|
||||
tp->t_timer[i] = qemu_get_sbe16(f);
|
||||
tp->t_rxtshift = qemu_get_sbe16(f);
|
||||
tp->t_rxtcur = qemu_get_sbe16(f);
|
||||
tp->t_dupacks = qemu_get_sbe16(f);
|
||||
tp->t_maxseg = qemu_get_be16(f);
|
||||
tp->t_force = qemu_get_sbyte(f);
|
||||
tp->t_flags = qemu_get_be16(f);
|
||||
tp->snd_una = qemu_get_be32(f);
|
||||
tp->snd_nxt = qemu_get_be32(f);
|
||||
tp->snd_up = qemu_get_be32(f);
|
||||
tp->snd_wl1 = qemu_get_be32(f);
|
||||
tp->snd_wl2 = qemu_get_be32(f);
|
||||
tp->iss = qemu_get_be32(f);
|
||||
tp->snd_wnd = qemu_get_be32(f);
|
||||
tp->rcv_wnd = qemu_get_be32(f);
|
||||
tp->rcv_nxt = qemu_get_be32(f);
|
||||
tp->rcv_up = qemu_get_be32(f);
|
||||
tp->irs = qemu_get_be32(f);
|
||||
tp->rcv_adv = qemu_get_be32(f);
|
||||
tp->snd_max = qemu_get_be32(f);
|
||||
tp->snd_cwnd = qemu_get_be32(f);
|
||||
tp->snd_ssthresh = qemu_get_be32(f);
|
||||
tp->t_idle = qemu_get_sbe16(f);
|
||||
tp->t_rtt = qemu_get_sbe16(f);
|
||||
tp->t_rtseq = qemu_get_be32(f);
|
||||
tp->t_srtt = qemu_get_sbe16(f);
|
||||
tp->t_rttvar = qemu_get_sbe16(f);
|
||||
tp->t_rttmin = qemu_get_be16(f);
|
||||
tp->max_sndwnd = qemu_get_be32(f);
|
||||
tp->t_oobflags = qemu_get_byte(f);
|
||||
tp->t_iobc = qemu_get_byte(f);
|
||||
tp->t_softerror = qemu_get_sbe16(f);
|
||||
tp->snd_scale = qemu_get_byte(f);
|
||||
tp->rcv_scale = qemu_get_byte(f);
|
||||
tp->request_r_scale = qemu_get_byte(f);
|
||||
tp->requested_s_scale = qemu_get_byte(f);
|
||||
tp->ts_recent = qemu_get_be32(f);
|
||||
tp->ts_recent_age = qemu_get_be32(f);
|
||||
tp->last_ack_sent = qemu_get_be32(f);
|
||||
tcp_template(tp);
|
||||
}
|
||||
|
||||
static int slirp_sbuf_load(QEMUFile *f, struct sbuf *sbuf)
|
||||
{
|
||||
uint32_t off, sb_cc, sb_datalen;
|
||||
@ -1371,9 +1332,7 @@ static int slirp_socket_load(QEMUFile *f, struct socket *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);
|
||||
}
|
||||
|
||||
static void slirp_bootp_load(QEMUFile *f, Slirp *slirp)
|
||||
|
@ -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 */
|
||||
|
||||
/* 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 */
|
||||
|
Loading…
Reference in New Issue
Block a user