From: Chaoyong He <chaoyong...@corigine.com> Add the support of offload of set IPv4 DSCP action.
Signed-off-by: Chaoyong He <chaoyong...@corigine.com> Signed-off-by: Simon Horman <simon.hor...@corigine.com> --- lib/netdev-offload-dpdk.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index cceefbc50751..732ce6021722 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -770,6 +770,14 @@ dump_flow_action(struct ds *s, struct ds *s_extra, IP_ARGS(set_ipv4->ipv4_addr)); } ds_put_cstr(s, "/ "); + } else if (actions->type == RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP) { + const struct rte_flow_action_set_dscp *set_dscp = actions->conf; + + ds_put_cstr(s, "set_dscp "); + if (set_dscp) { + ds_put_format(s, "dscp_value %d ", set_dscp->dscp); + } + ds_put_cstr(s, "/ "); } else if (actions->type == RTE_FLOW_ACTION_TYPE_SET_TTL) { const struct rte_flow_action_set_ttl *set_ttl = actions->conf; @@ -1813,7 +1821,8 @@ add_output_action(struct netdev *netdev, static int add_set_flow_action__(struct flow_actions *actions, const void *value, void *mask, - const size_t size, const int attr) + const size_t size, const int attr, + bool dscp_flag) { void *spec; @@ -1824,7 +1833,7 @@ add_set_flow_action__(struct flow_actions *actions, if (is_all_zeros(mask, size)) { return 0; } - if (!is_all_ones(mask, size)) { + if (!dscp_flag && !is_all_ones(mask, size)) { VLOG_DBG_RL(&rl, "Partial mask is not supported"); return -1; } @@ -1849,6 +1858,8 @@ BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv4) == MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_src)); BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv4) == MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_dst)); +BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_dscp) == + MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_tos)); BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ttl) == MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_ttl)); BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv6) == @@ -1874,11 +1885,14 @@ parse_set_actions(struct flow_actions *actions, { const struct nlattr *sa; unsigned int sleft; + bool dscp_flag = false; #define add_set_flow_action(field, type) \ + if (type == RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP) \ + dscp_flag = true; \ if (add_set_flow_action__(actions, &key->field, \ mask ? CONST_CAST(void *, &mask->field) : NULL, \ - sizeof key->field, type)) { \ + sizeof key->field, type, dscp_flag)) { \ return -1; \ } @@ -1900,6 +1914,7 @@ parse_set_actions(struct flow_actions *actions, add_set_flow_action(ipv4_src, RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC); add_set_flow_action(ipv4_dst, RTE_FLOW_ACTION_TYPE_SET_IPV4_DST); + add_set_flow_action(ipv4_tos, RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP); add_set_flow_action(ipv4_ttl, RTE_FLOW_ACTION_TYPE_SET_TTL); if (mask && !is_all_zeros(mask, sizeof *mask)) { -- 2.30.2 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev