From patchwork Sat Oct 7 03:49:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Faicker Mo X-Patchwork-Id: 1844683 X-Patchwork-Delegate: echaudro@redhat.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ucloud.cn header.i=@ucloud.cn header.a=rsa-sha256 header.s=default header.b=lbN9ZhgO; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4S2WXv1y5nz1yq7 for ; Sat, 7 Oct 2023 14:50:37 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 4278641BD5; Sat, 7 Oct 2023 03:50:34 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 4278641BD5 Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ucloud.cn header.i=@ucloud.cn header.a=rsa-sha256 header.s=default header.b=lbN9ZhgO X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qHgWIH4DjIjn; Sat, 7 Oct 2023 03:50:33 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id EAF0E41C2B; Sat, 7 Oct 2023 03:50:31 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org EAF0E41C2B Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id BE962C0071; Sat, 7 Oct 2023 03:50:31 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 15DD1C0032 for ; Sat, 7 Oct 2023 03:50:30 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id E969D812B1 for ; Sat, 7 Oct 2023 03:50:29 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E969D812B1 Authentication-Results: smtp1.osuosl.org; dkim=pass (1024-bit key) header.d=ucloud.cn header.i=@ucloud.cn header.a=rsa-sha256 header.s=default header.b=lbN9ZhgO X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cj1ZcULSyYTu for ; Sat, 7 Oct 2023 03:50:27 +0000 (UTC) Received: from mail-m127225.xmail.ntesmail.com (mail-m127225.xmail.ntesmail.com [115.236.127.225]) by smtp1.osuosl.org (Postfix) with ESMTPS id E93C181095 for ; Sat, 7 Oct 2023 03:50:26 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E93C181095 DKIM-Signature: a=rsa-sha256; b=lbN9ZhgOzmoBoByztQUsLUfDcnDCYlyX/lPFb0S/7R/D6c7ZmDpBUYZhLBBplUktXcXykoWEaUlSRAHIfdeUiSUyIPV/NNLQDRD+WRL/nWIjZDw2rE9PyyCPRfdHosllnA39T+nRhA6Ruu4p2uWVIkK134VVY/N60sTC6QGh8Zw=; c=relaxed/relaxed; s=default; d=ucloud.cn; v=1; bh=NCn1ceAuC7Dexh1wRU45wFR/FLSo8mWDfBILm9sVQ7U=; h=date:mime-version:subject:message-id:from; Received: from ucloud.cn (unknown [127.0.0.1]) by mail-m312.qiye.163.com (Hmail) with ESMTP id 0D93180484; Sat, 7 Oct 2023 11:49:42 +0800 (CST) Message-ID: To: dev X-Priority: 3 X-Mailer: HMail Webmail Server V2.0 Copyright (c) 2015-163.com X-Originating-IP: 106.75.220.2 References: MIME-Version: 1.0 Received: from mocan@ucloud.cn( [106.75.220.2) ] by ajax-webmail ( [127.0.0.1] ) ; Sat, 7 Oct 2023 11:49:42 +0800 (GMT+08:00) Date: Sat, 7 Oct 2023 11:49:42 +0800 (GMT+08:00) X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFJQjdXWS1ZQUlXWQ8JGhUIEh9ZQVkZSEgeVhlCGR9LSh5PH0JOQlUZERMWGhIXJBQOD1 lXWRgSC1lBWUpLTVVMTlVJSUtVSVlXWRYaDxIVHRRZQVlPS0hVSk1PSUxOVUpLS1VKQktLWQY+ X-HM-Tid: 0a8b08414b1700d2kurm18ab7e875c3 X-HM-MType: 1 X-HM-NTES-SC: AL0_4z5B86Wr4Tz9jdMF+bhXMTnwvDqncMttaLoBi+EWdvVxqV7pHkTF0SPzZ8 K4ssdJ85775Ka8PD56oQ1G/bqUvgC2YXfhWUFkXP86pCz14PhFblMblxTDsLDb4TM5QqvJML4VFn ITm7wWYN5rdkY5zDgTPwGrhZWyhnASLDFznHU= X-HM-Sender-Digest: e1kMHhlZQQ8JDh5XWRIfHhUPWUFZRzo2IjoUDDkBMSsoLhQJEgEwQwIi LE8KMVVKVUpNQk1NTktOQ0lNSU9VMxYaEhdVHRoSGBAeCVUWFDsOGBcUDh9VGBVFWVdZEgtZQVlK S01VTE5VSUlLVUlZV1kIAVlBTUhNSzcG Cc: "i.maximets" Subject: [ovs-dev] =?utf-8?q?=5BPATCH_v6_1/2=5D_netdev-tc-offload=3A_Add_csu?= =?utf-8?q?m_offload_of_IGMP/UDPLITE/SCTP_in_ip_rewrite=2E?= X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Faicker Mo via dev From: Faicker Mo Reply-To: Faicker Mo Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" When the IP header is modified, for example, by NAT or a ToS/TTL change, the IP header checksum needs recalculation. In addition to the IP header checksum, for UDPLITE, its checksum also needs recalculation when any of the addresses change. This patch adds support for TC offloading of IGMP, UDPLITE, and SCTP packets by adding the correct csum action. Signed-off-by: Faicker Mo Acked-by: Eelco Chaudron Acked-by: Simon Horman --- lib/tc.c | 7 ++++++- tests/system-offloads-traffic.at | 27 +++++++++++++++++++++++++++ 2 files changed, 33 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..3a03d931c 100644 --- a/tests/system-offloads-traffic.at +++ b/tests/system-offloads-traffic.at @@ -855,3 +855,30 @@ AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | grep "eth_type(0x0800) OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([offloads - IGMP with 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]) + +OVS_WAIT_UNTIL([test `ovs-appctl dpctl/dump-flows type=tc,offloaded | grep "eth_type(0x0800)" | wc -l` -ge 1]) + +dnl Check the offloaded flow. +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | strip_stats], [0], [dnl +in_port(2),eth(),eth_type(0x0800),ipv4(proto=2,tos=0xc0/0xfc,frag=no), packets:0, bytes:0, used:0.001s, actions:set(ipv4(tos=0xc/0xfc)),3 +]) + +dnl Check the tc rule. +AT_CHECK([tc -d filter show dev ovs-p0 ingress | grep -q "csum (iph)"], [0]) + +OVS_TRAFFIC_VSWITCHD_STOP +AT_CLEANUP