int
vr_usocket_message_write(struct vr_usocket *usockp,
        struct vr_message *message)
{
    int ret;
    unsigned int len;
    unsigned char *buf;

    RTE_LOG(DEBUG, USOCK, "%s[%lx]: FD %d\n", __func__, pthread_self(),
                usockp->usock_fd);
    if ((usockp->usock_proto != NETLINK) && (usockp->usock_type != TCP))
        return -EINVAL;

    if (usockp->usock_tx_buf || !vr_queue_empty(&usockp->usock_nl_responses)) {
        vr_queue_enqueue(&usockp->usock_nl_responses,
                &message->vr_message_queue);
        return 0;
    }

    buf = (unsigned char *)dpdk_nl_message_hdr(message);
    len = dpdk_nl_message_len(message);
    ret = vr_usocket_write(usockp, buf, len);
    if (ret == len) {
        vr_message_free(message);
    }

    return ret;
}
Exemplo n.º 2
0
bool
vr_response_queue_empty(void)
{
    return vr_queue_empty(&message_h.vm_response_queue);
}