net/slirp: libslirp 4.9.0 compatibility
Update the code in net/slirp.c to be compatible with libslirp 4.9.0, which deprecated slirp_pollfds_fill() and started using slirp_os_socket type for sockets (which is a 64-bit integer on win64) for all callbacks starting with version 6 of the interface. Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Message-ID: <20250130123253.864681-1-mjt@tls.msk.ru> [thuth: Added some spaces to make checkpatch.pl happy] Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
f194f0cab0
commit
f141caa270
25
net/slirp.c
25
net/slirp.c
@ -247,7 +247,14 @@ static void net_slirp_timer_mod(void *timer, int64_t expire_timer,
|
|||||||
timer_mod(&t->timer, expire_timer);
|
timer_mod(&t->timer, expire_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void net_slirp_register_poll_fd(int fd, void *opaque)
|
#if !SLIRP_CHECK_VERSION(4, 9, 0)
|
||||||
|
# define slirp_os_socket int
|
||||||
|
# define slirp_pollfds_fill_socket slirp_pollfds_fill
|
||||||
|
# define register_poll_socket register_poll_fd
|
||||||
|
# define unregister_poll_socket unregister_poll_fd
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void net_slirp_register_poll_sock(slirp_os_socket fd, void *opaque)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
AioContext *ctxt = qemu_get_aio_context();
|
AioContext *ctxt = qemu_get_aio_context();
|
||||||
@ -260,7 +267,7 @@ static void net_slirp_register_poll_fd(int fd, void *opaque)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void net_slirp_unregister_poll_fd(int fd, void *opaque)
|
static void net_slirp_unregister_poll_sock(slirp_os_socket fd, void *opaque)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
if (WSAEventSelect(fd, NULL, 0) != 0) {
|
if (WSAEventSelect(fd, NULL, 0) != 0) {
|
||||||
@ -286,8 +293,8 @@ static const SlirpCb slirp_cb = {
|
|||||||
#endif
|
#endif
|
||||||
.timer_free = net_slirp_timer_free,
|
.timer_free = net_slirp_timer_free,
|
||||||
.timer_mod = net_slirp_timer_mod,
|
.timer_mod = net_slirp_timer_mod,
|
||||||
.register_poll_fd = net_slirp_register_poll_fd,
|
.register_poll_socket = net_slirp_register_poll_sock,
|
||||||
.unregister_poll_fd = net_slirp_unregister_poll_fd,
|
.unregister_poll_socket = net_slirp_unregister_poll_sock,
|
||||||
.notify = net_slirp_notify,
|
.notify = net_slirp_notify,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -314,7 +321,7 @@ static int slirp_poll_to_gio(int events)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int net_slirp_add_poll(int fd, int events, void *opaque)
|
static int net_slirp_add_poll(slirp_os_socket fd, int events, void *opaque)
|
||||||
{
|
{
|
||||||
GArray *pollfds = opaque;
|
GArray *pollfds = opaque;
|
||||||
GPollFD pfd = {
|
GPollFD pfd = {
|
||||||
@ -363,8 +370,8 @@ static void net_slirp_poll_notify(Notifier *notifier, void *data)
|
|||||||
|
|
||||||
switch (poll->state) {
|
switch (poll->state) {
|
||||||
case MAIN_LOOP_POLL_FILL:
|
case MAIN_LOOP_POLL_FILL:
|
||||||
slirp_pollfds_fill(s->slirp, &poll->timeout,
|
slirp_pollfds_fill_socket(s->slirp, &poll->timeout,
|
||||||
net_slirp_add_poll, poll->pollfds);
|
net_slirp_add_poll, poll->pollfds);
|
||||||
break;
|
break;
|
||||||
case MAIN_LOOP_POLL_OK:
|
case MAIN_LOOP_POLL_OK:
|
||||||
case MAIN_LOOP_POLL_ERR:
|
case MAIN_LOOP_POLL_ERR:
|
||||||
@ -629,7 +636,9 @@ static int net_slirp_init(NetClientState *peer, const char *model,
|
|||||||
|
|
||||||
s = DO_UPCAST(SlirpState, nc, nc);
|
s = DO_UPCAST(SlirpState, nc, nc);
|
||||||
|
|
||||||
cfg.version = SLIRP_CHECK_VERSION(4,7,0) ? 4 : 1;
|
cfg.version =
|
||||||
|
SLIRP_CHECK_VERSION(4, 9, 0) ? 6 :
|
||||||
|
SLIRP_CHECK_VERSION(4, 7, 0) ? 4 : 1;
|
||||||
cfg.restricted = restricted;
|
cfg.restricted = restricted;
|
||||||
cfg.in_enabled = ipv4;
|
cfg.in_enabled = ipv4;
|
||||||
cfg.vnetwork = net;
|
cfg.vnetwork = net;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user