net: slirp: introduce a wrapper struct for QemuTimer

This struct will be extended in the next few patches to support the
new slirp_handle_timer() call.  For that we need to store an additional
"int" for each SLIRP timer, in addition to the cb_opaque.

Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Reviewed-by: Marc-André Lureau <malureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2022-04-11 09:26:06 +02:00
parent 0c1450e204
commit ad2e5b87d7

View File

@ -184,23 +184,32 @@ static int64_t net_slirp_clock_get_ns(void *opaque)
return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
} }
struct SlirpTimer {
QEMUTimer timer;
}
static void *net_slirp_timer_new(SlirpTimerCb cb, static void *net_slirp_timer_new(SlirpTimerCb cb,
void *cb_opaque, void *opaque) void *cb_opaque, void *opaque)
{ {
return timer_new_full(NULL, QEMU_CLOCK_VIRTUAL, SlirpTimer *t = g_new(SlirpTimer, 1);
SCALE_MS, QEMU_TIMER_ATTR_EXTERNAL, timer_init_full(&t->timer, NULL, QEMU_CLOCK_VIRTUAL,
cb, cb_opaque); SCALE_MS, QEMU_TIMER_ATTR_EXTERNAL,
cb, cb_opaque);
return t;
} }
static void net_slirp_timer_free(void *timer, void *opaque) static void net_slirp_timer_free(void *timer, void *opaque)
{ {
timer_free(timer); SlirpTimer *t = timer;
timer_del(&t->timer);
g_free(t);
} }
static void net_slirp_timer_mod(void *timer, int64_t expire_timer, static void net_slirp_timer_mod(void *timer, int64_t expire_timer,
void *opaque) void *opaque)
{ {
timer_mod(timer, expire_timer); SlirpTimer *t = timer;
timer_mod(&t->timer, expire_timer);
} }
static void net_slirp_register_poll_fd(int fd, void *opaque) static void net_slirp_register_poll_fd(int fd, void *opaque)