1 | This updates the code in net/slirp.c to be compatible with | 1 | Update the code in net/slirp.c to be compatible with |
---|---|---|---|
2 | libslirp 4.8.0, which deprecated slirp_pollfds_fill() | 2 | libslirp 4.8.0, which deprecated slirp_pollfds_fill() |
3 | and started using slirp_os_socket type for sockets | 3 | and started using slirp_os_socket type for sockets |
4 | (which is a 64-bit integer on win64). | 4 | (which is a 64-bit integer on win64) for all callbacks |
5 | starting with version 6 of the interface. | ||
5 | 6 | ||
6 | Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> | 7 | Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> |
7 | --- | 8 | --- |
8 | I don't remember if this change has already been proposed. | 9 | v2: update other callbacks too, use version 6 of the interface |
9 | 10 | ||
10 | net/slirp.c | 11 ++++++++--- | 11 | net/slirp.c | 25 +++++++++++++++++-------- |
11 | 1 file changed, 8 insertions(+), 3 deletions(-) | 12 | 1 file changed, 17 insertions(+), 8 deletions(-) |
12 | 13 | ||
13 | diff --git a/net/slirp.c b/net/slirp.c | 14 | diff --git a/net/slirp.c b/net/slirp.c |
14 | index XXXXXXX..XXXXXXX 100644 | 15 | index XXXXXXX..XXXXXXX 100644 |
15 | --- a/net/slirp.c | 16 | --- a/net/slirp.c |
16 | +++ b/net/slirp.c | 17 | +++ b/net/slirp.c |
18 | @@ -XXX,XX +XXX,XX @@ static void net_slirp_timer_mod(void *timer, int64_t expire_timer, | ||
19 | timer_mod(&t->timer, expire_timer); | ||
20 | } | ||
21 | |||
22 | -static void net_slirp_register_poll_fd(int fd, void *opaque) | ||
23 | +#if !SLIRP_CHECK_VERSION(4,8,0) | ||
24 | +# define slirp_os_socket int | ||
25 | +# define slirp_pollfds_fill_socket slirp_pollfds_fill | ||
26 | +# define register_poll_sock register_poll_fd | ||
27 | +# define unregister_poll_sock unregister_poll_fd | ||
28 | +#endif | ||
29 | + | ||
30 | +static void net_slirp_register_poll_sock(slirp_os_socket fd, void *opaque) | ||
31 | { | ||
32 | #ifdef WIN32 | ||
33 | AioContext *ctxt = qemu_get_aio_context(); | ||
34 | @@ -XXX,XX +XXX,XX @@ static void net_slirp_register_poll_fd(int fd, void *opaque) | ||
35 | #endif | ||
36 | } | ||
37 | |||
38 | -static void net_slirp_unregister_poll_fd(int fd, void *opaque) | ||
39 | +static void net_slirp_unregister_poll_sock(slirp_os_socket fd, void *opaque) | ||
40 | { | ||
41 | #ifdef WIN32 | ||
42 | if (WSAEventSelect(fd, NULL, 0) != 0) { | ||
43 | @@ -XXX,XX +XXX,XX @@ static const SlirpCb slirp_cb = { | ||
44 | #endif | ||
45 | .timer_free = net_slirp_timer_free, | ||
46 | .timer_mod = net_slirp_timer_mod, | ||
47 | - .register_poll_fd = net_slirp_register_poll_fd, | ||
48 | - .unregister_poll_fd = net_slirp_unregister_poll_fd, | ||
49 | + .register_poll_socket = net_slirp_register_poll_sock, | ||
50 | + .unregister_poll_socket = net_slirp_unregister_poll_sock, | ||
51 | .notify = net_slirp_notify, | ||
52 | }; | ||
53 | |||
17 | @@ -XXX,XX +XXX,XX @@ static int slirp_poll_to_gio(int events) | 54 | @@ -XXX,XX +XXX,XX @@ static int slirp_poll_to_gio(int events) |
18 | return ret; | 55 | return ret; |
19 | } | 56 | } |
20 | 57 | ||
21 | -static int net_slirp_add_poll(int fd, int events, void *opaque) | 58 | -static int net_slirp_add_poll(int fd, int events, void *opaque) |
22 | +#if SLIRP_CONFIG_VERSION_MAX < 6 /* < 4.8.0 compatibility */ | ||
23 | +# define slirp_os_socket int | ||
24 | +# define slirp_pollfds_fill_socket slirp_pollfds_fill | ||
25 | +#endif | ||
26 | + | ||
27 | +static int net_slirp_add_poll(slirp_os_socket fd, int events, void *opaque) | 59 | +static int net_slirp_add_poll(slirp_os_socket fd, int events, void *opaque) |
28 | { | 60 | { |
29 | GArray *pollfds = opaque; | 61 | GArray *pollfds = opaque; |
30 | GPollFD pfd = { | 62 | GPollFD pfd = { |
31 | @@ -XXX,XX +XXX,XX @@ static void net_slirp_poll_notify(Notifier *notifier, void *data) | 63 | @@ -XXX,XX +XXX,XX @@ static void net_slirp_poll_notify(Notifier *notifier, void *data) |
... | ... | ||
37 | + slirp_pollfds_fill_socket(s->slirp, &poll->timeout, | 69 | + slirp_pollfds_fill_socket(s->slirp, &poll->timeout, |
38 | + net_slirp_add_poll, poll->pollfds); | 70 | + net_slirp_add_poll, poll->pollfds); |
39 | break; | 71 | break; |
40 | case MAIN_LOOP_POLL_OK: | 72 | case MAIN_LOOP_POLL_OK: |
41 | case MAIN_LOOP_POLL_ERR: | 73 | case MAIN_LOOP_POLL_ERR: |
74 | @@ -XXX,XX +XXX,XX @@ static int net_slirp_init(NetClientState *peer, const char *model, | ||
75 | |||
76 | s = DO_UPCAST(SlirpState, nc, nc); | ||
77 | |||
78 | - cfg.version = SLIRP_CHECK_VERSION(4,7,0) ? 4 : 1; | ||
79 | + cfg.version = | ||
80 | + SLIRP_CHECK_VERSION(4,8,0) ? 6 : | ||
81 | + SLIRP_CHECK_VERSION(4,7,0) ? 4 : 1; | ||
82 | cfg.restricted = restricted; | ||
83 | cfg.in_enabled = ipv4; | ||
84 | cfg.vnetwork = net; | ||
42 | -- | 85 | -- |
43 | 2.39.5 | 86 | 2.39.5 | diff view generated by jsdifflib |