Commit fefe2a78 authored by Yang Hongyang's avatar Yang Hongyang Committed by Jason Wang
Browse files

net: merge qemu_deliver_packet and qemu_deliver_packet_iov



qemu_deliver_packet_iov already have the compat delivery, we
can drop qemu_deliver_packet.

Signed-off-by: default avatarYang Hongyang <yanghy@cn.fujitsu.com>
Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
parent e64c770d
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -152,11 +152,6 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
int qemu_find_nic_model(NICInfo *nd, const char * const *models,
                        const char *default_model);

ssize_t qemu_deliver_packet(NetClientState *sender,
                            unsigned flags,
                            const uint8_t *data,
                            size_t size,
                            void *opaque);
ssize_t qemu_deliver_packet_iov(NetClientState *sender,
                            unsigned flags,
                            const struct iovec *iov,
+16 −35
Original line number Diff line number Diff line
@@ -599,36 +599,6 @@ static ssize_t filter_receive(NetClientState *nc,
    return filter_receive_iov(nc, direction, sender, flags, &iov, 1, sent_cb);
}

ssize_t qemu_deliver_packet(NetClientState *sender,
                            unsigned flags,
                            const uint8_t *data,
                            size_t size,
                            void *opaque)
{
    NetClientState *nc = opaque;
    ssize_t ret;

    if (nc->link_down) {
        return size;
    }

    if (nc->receive_disabled) {
        return 0;
    }

    if (flags & QEMU_NET_PACKET_FLAG_RAW && nc->info->receive_raw) {
        ret = nc->info->receive_raw(nc, data, size);
    } else {
        ret = nc->info->receive(nc, data, size);
    }

    if (ret == 0) {
        nc->receive_disabled = 1;
    }

    return ret;
}

void qemu_purge_queued_packets(NetClientState *nc)
{
    if (!nc->peer) {
@@ -719,15 +689,26 @@ ssize_t qemu_send_packet_raw(NetClientState *nc, const uint8_t *buf, int size)
}

static ssize_t nc_sendv_compat(NetClientState *nc, const struct iovec *iov,
                               int iovcnt)
                               int iovcnt, unsigned flags)
{
    uint8_t buffer[NET_BUFSIZE];
    uint8_t buf[NET_BUFSIZE];
    uint8_t *buffer;
    size_t offset;

    if (iovcnt == 1) {
        buffer = iov[0].iov_base;
        offset = iov[0].iov_len;
    } else {
        buffer = buf;
        offset = iov_to_buf(iov, iovcnt, 0, buffer, sizeof(buffer));
    }

    if (flags & QEMU_NET_PACKET_FLAG_RAW && nc->info->receive_raw) {
        return nc->info->receive_raw(nc, buffer, offset);
    } else {
        return nc->info->receive(nc, buffer, offset);
    }
}

ssize_t qemu_deliver_packet_iov(NetClientState *sender,
                                unsigned flags,
@@ -749,7 +730,7 @@ ssize_t qemu_deliver_packet_iov(NetClientState *sender,
    if (nc->info->receive_iov) {
        ret = nc->info->receive_iov(nc, iov, iovcnt);
    } else {
        ret = nc_sendv_compat(nc, iov, iovcnt);
        ret = nc_sendv_compat(nc, iov, iovcnt, flags);
    }

    if (ret == 0) {
+5 −1
Original line number Diff line number Diff line
@@ -152,9 +152,13 @@ static ssize_t qemu_net_queue_deliver(NetQueue *queue,
                                      size_t size)
{
    ssize_t ret = -1;
    struct iovec iov = {
        .iov_base = (void *)data,
        .iov_len = size
    };

    queue->delivering = 1;
    ret = qemu_deliver_packet(sender, flags, data, size, queue->opaque);
    ret = qemu_deliver_packet_iov(sender, flags, &iov, 1, queue->opaque);
    queue->delivering = 0;

    return ret;