-static_always_inline u16
-rdma_device_output_tx (vlib_main_t * vm, rdma_device_t * rd, rdma_txq_t * txq,
- u32 * buffers, u16 n_left, u32 * n_tx_packets,
- u32 * n_tx_bytes)
-{
- struct ibv_sge sg_entry;
- struct ibv_send_wr wr, *bad_wr;
- u16 i;
-
- for (i = 0; i < n_left; i++)
- {
- vlib_buffer_t *b = vlib_get_buffer (vm, buffers[i]);
- sg_entry.addr = vlib_buffer_get_current_va (b);
- sg_entry.length = b->current_length;
- sg_entry.lkey = rd->mr->lkey;
-
- memset (&wr, 0, sizeof (wr));
- wr.num_sge = 1;
- wr.sg_list = &sg_entry;
- wr.opcode = IBV_WR_SEND;
- wr.send_flags = IBV_SEND_SIGNALED;
- wr.wr_id = buffers[i];
-
- if (ibv_post_send (txq->qp, &wr, &bad_wr) != 0)
- break;
-
- *n_tx_bytes += b->current_length;
- }
-
- *n_tx_packets += i;
- return i;
-}
-