Message ID | 20180501123606.23148-1-jianbol@mellanox.com |
---|---|
State | Accepted |
Headers | show |
Series | [ovs-dev,v2] odp-util: Remove unnecessary TOS ECN bits rewrite for tunnels | expand |
On Tue, May 01, 2018 at 12:36:06PM +0000, Jianbo Liu wrote: > 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 <jianbol@mellanox.com> > Reviewed-by: Paul Blakey <paulb@mellanox.com> > Reviewed-by: Roi Dayan <roid@mellanox.com> Thanks, applied to mater, branch-2.9 and branch.2.8.
diff --git a/lib/odp-util.c b/lib/odp-util.c index 6db241a..95c584b 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);