On 5 Sep 2023, at 12:17, Faicker Mo via dev wrote:

> When the IP header is rewritten like NAT or ttl/tos changed,
> the csum of IP header need recalculation. The UDPLITE checksum
> needs recalculation if src or dst changed in IP header.
> The tc-csum action is for this.
>
> Signed-off-by: Faicker Mo <[email protected]>
> ---
>  lib/tc.c                         |  7 ++++++-
>  tests/system-offloads-traffic.at | 24 ++++++++++++++++++++++++
>  2 files changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/lib/tc.c b/lib/tc.c
> index f49048cda..ae71390bc 100644
> --- a/lib/tc.c
> +++ b/lib/tc.c
> @@ -2973,11 +2973,16 @@ 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) {
> +        } else if (flower->key.ip_proto == IPPROTO_ICMP ||
> +                   flower->key.ip_proto == IPPROTO_IGMP ||
> +                   flower->key.ip_proto == IPPROTO_SCTP) {
>              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 if (flower->key.ip_proto == IPPROTO_UDPLITE) {
> +            flower->needs_full_ip_proto_mask = true;
> +            flower->csum_update_flags |= TCA_CSUM_UPDATE_FLAG_UDPLITE;
>          } else {
>              VLOG_WARN_RL(&error_rl,
>                           "can't offload rewrite of IP/IPV6 with ip_proto: 
> %d",
> diff --git a/tests/system-offloads-traffic.at 
> b/tests/system-offloads-traffic.at
> index 7215e36e2..47b5f1ff7 100644
> --- a/tests/system-offloads-traffic.at
> +++ b/tests/system-offloads-traffic.at
> @@ -855,3 +855,27 @@ AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded 
> | grep "eth_type(0x0800)
>  OVS_TRAFFIC_VSWITCHD_STOP
>  AT_CLEANUP
>
> +AT_SETUP([offloads - Add IGMP/UDPLITE/SCTP protocols to offload in ip 
> rewrite - offloads enabled])
> +OVS_TRAFFIC_VSWITCHD_START([], [], [-- set Open_vSwitch . 
> other_config:hw-offload=true])
> +
> +ADD_NAMESPACES(at_ns0, at_ns1)
> +
> +ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24")
> +ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24")
> +
> +dnl Set up the ip field modify flow.
> +AT_CHECK([ovs-ofctl add-flow br0 "priority=100 in_port=ovs-p0,ip 
> actions=mod_nw_tos:12,output:ovs-p1"])
> +
> +dnl add and del multicast address to send IGMP packet.
> +NS_CHECK_EXEC([at_ns0], [ip addr add dev p0 224.10.10.10/24 autojoin 
> 2>/dev/null], [0])
> +NS_CHECK_EXEC([at_ns0], [ip addr del dev p0 224.10.10.10/24 2>/dev/null], 
> [0])
> +
> +sleep 1
> +
> +dnl Check the offloaded flow.
> +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | grep 
> "eth_type(0x0800)" | wc -l], [0], [dnl
> +1
> +])
> +
> +OVS_TRAFFIC_VSWITCHD_STOP
> +AT_CLEANUP
> -- 
> 2.39.3
>
>
>
>
>
>
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to