| 2527 | } |
| 2528 | |
| 2529 | int |
| 2530 | rte_table_action_apply(struct rte_table_action *action, |
| 2531 | void *data, |
| 2532 | enum rte_table_action_type type, |
| 2533 | void *action_params) |
| 2534 | { |
| 2535 | void *action_data; |
| 2536 | |
| 2537 | /* Check input arguments */ |
| 2538 | if ((action == NULL) || |
| 2539 | (data == NULL) || |
| 2540 | (action_valid(type) == 0) || |
| 2541 | ((action->cfg.action_mask & (1LLU << type)) == 0) || |
| 2542 | (action_params == NULL)) |
| 2543 | return -EINVAL; |
| 2544 | |
| 2545 | /* Data update */ |
| 2546 | action_data = action_data_get(data, action, type); |
| 2547 | |
| 2548 | switch (type) { |
| 2549 | case RTE_TABLE_ACTION_FWD: |
| 2550 | return fwd_apply(action_data, |
| 2551 | action_params); |
| 2552 | |
| 2553 | case RTE_TABLE_ACTION_LB: |
| 2554 | return lb_apply(action_data, |
| 2555 | action_params); |
| 2556 | |
| 2557 | case RTE_TABLE_ACTION_MTR: |
| 2558 | return mtr_apply(action_data, |
| 2559 | action_params, |
| 2560 | &action->cfg.mtr, |
| 2561 | action->mp, |
| 2562 | RTE_DIM(action->mp)); |
| 2563 | |
| 2564 | case RTE_TABLE_ACTION_TM: |
| 2565 | return tm_apply(action_data, |
| 2566 | action_params, |
| 2567 | &action->cfg.tm); |
| 2568 | |
| 2569 | case RTE_TABLE_ACTION_ENCAP: |
| 2570 | return encap_apply(action_data, |
| 2571 | action_params, |
| 2572 | &action->cfg.encap, |
| 2573 | &action->cfg.common); |
| 2574 | |
| 2575 | case RTE_TABLE_ACTION_NAT: |
| 2576 | return nat_apply(action_data, |
| 2577 | action_params, |
| 2578 | &action->cfg.common); |
| 2579 | |
| 2580 | case RTE_TABLE_ACTION_TTL: |
| 2581 | return ttl_apply(action_data, |
| 2582 | action_params); |
| 2583 | |
| 2584 | case RTE_TABLE_ACTION_STATS: |
| 2585 | return stats_apply(action_data, |
| 2586 | action_params); |
no test coverage detected