From nobody Sat Oct 4 06:29:30 2025 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0FA9C30DEAD; Tue, 19 Aug 2025 17:47:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755625662; cv=none; b=butsK2zYN7sdA9lmKJsHbjekIP2L/4f8HXn9LYjJqG0DV489EOLBiWS1vk+T9tm0M2C8aHKk31L7bbTiO0jbWWiGAeJN8ndj8RkWvKYPICM+NU4SbIIk59i6IdPV8MSQfSPgUUmkiZQFHlEfGWmnUcn99wNckdkO18XbiAWXSOM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755625662; c=relaxed/simple; bh=uWD5hyVJjE67IRF3moww3abcQ6Otg/bGCM1XBEuodf4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NvKAMtVJTxAgt0CN68Cd+hOq4d4ZKcq9rMJ9oVRrzgNHbpLGSa4KuuS/6VRQQzHeLcXflbzN5yzvjc/c0lKX/NrY6aVNgaRIl6a9FWvEZrl7fP9klS6DJo5pDPF6XSUYKM5vcnym65wVrAaOmUrh6XrlTq43dY2OWJDemMd1qx0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RCMnCBcV; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RCMnCBcV" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3b9e413a219so4504566f8f.3; Tue, 19 Aug 2025 10:47:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755625659; x=1756230459; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Cog/1+YP/iQO2qsSce5fbROxGAWx+PUiBTuYfWJKa7Y=; b=RCMnCBcVmXoa6q1Frh/ae7Uh1n65jXPEHp6F7De99AACezXQWazkFsE31qbIQMhskq 2AWQx25B99SUyhnpG7md13teFdKOMw5KuEbra3nJt+YMq2UQl+ZVyKqjlFFpGxZC5NSX NxKnL10GGUKGVhjmFc01O3pcR0SnN+Gvfhu9AGxXoJOHDU4lpkk3SHZW0rcFy3AQV+Nk JDwYHBXU9qQ5YOL/FFnoC2tLZ/Y01PWs/PLjdbmSbyC0Xch2kncYd70JWmOp9cQRI4Fq VAj2qwloX9vYVue+OgqZTgAZdfYs5iLS4sKoXQP5/uN/pRrrSJndzoSFhBi/ebn/uDBi nAhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755625659; x=1756230459; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Cog/1+YP/iQO2qsSce5fbROxGAWx+PUiBTuYfWJKa7Y=; b=GQkvTJloC1xG+7vtzO6emVVEI4yguoby0Vd+avKOfHTwalz06JErWb/RP/MjkMngNs NtQcBLMgmFv6/gvzUu/eWezKR9JuOEC4v5mtL0uTrJMra4gQXw6jbJ7yKT6WnLBK11Dg alUEDGaFmUZb5tFm8+uK/3s4NxVDeznXor9Zua0iJ2RBvr6d3GHyYXHTtS6rMNxvSSBE AYRZB25wEZSlc6Ttqfcc1LV7bh4Y8YCGI2k9AOzf6rN/Iu5+9Aktz6vxLsXWmNUiFQ7g qc/Xm3xzasbvVz6jZ3ePJoQ7v448+ON3EJOgji4njLcFaHnHI6bwVfXtbw9GZaXSFrHT ClGg== X-Forwarded-Encrypted: i=1; AJvYcCW37fDq3nyk5jxfiKLtnKSFWr22Cq2NUBm+TQle3BJr3ae+qVQyZAVXB7oWGvf/Giqr3Uv3HY+Xv4cLvvw=@vger.kernel.org X-Gm-Message-State: AOJu0YxhJMna76FAkMVMFzYYXPlzUw+eciRrhDZ8rbgtYBxQm6KBg7Nf ec/Icf1Z6w5KsYvItsXtpdA7DW+F77Y4SedUHdlrs1QHGhAJbEhUPcaXAFdyeFT1 X-Gm-Gg: ASbGncseQGDIvhX0KZJ4fMJTaeoLT5SqAB5bjQvphB7hgkXQssshrrXx3CQoHK6ypVN Xm4K4Ezgf0g21In5oIYNQc1zoRjOXt1XFp6pZax1XrWEdcDOpCibepH9mhrsrqjkm5OQMDF3I+z AxsnZuDsIJEZAesJZ2Elw/1OhZXPhkAkbD/fJuCgrH2ZX/8WuV6spSKzCjsGCdjD72WP/Scdnm/ JooxGxiXREbci12O7pYWdl4IgnlXqM4jJAuIxZZyXehHB7938tw8ntz7xh5rqPJZKE5H4wacEf6 WkgmnOZyLG3ldhUDmOx9r+xKh1hvnaayeJIquQjwsVvWGqhnEEFSyC4Ts8PYlHqkdJ6t1y0kDYy 8yTu/pfxxj+eMP0WEiQMY91dtJ+odS9Ll1fw= X-Google-Smtp-Source: AGHT+IEu3qhC3HqGeNgPtxgH3g/IswHRDzukzy3hbcQoLcK0lKJS4HljCzLnNMNx9arYLl2RmRQ9kg== X-Received: by 2002:a05:6000:2887:b0:3b7:9350:44d4 with SMTP id ffacd0b85a97d-3c0ea3ceed0mr3065979f8f.11.1755625658996; Tue, 19 Aug 2025 10:47:38 -0700 (PDT) Received: from localhost.localdomain ([45.128.133.229]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1c78b410sm232181565e9.24.2025.08.19.10.47.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Aug 2025 10:47:38 -0700 (PDT) From: Oscar Maes To: netdev@vger.kernel.org Cc: davem@davemloft.net, dsahern@kernel.org, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, shuah@kernel.org, linux-kernel@vger.kernel.org, Oscar Maes Subject: [PATCH net-next v3 1/2] net: ipv4: allow directed broadcast routes to use dst hint Date: Tue, 19 Aug 2025 19:46:41 +0200 Message-Id: <20250819174642.5148-2-oscmaes92@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250819174642.5148-1-oscmaes92@gmail.com> References: <20250819174642.5148-1-oscmaes92@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, ip_extract_route_hint uses RTN_BROADCAST to decide whether to use the route dst hint mechanism. This check is too strict, as it prevents directed broadcast routes from using the hint, resulting in poor performance during bursts of directed broadcast traffic. Fix this in ip_extract_route_hint and modify ip_route_use_hint to preserve the intended behaviour. Signed-off-by: Oscar Maes Reviewed-by: David Ahern --- net/ipv4/ip_input.c | 11 +++++++---- net/ipv4/route.c | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index fc323994b1fa..a09aca2c8567 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c @@ -587,9 +587,13 @@ static void ip_sublist_rcv_finish(struct list_head *he= ad) } =20 static struct sk_buff *ip_extract_route_hint(const struct net *net, - struct sk_buff *skb, int rt_type) + struct sk_buff *skb) { - if (fib4_has_custom_rules(net) || rt_type =3D=3D RTN_BROADCAST || + const struct iphdr *iph =3D ip_hdr(skb); + + if (fib4_has_custom_rules(net) || + ipv4_is_lbcast(iph->daddr) || + ipv4_is_zeronet(iph->daddr) || IPCB(skb)->flags & IPSKB_MULTIPATH) return NULL; =20 @@ -618,8 +622,7 @@ static void ip_list_rcv_finish(struct net *net, struct = list_head *head) =20 dst =3D skb_dst(skb); if (curr_dst !=3D dst) { - hint =3D ip_extract_route_hint(net, skb, - dst_rtable(dst)->rt_type); + hint =3D ip_extract_route_hint(net, skb); =20 /* dispatch old sublist */ if (!list_empty(&sublist)) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index f639a2ae881a..1f212b2ce4c6 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2210,7 +2210,7 @@ ip_route_use_hint(struct sk_buff *skb, __be32 daddr, = __be32 saddr, goto martian_source; } =20 - if (rt->rt_type !=3D RTN_LOCAL) + if (!(rt->rt_flags & RTCF_LOCAL)) goto skip_validate_source; =20 reason =3D fib_validate_source_reason(skb, saddr, daddr, dscp, 0, dev, --=20 2.39.5 From nobody Sat Oct 4 06:29:30 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF7AB30E83E; Tue, 19 Aug 2025 17:47:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755625668; cv=none; b=c36KBtklJpej/78hGG0olA+zX6foVlQMd/LMkwDmqZlL9N9Eug5uP/d8/5j0xseO/0lRQ/Pc9tob8k6MY38oSn7d3/QoT/OVGOoiU87xMX5+Obfx37oiFqB1I5Fh23FOLuI6noUU6dlawBqrJUZm7nyffT7XxYKEIVaIRwnUy+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755625668; c=relaxed/simple; bh=zxOsO0U7uICU9UyC/BtygGo50pT3VEuJ8Qus3wpcaDY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JqhlWnehkBWqBmcPvQ6IKuvkeVw8RvsDPGHeA40IKIs0QgSm7IVWrrqNdSyPSNfVdmzaV+6fYWNLNaEF7N+C5wQ6UKi1xpH33b+l5sh3cjSpvHQB3EoS1T4/Nnw9DMpfSfPeHRfGFxfeg5NtcrApjcAFKzLl9pgZmVz34V+mc9E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Mvjgj9z0; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Mvjgj9z0" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-45a1b066b5eso29424635e9.1; Tue, 19 Aug 2025 10:47:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755625665; x=1756230465; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jV8T1/e9vmT2yocc8WGsZXIRU5vCVTMY+wuZVgREffs=; b=Mvjgj9z0Yi8C4hlDRS4KUaO+gfvZoFvYnDGrJXkSHWp58v1WQZDlWNxkXynn5rQ6DE 85gZArk5Q+rpNkJL47fnpAAOmtBID9LVfsr7NGDUdvjXYTnmlKcJknPArtjEGzdMPs9t LFCGTEmNGGL6VK9yQl3L9ejt8eT9v4Kf3b+JCbO49c716t0U3umrZtIq9h/GoCrpPCqy UvZhSlhJRt1vGMe5zAgkNh95g04tVknWtqQ4bh3mkHdVzJ27YgoTfKc72hktcjmH3cug 6xsqLjtFUeW4CtQTXiThFzLCycZDduQm/lKUrFjIbZri2EXHKx198cRQnd0CzDE68278 58sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755625665; x=1756230465; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jV8T1/e9vmT2yocc8WGsZXIRU5vCVTMY+wuZVgREffs=; b=IaMq8TR6gVpZTWm3tWNZiyo170n3RgskeckrxTvIIPoJ2tbnrmjcIZeRYs+zWtsM78 58D4wnO2CMSFqpxwI8BCrUKCscA3rHeg20FE8Kk0skTZh2UCJl9NgrRBjgdOkElSQim/ wGRPQSKWIXbBBWuE/Robe3YdjTEGNu4+ayRahldChli0ukpOsvOhENhtECG/gjxPbtJm pWuU3BzViy29FywWiIEceLcBcz5jwlEovEjKLS28Z59BfJqHKo1cCKrv2CSjhhvf4rXv jiuwo5HyOUpwxJ1GHdcxm3pH4h6JNqbB1llLhjBVzaUWi1Ym4L57sV4IXAzGfKHXbfeL w0Zg== X-Forwarded-Encrypted: i=1; AJvYcCUunVwin6XRa0NoFZcM0HoAKdRl4sP2aqDKLfQEswKuTJzI5Tk35RCPoNx9NgnnkBIETrgwv44OEPc8a0U=@vger.kernel.org X-Gm-Message-State: AOJu0YzB8greBWwXbzfCvCc4wxm6aQPHsCt1wv5AuwNT22EU4PiIaUK0 QsD7I1ulfULsmf9hKAVdz1ILv7BVeaLlUpmT9JLCyq1zKiE94mooBM74OtiFmEsR X-Gm-Gg: ASbGnctrYH8Wla5XbsDfeHukpzd9+j2RR6h9VQUP3IAYVo071WTi6zvV6lMQHGop+Ss KjCi9VXzl7DIVNisHHiZb3yphmcsAcyuMmIsmNEA+3rp957XjNwtdfBPFaxF3SNwQYCQ2gDgW3L oaqk/Hbqg0PU+LPH30/zdhLsx2n49CE3NstoR8KSBdMzucGXeNw7klrB2shSpjQ3pYarEeikarC fGArEE0eOnahaxePMF2+Yg+IkuWSUvFfSq4TOFKCv1Tj4+9awS4RDg9lVNPHDBFVixrY/Zod41h qWk/4KeBbiGZVWGsmDUCqSzZ6jh9KGRlQOXWpyT5DyD74e5FJXZ4JPMp2EbwRZD5S7DTFA3m96+ JSPBJvfyJIfQJs2wD3TTKsfNGa5x+GS+PQjc= X-Google-Smtp-Source: AGHT+IHMqwdHLa809CtLhJdzk/Jh+JBj770G0jJA+aVXN+7wj7JZNMuXNeRiwwNxT2lMT5fTnTKzJA== X-Received: by 2002:a05:600c:470f:b0:458:bf7c:f744 with SMTP id 5b1f17b1804b1-45b43e0d57emr30448365e9.32.1755625665028; Tue, 19 Aug 2025 10:47:45 -0700 (PDT) Received: from localhost.localdomain ([45.128.133.229]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1c78b410sm232181565e9.24.2025.08.19.10.47.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Aug 2025 10:47:44 -0700 (PDT) From: Oscar Maes To: netdev@vger.kernel.org Cc: davem@davemloft.net, dsahern@kernel.org, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, shuah@kernel.org, linux-kernel@vger.kernel.org, Oscar Maes Subject: [PATCH net-next v3 2/2] selftests: net: add test for dst hint mechanism with directed broadcast addresses Date: Tue, 19 Aug 2025 19:46:42 +0200 Message-Id: <20250819174642.5148-3-oscmaes92@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250819174642.5148-1-oscmaes92@gmail.com> References: <20250819174642.5148-1-oscmaes92@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a test for ensuring that the dst hint mechanism is used for directed broadcast addresses. This test relies on mausezahn for sending directed broadcast packets. Additionally, a high GRO flush timeout is set to ensure that packets will be received as lists. The test determines if the hint mechanism was used by checking the in_brd statistic using lnstat. Signed-off-by: Oscar Maes --- tools/testing/selftests/net/Makefile | 1 + tools/testing/selftests/net/route_hint.sh | 79 +++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100755 tools/testing/selftests/net/route_hint.sh diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests= /net/Makefile index b31a71f2b372..eef0b8f8a7b0 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -117,6 +117,7 @@ TEST_GEN_FILES +=3D tfo TEST_PROGS +=3D tfo_passive.sh TEST_PROGS +=3D broadcast_pmtu.sh TEST_PROGS +=3D ipv6_force_forwarding.sh +TEST_PROGS +=3D route_hint.sh =20 # YNL files, must be before "include ..lib.mk" YNL_GEN_FILES :=3D busy_poller netlink-dumps diff --git a/tools/testing/selftests/net/route_hint.sh b/tools/testing/self= tests/net/route_hint.sh new file mode 100755 index 000000000000..2db01ece0cc1 --- /dev/null +++ b/tools/testing/selftests/net/route_hint.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +# This test ensures directed broadcast routes use dst hint mechanism + +source lib.sh + +CLIENT_IP4=3D"192.168.0.1" +SERVER_IP4=3D"192.168.0.2" +BROADCAST_ADDRESS=3D"192.168.0.255" + +setup() { + setup_ns CLIENT_NS SERVER_NS + + ip -net "${SERVER_NS}" link add link1 type veth peer name link0 netns "${= CLIENT_NS}" + + ip -net "${CLIENT_NS}" link set link0 up + ip -net "${CLIENT_NS}" addr add "${CLIENT_IP4}/24" dev link0 + + ip -net "${SERVER_NS}" link set link1 up + ip -net "${SERVER_NS}" addr add "${SERVER_IP4}/24" dev link1 + + ip netns exec "${CLIENT_NS}" ethtool -K link0 tcp-segmentation-offload off + ip netns exec "${SERVER_NS}" sh -c "echo 500000000 > /sys/class/net/link1= /gro_flush_timeout" + ip netns exec "${SERVER_NS}" sh -c "echo 1 > /sys/class/net/link1/napi_de= fer_hard_irqs" + ip netns exec "${SERVER_NS}" ethtool -K link1 generic-receive-offload on +} + +cleanup() { + ip -net "${SERVER_NS}" link del link1 + cleanup_ns "${CLIENT_NS}" "${SERVER_NS}" +} + +directed_bcast_hint_test() +{ + local rc=3D0 + + echo "Testing for directed broadcast route hint" + + orig_in_brd=3D$(ip netns exec "${SERVER_NS}" lnstat -j -i1 -c1 | jq '.in_= brd') + ip netns exec "${CLIENT_NS}" mausezahn link0 -a own -b bcast -A "${CLIENT= _IP4}" \ + -B "${BROADCAST_ADDRESS}" -c1 -t tcp "sp=3D1-100,dp=3D1234,s=3D1,a=3D0" = -p 5 -q + sleep 1 + new_in_brd=3D$(ip netns exec "${SERVER_NS}" lnstat -j -i1 -c1 | jq '.in_b= rd') + + res=3D$(echo "${new_in_brd} - ${orig_in_brd}" | bc) + + if [ "${res}" -lt 100 ]; then + echo "[ OK ]" + rc=3D"${ksft_pass}" + else + echo "[FAIL] expected in_brd to be under 100, got ${res}" + rc=3D"${ksft_fail}" + fi + + return "${rc}" +} + +if [ ! -x "$(command -v mausezahn)" ]; then + echo "SKIP: Could not run test without mausezahn tool" + exit "${ksft_skip}" +fi + +if [ ! -x "$(command -v jq)" ]; then + echo "SKIP: Could not run test without jq tool" + exit "${ksft_skip}" +fi + +if [ ! -x "$(command -v bc)" ]; then + echo "SKIP: Could not run test without bc tool" + exit "${ksft_skip}" +fi + +trap cleanup EXIT + +setup + +directed_bcast_hint_test +exit $? --=20 2.39.5