Add the corresponding logics to support the offload of
set IPv4 DSCP action.
Signed-off-by: Chaoyong He <chaoyong.he@corigine.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>
---
doc/guides/nics/features/nfp.ini | 1 +
drivers/net/nfp/nfp_flow.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+)
@@ -44,6 +44,7 @@ of_push_vlan = Y
of_set_vlan_pcp = Y
of_set_vlan_vid = Y
port_id = Y
+set_ipv4_dscp = Y
set_ipv4_dst = Y
set_ipv4_src = Y
set_ipv6_dst = Y
@@ -672,6 +672,14 @@ struct nfp_mask_id_entry {
}
}
break;
+ case RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP:
+ PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP detected");
+ if (!ttl_tos_flag) {
+ key_ls->act_size +=
+ sizeof(struct nfp_fl_act_set_ip4_ttl_tos);
+ ttl_tos_flag = true;
+ }
+ break;
default:
PMD_DRV_LOG(ERR, "Action type %d not supported.", action->type);
return -ENOTSUP;
@@ -1495,6 +1503,29 @@ struct nfp_mask_id_entry {
tc_hl->reserved = 0;
}
+static void
+nfp_flow_action_set_tos(char *act_data,
+ const struct rte_flow_action *action,
+ bool ttl_tos_flag)
+{
+ size_t act_size;
+ struct nfp_fl_act_set_ip4_ttl_tos *ttl_tos;
+ const struct rte_flow_action_set_dscp *tos_conf;
+
+ if (ttl_tos_flag)
+ ttl_tos = (struct nfp_fl_act_set_ip4_ttl_tos *)act_data - 1;
+ else
+ ttl_tos = (struct nfp_fl_act_set_ip4_ttl_tos *)act_data;
+
+ act_size = sizeof(struct nfp_fl_act_set_ip4_ttl_tos);
+ ttl_tos->head.jump_id = NFP_FL_ACTION_OPCODE_SET_IPV4_TTL_TOS;
+ ttl_tos->head.len_lw = act_size >> NFP_FL_LW_SIZ;
+
+ tos_conf = (const struct rte_flow_action_set_dscp *)action->conf;
+ ttl_tos->ipv4_tos = tos_conf->dscp;
+ ttl_tos->reserved = 0;
+}
+
static int
nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor,
const struct rte_flow_action actions[],
@@ -1637,6 +1668,14 @@ struct nfp_mask_id_entry {
}
}
break;
+ case RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP:
+ PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP");
+ nfp_flow_action_set_tos(position, action, ttl_tos_flag);
+ if (!ttl_tos_flag) {
+ position += sizeof(struct nfp_fl_act_set_ip4_ttl_tos);
+ ttl_tos_flag = true;
+ }
+ break;
default:
PMD_DRV_LOG(ERR, "Unsupported action type: %d", action->type);
return -ENOTSUP;