| 2500 | } |
| 2501 | |
| 2502 | static int |
| 2503 | sfc_flow_verify(struct sfc_adapter *sa, struct rte_flow *flow, |
| 2504 | struct rte_flow_error *error) |
| 2505 | { |
| 2506 | const struct sfc_flow_ops_by_spec *ops; |
| 2507 | int rc = 0; |
| 2508 | |
| 2509 | ops = sfc_flow_get_ops_by_spec(flow); |
| 2510 | if (ops == NULL) { |
| 2511 | rte_flow_error_set(error, ENOTSUP, |
| 2512 | RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, |
| 2513 | "No backend to handle this flow"); |
| 2514 | return -rte_errno; |
| 2515 | } |
| 2516 | |
| 2517 | if (ops->verify != NULL) { |
| 2518 | SFC_ASSERT(sfc_adapter_is_locked(sa)); |
| 2519 | rc = ops->verify(sa, flow); |
| 2520 | } |
| 2521 | |
| 2522 | if (rc != 0) { |
| 2523 | rte_flow_error_set(error, rc, |
| 2524 | RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, |
| 2525 | "Failed to verify flow validity with FW"); |
| 2526 | return -rte_errno; |
| 2527 | } |
| 2528 | |
| 2529 | return 0; |
| 2530 | } |
| 2531 | |
| 2532 | static int |
| 2533 | sfc_flow_validate(struct rte_eth_dev *dev, |
no test coverage detected