blob: bad926f7a16a2392c26344a20347ff76e7d0f3c8 [file] [log] [blame]
Jakub Grajciare74c04f2021-01-04 11:28:33 +01001#include <common.h>
2
3int
4send_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
52error:
53 /* TODO: free alloocated tx buffers */
54 return -1;
55}