Destroy a flow rule on a given port. */
| 425 | |
| 426 | /* Destroy a flow rule on a given port. */ |
| 427 | int |
| 428 | rte_flow_destroy(uint16_t port_id, |
| 429 | struct rte_flow *flow, |
| 430 | struct rte_flow_error *error) |
| 431 | { |
| 432 | struct rte_eth_dev *dev = &rte_eth_devices[port_id]; |
| 433 | const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error); |
| 434 | int ret; |
| 435 | |
| 436 | if (unlikely(!ops)) |
| 437 | return -rte_errno; |
| 438 | if (likely(!!ops->destroy)) { |
| 439 | fts_enter(dev); |
| 440 | ret = ops->destroy(dev, flow, error); |
| 441 | fts_exit(dev); |
| 442 | ret = flow_err(port_id, ret, error); |
| 443 | |
| 444 | rte_flow_trace_destroy(port_id, flow, ret); |
| 445 | |
| 446 | return ret; |
| 447 | } |
| 448 | return rte_flow_error_set(error, ENOSYS, |
| 449 | RTE_FLOW_ERROR_TYPE_UNSPECIFIED, |
| 450 | NULL, rte_strerror(ENOSYS)); |
| 451 | } |
| 452 | |
| 453 | int |
| 454 | rte_flow_actions_update(uint16_t port_id, |