static void tap_writable(void *opaque) { TAPState *s = opaque; tap_write_poll(s, 0); qemu_flush_queued_packets(&s->nc); }
static void tap_cleanup(VLANClientState *nc) { TAPState *s = DO_UPCAST(TAPState, nc, nc); qemu_purge_queued_packets(nc); if (s->down_script[0]) launch_script(s->down_script, s->down_script_arg, s->fd); tap_read_poll(s, 0); tap_write_poll(s, 0); close(s->fd); }
static ssize_t tap_write_packet(TAPState *s, const struct iovec *iov, int iovcnt) { ssize_t len; do { len = writev(s->fd, iov, iovcnt); } while (len == -1 && errno == EINTR); if (len == -1 && errno == EAGAIN) { tap_write_poll(s, 1); return 0; } return len; }
static void tap_cleanup(NetClientState *nc) { TAPState *s = DO_UPCAST(TAPState, nc, nc); if (s->vhost_net) { vhost_net_cleanup(s->vhost_net); s->vhost_net = NULL; } qemu_purge_queued_packets(nc); if (s->down_script[0]) launch_script(s->down_script, s->down_script_arg, s->fd); tap_read_poll(s, false); tap_write_poll(s, false); close(s->fd); s->fd = -1; }
static void tap_cleanup(NetClientState *nc) { TAPState *s = DO_UPCAST(TAPState, nc, nc); if (s->vhost_net) { vhost_net_cleanup(s->vhost_net); s->vhost_net = NULL; } qemu_purge_queued_packets(nc); tap_exit_notify(&s->exit, NULL); qemu_remove_exit_notifier(&s->exit); tap_read_poll(s, false); tap_write_poll(s, false); close(s->fd); s->fd = -1; }
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); }