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

Function rte_red_enqueue_nonempty

dpdk/lib/sched/rte_red.h:312–356  ·  view source on GitHub ↗

* @brief Decides if new packet should be enqueued or dropped in queue non-empty case * * @param red_cfg [in] config pointer to a RED configuration parameter structure * @param red [in,out] data pointer to RED runtime data * @param q [in] current queue size (measured in packets) * * @return Operation status * @retval 0 enqueue the packet * @retval 1 drop the packet based on max threshold cr

Source from the content-addressed store, hash-verified

310 * @retval 2 drop the packet based on mark probability criterion
311 */
312static inline int
313rte_red_enqueue_nonempty(const struct rte_red_config *red_cfg,
314 struct rte_red *red,
315 const unsigned q)
316{
317 RTE_ASSERT(red_cfg != NULL);
318 RTE_ASSERT(red != NULL);
319
320 /**
321 * EWMA filter (Sally Floyd and Van Jacobson):
322 * avg = (1 - wq) * avg + wq * q
323 * avg = avg + q * wq - avg * wq
324 *
325 * We select: wq = 2^(-n). Let scaled version of avg be: avg_s = avg * 2^(N+n). We get:
326 * avg_s = avg_s + q * 2^N - avg_s * 2^(-n)
327 *
328 * By using shift left/right operations, we get:
329 * avg_s = avg_s + (q << N) - (avg_s >> n)
330 * avg_s += (q << N) - (avg_s >> n)
331 */
332
333 /* avg update */
334 red->avg += (q << RTE_RED_SCALING) - (red->avg >> red_cfg->wq_log2);
335
336 /* avg < min_th: do not mark the packet */
337 if (red->avg < red_cfg->min_th) {
338 red->count ++;
339 return 0;
340 }
341
342 /* min_th <= avg < max_th: mark the packet with pa probability */
343 if (red->avg < red_cfg->max_th) {
344 if (!__rte_red_drop(red_cfg, red)) {
345 red->count ++;
346 return 0;
347 }
348
349 red->count = 0;
350 return 2;
351 }
352
353 /* max_th <= avg: always mark the packet */
354 red->count = 0;
355 return 1;
356}
357
358/**
359 * @brief Decides if new packet should be enqueued or dropped

Callers 1

rte_red_enqueueFunction · 0.85

Calls 1

__rte_red_dropFunction · 0.85

Tested by

no test coverage detected