MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pdump_register_rx_callbacks

Function pdump_register_rx_callbacks

dpdk/lib/pdump/rte_pdump.c:169–226  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

167}
168
169static int
170pdump_register_rx_callbacks(enum pdump_version ver,
171 uint16_t end_q, uint16_t port, uint16_t queue,
172 struct rte_ring *ring, struct rte_mempool *mp,
173 struct rte_bpf *filter,
174 uint16_t operation, uint32_t snaplen)
175{
176 uint16_t qid;
177
178 qid = (queue == RTE_PDUMP_ALL_QUEUES) ? 0 : queue;
179 for (; qid < end_q; qid++) {
180 struct pdump_rxtx_cbs *cbs = &rx_cbs[port][qid];
181
182 if (operation == ENABLE) {
183 if (cbs->cb) {
184 PDUMP_LOG(ERR,
185 "rx callback for port=%d queue=%d, already exists\n",
186 port, qid);
187 return -EEXIST;
188 }
189 cbs->ver = ver;
190 cbs->ring = ring;
191 cbs->mp = mp;
192 cbs->snaplen = snaplen;
193 cbs->filter = filter;
194
195 cbs->cb = rte_eth_add_first_rx_callback(port, qid,
196 pdump_rx, cbs);
197 if (cbs->cb == NULL) {
198 PDUMP_LOG(ERR,
199 "failed to add rx callback, errno=%d\n",
200 rte_errno);
201 return rte_errno;
202 }
203
204 memset(&pdump_stats->rx[port][qid], 0, sizeof(struct rte_pdump_stats));
205 } else if (operation == DISABLE) {
206 int ret;
207
208 if (cbs->cb == NULL) {
209 PDUMP_LOG(ERR,
210 "no existing rx callback for port=%d queue=%d\n",
211 port, qid);
212 return -EINVAL;
213 }
214 ret = rte_eth_remove_rx_callback(port, qid, cbs->cb);
215 if (ret < 0) {
216 PDUMP_LOG(ERR,
217 "failed to remove rx callback, errno=%d\n",
218 -ret);
219 return ret;
220 }
221 cbs->cb = NULL;
222 }
223 }
224
225 return 0;
226}

Callers 1

set_pdump_rxtx_cbsFunction · 0.85

Calls 3

memsetFunction · 0.85

Tested by

no test coverage detected