net/nfp: support IPv4 DSCP flow action
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>
This commit is contained in:
parent
ac12e126c4
commit
9c665d70f7
@ -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 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[],
|
||||
}
|
||||
}
|
||||
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 @@ nfp_flow_action_set_hl(char *act_data,
|
||||
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 @@ nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor,
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user