DPDK 25.03.0-rc0
rte_distributor.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
3 */
4
5#ifndef _RTE_DISTRIBUTOR_H_
6#define _RTE_DISTRIBUTOR_H_
7
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20/* Type of distribution (burst/single) */
21enum rte_distributor_alg_type {
22 RTE_DIST_ALG_BURST = 0,
23 RTE_DIST_ALG_SINGLE,
24 RTE_DIST_NUM_ALG_TYPES
25};
26
27struct rte_distributor;
28struct rte_mbuf;
29
50struct rte_distributor *
51rte_distributor_create(const char *name, unsigned int socket_id,
52 unsigned int num_workers,
53 unsigned int alg_type);
54
55/* *** APIS to be called on the distributor lcore *** */
56/*
57 * The following APIs are the public APIs which are designed for use on a
58 * single lcore which acts as the distributor lcore for a given distributor
59 * instance. These functions cannot be called on multiple cores simultaneously
60 * without using locking to protect access to the internals of the distributor.
61 *
62 * NOTE: a given lcore cannot act as both a distributor lcore and a worker lcore
63 * for the same distributor instance, otherwise deadlock will result.
64 */
65
87int
88rte_distributor_process(struct rte_distributor *d,
89 struct rte_mbuf **mbufs, unsigned int num_mbufs);
90
105int
106rte_distributor_returned_pkts(struct rte_distributor *d,
107 struct rte_mbuf **mbufs, unsigned int max_mbufs);
108
120int
121rte_distributor_flush(struct rte_distributor *d);
122
132void
133rte_distributor_clear_returns(struct rte_distributor *d);
134
135/* *** APIS to be called on the worker lcores *** */
136/*
137 * The following APIs are the public APIs which are designed for use on
138 * multiple lcores which act as workers for a distributor. Each lcore should use
139 * a unique worker id when requesting packets.
140 *
141 * NOTE: a given lcore cannot act as both a distributor lcore and a worker lcore
142 * for the same distributor instance, otherwise deadlock will result.
143 */
144
165int
166rte_distributor_get_pkt(struct rte_distributor *d,
167 unsigned int worker_id, struct rte_mbuf **pkts,
168 struct rte_mbuf **oldpkt, unsigned int retcount);
169
184int
185rte_distributor_return_pkt(struct rte_distributor *d,
186 unsigned int worker_id, struct rte_mbuf **oldpkt, int num);
187
210void
211rte_distributor_request_pkt(struct rte_distributor *d,
212 unsigned int worker_id, struct rte_mbuf **oldpkt,
213 unsigned int count);
214
234int
235rte_distributor_poll_pkt(struct rte_distributor *d,
236 unsigned int worker_id, struct rte_mbuf **mbufs);
237
238#ifdef __cplusplus
239}
240#endif
241
242#endif
int rte_distributor_process(struct rte_distributor *d, struct rte_mbuf **mbufs, unsigned int num_mbufs)
int rte_distributor_get_pkt(struct rte_distributor *d, unsigned int worker_id, struct rte_mbuf **pkts, struct rte_mbuf **oldpkt, unsigned int retcount)
void rte_distributor_clear_returns(struct rte_distributor *d)
int rte_distributor_returned_pkts(struct rte_distributor *d, struct rte_mbuf **mbufs, unsigned int max_mbufs)
void rte_distributor_request_pkt(struct rte_distributor *d, unsigned int worker_id, struct rte_mbuf **oldpkt, unsigned int count)
int rte_distributor_return_pkt(struct rte_distributor *d, unsigned int worker_id, struct rte_mbuf **oldpkt, int num)
int rte_distributor_flush(struct rte_distributor *d)
int rte_distributor_poll_pkt(struct rte_distributor *d, unsigned int worker_id, struct rte_mbuf **mbufs)
struct rte_distributor * rte_distributor_create(const char *name, unsigned int socket_id, unsigned int num_workers, unsigned int alg_type)