int vhost_client_poll_client_rx(void *context, void *dst_buf, size_t *dst_buf_len) { Vhost_Client *vhost_client = NULL; VHOST_CLIENT_VRING vq_id = VHOST_CLIENT_VRING_IDX_RX; VIRT_QUEUE_H_RET_VAL virt_queue_ret_val = E_VIRT_QUEUE_OK; if (!context || !dst_buf ) { return map_ret_val_virt_queue_2_vhost_net(E_VIRT_QUEUE_ERR_FARG); } vhost_client = (Vhost_Client *) context; virt_queue_ret_val = recv_packet((vhost_client->virtq_control[vq_id]), (uint64_t *)dst_buf, dst_buf_len); if (virt_queue_ret_val == E_VIRT_QUEUE_OK) { virt_queue_process_used_rx_virt_queue(vhost_client->virtq_control, vq_id); } //TODO: Burst virt_queue_put_rx_virt_queue(vhost_client->virtq_control, vq_id, ETH_MAX_MTU); return map_ret_val_virt_queue_2_vhost_net(virt_queue_ret_val); }
int vhost_client_poll_client_tx(void *context, void *src_buf , size_t *src_buf_len) { Vhost_Client *vhost_client = NULL; VHOST_CLIENT_VRING vq_id = VHOST_CLIENT_VRING_IDX_TX; VIRT_QUEUE_H_RET_VAL virt_queue_ret_val = E_VIRT_QUEUE_OK; if (!context || !src_buf || src_buf_len == 0) { return map_ret_val_virt_queue_2_vhost_net(E_VIRT_QUEUE_ERR_FARG); } vhost_client = (Vhost_Client *) context; virt_queue_ret_val = virt_queue_process_used_tx_virt_queue(vhost_client->virtq_control, vq_id); virt_queue_ret_val = send_packet(vhost_client, src_buf, *src_buf_len); return map_ret_val_virt_queue_2_vhost_net(virt_queue_ret_val); }