[PATCH v2 16/25] net/iavf: use common action checks for IPsec
Anatoly Burakov
anatoly.burakov at intel.com
Mon Mar 16 11:52:41 CET 2026
Use the common flow action checking parsing infrastructure for checking
flow actions for IPsec filter.
Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
drivers/net/intel/iavf/iavf_ipsec_crypto.c | 34 +++++++++-------------
1 file changed, 14 insertions(+), 20 deletions(-)
diff --git a/drivers/net/intel/iavf/iavf_ipsec_crypto.c b/drivers/net/intel/iavf/iavf_ipsec_crypto.c
index fd35997cbd..6466d84cfb 100644
--- a/drivers/net/intel/iavf/iavf_ipsec_crypto.c
+++ b/drivers/net/intel/iavf/iavf_ipsec_crypto.c
@@ -1745,26 +1745,12 @@ parse_udp_item(const struct rte_flow_item_udp *item, struct rte_udp_hdr *udp)
udp->src_port = item->hdr.src_port;
}
-static int
-has_security_action(const struct rte_flow_action actions[],
- const void **session)
-{
- /* only {SECURITY; END} supported */
- if (actions[0].type == RTE_FLOW_ACTION_TYPE_SECURITY &&
- actions[1].type == RTE_FLOW_ACTION_TYPE_END) {
- *session = actions[0].conf;
- return true;
- }
- return false;
-}
-
static struct iavf_ipsec_flow_item *
iavf_ipsec_flow_item_parse(struct rte_eth_dev *ethdev,
const struct rte_flow_item pattern[],
- const struct rte_flow_action actions[],
+ const struct rte_security_session *session,
uint32_t type)
{
- const void *session;
struct iavf_ipsec_flow_item
*ipsec_flow = rte_malloc("security-flow-rule",
sizeof(struct iavf_ipsec_flow_item), 0);
@@ -1831,9 +1817,6 @@ iavf_ipsec_flow_item_parse(struct rte_eth_dev *ethdev,
goto flow_cleanup;
}
- if (!has_security_action(actions, &session))
- goto flow_cleanup;
-
if (!iavf_ipsec_crypto_action_valid(ethdev, session,
ipsec_flow->spi))
goto flow_cleanup;
@@ -1956,6 +1939,14 @@ iavf_ipsec_flow_parse(struct iavf_adapter *ad,
void **meta,
struct rte_flow_error *error)
{
+ struct ci_flow_actions parsed_actions = {0};
+ struct ci_flow_actions_check_param param = {
+ .allowed_types = (enum rte_flow_action_type[]){
+ RTE_FLOW_ACTION_TYPE_SECURITY,
+ RTE_FLOW_ACTION_TYPE_END,
+ },
+ .max_actions = 1,
+ };
struct iavf_pattern_match_item *item = NULL;
int ret = -1;
@@ -1963,12 +1954,15 @@ iavf_ipsec_flow_parse(struct iavf_adapter *ad,
if (ret)
return ret;
+ if (ci_flow_check_actions(actions, ¶m, &parsed_actions, error) < 0)
+ return ret;
+
item = iavf_search_pattern_match_item(pattern, array, array_len, error);
if (item && item->meta) {
+ const struct rte_security_session *session = parsed_actions.actions[0]->conf;
uint32_t type = (uint64_t)(item->meta);
struct iavf_ipsec_flow_item *fi =
- iavf_ipsec_flow_item_parse(ad->vf.eth_dev,
- pattern, actions, type);
+ iavf_ipsec_flow_item_parse(ad->vf.eth_dev, pattern, session, type);
if (fi && meta) {
*meta = fi;
ret = 0;
--
2.47.3
More information about the dev
mailing list