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

Function port_queue_flow_destroy

dpdk/app/test-pmd/config.c:2805–2863  ·  view source on GitHub ↗

Enqueue number of destroy flow rules operations. */

Source from the content-addressed store, hash-verified

2803
2804/** Enqueue number of destroy flow rules operations. */
2805int
2806port_queue_flow_destroy(portid_t port_id, queueid_t queue_id,
2807 bool postpone, uint32_t n, const uint64_t *rule)
2808{
2809 struct rte_flow_op_attr op_attr = { .postpone = postpone };
2810 struct rte_port *port;
2811 struct port_flow **tmp;
2812 int ret = 0;
2813 struct queue_job *job;
2814
2815 if (port_id_is_invalid(port_id, ENABLED_WARN) ||
2816 port_id == (portid_t)RTE_PORT_ALL)
2817 return -EINVAL;
2818 port = &ports[port_id];
2819
2820 if (queue_id >= port->queue_nb) {
2821 printf("Queue #%u is invalid\n", queue_id);
2822 return -EINVAL;
2823 }
2824
2825 tmp = &port->flow_list;
2826 while (*tmp) {
2827 uint32_t i;
2828
2829 for (i = 0; i != n; ++i) {
2830 struct rte_flow_error error;
2831 struct port_flow *pf = *tmp;
2832
2833 if (rule[i] != pf->id)
2834 continue;
2835 /*
2836 * Poisoning to make sure PMD
2837 * update it in case of error.
2838 */
2839 memset(&error, 0x33, sizeof(error));
2840 job = calloc(1, sizeof(*job));
2841 if (!job) {
2842 printf("Queue flow destroy job allocate failed\n");
2843 return -ENOMEM;
2844 }
2845 job->type = QUEUE_JOB_TYPE_FLOW_DESTROY;
2846 job->pf = pf;
2847
2848 if (rte_flow_async_destroy(port_id, queue_id, &op_attr,
2849 pf->flow, job, &error)) {
2850 free(job);
2851 ret = port_flow_complain(&error);
2852 continue;
2853 }
2854 printf("Flow rule #%"PRIu64" destruction enqueued\n",
2855 pf->id);
2856 *tmp = pf->next;
2857 break;
2858 }
2859 if (i == n)
2860 tmp = &(*tmp)->next;
2861 }
2862 return ret;

Callers 2

cmd_flow_parsedFunction · 0.85

Calls 7

port_id_is_invalidFunction · 0.85
memsetFunction · 0.85
callocFunction · 0.85
rte_flow_async_destroyFunction · 0.85
port_flow_complainFunction · 0.70
printfFunction · 0.50
freeFunction · 0.50

Tested by

no test coverage detected