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; }
static int vr_message_queue_response(char *buf, int len) { struct vr_message *response; response = vr_zalloc(sizeof(*response)); if (!response) return -ENOMEM; response->vr_message_buf = buf; response->vr_message_len = len;; vr_queue_enqueue(&message_h.vm_response_queue, &response->vr_message_queue); return 0; }
static int vr_message_queue_response(char *buf, int len, bool broadcast) { struct vr_message *response; response = vr_zalloc(sizeof(*response), VR_MESSAGE_RESPONSE_OBJECT); if (!response) return -ENOMEM; response->vr_message_buf = buf; response->vr_message_len = len; response->vr_message_broadcast = broadcast; vr_queue_enqueue(&message_h.vm_response_queue, &response->vr_message_queue); return 0; }