dpdk: correct build to include rdma driver
[vpp.git] / extras / libmemif / examples / common / sender.c
1 #include <common.h>
2
3 int
4 send_packets (memif_connection_t *c, uint16_t qid,
5               packet_generator_t *generator, uint32_t num_pkts,
6               uint16_t max_pkt_size)
7 {
8   int err, i;
9   uint16_t tx;
10
11   do
12     {
13       err = memif_buffer_alloc (c->conn, qid, c->tx_bufs,
14                                 num_pkts > MAX_MEMIF_BUFS ? MAX_MEMIF_BUFS :
15                                                                   num_pkts,
16                                 &c->tx_buf_num, max_pkt_size);
17       /* suppress full ring error MEMIF_ERR_NOBUF_RING */
18       if (err != MEMIF_ERR_SUCCESS && err != MEMIF_ERR_NOBUF_RING)
19         {
20           INFO ("memif_buffer_alloc: %s", memif_strerror (err));
21           goto error;
22         }
23
24       /* generate packet inside allocated buffers */
25       err = generator (c, num_pkts);
26       if (err != 0)
27         {
28           INFO ("paclet generator error: %d", err);
29           goto error;
30         }
31
32       err = memif_tx_burst (c->conn, qid, c->tx_bufs, c->tx_buf_num, &tx);
33       if (err != MEMIF_ERR_SUCCESS)
34         {
35           INFO ("memif_tx_burst: %s", memif_strerror (err));
36           goto error;
37         }
38       c->tx_buf_num -= tx;
39
40       /* Should never happen... */
41       if (c->tx_buf_num > 0)
42         {
43           INFO ("Failed to send allocated packets");
44           goto error;
45         }
46       num_pkts -= tx;
47     }
48   while (num_pkts > 0);
49
50   return 0;
51
52 error:
53   /* TODO: free alloocated tx buffers */
54   return -1;
55 }