ICMP checksum is calculated from ICMP headers and data, so hardware doesn't need to calculate it again because we only rewrite IP headers.
Signed-off-by: Jianbo Liu <[email protected]> Reviewed-by: Paul Blakey <[email protected]> Reviewed-by: Roi Dayan <[email protected]> --- lib/tc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/tc.c b/lib/tc.c index 0784d90..8e7d103 100644 --- a/lib/tc.c +++ b/lib/tc.c @@ -1275,7 +1275,7 @@ csum_update_flag(struct tc_flower *flower, * eth(dst=<mac>),eth_type(0x0800) actions=set(ipv4(src=<new_ip>)) * we need to force a more specific flow as this can, for example, * need a recalculation of icmp checksum if the packet that passes - * is icmp and tcp checksum if its tcp. */ + * is ICMPv6 and tcp checksum if its tcp. */ switch (htype) { case TCA_PEDIT_KEY_EX_HDR_TYPE_IP4: @@ -1290,8 +1290,9 @@ csum_update_flag(struct tc_flower *flower, } else if (flower->key.ip_proto == IPPROTO_UDP) { flower->needs_full_ip_proto_mask = true; flower->csum_update_flags |= TCA_CSUM_UPDATE_FLAG_UDP; - } else if (flower->key.ip_proto == IPPROTO_ICMP - || flower->key.ip_proto == IPPROTO_ICMPV6) { + } else if (flower->key.ip_proto == IPPROTO_ICMP) { + flower->needs_full_ip_proto_mask = true; + } else if (flower->key.ip_proto == IPPROTO_ICMPV6) { flower->needs_full_ip_proto_mask = true; flower->csum_update_flags |= TCA_CSUM_UPDATE_FLAG_ICMP; } else { -- 2.9.5 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
