net: make tap_receive() re-use tap_receive_iov() code
In future we will want to prepend a virtio_net header if the NIC didn't supply one but IFF_VNET_HDR is enabled on the interface. This is most easily achived by using writev() in all cases. Signed-off-by: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
76682299a8
commit
38c75be313
23
net.c
23
net.c
@ -1306,10 +1306,8 @@ static void tap_writable(void *opaque)
|
||||
qemu_flush_queued_packets(s->vc);
|
||||
}
|
||||
|
||||
static ssize_t tap_receive_iov(VLANClientState *vc, const struct iovec *iov,
|
||||
int iovcnt)
|
||||
static ssize_t tap_write_packet(TAPState *s, const struct iovec *iov, int iovcnt)
|
||||
{
|
||||
TAPState *s = vc->opaque;
|
||||
ssize_t len;
|
||||
|
||||
do {
|
||||
@ -1324,16 +1322,25 @@ static ssize_t tap_receive_iov(VLANClientState *vc, const struct iovec *iov,
|
||||
return len;
|
||||
}
|
||||
|
||||
static ssize_t tap_receive_iov(VLANClientState *vc, const struct iovec *iov,
|
||||
int iovcnt)
|
||||
{
|
||||
TAPState *s = vc->opaque;
|
||||
|
||||
return tap_write_packet(s, iov, iovcnt);
|
||||
}
|
||||
|
||||
static ssize_t tap_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
|
||||
{
|
||||
TAPState *s = vc->opaque;
|
||||
ssize_t len;
|
||||
struct iovec iov[1];
|
||||
int iovcnt = 0;
|
||||
|
||||
do {
|
||||
len = write(s->fd, buf, size);
|
||||
} while (len == -1 && (errno == EINTR || errno == EAGAIN));
|
||||
iov[iovcnt].iov_base = (char *)buf;
|
||||
iov[iovcnt].iov_len = size;
|
||||
iovcnt++;
|
||||
|
||||
return len;
|
||||
return tap_write_packet(s, iov, iovcnt);
|
||||
}
|
||||
|
||||
static int tap_can_send(void *opaque)
|
||||
|
Loading…
Reference in New Issue
Block a user