diff --git a/net.h b/net.h index 4971fcbbb525cb0020d100e61f34d55f95d116be..116bb80119d10b82deb6d6bb7f5cd287a4bf3374 100644 --- a/net.h +++ b/net.h @@ -1,6 +1,7 @@ #ifndef QEMU_NET_H #define QEMU_NET_H +#include #include "qemu-queue.h" #include "qemu-common.h" #include "qdict.h" @@ -36,6 +37,7 @@ typedef enum { NET_CLIENT_TYPE_DUMP } net_client_type; +typedef void (NetPoll)(VLANClientState *, bool enable); typedef int (NetCanReceive)(VLANClientState *); typedef ssize_t (NetReceive)(VLANClientState *, const uint8_t *, size_t); typedef ssize_t (NetReceiveIOV)(VLANClientState *, const struct iovec *, int); @@ -51,6 +53,7 @@ typedef struct NetClientInfo { NetCanReceive *can_receive; NetCleanup *cleanup; LinkStatusChanged *link_status_changed; + NetPoll *poll; } NetClientInfo; struct VLANClientState { diff --git a/net/tap.c b/net/tap.c index 0d8b42412321a75d5a529560ab67ad1055b06ac9..d3492de1164d9b30cb6fb9b9e6151a84b8541b1d 100644 --- a/net/tap.c +++ b/net/tap.c @@ -262,6 +262,13 @@ static void tap_cleanup(VLANClientState *nc) close(s->fd); } +static void tap_poll(VLANClientState *nc, bool enable) +{ + TAPState *s = DO_UPCAST(TAPState, nc, nc); + tap_read_poll(s, enable); + tap_write_poll(s, enable); +} + /* fd support */ static NetClientInfo net_tap_info = { @@ -270,6 +277,7 @@ static NetClientInfo net_tap_info = { .receive = tap_receive, .receive_raw = tap_receive_raw, .receive_iov = tap_receive_iov, + .poll = tap_poll, .cleanup = tap_cleanup, };