* Split the flow to subflow set. The splitters might be linked * in the chain, like this: * flow_create_split_outer() calls: * flow_create_split_meter() calls: * flow_create_split_metadata(meter_subflow_0) calls: * flow_create_split_inner(metadata_subflow_0) * flow_create_split_inner(metadata_subflow_1) * flow_create_split_inner(metadata_subflow_2) * flow_create
| 7284 | * 0 on success, negative value otherwise |
| 7285 | */ |
| 7286 | static int |
| 7287 | flow_create_split_outer(struct rte_eth_dev *dev, |
| 7288 | struct rte_flow *flow, |
| 7289 | const struct rte_flow_attr *attr, |
| 7290 | const struct rte_flow_item items[], |
| 7291 | const struct rte_flow_action actions[], |
| 7292 | struct mlx5_flow_split_info *flow_split_info, |
| 7293 | struct rte_flow_error *error) |
| 7294 | { |
| 7295 | int ret; |
| 7296 | |
| 7297 | ret = flow_create_split_sample(dev, flow, attr, items, |
| 7298 | actions, flow_split_info, error); |
| 7299 | MLX5_ASSERT(ret <= 0); |
| 7300 | return ret; |
| 7301 | } |
| 7302 | |
| 7303 | static inline struct mlx5_flow_tunnel * |
| 7304 | flow_tunnel_from_rule(const struct mlx5_flow *flow) |
no test coverage detected