From b51d0390d43773c6271a84b1a1a11535fc2000a6 Mon Sep 17 00:00:00 2001 From: Jianbo Liu Date: Tue, 1 May 2018 12:36:06 +0000 Subject: [PATCH] odp-util: Remove unnecessary TOS ECN bits rewrite for tunnels For tunnels, TOS ECN bits are never wildcard for the reason that they are always inherited. OVS will create a rewrite action if we add rule to modify other IP headers. But it also adds an extra ECN rewrite for the action because of this ECN un-wildcarding. It seems no error because the ECN bits to be changed are same in this case. But as rule can't be offloaded to hardware, the unnecssary ECN rewrite should be removed. Signed-off-by: Jianbo Liu Reviewed-by: Paul Blakey Reviewed-by: Roi Dayan Signed-off-by: Simon Horman --- lib/odp-util.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/odp-util.c b/lib/odp-util.c index 6db241ab0..95c584be3 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -6962,6 +6962,11 @@ commit_set_ipv4_action(const struct flow *flow, struct flow *base_flow, mask.ipv4_proto = 0; /* Not writeable. */ mask.ipv4_frag = 0; /* Not writable. */ + if (flow_tnl_dst_is_set(&base_flow->tunnel) && + ((base_flow->nw_tos ^ flow->nw_tos) & IP_ECN_MASK) == 0) { + mask.ipv4_tos &= ~IP_ECN_MASK; + } + if (commit(OVS_KEY_ATTR_IPV4, use_masked, &key, &base, &mask, sizeof key, odp_actions)) { put_ipv4_key(&base, base_flow, false); @@ -7012,6 +7017,11 @@ commit_set_ipv6_action(const struct flow *flow, struct flow *base_flow, mask.ipv6_proto = 0; /* Not writeable. */ mask.ipv6_frag = 0; /* Not writable. */ + if (flow_tnl_dst_is_set(&base_flow->tunnel) && + ((base_flow->nw_tos ^ flow->nw_tos) & IP_ECN_MASK) == 0) { + mask.ipv6_tclass &= ~IP_ECN_MASK; + } + if (commit(OVS_KEY_ATTR_IPV6, use_masked, &key, &base, &mask, sizeof key, odp_actions)) { put_ipv6_key(&base, base_flow, false);