From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 C6A06302753 for ; Sat, 8 Aug 2026 00:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150616; cv=none; b=nYaYUKIBoM8BDu6apMWnE2c7M8b73vOQrhYXu0JyX4mCbNEmXP0f/Wziasv9uFHXgOR3lh5yf1YUxrk8MJYQardF0N2vfdMIzhABb5lSbG57EjMofmSHhfQWsJjzk/Q+6hm/KJGoHQdHyLZvuiC4HVp78BW8gXKnh9nTCt8sj9Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150616; c=relaxed/simple; bh=T0RjTWuQ+2/lL9aoFWrGRiZzgtI2eOK8+W6T0zf9pak=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gpugkm6742ftyBIUM1SuRDXmzXyl6Lb3E82IdsO+9xVMcHIj9PpBQhadE54AKRK1ZSkPdH5vLEq2ENS1+BTU3WZwCzqyCPenu1xKaIgh17h33HWx7EXb62GemQ2dBGcpuM9lWqZSCfmz+fTN4wrU+j1HeqIkkpoSzjIPDKUAf88= 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=f6F7gfOL; arc=none smtp.client-ip=209.85.216.53 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="f6F7gfOL" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso131950a91.2 for ; Fri, 07 Aug 2026 17:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150614; x=1786755414; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9/1TzYDcUXNZpa7mQIBzWuP+KknfPHzOJXzXsgHlbeQ=; b=f6F7gfOLiiL6pdiBs3AMPsiBuVIyZQlGPVyBZTetDX5rpVdNr/1M1tyghxMs4J9wnq oI54r+CtoEMjck1rnojGkFz+7mfkbYNSPD6l+I2uK+sh6SLkIgFUI/YFLTDk/5NSba0Q EHhc54tQHztgkAd+sgmGOK4lRMsf1cESS99iGUOcPYva7o3waCw3w56ELAe77uvnk/Pk jWGrPcu2BPMwexu7xQ9oEzBgxGPh2CEej5sS3pD1Xdshlc4XAhca87ihaM1TOiV8R3Su Z0mtF/1esEH4VA54af8xCkFVcVHgPmk9GiGS426mNFLec5Zh9Dj+wPGO6z9kOsikMBeP Hn8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150614; x=1786755414; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9/1TzYDcUXNZpa7mQIBzWuP+KknfPHzOJXzXsgHlbeQ=; b=N1Q9CnG+XvFjuQ4H16kP/wZFlpNpchzaZrFro1susWfpVkcsATCoDIL5wdqZAr3s9z hAFlMvmFdxAFrRtWtUaQp5Crqa2szEIXoGvF8XnRaWzFAQR54mOAvLE/4hWUCBNP94Ev NTcc+7afFkt3E90m3YZIcl9AXAJpoO1qBBgoOd+ESGRa5bPhC0OnN+0wAq87CyPhbaJ4 no0QEVVveMFAOhcauc69qQijz36azGBdm7EMo5aVF910DzpoarXTO1Y33d1Y/nn9uCRr VM523v88sWXFdfYivOJhjV80YBZTRXWVz/6rBYnmbvWdEDXPsD8P+CC2CzDg7uem2J46 3G6A== X-Forwarded-Encrypted: i=1; AHgh+RruUKtP2AxLv2/5vrLtlchJnvBk/+EjtRkGgxKEPaSyDK8zg0wifH/4hhpSRNCfkRVtJ6qAuJflex2HBms=@vger.kernel.org X-Gm-Message-State: AOJu0YyOajQojmkuhqlXJWWr7cuk5Lw/CcFcmmizUYSmLSTaNnxfJvj2 4f46zUkFZZbCpeHNpCVvoCSl4EGZ82mkWvq4JnLDOsRztS7n4IzaLmFY X-Gm-Gg: AR+sD124sI9LZkNNZ5PjYPRGX/Hr3EYZidnSbfS6++8QNonJtbWOGJtOAAQEEVxfeiP GrAuFFZucuDJgknuU+444UXYOPvF1LCF/qUFVUpC+JdjWspKgWGc/5/5SwkVU1WHonDuboqbDOb zr2iNzs/U01LeVK4DI2Libz/MSFHgRPtkXXVMsh6sbjPxrTF0juw2RB+/ZR0qsQlkJy6DFfkVmg onyxh0NKBYOsXAzL719EXJ4G1KT0XvRHoCHcs07fu55pNTw79+Ys0Gb1DRirDFrGWc70888sOOK Vgf6LmWuFk+4Dz8VSmduq3PlB2lStnOcdyg57nKrhqB1GIPGwymtRiuWpJVMJTb4YUlopOwcGV+ WnMe3bYFH6YveDirnpkfA8DrUtqzwMJEM/5lCcVCu9lUC13hzyDBcWrLY9mxv/0FDNsrmxLpL/i Y/3PTEkqVuOGnolBcBT6M+9f8poq/d0kYP0J17KZZ+4bF1xVLhYebbdf/tpZwac6fhrZvItlK+D e8KvDtAKfQjBOl6CZNZ/jXBoZFZrSmwqaRcgvyw4oPLqNho7vc= X-Received: by 2002:a17:90b:2e46:b0:38d:b36e:9813 with SMTP id 98e67ed59e1d1-39282430494mr3914716a91.11.1786150613992; Fri, 07 Aug 2026 17:56:53 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:56:53 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 01/10] ipv6: add ip6_del_rt_reason() Date: Sat, 8 Aug 2026 09:56:33 +0900 Message-ID: <20260808005642.26901-2-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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 RTA_DEL_REASON and enum rt_del_reason to the rtnetlink uAPI, and add ip6_del_rt_reason(), which takes the reason a route is being deleted. It has no skip_notify argument: a caller that records a deletion reason wants the notification that carries it. The reason is unused for now. Subsequent patches propagate it to the deletion path and report it on RTM_DELROUTE. Signed-off-by: Yuyang Huang Reviewed-by: Ido Schimmel --- include/net/ip6_route.h | 2 ++ include/uapi/linux/rtnetlink.h | 25 +++++++++++++++++++++++++ net/ipv6/route.c | 8 ++++++++ 3 files changed, 35 insertions(+) diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 09ffe0f13ce7..cc045705862d 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h @@ -126,6 +126,8 @@ int ipv6_route_ioctl(struct net *net, unsigned int cmd, int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags, struct netlink_ext_ack *extack); int ip6_ins_rt(struct net *net, struct fib6_info *f6i); +int ip6_del_rt_reason(struct net *net, struct fib6_info *f6i, + enum rt_del_reason del_reason); #if IS_ENABLED(CONFIG_IPV6) int ip6_del_rt(struct net *net, struct fib6_info *f6i, bool skip_notify); #else diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h index 27265fd31e5f..3988b51db539 100644 --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h @@ -399,6 +399,7 @@ enum rtattr_type_t { RTA_DPORT, RTA_NH_ID, RTA_FLOWLABEL, + RTA_DEL_REASON, __RTA_MAX }; =20 @@ -407,6 +408,30 @@ enum rtattr_type_t { #define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(st= ruct rtmsg)))) #define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg)) =20 +/* RTA_DEL_REASON: why the kernel deleted the route. u32. + * Emitted only on RTM_DELROUTE notifications, and only when the deletion + * path records a cause. Absence means either an older kernel or a + * deletion path that does not (yet) record its cause - consumers must + * treat "absent" and "unspec" identically. New causes may be appended. + * Currently only IPv6 deletion paths record a cause. + * + * The attribute is notification-only: the kernel rejects it in + * requests, so a notification must not be echoed back verbatim. + * + * The value space is family-agnostic: a value must never be + * reinterpreted per address family. A cause that only one family can + * produce still gets its own value rather than reusing another + * family's. + */ +enum rt_del_reason { + RT_DEL_REASON_UNSPEC, /* cause not recorded */ + RT_DEL_REASON_EXPIRED, /* RTF_EXPIRES lifetime ran out (GC) */ + RT_DEL_REASON_RA_WITHDRAWN, /* zero-lifetime RA / PIO / RIO */ + __RT_DEL_REASON_MAX +}; + +#define RT_DEL_REASON_MAX (__RT_DEL_REASON_MAX - 1) + /* RTM_MULTIPATH --- array of struct rtnexthop. * * "struct rtnexthop" describes all necessary nexthop information, diff --git a/net/ipv6/route.c b/net/ipv6/route.c index fc42d67e5822..ca374b056f5a 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -4004,6 +4004,14 @@ int ip6_del_rt(struct net *net, struct fib6_info *rt= , bool skip_notify) return __ip6_del_rt(rt, &info); } =20 +int ip6_del_rt_reason(struct net *net, struct fib6_info *rt, + enum rt_del_reason del_reason) +{ + struct nl_info info =3D { .nl_net =3D net }; + + return __ip6_del_rt(rt, &info); +} + static int __ip6_del_rt_siblings(struct fib6_info *rt, struct fib6_config = *cfg) { struct nl_info *info =3D &cfg->fc_nlinfo; --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 A90342F3C1F for ; Sat, 8 Aug 2026 00:56:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150620; cv=none; b=EqNFJHnT7/qdyauiW2aqX7J6GnVbHMOufuoo6Y6ls0VqzqZ+jh8xzOXO7UzG0HVHJa+MLkUhDfckWFQ2viqWik0NDakattnmrBjyJdza1nnQEhdgHu+Mrcg7DVXLnbTQHwBlYH9qMc+AHZfwlMGpusAGhr6Sq54dE5mT5Wkmkc8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150620; c=relaxed/simple; bh=eDekLLYByroITr1rMhqofXBMmLLYfB4zAqqbAkLak+M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qBxbQ9o3cO063RYta9nUvWSuWEa9efvH84SXBp3tvMprcTYJ4IWYtOAKHF8bR1zw+Vdy1670kVDejZiFhOqDVQCZed9XZCZgWvflAHg2nYTneqo3KFw560MKwHJOmwCZ+0957gUP61JIyRU57QguL+JOAdpZVI1qL0h/23+x/k8= 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=c+LAb85g; arc=none smtp.client-ip=209.85.215.177 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="c+LAb85g" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-cbb85186d43so24804a12.3 for ; Fri, 07 Aug 2026 17:56:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150618; x=1786755418; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Ij8oLdr5f8WCpH02C6+OkwbiSDXNanhbn2uEY7BaFik=; b=c+LAb85gXOdwu5DdP0RJqrqxEOJPs4KeZZLqLsMXWiMquTpDoP7Vv/XayqOw9FuRZs BbOYj+MvyCI0Pepi1sNAV2eKxeQjVJ73aHCWAcqbzmZDTpFqo0xvwmTIAetnIXQdmb+y vvjp1C5c5PsMJ65tIjna8m+4bOvn10TtkjefCtIroZiEnZpPckM58sdbRHQ7f80f3heu ZOmWdDhTSteDEHCHBXGlSngOj4ECXAKtNCorYKu974BHXBGPW/ULgwffPDYF7Kdeu+5L xMyWxo0M5E+aPYdBVbFwAXnanFgYuzVx4r1D/Xw007Tr9jBgI/OlmahXLZe2XHjmgpCE Pe1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150618; x=1786755418; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Ij8oLdr5f8WCpH02C6+OkwbiSDXNanhbn2uEY7BaFik=; b=MXVX043FlbHrxMZ3IQT4fBlTO5UwTeprQIRttkmxC4o9nBb9de0csDlA4BoWun3Aps /HWLYfKbYoy4QYwPY/gTTzI1hK3LVYR5Lw6lpv4s2UdnNyXnTIJGWZBzBrgy0V0p/DvQ 0mU0j6mew1VRDajYVwa9rjNfE03gVGfv9/jEEXfUPUZb0KYg/Q/Y9SHtfT0VwOvqG6jw F0xT9J5lFsRM6q3Bl1ZBgEe4qzreiDcO8mexnjHZsGd39msfwMINuqJzWfu1Pd3JhOQz YcMrpt6fSCoHkEzmAwYL+5b3isdahTew4YSN521YZ01dn2oBLGQujgXUqupAhU87SohG 29dA== X-Forwarded-Encrypted: i=1; AHgh+Rqd3rsQXDLYHd0OvgMkgQ2cwSOI4GY3GBSCVpkxB+iSfqVcbm47eSguPy+r/v27RuQejTRR+viv+zINNwE=@vger.kernel.org X-Gm-Message-State: AOJu0YzptIAaNCZWtbX6yiNP2fsF1PpF6Hu1OXy3SyZNBmkoTsbb1177 +d1oooLdl3d/MRZr6l9TXfovq4ZWa2B8e6Nx02BVpLUwmYRqJNiKJ3DG X-Gm-Gg: AR+sD13Bmr44Honrxzoeb/OJOArL8AGEjrVrSueOVt9+gKnY7D5AxpFlaMDLf2zz6nr vU810unPSx2LogbzHwB/iPwUjf5DL93fVRXXBBRytJYA73lJGt2H9YUMecXFlwzIvaXBIPhvnm5 Y614j2BPkTNV/1jHIS2WZb3B9d6lfkFBkC/k52i/IuHYCfFH+EbMu7UPUQvrRc8Rx3GnAPRnL02 ga83eOWXQjlqYuO++jEKvOYSDBLYY5jbRReG/mkwp2KBQrIIubJYTd3/VLQ/LQLUoW/dIPfnGCp Dd38UZt9XIcF5jvMLBocNg4ezq+n38ntTcW9AI/oX0aAp9zVvpDvqyWXvk/w2FnViPbtqqzl5vS NaYjJ0IkOS9lVxYJVIQ2ZO+FGO2J0WXeWZoQrmU+UPyi38ZTMmKpYsvfMrUAAQcZD9vf6uq3RgA beVWl4EZop/xQExjmqD1GAtSzS0VB8aqB6WKBYc6JQPpAA1nyNXWYZdSk91jRBGQPqqtgvBpzpx mWS2dK8gOMqN4bqIi0xIf9eaS5JW4EXVzT6jagk5WvxSAEct5c= X-Received: by 2002:a17:90b:1a92:b0:392:6638:2e6a with SMTP id 98e67ed59e1d1-392823bfc0emr3258449a91.13.1786150618020; Fri, 07 Aug 2026 17:56:58 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:56:57 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 02/10] ipv6: propagate the route deletion reason to fib6_del_route() Date: Sat, 8 Aug 2026 09:56:34 +0900 Message-ID: <20260808005642.26901-3-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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" Pass the deletion reason from ip6_del_rt_reason() down through __ip6_del_rt(), fib6_del() and into fib6_del_route(). All existing callers pass RT_DEL_REASON_UNSPEC. fib6_del_route() ignores the reason until the notification path learns to report it. Signed-off-by: Yuyang Huang Reviewed-by: Ido Schimmel --- include/net/ip6_fib.h | 3 ++- net/ipv6/ip6_fib.c | 12 +++++++----- net/ipv6/route.c | 19 +++++++++++-------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 9cd27e1b9b69..0ba5d3c56543 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h @@ -468,7 +468,8 @@ void fib6_clean_all_skip_notify(struct net *net, =20 int fib6_add(struct fib6_node *root, struct fib6_info *rt, struct nl_info *info, struct netlink_ext_ack *extack); -int fib6_del(struct fib6_info *rt, struct nl_info *info); +int fib6_del(struct fib6_info *rt, struct nl_info *info, + enum rt_del_reason del_reason); =20 static inline void rt6_get_prefsrc(const struct rt6_info *rt, struct in6_addr *addr) diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index e9fc692d4f3b..1f6f6f33ded1 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -1967,7 +1967,8 @@ static struct fib6_node *fib6_repair_tree(struct net = *net, } =20 static void fib6_del_route(struct fib6_table *table, struct fib6_node *fn, - struct fib6_info __rcu **rtp, struct nl_info *info) + struct fib6_info __rcu **rtp, struct nl_info *info, + enum rt_del_reason del_reason) { struct fib6_info *leaf, *replace_rt =3D NULL; struct fib6_walker *w; @@ -2062,7 +2063,8 @@ static void fib6_del_route(struct fib6_table *table, = struct fib6_node *fn, } =20 /* Need to own table->tb6_lock */ -int fib6_del(struct fib6_info *rt, struct nl_info *info) +int fib6_del(struct fib6_info *rt, struct nl_info *info, + enum rt_del_reason del_reason) { struct net *net =3D info->nl_net; struct fib6_info __rcu **rtp; @@ -2091,7 +2093,7 @@ int fib6_del(struct fib6_info *rt, struct nl_info *in= fo) if (rt =3D=3D cur) { if (fib6_requires_src(cur)) fib6_routes_require_src_dec(info->nl_net); - fib6_del_route(table, fn, rtp, info); + fib6_del_route(table, fn, rtp, info, del_reason); return 0; } rtp_next =3D &cur->fib6_next; @@ -2253,7 +2255,7 @@ static int fib6_clean_node(struct fib6_walker *w) res =3D c->func(rt, c->arg); if (res =3D=3D -1) { w->leaf =3D rt; - res =3D fib6_del(rt, &info); + res =3D fib6_del(rt, &info, RT_DEL_REASON_UNSPEC); if (res) { #if RT6_DEBUG >=3D 2 pr_debug("%s: del failed: rt=3D%p@%p err=3D%d\n", @@ -2401,7 +2403,7 @@ static void fib6_gc_table(struct net *net, =20 hlist_for_each_entry_safe(rt, n, &tb6->tb6_gc_hlist, gc_link) if (fib6_age(rt, gc_args) =3D=3D -1) - fib6_del(rt, &info); + fib6_del(rt, &info, RT_DEL_REASON_UNSPEC); } =20 static void fib6_gc_all(struct net *net, struct fib6_gc_args *gc_args) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index ca374b056f5a..252f1825a199 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3973,7 +3973,8 @@ int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_= flags, return err; } =20 -static int __ip6_del_rt(struct fib6_info *rt, struct nl_info *info) +static int __ip6_del_rt(struct fib6_info *rt, struct nl_info *info, + enum rt_del_reason del_reason) { struct net *net =3D info->nl_net; struct fib6_table *table; @@ -3986,7 +3987,7 @@ static int __ip6_del_rt(struct fib6_info *rt, struct = nl_info *info) =20 table =3D rt->fib6_table; spin_lock_bh(&table->tb6_lock); - err =3D fib6_del(rt, info); + err =3D fib6_del(rt, info, del_reason); spin_unlock_bh(&table->tb6_lock); =20 out: @@ -4001,7 +4002,7 @@ int ip6_del_rt(struct net *net, struct fib6_info *rt,= bool skip_notify) .skip_notify =3D skip_notify }; =20 - return __ip6_del_rt(rt, &info); + return __ip6_del_rt(rt, &info, RT_DEL_REASON_UNSPEC); } =20 int ip6_del_rt_reason(struct net *net, struct fib6_info *rt, @@ -4009,7 +4010,7 @@ int ip6_del_rt_reason(struct net *net, struct fib6_in= fo *rt, { struct nl_info info =3D { .nl_net =3D net }; =20 - return __ip6_del_rt(rt, &info); + return __ip6_del_rt(rt, &info, del_reason); } =20 static int __ip6_del_rt_siblings(struct fib6_info *rt, struct fib6_config = *cfg) @@ -4072,13 +4073,13 @@ static int __ip6_del_rt_siblings(struct fib6_info *= rt, struct fib6_config *cfg) list_for_each_entry_safe(sibling, next_sibling, &rt->fib6_siblings, fib6_siblings) { - err =3D fib6_del(sibling, info); + err =3D fib6_del(sibling, info, RT_DEL_REASON_UNSPEC); if (err) goto out_unlock; } } =20 - err =3D fib6_del(rt, info); + err =3D fib6_del(rt, info, RT_DEL_REASON_UNSPEC); out_unlock: spin_unlock_bh(&table->tb6_lock); out_put: @@ -4204,7 +4205,8 @@ static int ip6_route_del(struct fib6_config *cfg, if (!fib6_info_hold_safe(rt)) continue; =20 - err =3D __ip6_del_rt(rt, &cfg->fc_nlinfo); + err =3D __ip6_del_rt(rt, &cfg->fc_nlinfo, + RT_DEL_REASON_UNSPEC); break; } if (cfg->fc_nh_id) @@ -4223,7 +4225,8 @@ static int ip6_route_del(struct fib6_config *cfg, =20 /* if gateway was specified only delete the one hop */ if (cfg->fc_flags & RTF_GATEWAY) - err =3D __ip6_del_rt(rt, &cfg->fc_nlinfo); + err =3D __ip6_del_rt(rt, &cfg->fc_nlinfo, + RT_DEL_REASON_UNSPEC); else err =3D __ip6_del_rt_siblings(rt, cfg); break; --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 C4428309F08 for ; Sat, 8 Aug 2026 00:57:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150625; cv=none; b=qTKuM/M0p52MDP771Rss/oaH8VaEfKj9mMn22fQFeuD8ujvRhyBWrAj1ViL7VReua6x3UE69ss8IzH/jRKdYnhsRWfaHiThCajPcbqo6P+uNFN2/5qH8g2urdN2tCY8EFjAIGkNBIR076+c9Z69voG/B5BrOgOr0WxMXf7ONMAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150625; c=relaxed/simple; bh=XQJawEmB4ChsklAv/eN7LUVOMlZahRxCMEiqQmik0xo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MdvFJxE0vHWUFYU60oeYpK1eUBQPIicxJvN0VTUcSt9kE7p5l1qgB4VUpNF+DZwroGZMe+/pclDuwvSYBJXat/ZWCqQhq1QFEPiPnPG4Z1wxlh9V5Zyg6sLRPdtRrtaK31zD1mLIaGagn2QlOtrq6u0jn5Z8028p83Wtesg79EA= 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=j6PU/HIz; arc=none smtp.client-ip=209.85.216.50 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="j6PU/HIz" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-381b831d535so168664a91.0 for ; Fri, 07 Aug 2026 17:57:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150623; x=1786755423; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Y1uuKJgg5m2EeiKe39lLJSMZdROY6ZIIFzIHwqt463s=; b=j6PU/HIzDFLyEw5cXWhHi9Qt4wDjYCK4cBi1CbnYLtgy+aIEPa1T9UzqZi2Uw2V16h Nu+lfPQdKCL2zPPKbF6s7qq3jx54+bUzeI+QlCDBEI3aDXYKlVxZi5RDPdKsr4KWy3ZX DfPzsWxGt36AtmtuvY2wpq42GDtEw6vscsbhH2eL1gOE9qcjBis7jEkRVmrz12wVVBOd 0N7Fo7n2PSx7fCZmBgRNHfFvj5r6yWgP/FC9X/clETAo2fI1ChTMxjqh08jehHrImIR2 oCO6bR4AQlxHNmqvNhjdWCY1sEkWs+ZeiAjYDR+4lGRqqzF7lRMmJY8eogubTsrF8F6d Uw0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150623; x=1786755423; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Y1uuKJgg5m2EeiKe39lLJSMZdROY6ZIIFzIHwqt463s=; b=NMnrv3ScMFNf7x02E8vBADPUU3LYIXggA1SfeuRoIfi0mXK9Mb9MfRz9VaQI9p4STN UtVJKoVb7xUHTp98CGbatqQrm5QunEfVe2rCgM4xRp/KhpTCQzsihzo1mwbgJXAv6/9Y MESBwThVc339icjyD4HKKHqxfPMAaVfXMUnySgJOgq5icRYt/0l7hPLxiPYG8lZi2Qb7 i9+cGlYmjwy7fkFavM4p/vgbMndKR/++kXaIH/WnHZ0uQIZ9LvtM16PuxMpeWal9szg+ kDwjl2WPmdLd3AAXDCjexNIE9bW9Rs53mUgMsAvTJ4/C0iKIsnM/TwVgFx6MFM5qKB3G 2sPA== X-Forwarded-Encrypted: i=1; AHgh+RrbQ92d4i1Sf3a0Vs6AD4eCnJKL531MRZbgAZB9n2E8VUZo4bTSU/1FoOIibD61WHv15hHe0b/3fUZHclI=@vger.kernel.org X-Gm-Message-State: AOJu0YwGle4qb+IHw3yjDK2I+laVVvLhxTDMDr9143wql25vGY2KtZDv nLzOl6MZDe2K1RrStaderI3WMCwqoUaazYmsxh6na2Nherfq7PMg1lQn X-Gm-Gg: AR+sD11bablpza/FWEEIihwNBEFTXEv9qCdu7POX1WH+wQufubDAFj4MHyK1ISQo8zI mE+dQJ1TziE1Q7jY+fGCGGtK6WqQ5YXLbeBUhzKyCf/H00Ag+p2GeDb128IPqr4AAm1XvzRykG9 FqpX4qiwV3VyRHVfCV8gIdzaoZRbi1MJ+14b1eTZjZywfJi9uy+65KEUHgptFeAEWhzkzyguFYN fQWEcz5MlmqMjXdLndL/eqYR1SCqqhaw827sn06xYpK8M/xUtHf3hRSKXgzL+NbeWWYUBJK4ZNT m64VX+37b7+igmDyWeTvV6PsnJRKJuxY8G2UZOcJSzUSCQQznGc20dZHnoJJBQVK3bS8WjYWV74 uWU+WzfRr01AF6sK5bycFzsg86x9EC6htHcBjwCX6a9I1WsoXKihfJ4MDUrP2dXv6ROclN2/WdT uXOdsWVpW/L5E9fI07K29mbnkq23j3JwBi7B/Q5KZ3QniAKLJRH28Hj5Crc0JfNTFfTwOnplsfR d2oqRrX5qISbfiqH49TUxZSRLwrcaxoX7TzJ5caDuXJy4yvdDs= X-Received: by 2002:a17:90b:2dc7:b0:380:fead:448d with SMTP id 98e67ed59e1d1-392620e6e25mr8963187a91.13.1786150622906; Fri, 07 Aug 2026 17:57:02 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.56.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:02 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 03/10] ipv6: record the reason for kernel-initiated route deletions Date: Sat, 8 Aug 2026 09:56:35 +0900 Message-ID: <20260808005642.26901-4-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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" Record why the kernel deletes an IPv6 route on its own: - RT_DEL_REASON_EXPIRED for routes reaped by the FIB6 garbage collector after their RTF_EXPIRES lifetime ran out. - RT_DEL_REASON_RA_WITHDRAWN for default routes, prefix routes and RFC 4191 route information routes withdrawn by a zero-lifetime Router Advertisement. Deleting a default route because its metric changed is not a withdrawal, so it keeps RT_DEL_REASON_UNSPEC. Signed-off-by: Yuyang Huang Reviewed-by: Ido Schimmel --- net/ipv6/addrconf.c | 3 ++- net/ipv6/ip6_fib.c | 2 +- net/ipv6/ndisc.c | 4 +++- net/ipv6/route.c | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index f6fa2715b450..9d89be7e0544 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -2874,7 +2874,8 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *= opt, int len, bool sllao) if (rt) { /* Autoconf prefix route */ if (valid_lft =3D=3D 0) { - ip6_del_rt(net, rt, false); + ip6_del_rt_reason(net, rt, + RT_DEL_REASON_RA_WITHDRAWN); rt =3D NULL; } else { table =3D rt->fib6_table; diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index 1f6f6f33ded1..f8a9ec7fa616 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -2403,7 +2403,7 @@ static void fib6_gc_table(struct net *net, =20 hlist_for_each_entry_safe(rt, n, &tb6->tb6_gc_hlist, gc_link) if (fib6_age(rt, gc_args) =3D=3D -1) - fib6_del(rt, &info, RT_DEL_REASON_UNSPEC); + fib6_del(rt, &info, RT_DEL_REASON_EXPIRED); } =20 static void fib6_gc_all(struct net *net, struct fib6_gc_args *gc_args) diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index fe36b3f51285..1111c4ebc61d 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -1361,7 +1361,9 @@ static enum skb_drop_reason ndisc_router_discovery(st= ruct sk_buff *skb) defrtr_usr_metric =3D in6_dev->cnf.ra_defrtr_metric; /* delete the route if lifetime is 0 or if metric needs change */ if (rt && (lifetime =3D=3D 0 || rt->fib6_metric !=3D defrtr_usr_metric)) { - ip6_del_rt(net, rt, false); + ip6_del_rt_reason(net, rt, + lifetime =3D=3D 0 ? RT_DEL_REASON_RA_WITHDRAWN : + RT_DEL_REASON_UNSPEC); rt =3D NULL; } =20 diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 252f1825a199..bb14d7f7bad4 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1020,7 +1020,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, in= t len, gwaddr, dev); =20 if (rt && !lifetime) { - ip6_del_rt(net, rt, false); + ip6_del_rt_reason(net, rt, RT_DEL_REASON_RA_WITHDRAWN); rt =3D NULL; } =20 --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 7834D2EC0B0 for ; Sat, 8 Aug 2026 00:57:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150629; cv=none; b=KCl2ZPvOfahcVBdthbFx8046lrWaeauC/AhKd/UbjJVYe40Vl5JqtstnE3pkr23E7lT6fPkf+TvtCvlK9Cqy02PzMA0dBIweGDusDlX1D0IYY7fev0wDx2poWqxrwp1KVG7LiERXv288FoI8PF6gtE0Bz99t9CyDJzZjXbX8IOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150629; c=relaxed/simple; bh=fWRY/BVInbtKwwxx8kY/fDClI/KPxpsYiPVnvVfMlE0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KVtMDTpYTAlBMGyZ1kmhf2DmHLNnUDEFME1rIDODicG4M2wwFcjIzQ53UclMN6yoIKB+/3DDhBZ+CZPqE7HtHLSrkTAqlLlSfoS4hNayrBdr9iHt+3SsXQMeGTqNZUuCjhbmNFqLdiGyw2snDpzN3jQhJOX0furHSlxZot5VLK8= 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=U9KoDqw5; arc=none smtp.client-ip=209.85.216.53 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="U9KoDqw5" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-39266382df6so123233a91.3 for ; Fri, 07 Aug 2026 17:57:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150628; x=1786755428; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=t4jPqOjdoT8ifNwfss2R1qo2V56xomcYJOjozZZx/JE=; b=U9KoDqw5J4wJgGrsLhKq9FRq55VXNKEm6/1/YfKqvRQICFRIYcJCD7kz64J97ETbN0 Nvk9LadtpnADxrjAIItbjo9I8iylUt54+Wl3eHSq/txgBTjcRKv18b+mQpUmwJZPGU3S 3DGgOxfCnTNWdGW2HAJXt1/d0/AaeyjgormLLDMspM5gWOOoef6EMSpjxdbzvA+y/EDp fFwjVx3qA5npfT61N5fjM4nkuOYPv0WLRSLdS9tRvA4eBWsk6Nc0O7/46lk83/TQYtm8 YILAQB3koOuaii17lhf982BiJMMGeEgemfS+iCiOGQFBLg0Lcg3FEYLkCvjjmjKIp7UI woxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150628; x=1786755428; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=t4jPqOjdoT8ifNwfss2R1qo2V56xomcYJOjozZZx/JE=; b=ckRjNKheOIYzTzR0lJydiWMGQ6uj5JdFQMGFtFzKSPgAK8lqfltsQim/F33iLv85kZ WYjZtzyzSJrfMxs7BiySSrY6EohCtbfhsGmFlyxvAMtEOwXMoAvZbB3SHYF592VdQbg4 MMvYm9ip33E599KCKpEozgX4W/52ZA2BJfMFC21iHJIcn0D0Jag0O1in8q4dcU4DegYf 7k0CKA1wMOInWFi4LGM8OlrkEIsw0OAlaO2j0C4DTTCMECge7WXroXJS9rNzqOjXFW2Q 8oiz23XXBqfjvgvW1PyclPtz0gmbasLg4BpENj5usxzHOHMlAcweXpyG7vFy3seG+UaP 1twg== X-Forwarded-Encrypted: i=1; AHgh+RrDjAiEVmTMMdbVD2RRz10ufKX9U3Dd8MRBrxformVzdSWYdDhrnLXNKUNFiQpczbajnO6DY9NptV1x2cg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8IzwKMaumYf7Ursuy/P7Nao2BqZUkt+zdgAdd5BWOmXn6FbPP CLfpnP51LpYnNqpCO0suh7YgezpRvQ0AJdKvvNeU8A+yntAY/lbNo8gEqjRvd1JD X-Gm-Gg: AR+sD13Gy+qth0PWMB7qrvgZbE8cpvJqJUbOcPfnhJpbmvodq+My8PSgJGfJiIDHNsr Zw/L+OxQqHptq6LhcSd6rsovKj6pjN47d9Y2kNsg5BqnccLj3fvneHvAWTmOtmQ9+4L7T5E8aP0 i6Ndk/dgpH6diHtApxqoetiidTfGgjBekzP0ll9PRFjDge0hdv+6nI0WRJhYFEhdrizttlwXkwu 89E7RfQSOnPVXMV03Tq7eyEsIosF3j+7Va4CIqkPIs3z6kQfS9FCUdyxBHAFjJfuTxo1F553Srv 0V+zJHwYDe6tOvHOY7V6pto+oxU9eq6/52iS4887YmAtx8k8fYeCkU43v+ip0dFkvL2odOFuAQZ mjrOEXZUQPo3lUb2sx/MB8rPqga7k9fLPX9yxGF3+GIDz79/hg6AMuv8LnnSQwa6IeyNa14n4ZB kTzZ4Mw3ZcWM3XCl58Xua1+JrfLk/TGz1os6d9enAtO0FZFSX8NekgjEbhkC50VSdhbU9sQ73zN 353VWQjWmysqd8qi7JAMliKoQdHnh70nm8oyS3F5/kecD2rhiI= X-Received: by 2002:a17:90b:270e:b0:366:3517:1aa2 with SMTP id 98e67ed59e1d1-3903bb0cf61mr28884033a91.0.1786150627679; Fri, 07 Aug 2026 17:57:07 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:07 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 04/10] ipv6: add a deletion reason argument to rt6_fill_node() Date: Sat, 8 Aug 2026 09:56:36 +0900 Message-ID: <20260808005642.26901-5-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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 the deletion reason to rt6_fill_node() so that it can report it to user space. All callers pass RT_DEL_REASON_UNSPEC for now. Signed-off-by: Yuyang Huang Reviewed-by: Ido Schimmel --- net/ipv6/route.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index bb14d7f7bad4..6732e95bf7b3 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -111,7 +111,7 @@ static int rt6_fill_node(struct net *net, struct sk_buf= f *skb, struct fib6_info *rt, struct dst_entry *dst, struct in6_addr *dest, struct in6_addr *src, int iif, int type, u32 portid, u32 seq, - unsigned int flags); + unsigned int flags, enum rt_del_reason del_reason); static struct rt6_info *rt6_find_cached_rt(const struct fib6_result *res, const struct in6_addr *daddr, const struct in6_addr *saddr); @@ -4037,7 +4037,8 @@ static int __ip6_del_rt_siblings(struct fib6_info *rt= , struct fib6_config *cfg) =20 if (rt6_fill_node(net, skb, rt, NULL, NULL, NULL, 0, RTM_DELROUTE, - info->portid, seq, 0) < 0) { + info->portid, seq, 0, + RT_DEL_REASON_UNSPEC) < 0) { kfree_skb(skb); skb =3D NULL; } else @@ -5786,7 +5787,7 @@ static int rt6_fill_node(struct net *net, struct sk_b= uff *skb, struct fib6_info *rt, struct dst_entry *dst, struct in6_addr *dest, struct in6_addr *src, int iif, int type, u32 portid, u32 seq, - unsigned int flags) + unsigned int flags, enum rt_del_reason del_reason) { struct rt6_info *rt6 =3D dst_rt6_info(dst); struct rt6key *rt6_dst, *rt6_src; @@ -6066,7 +6067,8 @@ static int rt6_nh_dump_exceptions(struct fib6_nh *nh,= void *arg) &rt6_ex->rt6i->dst, NULL, NULL, 0, RTM_NEWROUTE, NETLINK_CB(dump->cb->skb).portid, - dump->cb->nlh->nlmsg_seq, w->flags); + dump->cb->nlh->nlmsg_seq, w->flags, + RT_DEL_REASON_UNSPEC); if (err) return err; =20 @@ -6114,7 +6116,8 @@ int rt6_dump_route(struct fib6_info *rt, void *p_arg,= unsigned int skip) if (rt6_fill_node(net, arg->skb, rt, NULL, NULL, NULL, 0, RTM_NEWROUTE, NETLINK_CB(arg->cb->skb).portid, - arg->cb->nlh->nlmsg_seq, flags)) { + arg->cb->nlh->nlmsg_seq, flags, + RT_DEL_REASON_UNSPEC)) { return 0; } count++; @@ -6347,12 +6350,14 @@ static int inet6_rtm_getroute(struct sk_buff *in_sk= b, struct nlmsghdr *nlh, err =3D rt6_fill_node(net, skb, from, NULL, NULL, NULL, iif, RTM_NEWROUTE, NETLINK_CB(in_skb).portid, - nlh->nlmsg_seq, 0); + nlh->nlmsg_seq, 0, + RT_DEL_REASON_UNSPEC); else err =3D rt6_fill_node(net, skb, from, dst, &fl6.daddr, &fl6.saddr, iif, RTM_NEWROUTE, NETLINK_CB(in_skb).portid, - nlh->nlmsg_seq, 0); + nlh->nlmsg_seq, 0, + RT_DEL_REASON_UNSPEC); } else { err =3D -ENETUNREACH; } @@ -6388,7 +6393,8 @@ void inet6_rt_notify(int event, struct fib6_info *rt,= struct nl_info *info, goto errout; =20 err =3D rt6_fill_node(net, skb, rt, NULL, NULL, NULL, 0, - event, info->portid, seq, nlm_flags); + event, info->portid, seq, nlm_flags, + RT_DEL_REASON_UNSPEC); if (err < 0) { kfree_skb(skb); /* -EMSGSIZE implies needed space grew under us. */ @@ -6421,7 +6427,8 @@ void fib6_rt_update(struct net *net, struct fib6_info= *rt, goto errout; =20 err =3D rt6_fill_node(net, skb, rt, NULL, NULL, NULL, 0, - RTM_NEWROUTE, info->portid, seq, NLM_F_REPLACE); + RTM_NEWROUTE, info->portid, seq, NLM_F_REPLACE, + RT_DEL_REASON_UNSPEC); if (err < 0) { /* -EMSGSIZE implies BUG in rt6_nlmsg_size() */ WARN_ON(err =3D=3D -EMSGSIZE); @@ -6474,7 +6481,7 @@ void fib6_info_hw_flags_set(struct net *net, struct f= ib6_info *f6i, } =20 err =3D rt6_fill_node(net, skb, f6i, NULL, NULL, NULL, 0, RTM_NEWROUTE, 0, - 0, 0); + 0, 0, RT_DEL_REASON_UNSPEC); if (err < 0) { /* -EMSGSIZE implies BUG in rt6_nlmsg_size() */ WARN_ON(err =3D=3D -EMSGSIZE); --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 04F1531F9A4 for ; Sat, 8 Aug 2026 00:57:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150634; cv=none; b=DYc9t9gcxw24UWOIIkWBD5nDgFbHkZuSvb+eyLudnLNu91S0ZooTaaDlQ+M5f0sPav+7tHeV8kZWQqPmwvI6Vg5+7aNRfBmJ2MzeApcM1RZ6iwD+EYpfTL5eB+qUxCJMy3qyQfXRO+6PwX7UB4nZ6mHospxRuXZ4CVsjMUFc1TE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150634; c=relaxed/simple; bh=LptUurOI+OXACGzviKpmnx9OsYV5snEdOTU9fBVihMQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kOj8LxRg+w9TxqQDT4kVslWhwJPk0Cppf2sc0qfAjc2dalq4Vs5+DjsjGx/mqLMYOe3z3Gd9CwV+UytV7c8TW1YOSjfHzwKsWZV2Qu+p0Ybp97eCK4UcCq+pfUwhrkQoaexA28uMLJeHd62jnGkgjQ7LoXFbv0HG4Ih+TUscqhg= 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=Eyb/d6aS; arc=none smtp.client-ip=209.85.216.50 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="Eyb/d6aS" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so120940a91.0 for ; Fri, 07 Aug 2026 17:57:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150632; x=1786755432; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1EE695Rdk07hMzYmc0ZAJFaWL6Cw+K0q24XElbn1AAE=; b=Eyb/d6aSA3WBRlA9fYoSr5aWS9jh2mDRwK7fIH913cZRfNbX3+g3fOFuGZ5ik/gXc4 HAnYUgARUufGej8vCWcV086d1Dsiyr5I2nO9qJKIOImy9Rp7/MvszERPdgHDuSVt6CKU 1EU58W7LNf04LXef/dVkex2NxxZRxXujsLZaVhdnxI2NSDJUq+7xfnMHLKS417ikFcFL DNpGe6lL6iisyWtVsSCxQeUDqvSP7yJvw4LRNv+9WXuRKIi5s3sStniItcgbgKQeTWrs ikpmEy0UjnCuKpS1szNxUhh06OqUajqk+z5UbnXPVdlmj9Lg/JA5e5pseX7eyK4atvQe mHdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150632; x=1786755432; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=1EE695Rdk07hMzYmc0ZAJFaWL6Cw+K0q24XElbn1AAE=; b=hk+xm0mLgBZ4HR4g3NZNIRRDAo9ElmA26XEmHnldq7brCJDwqa826Uj3++LT9/Zb8q Rokebsy3KwuJGyUd83/UDIHLV+1wMB7HkWiIc1S8+6zYyd7lxUBz/HHB2UQCfD0mf43+ s9n9qyxTK3Ova+AWovkaUVqEPbIMHvyahYobBWv+XTVxz93iI7xVie4MzW9Qx6fbEGus JeaS87X8ftsmkF+lH+RWbxQIdK8VgDl0iCzlXnKvolm1ITbZLTQIe/ew7FZq3dc2PYnf PpSR2DH5qG7IKBnH045pyiIuQOruFHr6wNvb+NMH/XWVG6vjWTL8jETx7b//nHrnx/jo SFHw== X-Forwarded-Encrypted: i=1; AHgh+RqTse9fLfXQXa2NUGnOJt6zAzUt9ksLhbF5Jk1LdBIXp+ksBAnO79KXI7jx51vSrLIuksmGN+9GHlUEl5E=@vger.kernel.org X-Gm-Message-State: AOJu0Yxg8978y1IoIdW9vKZOZx1u5bQQqEVr7Fb4kPiklwFihNrEo4zK Z7rGCzQVWtMe1A6ZdQwTBuU1Osnd7dBOlGwk65ATz9MJWnZRuxYJtL/g X-Gm-Gg: AR+sD11FgVMfBGRTRQKwginIjIpiQI/qhpywu5Gu7DRKxJDwgQQ8fkpkBKZBzepCFdu kYnFcsRdTMrTp53zdVU9Y+1f/FyVbVbgxrLhQtZWoy0yNzb0ggxX+8Whtqbp8z/nWglixaWAV+2 Ja0cFmU4zEq8IenJmGNhTdmUWmhcFhwdMquggVsRBPNnsiFIkV8LgbJSTBTRjiBSfKBC2fc+n+s 8Nbj42G1jEiTBF035SXtMdEUogCxu0b+eH84usLSc3NPOvZf6L2ia+IAQXqNOffIK+NJdjME5OI KtG9Le7Sm0c/UP3UqQwFGMgrpTceZKwlUoOK8NbKgTNdgY8hGiurs2MPdvPzhZby9Im7OURmj3M mINLlcAAp+ZbF1NlVq0mm/DDmdY2ktvmfTp6U9BRVaSia5MqlZik2hnWGho86BKAF0hx3lxOPKt MqInN8ZwEK02PWBPzdnqGzlV68bx1MaJNsN8GIscZvCOH89ashhFqOQoScqefx1u50yJPVL1n9v 4KgEFQD5BSWLsUCwpkN1uyT6cpNfa2WlDvLmylrCJJ23dPsb1m7xoTsM+8XLA== X-Received: by 2002:a17:90b:2590:b0:37d:f983:7b5 with SMTP id 98e67ed59e1d1-3903c56fff5mr27286985a91.9.1786150632199; Fri, 07 Aug 2026 17:57:12 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.57.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:11 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 05/10] ipv6: expose the route deletion reason in RTM_DELROUTE Date: Sat, 8 Aug 2026 09:56:37 +0900 Message-ID: <20260808005642.26901-6-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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" Emit RTA_DEL_REASON from rt6_fill_node() when the deletion reason is not RT_DEL_REASON_UNSPEC, and reserve room for it in rt6_nlmsg_size(). Every caller still passes RT_DEL_REASON_UNSPEC. Signed-off-by: Yuyang Huang Reviewed-by: Ido Schimmel --- net/ipv6/route.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 6732e95bf7b3..d3bf2dd209bd 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -5751,6 +5751,7 @@ static size_t rt6_nlmsg_size(struct fib6_info *f6i) + nla_total_size(sizeof(struct rta_cacheinfo)) + nla_total_size(TCP_CA_NAME_MAX) /* RTAX_CC_ALGO */ + nla_total_size(1) /* RTA_PREF */ + + nla_total_size(4) /* RTA_DEL_REASON */ + nexthop_len; } =20 @@ -5966,6 +5967,10 @@ static int rt6_fill_node(struct net *net, struct sk_= buff *skb, if (rtnl_put_cacheinfo(skb, dst, 0, expires, dst ? dst->error : 0) < 0) goto nla_put_failure; =20 + if (del_reason !=3D RT_DEL_REASON_UNSPEC && + nla_put_u32(skb, RTA_DEL_REASON, del_reason)) + goto nla_put_failure; + if (nla_put_u8(skb, RTA_PREF, IPV6_EXTRACT_PREF(rt6_flags))) goto nla_put_failure; =20 --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 B506B2F8E81 for ; Sat, 8 Aug 2026 00:57:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150639; cv=none; b=iI0y7poZJz3lU7pVAkcMEkEqN1DKB/bnHMoars0z/d3nBftR7jHYUj9xUwWI2b34s61iyEdEMqF5GaXVby/GPcTTEG1EOq8QIryUonPUoK6Hh91lEEBX1JvENqHyOS+cBJI9LbpjNjg9jkak3eg6T7Z/mAXqv2xXHNvTIeM9rpo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150639; c=relaxed/simple; bh=soWQVDbmNe3rLyARwyMn+CIEuPoaMlH8d+636m3QLlk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h0N44OdPF9Ie7OzPfZiT2p53mYDFOLN+hWxXl9VoOM+KKRf3YiYI6eCsGyvhhraHZpQHOwv22iXOfCFmHMmi+mSIUPrRfPZFh+ozsPkKlAjQNivYckUAgCJQrrIFSdDbvIwAXfczOG/BZwFQF26nywECTl6VmGt0HQqrtla0s/s= 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=gtC9kngM; arc=none smtp.client-ip=209.85.216.46 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="gtC9kngM" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-38e88b60121so100024a91.3 for ; Fri, 07 Aug 2026 17:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150637; x=1786755437; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yPn1wpDRn2+ycNh5bc3DMlHMWn7d+nIkppWcoRCSD9Y=; b=gtC9kngMYcdl46SW232zBxEqLIEWoKEY7A5aZmKpABnF35g4jqXZYRpacCrFRFRIoz fcfo3v3HrWnt2bUymYp8lMu20slR1Z2F2Lm5xLBcD3YWK1lBRV8db3dO0TetrJL/2u+0 RI7cPzzw1LHNq9o2WZw6z9qkGHGTVitWqGGFFTC4lZfy2RAlvlNPghKjJ9GvZ5Hz6OpR RIN+lerg4cmEfo3dkjK/hNdfCcuYvZXAHh2CN1enbBXbTpI6lg7BJnkpNIt+Y31yAcvM LwWFlq+OsdOx2l/LyupbNn2y1iBu4IXftd3a1+8ZxXkuTV/JPRJ62eVxDG5dB4QwlzpE gjhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150637; x=1786755437; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=yPn1wpDRn2+ycNh5bc3DMlHMWn7d+nIkppWcoRCSD9Y=; b=jB9IZL/FOgtzIdBlK2S+/HRU28oICyzMET+apiq35r1rmUwQNTgwQ95Zyty5bL8D6l 3BdxNIHO9weXMPTswZ6lZ88GgUmQPHGk5AyFiCEIBxaDXofj78curXIfK+4hbUjYza2c GttoT+2VPsUv7q0+FCzVskFI61mMTjg7X6G8CpCRXBBtl7jlrK1RrgyLtWL52jybYYb6 lgjTGevkG/Hv/V1tWXQ28leoyyUjB9AoIcMRh+9zu0r4Fapr3C4MYiZccf7kZOOoaDGt c5odqVvjbMtJJnjiOpV7SL3o13QbgQFbAWsGs95ltNVXugCgNWRQXrLqp9XS58+lo9NU Rl5A== X-Forwarded-Encrypted: i=1; AHgh+RqPPX3aheukClAYOX4e4erTzs7hNOcHHX7sy4CVpqKI1wAVgZpUoxYOVEJn+Q66lM7wXgdeOlndFqlCGIo=@vger.kernel.org X-Gm-Message-State: AOJu0YzaId5MqIqNJOuAHEm15tIW68gLQ7wobvSjw0QuWSCGy8/Zd93x Q7KZqb4LICNFrrWPjCkWXQhZ2ePayxd8O5FGIGl8Byo1+msjkZHkpvd/ X-Gm-Gg: AR+sD12npudDfWjt6T+tYZDxpslR7q02S5QtTYYMf2fvfcK0BH4kNlC4ID5goVUd2++ 5I1DutRREuV+lTrBb2axO7KtX2qY/G3vnDMQXKHSq5KymuR1wPiN59liCtrttTMYjGZrw314ssR FV0D9TH83rPHLylhZBfNlPqSJB/OKy8NrX10ISlrj1Ig1hWzfmF3XOFGe0Wp0EFjH++Y8MFt5dZ cK/t5WbIVZRDWnXZIDlXxpthsYTr/cyZVv9b4PMVaz4kRMTw5m7n4s7dMiMQmKLs18dWnqRGKZs CMYNr9PsPGcyRdfrn8ZnYk0b3ZiCppQzPuWCJrwQUCrRVHtczMp0m7va9RHBqK/0d2MUCPE7fhR +p6Wsno8mnByfiC/rYvRWMgXIRTgTXRY424HPe1axnR0I2/UNB3YFktRX8vSTl2TXUywVuhNbzj 0wyTjzsR6HUXBoVP4iPEIh8CKR7dET2tFaOfIyBTtnk3mBmlWenmRYgbheV2vvRmFVWbBgid52c p7QnwfrBcAPMIulKAYhEEuf1GOyIjBKssw0xXHa93Ft3/dUQNg= X-Received: by 2002:a17:90a:e706:b0:38e:b400:a860 with SMTP id 98e67ed59e1d1-392824a96eamr3586255a91.13.1786150637002; Fri, 07 Aug 2026 17:57:17 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:16 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 06/10] ipv6: add inet6_rt_del_notify() Date: Sat, 8 Aug 2026 09:56:38 +0900 Message-ID: <20260808005642.26901-7-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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" Move the body of inet6_rt_notify() to __inet6_rt_notify() and give it the deletion reason. inet6_rt_notify() keeps its prototype, so the route addition path does not change. Add inet6_rt_del_notify() and call it from fib6_del_route(). RTA_DEL_REASON now reaches user space on RTM_DELROUTE for routes the kernel deleted on its own. Signed-off-by: Yuyang Huang Reviewed-by: Ido Schimmel --- include/net/ip6_fib.h | 2 ++ net/ipv6/ip6_fib.c | 2 +- net/ipv6/route.c | 20 ++++++++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 0ba5d3c56543..232289b439c3 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h @@ -533,6 +533,8 @@ static inline void fib6_rt_update(struct net *net, stru= ct fib6_info *rt, #endif void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info, unsigned int flags); +void inet6_rt_del_notify(struct fib6_info *rt, struct nl_info *info, + enum rt_del_reason del_reason); =20 void fib6_age_exceptions(struct fib6_info *rt, struct fib6_gc_args *gc_arg= s, unsigned long now); diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index f8a9ec7fa616..3e382ba1573e 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -2057,7 +2057,7 @@ static void fib6_del_route(struct fib6_table *table, = struct fib6_node *fn, call_fib6_entry_notifiers_replace(net, replace_rt); } if (!info->skip_notify) - inet6_rt_notify(RTM_DELROUTE, rt, info, 0); + inet6_rt_del_notify(rt, info, del_reason); =20 fib6_info_release(rt); } diff --git a/net/ipv6/route.c b/net/ipv6/route.c index d3bf2dd209bd..1704359d3960 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -6378,8 +6378,9 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb,= struct nlmsghdr *nlh, return err; } =20 -void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info, - unsigned int nlm_flags) +static void __inet6_rt_notify(int event, struct fib6_info *rt, + struct nl_info *info, unsigned int nlm_flags, + enum rt_del_reason del_reason) { struct net *net =3D info->nl_net; struct sk_buff *skb; @@ -6398,8 +6399,7 @@ void inet6_rt_notify(int event, struct fib6_info *rt,= struct nl_info *info, goto errout; =20 err =3D rt6_fill_node(net, skb, rt, NULL, NULL, NULL, 0, - event, info->portid, seq, nlm_flags, - RT_DEL_REASON_UNSPEC); + event, info->portid, seq, nlm_flags, del_reason); if (err < 0) { kfree_skb(skb); /* -EMSGSIZE implies needed space grew under us. */ @@ -6420,6 +6420,18 @@ void inet6_rt_notify(int event, struct fib6_info *rt= , struct nl_info *info, rtnl_set_sk_err(net, RTNLGRP_IPV6_ROUTE, err); } =20 +void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info, + unsigned int nlm_flags) +{ + __inet6_rt_notify(event, rt, info, nlm_flags, RT_DEL_REASON_UNSPEC); +} + +void inet6_rt_del_notify(struct fib6_info *rt, struct nl_info *info, + enum rt_del_reason del_reason) +{ + __inet6_rt_notify(RTM_DELROUTE, rt, info, 0, del_reason); +} + void fib6_rt_update(struct net *net, struct fib6_info *rt, struct nl_info *info) { --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 81C462FE05C for ; Sat, 8 Aug 2026 00:57:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150643; cv=none; b=GJgmyF+JcDT4GrJXujgu3LD5a0Uw+1yO8b6E159xtov5g5p+HADGH0YYl7Kz8oTyOvIj3PoXmr6h41psY7sBeFhNa4UWynz3DLRmTPZc3B6xhUMfuCysneUiMhLTD/ATauuaIzx//XPUuFtIUoqdUKcSv4I8hz8+Pz/cCU90DVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150643; c=relaxed/simple; bh=B7TewygujZnaDoAvFCdYw3/qv+UCkSEJvMuQcq5Qjm4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ohSlBjCwBHkoPbvEbB/Yu1PI9AgHA3DCdyBb7rBF6si06t+t4+w2uoD31oaehZG29XZO4/iEI23uiIuwYNNgqm/4tsUriDyvelc3itPAaYxsCjlc9V813Ea6lvRvYaUGIy1rgkpxXjO3RU2Pb/nX0NKjChzntcSfUBVEUmmcoO4= 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=auylG6Ts; arc=none smtp.client-ip=209.85.216.42 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="auylG6Ts" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-3856d6fbcb3so87240a91.2 for ; Fri, 07 Aug 2026 17:57:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150642; x=1786755442; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Gzb9FT9wUkGMcUEIoMcEc4INRD8xMXaz2c0lYN6UOZs=; b=auylG6Ts5PHtDVCNxO+NEniCxMYwPWfPjBTM2A7jVmRXGQOIEUW9BJ7b/c7ktYAOmP VS+kr6heR5f2bYeEsHlmCmjmi7jmrfEcYkFb2Ua8hhJeOBVQVxbaqa5x/Vxk1VJODSyW Q2u3+c0Di5bOJtYmvOLOzKxjCsb2neRweVZZec+vYou7+9jcP/CUMMQcqM/gvU4bciJM dpxmet/odXmct0ibSpgn8eixzEDMBTwiWHICAcu5qRjU8E7/XlLhLQj9ACCbt7t3oaxw gPO7IPp0EKmEkvX0fde3h4Db2h/MIJGt2gyAJLmwMZi5a0UJdmrlA5hrY2z+TFVvUTxZ 7EXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150642; x=1786755442; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Gzb9FT9wUkGMcUEIoMcEc4INRD8xMXaz2c0lYN6UOZs=; b=O6Xz411m1toosWoV13q4hhKMB7Sceih++IlJ4ePPlyqqPMaQ+zaCe7YFxZ17cMnGmB DZ9kC+A+rAHfkhXvp2FhEOBb7jk3v0/QjMfPUWy4Vxc+Z52WYSUki/UXCpq96NFOlDiI 0QcRyB062tbuQol+e/ZMaZ3W1K6ggjPEoUuWEyJ/GCm3YfCyFv1qhrvQx2o14fbwN3V5 TbLbcjvQet9vn5Lox2ks0gV6Pq9uoHZWOMh2TF9SmQ3Mmht1CHWjNP5JgY/j5hE2H5qE FWRk+BysKCPsCE0WphtnNmHfOWrnVvnf9Z1uruBoXD4qYm7HQ9B6PqV/otyzvSmtNIGT jzFQ== X-Forwarded-Encrypted: i=1; AHgh+RrK0L1WEtSRgzmuEiwNOViEaUgUnQdrKZsU7qE5lJztQw+/dcgx+9mbh/wKlQywT41WXwxrMQgFdxml8kI=@vger.kernel.org X-Gm-Message-State: AOJu0YwwEf1r/P/4F0aW2yN1DVJJlsSlexrvq6ZEm8rhLN1OWXeO7+gN zZZLQOJ2FBY7v6/O+yAvqDImehI5GVvcXZXl9ZS2jDG+cEtn79AmxQdW X-Gm-Gg: AR+sD13tNY9igZ6ObbQ+4n707sPtxew1lv5F1ifS2BBJQc2dGsF86ABs4UedDQAcJJX o6mlAUSRrP2pvhGBLWjz2HVxEIYIpnq8svlulqCgcqWKq16IfQoUS2KQfXz4TUR6b/VGWh/aqci Erg4m245uSjXSAC1V5ZUOMykOL1fag5Y33049bvtY6uEztyod3B20AnoEDHoLNpUbRuLBFHm+Mj adu989p6cH3v5tzM47ieQ0zg88awcMWs1itgjUZImVuK6VJXXJjm5zlCGnNAPKX38ysop4kRb6e tY2gnjavkcowLiDhX8OoZkH3xzD5RIjcj/d6WMWEO8CdhkGS5qD768kSl/+nlud+lmutfIDu/0N chJ6kmT2XU9CA9FcQI9dVelzqWTIUE6PZnZw0Cdz/AP7ZQojHGLLt/4WbAOWUvRO8ZSTuQzfrtk APalEiAjIlXlGOQ8p385ez0IYlnLnJ2BbuZKFq3tVznkRBt0MiWFrlWS9muJgNBsUwIKs/QFxsZ Kckj7dP4GGUJFjQqQqgyfEPsnHDnRMQ9YsxihebES0k+QtpZhs= X-Received: by 2002:a17:90b:4c45:b0:38f:efed:5448 with SMTP id 98e67ed59e1d1-392822b7b78mr3257943a91.8.1786150641757; Fri, 07 Aug 2026 17:57:21 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:21 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 07/10] netlink: specs: rt-route: add route notifications Date: Sat, 8 Aug 2026 09:56:39 +0900 Message-ID: <20260808005642.26901-8-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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" Declare the RTM_NEWROUTE and RTM_DELROUTE notifications and the route multicast groups, so that generated clients can subscribe to route changes. Both notifications reuse the getroute reply attributes. Signed-off-by: Yuyang Huang --- Documentation/netlink/specs/rt-route.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Documentation/netlink/specs/rt-route.yaml b/Documentation/netl= ink/specs/rt-route.yaml index 33195db96746..62b215614210 100644 --- a/Documentation/netlink/specs/rt-route.yaml +++ b/Documentation/netlink/specs/rt-route.yaml @@ -322,3 +322,22 @@ operations: request: value: 25 attributes: *all-route-attrs + - + name: newroute-ntf + doc: Notification about a created route. + value: 24 + notify: getroute + - + name: delroute-ntf + doc: Notification about a deleted route. + value: 25 + notify: getroute + +mcast-groups: + list: + - + name: rtnlgrp-ipv4-route + value: 7 + - + name: rtnlgrp-ipv6-route + value: 11 --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 AAA393191BD for ; Sat, 8 Aug 2026 00:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150648; cv=none; b=kFyiri8T0ZUrVg07ASCiEx5kTwUVP99Kh1zw+SiFuU6RQ2oMrggWS8c3sTbJr9hVWWNgT480y+l6Ln7K5i22fSBVJmFOO6+9s8Jjplky/5whGVW8v4egAJDxg/8tEV47YpoUX3MzbKrhbZmHXaXWfb1ehI7OUtL7wOIrJgfhdpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150648; c=relaxed/simple; bh=/1aVlWW0aqZciYFSw+AOVrBgxkbF7Mvd+1bStEYFWQ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pm9PwLCqpxpzdYHkhq8nI8xa5wOlEKe4viAp4a7Uvy12Ca35c+BO7+whNP2RiVyABIyw5j5K34XQSWzR8f0SgFyFryqpM9SSmdBjDxp3/S+BOYIe+MNTIBLXjip76l+gdFltg/IDYEf6GlgDdASiqz+hRRgQgEO15uYbS8sLt2I= 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=okFlVBKO; arc=none smtp.client-ip=209.85.216.54 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="okFlVBKO" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso132169a91.2 for ; Fri, 07 Aug 2026 17:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150646; x=1786755446; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yuxY4tXM3iR0bUsRR6CCNuiHoOS0/eoyg0oTXxAyJpU=; b=okFlVBKOC752/QidXq6WJmPC8WPZfQpgKT+E+4pX06HnXaaY7tcP3tS+YCAHRy38k7 +wW0pV/pkgYYNmUcvEmYeSndORXgS7VOUWwx3p7Zb2ErVBnAbouAs3+O2jFlUY7d9YQu qm2l/K7493H7c91Al5svUEFG/KUY+NR2hwehEy+c4GkuaGalfhlFA3XhtKubDL8g79ZI iTT9xGv3gvhU4KSE5XNTKJxTpg7W/+tLXao3KAKKyq3JNPhRI3Bt15r209c9s0Vjkifs ZalZEen9Pka8QuoHr+iirsxWYttju+5nLH/AwfJxTOd6Mga8T0KGvJJfhIM57ZQVI03L zdxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150646; x=1786755446; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=yuxY4tXM3iR0bUsRR6CCNuiHoOS0/eoyg0oTXxAyJpU=; b=KHUGiGJgMuv5l6MHs7QQlpzKGmTdY+QDopwldtEPMzaWyoZpeqzyrRQlKC+UrVnsKI 0ZGjtM1lAYtefgIDWC0g94OUjtOpLEosbuKhnOyJuZ5oDKvJeqZR3rmjlNJEZbYw2Oy4 4apXi5OJ2O2N6+Z71l69l0WTvACLWRXyus6HoOnsR1bJbuv34HmgYXLD07DrzomPPgdi kYB9hXE+sEim8YidTN8M9ppJXdix5KTye4neaCptvvrhKDrrIoXhUXhm89jJiRMqEUvt I1Ueps4UOfjN8cj6CsFvAJ4OpM2T1iDM5R+SIAtpJTWQaIQsxSZQd6C8SMSW3wCea8uw TAsA== X-Forwarded-Encrypted: i=1; AHgh+RpmGEYIc3WXg3t00eKY/gmMCqhz7Rf0y5aODfHIvg1exuLi32kCqaWB6iOWALCbJmFeLfxQOEfchnTdDbo=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/ppw9d2AFjvy9Ru64aIoVGOi1eNF83xHNKhpBqxILAUODHVZc +FpjTOp0UA4EQoeozN/M7i+cDql3ADdKkQfyG1aLCSV+8IsGumD5c1d/ X-Gm-Gg: AR+sD13u3P+QGLPGx/uBFn8O2+hU2y2Cy25H4e6Yr+g0PVaPJhb9DlnPw2CJEacLU1F 1y9eeHUVHcjt1EPz+KrFQfomepeOfESdg6OG1peZLyOLjGu+ABt3iJinlZl82LfpBvmTw7jQ2tj IhxQh0246vLG9tEsZjOYKuccYWnVCoUTRTApoKxlcmKuRAK+UubyJBVebJzp2HjCPlHVCRm815A Fw2AI3YelhNKnPGrtMkbUi71t3soOaAobEM1dMKJWOcTsAdJNTylYZUU4Igr+PGOySolIOUZD0S iL5PiD+hP4WCTjmbXFVHjcfxLBdu/1klDse4q2saz9A72GaAO2bkUk67lG70EUOgRrMwchTz95d fNNSkdHkDCYvn0I+qaFtI2FETBET2WpHuupVGhul+cyzfQdLf0ITlA51/3ydYzVQJYN8JLJ28A3 GC7gfyPl6nwYYanevjSULDuKHKCpQS8hVyGH2n6au5CR+swLJwvMPtSog3qmiQC0IP7Rm+w+VPd LvjYyGZUctcyqX4RQZqEaSFVrtzynI9kVPfNmjqkmH76amL98k= X-Received: by 2002:a17:90b:4f81:b0:38c:e9e9:e7ce with SMTP id 98e67ed59e1d1-392822bf6abmr3156672a91.3.1786150645933; Fri, 07 Aug 2026 17:57:25 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:25 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 08/10] netlink: specs: rt-route: split out the request attribute list Date: Sat, 8 Aug 2026 09:56:40 +0900 Message-ID: <20260808005642.26901-9-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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" The newroute and delroute requests alias the same attribute list as the getroute reply, but requests and replies do not carry the same attributes. Give the requests their own list. The two lists are identical today, so the generated code does not change. Signed-off-by: Yuyang Huang --- Documentation/netlink/specs/rt-route.yaml | 32 +++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/Documentation/netlink/specs/rt-route.yaml b/Documentation/netl= ink/specs/rt-route.yaml index 62b215614210..9f4a1a253676 100644 --- a/Documentation/netlink/specs/rt-route.yaml +++ b/Documentation/netlink/specs/rt-route.yaml @@ -313,7 +313,35 @@ operations: do: request: value: 24 - attributes: *all-route-attrs + attributes: &route-req-attrs + - dst + - src + - iif + - oif + - gateway + - priority + - prefsrc + - metrics + - multipath + - flow + - cacheinfo + - table + - mark + - mfc-stats + - via + - newdst + - pref + - encap-type + - encap + - expires + - pad + - uid + - ttl-propagate + - ip-proto + - sport + - dport + - nh-id + - flowlabel - name: delroute doc: Delete an existing route @@ -321,7 +349,7 @@ operations: do: request: value: 25 - attributes: *all-route-attrs + attributes: *route-req-attrs - name: newroute-ntf doc: Notification about a created route. --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 A3E9C2F8BC3 for ; Sat, 8 Aug 2026 00:57:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150652; cv=none; b=IegC26dBPkviObvATKo3WS3IUrt24/OT6wU6GMOlFdnajeWuHKxbC0v/TakPKAQwXO+QDyl/Ky4XMBS1fL1dCzCW1YpnfHan7y++YKTpixCWj/Z6/1yaRWzkHbD0umlvKvt8bAcnY2stoG2C4kAxM/QrxoJ+8tju2FArOzfnCgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150652; c=relaxed/simple; bh=RXRTAXtIAvF5W4zhV9XvNk6Eqr4bA6CJDR4OTuU8uKA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fi+j8Gg3oI8ncdUVjV/W7oQSQQXmJ5AQaAqmy6rApcalB6HMKx9sqgDsGNY81rbss/DMdtxC4lHbt7AmtiWUaa1hxL+G7dysq6oPqAZ2PA/KxTTsMBttVUvFPyWtxwioYX/dLES83NWCobYUI744cPifxKB1Zy9oLuRqp1OyUlI= 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=pvUFkvks; arc=none smtp.client-ip=209.85.216.43 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="pvUFkvks" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-384930ca5e2so129203a91.3 for ; Fri, 07 Aug 2026 17:57:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150651; x=1786755451; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=diMA3NQ10gzHFnNLk3VwTDac6B6hmowUzo1h66c0BkU=; b=pvUFkvksPeHuKWj+IZsJ7F5QsUK+omc8El8hI3uoMdXoUrbzGN666TcVLgyvIy1d+J JPib1bvOnnwLMazUztHEOBfk40VRUt6WHaAoKzpiWumEE9MGHMX6eNBYqK/VPU+AlmBv 6Jag3WolleR5Agxewig03Ko8eazJHaLmRzSe/T4kgEld1LRmTQwiWSJsG7nxfe4Ar/1c w3xswLFdgX9novDK4vBG6tHEM614p6KC5YByy9xK32oawgaxMvD9c5fpiyXmS8xVzXHb k2nQrEKb7H1kEXkJpOZBqAgj2NaLnGh75eh5JW46fxrJ+7+6ZoC+D0U2+y1j5dUPHrBu 3dww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150651; x=1786755451; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=diMA3NQ10gzHFnNLk3VwTDac6B6hmowUzo1h66c0BkU=; b=ZAOVVoDfJalaN2WJnUDyjRad760OzPUBS7yVKHBTN1L5B3KdDOsnHgsHZC9ovDVt/9 ryR3yr8CqJlMbcMVlxNFNzUQ+PqKU9Pm4HsT00wyYgss912xW4aPS8SM9G1muxa1dKDn tRPjQDkXyIlaGmo+8jBasf31WaGETjY0JTsZsuc5+Cv1urh4Bz03aH2cb99VxmfBVfyL 8B8Y0bV/DAA+7Rn7sXOg8F7qMl2hiKDShPaShKVnbutlis7EzIb6HLOLHb9sA1oDHb1k IhHEbbV+WSHyDAy0e7Di7YzHruvw9TyloLo17+WseMwZu9Dml4aHIPk45G/t6nknP/MB cLoQ== X-Forwarded-Encrypted: i=1; AHgh+RonXLPmoErJfnpKTYQz/dqdadekrk0Q/HO0ms8lYzmaA/5cOv6m36/f+URP9rcW1PMsbUnhZcwUgxXdt4s=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0MBukrq8L1d6vu2Vk6ThDuN8AiqVy2GIhXit3Gl6z/BahZ4/s CW3f4npPlbLojBGBK96QCaWrDmAzfcojWkDoeqSxWtm7l+qo9ygyVC/D X-Gm-Gg: AR+sD11hQTGf0G+OIdtkcnEW1vUQaDqPco6SJdT3iyUI0TNdiDZBUSpf5fv1Sc0Jb8N gNzD/oSfzKkqafLDrhwLAvYMTd0sIqjo1LB98G9yhwFWossDuaJmJmWc8MY5VLmydzflvQZxSC8 vw4FUgj24ihKEFuJMMahC3BCydcZBJmFUvA/z3H9nzWKr9KycdR/thhbU6eywkBSfFH5x82iakf IR44wP5L+UK2jtwA69EQL2j72CfNUN/fADsVyEjejHMfZ3QEiK34dsaTMGw31SQQlL3hCWCeQKc GmJ1dQ6wLGfNu1x2YHvdIUJ8WsYzVy+XMMi0PwTpFDzV/S7uAkedSwgnH0/QlY4AOBZ9Jwp4Hbm +2aLsnwS9O4KAVrJOCzQ5eKsf/2UjQcMbmjCJQXuL0SGSFQOriW5/c98ezVEsGdt0Mnj/tQvCYN ElsrbUpn+TVxNEgNeaXhuH+gJT6vUzyZylfcGh9nFlw6nx2nS/B133YkU9bU/DkHsWPX6+Wqy16 soZzvLvpig+2jjGZbhb/qiP8KDmzkLNSHUxg1jLyz7UEWB/T/fpg0E7SyXdXnc= X-Received: by 2002:a17:90b:3985:b0:381:9028:5945 with SMTP id 98e67ed59e1d1-3903c58ee8emr25039098a91.14.1786150651049; Fri, 07 Aug 2026 17:57:31 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.57.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:30 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 09/10] netlink: specs: rt-route: add the route deletion reason Date: Sat, 8 Aug 2026 09:56:41 +0900 Message-ID: <20260808005642.26901-10-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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 the del-reason attribute and its enum to the route attribute set, and to the getroute reply, which the route notifications reuse. The attribute is absent from the newroute and delroute request lists. RTA_DEL_REASON is above strict_start_type in rtm_ipv6_policy, so encoding it in a request is rejected with -EINVAL. Signed-off-by: Yuyang Huang --- Documentation/netlink/specs/rt-route.yaml | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Documentation/netlink/specs/rt-route.yaml b/Documentation/netl= ink/specs/rt-route.yaml index 9f4a1a253676..253037ea5176 100644 --- a/Documentation/netlink/specs/rt-route.yaml +++ b/Documentation/netlink/specs/rt-route.yaml @@ -78,6 +78,27 @@ definitions: - name: rta-used type: u32 + - + name: del-reason + type: enum + name-prefix: rt-del-reason- + enum-name: rt-del-reason + doc: | + Why the kernel deleted a route. New causes may be appended. The + value space is family-agnostic, a value is never reinterpreted + per address family. + entries: + - + name: unspec + doc: The deletion path does not record a cause. + - + name: expired + doc: The RTF_EXPIRES lifetime ran out and the route was garbage + collected. + - + name: ra-withdrawn + doc: A Router Advertisement withdrew the route with a zero + lifetime. =20 attribute-sets: - @@ -185,6 +206,18 @@ attribute-sets: type: u32 byte-order: big-endian display-hint: hex + - + name: del-reason + type: u32 + enum: del-reason + doc: | + Emitted only on RTM_DELROUTE notifications, and only when the + deletion path records a cause. An absent attribute means + either an older kernel or a deletion path that does not + record its cause, consumers must treat absent and unspec + identically. Currently only IPv6 deletion paths record a + cause. The attribute is notification-only, the kernel rejects + it in requests. - name: metrics name-prefix: rtax- @@ -299,6 +332,7 @@ operations: - dport - nh-id - flowlabel + - del-reason dump: request: value: 26 --=20 2.43.0 From nobody Wed Sep 30 13:05:15 2026 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 1DE5030F7EB for ; Sat, 8 Aug 2026 00:57:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150659; cv=none; b=Rwtq99x+93P4nzML0AzGNVrVgAxvuhH++fw6tfwnsPpeH90oKcxX8A0EUHw2qXwD+lNl93z9ThPRl8uwcht9JOT22vUPhr86foQQe3ROA+SOGw/Mv/bojNhJgCHT/D6DEqCvfDxflo0UmHXGCv9DwlJrzYyVxOoy4jpHJj8oYO4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786150659; c=relaxed/simple; bh=jWLxZrOctQi48RKqTYRz91+Ibtr0QTKx2FayMGGmNqQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Sdt5q+7zUzebI8/Oh0FSKwP5uIk+1DrpvbrlWAqG/PtpgJVzw7+sLuhH6ZShGXcmdlc6TuVLAirf3XSErB01ofUBBemzoT8dV3ZrJ9rCDZQGPHM8eQvWBMcyk/pMTvpTymizZw+Sudz59DyRh3515d87RaVTY9Dqm/qi9VRn0GY= 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=msypLLX5; arc=none smtp.client-ip=209.85.216.47 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="msypLLX5" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-38dfe7eb825so99754a91.0 for ; Fri, 07 Aug 2026 17:57:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786150656; x=1786755456; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=y7Yu9LFtUUVkb91RBdW7WVFjGnJVr4Pvqr7j1MPpwfw=; b=msypLLX5zQPJZYxuOB3QaUkiMmBRfgM86VF43XEztpZJlFjhRLfpt1WgebIkcQQgSB /oOUloWEl00kJbs4cWT23Rai+qpu7JTZ1joHztec9Ca7jQ96kV7xqzpIAGLwPbFyKFjx iDDZ4TZgswEKFap9MkXeqLDG4um6u1EyU47zQi7pKTHR5zM58FplAYNJGTjpv1v5md5Q TgdMTBjXs9z4AvTo8puvBv1bpS3B6scvAP9BVxWDrCIBMLQvzVsWpeOWmNGZqU0s7Tr8 f6jR8oJwZB+TsMNZbBkWMNWo3/HQ9ddJXcpeogFfO8JKlDrCja3NlN6+8ddcvtBCK/eF aLGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786150656; x=1786755456; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=y7Yu9LFtUUVkb91RBdW7WVFjGnJVr4Pvqr7j1MPpwfw=; b=bxmPu5nJ7aW2veMYFsNu3YggHZxhHwMJaLvOs9h7eMNkE7atZa7iaRTc3pMSRrxyk2 rslnnfJcQGMr61hhPXNXgmqY2eZoYtupMEcW+KCnyHPBi0xZo9as+3ufuGNdLw+n+76H WLEjNMmGHSIMLXM9UJ91cgoYoPnmLO2lL1wRsG5ryWDAzvxdJzq121qA4nNAr5dijGYM xRmSKN9I6MW5Bd3cGuZ6pO9fdN0+ERKQbZ4Nea8LG/iv2O4ErAFeklitIocPrG2lH0As bSpPIweko3ENKHDbdM+DqDK2i4HFRxBg0nDJ1WfqHF1W1M+AgoGjYKXiVoFNwr9xayHI pqBw== X-Forwarded-Encrypted: i=1; AHgh+RoEfVd9lpZI3kbSBe45FrIhoZyIV2ATHXoFQHALRgWFtUxuSqmIdyKzO4uyo/z9SVPj3Qg1Gc++PgpD79g=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+KwLjUj97i/vDbUrAK5TwU7wBSNd/0Kpcni/AAI2JepQpHKWx Gyrphl01z1xvvhgTIwTQjOD6CRT5I1xbLIU1Je09PB+J7rGvxRASwN4X X-Gm-Gg: AR+sD12BZHA7JNQspsbyfYUtgiF4nb57vTHuhYFKf8xv84mDL6qAs3KNE2F8SzpAj9v +s4MMuljooZrQsqc71tga27Y0dfMLa//LkpGkkLechmdNvimwb/wInD0U1fRIeod2xgPXUVY9Fe EeC3pcScAtcNKu4/jX5sFPxQuoMYLAJfReGrVu0RvAoUvZuFj0MCtQmMgF7yPSmAxtjrL97liBo ecWYZkmB6al0rR6SMu/qDkC75fwST90RumTsox/wGXat4TFkM1Yzf4ViEs9iTB8xhf+JMdq9mYA +lBsUxzeDOIJQUtf32yBGfShC/4mDSD0siMV9ALgdkHUvgjJOJ5Xzv0vHuz0wK8giiYWGkfsT4w SwO782DxB3TBh35ANad3QS7hmjX5NbUWKZCUqbMhNWp7n0F+WrwNy5x9y6aH5YUaFtq6pS3SFJC cw2vhVXgHHxuytbhhB9xMnJkV94UPDvA65N73jRhCLRdmqDNAirpKQIo8MB8e5SnjuThLHiZaNT 0EBKlkc35DyuqfN5Cx1VOtTZD71uwUe/dKyD95p3SN3VCCh3/Q= X-Received: by 2002:a17:90b:448b:b0:38e:524:8797 with SMTP id 98e67ed59e1d1-3909d8c3b9cmr10953639a91.13.1786150656297; Fri, 07 Aug 2026 17:57:36 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:d7e9:6449:7464:1dfa]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3925fc6c13asm4205182a91.2.2026.08.07.17.57.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 17:57:35 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , Stanislav Fomichev , Willem de Bruijn , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 10/10] selftests: net: verify RTA_DEL_REASON on route deletion Date: Sat, 8 Aug 2026 09:56:42 +0900 Message-ID: <20260808005642.26901-11-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com> References: <20260808005642.26901-1-sigefriedhyy@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" Extend rtnetlink.py to check the reason reported in RTM_DELROUTE: - expired: route with a 2s lifetime collected by the fib6 GC (gc_interval lowered like fib_tests.sh fib6_gc_test does); - ra-withdrawn: a single RA advertises a default route (router lifetime), an on-link prefix route (RFC 4861 prefix information option) and a route information option route (RFC 4191), then a second RA withdraws all three with zero lifetimes; the RAs are crafted over a raw ICMPv6 socket so the test does not depend on an external RA tool; - absence: a userspace deletion request records no cause and must not carry the attribute at all. Signed-off-by: Yuyang Huang --- .../testing/selftests/net/lib/py/__init__.py | 4 +- tools/testing/selftests/net/lib/py/ynl.py | 7 +- tools/testing/selftests/net/rtnetlink.py | 187 +++++++++++++++++- 3 files changed, 193 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/net/lib/py/__init__.py b/tools/testing= /selftests/net/lib/py/__init__.py index e58bdbdc58ee..34935886b6ad 100644 --- a/tools/testing/selftests/net/lib/py/__init__.py +++ b/tools/testing/selftests/net/lib/py/__init__.py @@ -17,7 +17,7 @@ from .utils import CmdExitFailure, fd_read_timeout, cmd, = bkg, defer, \ wait_file, tool, tc from .bpf import bpf_map_set, bpf_map_dump, bpf_prog_map_ids from .ynl import NlError, NlctrlFamily, YnlFamily, \ - EthtoolFamily, NetdevFamily, RtnlFamily, RtnlAddrFamily + EthtoolFamily, NetdevFamily, RtnlFamily, RtnlAddrFamily, RtnlRouteFami= ly from .ynl import NetshaperFamily, DevlinkFamily, PSPFamily, Netlink =20 __all__ =3D ["KSRC", @@ -34,4 +34,4 @@ __all__ =3D ["KSRC", "NetdevSim", "NetdevSimDev", "NetshaperFamily", "DevlinkFamily", "PSPFamily", "NlError", "YnlFamily", "EthtoolFamily", "NetdevFamily", "RtnlFamily", - "NlctrlFamily", "RtnlAddrFamily", "Netlink"] + "NlctrlFamily", "RtnlAddrFamily", "RtnlRouteFamily", "Netlink"] diff --git a/tools/testing/selftests/net/lib/py/ynl.py b/tools/testing/self= tests/net/lib/py/ynl.py index 2e567062aa6c..08deff756f29 100644 --- a/tools/testing/selftests/net/lib/py/ynl.py +++ b/tools/testing/selftests/net/lib/py/ynl.py @@ -29,7 +29,7 @@ except ModuleNotFoundError as e: =20 __all__ =3D [ "NlError", "NlPolicy", "Netlink", "YnlFamily", "SPEC_PATH", - "EthtoolFamily", "RtnlFamily", "RtnlAddrFamily", + "EthtoolFamily", "RtnlFamily", "RtnlAddrFamily", "RtnlRouteFamily", "NetdevFamily", "NetshaperFamily", "NlctrlFamily", "DevlinkFamily", "PSPFamily", ] @@ -54,6 +54,11 @@ class RtnlAddrFamily(YnlFamily): super().__init__((SPEC_PATH / Path('rt-addr.yaml')).as_posix(), schema=3D'', recv_size=3Drecv_size) =20 +class RtnlRouteFamily(YnlFamily): + def __init__(self, recv_size=3D0): + super().__init__((SPEC_PATH / Path('rt-route.yaml')).as_posix(), + schema=3D'', recv_size=3Drecv_size) + class NetdevFamily(YnlFamily): def __init__(self, recv_size=3D0): super().__init__((SPEC_PATH / Path('netdev.yaml')).as_posix(), diff --git a/tools/testing/selftests/net/rtnetlink.py b/tools/testing/selft= ests/net/rtnetlink.py index 0c67c7c00d84..5cc3ebdcf08d 100755 --- a/tools/testing/selftests/net/rtnetlink.py +++ b/tools/testing/selftests/net/rtnetlink.py @@ -5,7 +5,9 @@ import socket import struct import time from lib.py import bkg, ip, ksft_exit, ksft_run, ksft_eq, ksft_ge, ksft_tr= ue, KsftSkipEx -from lib.py import CmdExitFailure, NetNS, NetNSEnter, RtnlAddrFamily +from lib.py import ksft_not_in, ksft_not_none +from lib.py import CmdExitFailure, NetNS, NetNSEnter, RtnlAddrFamily, Rtnl= RouteFamily +from lib.py import defer =20 IPV4_ALL_HOSTS_MULTICAST =3D b'\xe0\x00\x00\x01' IPV4_TEST_MULTICAST =3D b'\xef\x01\x01\x01' @@ -134,8 +136,189 @@ def ipv4_devconf_notify() -> None: ksft_true(f"inet {ifname} forwarding on" in cmd_obj.stdout, f"No 'forwarding on' notificiation found for interface {ifna= me}") =20 +def _rtnl_route_subscribe(ns): + with NetNSEnter(str(ns)): + rtnl =3D RtnlRouteFamily() + defer(rtnl.close) + rtnl.ntf_subscribe("rtnlgrp-ipv6-route") + return rtnl + + +def _wait_route_ntf(rtnl, name, dst_len, dst=3DNone, deadline=3D10): + """Return the attrs of the first matching notification, None on timeou= t.""" + + for msg in rtnl.poll_ntf(duration=3Ddeadline): + if msg['name'] !=3D name: + continue + attrs =3D msg['msg'] + if attrs['rtm-dst-len'] !=3D dst_len: + continue + if dst is not None and attrs.get('dst') !=3D dst: + continue + return attrs + return None + + +def _collect_route_ntfs(rtnl, name, want, deadline=3D10): + """Gather attrs of matching notifications, keyed by (dst_len, dst).""" + + seen =3D {} + for msg in rtnl.poll_ntf(duration=3Ddeadline): + if msg['name'] !=3D name: + continue + attrs =3D msg['msg'] + key =3D (attrs['rtm-dst-len'], attrs.get('dst')) + if key in want: + seen[key] =3D attrs + if len(seen) =3D=3D len(want): + break + return seen + + +def _write_ipv6_sysctl(name, value): + with open(f"/proc/sys/net/ipv6/{name}", "w") as f: + f.write(f"{value}\n") + + +def ipv6_route_del_reason_expired() -> None: + """An expired route reports RTA_DEL_REASON =3D=3D expired.""" + + with NetNS() as ns: + rtnl =3D _rtnl_route_subscribe(ns) + with NetNSEnter(str(ns)): + _write_ipv6_sysctl("route/gc_interval", 2) + ip("link add name dummy1 type dummy", ns=3Dstr(ns)) + ip("link set dev dummy1 up", ns=3Dstr(ns)) + ip("-6 route add 2001:db8:2::/64 dev dummy1 expires 2", ns=3Dstr(n= s)) + + attrs =3D _wait_route_ntf(rtnl, 'delroute-ntf', 64, '2001:db8:2::', + deadline=3D15) + ksft_not_none(attrs, "no RTM_DELROUTE for the expired route") + if attrs is not None: + ksft_eq(attrs.get('del-reason'), 'expired') + + +def _send_ra(sock, ifindex, lifetime, rio=3DNone, pio=3DNone): + """The kernel fills in the ICMPv6 checksum on raw ICMPv6 sockets.""" + + # type, code, cksum, hop limit, flags, router lifetime, + # reachable time, retrans timer + ra =3D struct.pack('!BBHBBHII', 134, 0, 0, 64, 0, lifetime, 0, 0) + if rio is not None: + prefix, plen, rio_lifetime =3D rio + # RFC 4191 route information option, /64 prefix (8 bytes) + ra +=3D struct.pack('!BBBBI', 24, 2, plen, 0, rio_lifetime) + ra +=3D socket.inet_pton(socket.AF_INET6, prefix)[:8] + if pio is not None: + prefix, plen, valid_lft =3D pio + # RFC 4861 prefix information option, on-link only (L set, A clear) + ra +=3D struct.pack('!BBBBIII', 3, 4, plen, 0x80, valid_lft, 0, 0) + ra +=3D socket.inet_pton(socket.AF_INET6, prefix) + sock.sendto(ra, ('ff02::1', 0, 0, ifindex)) + + +def _ra_router_sock(ns_r, ifname): + with NetNSEnter(str(ns_r)): + sock =3D socket.socket(socket.AF_INET6, socket.SOCK_RAW, + socket.IPPROTO_ICMPV6) + sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, 2= 55) + defer(sock.close) + return sock, socket.if_nametoindex(ifname) + + +def _ra_advertise_routes(rtnl, sock, ifindex, want, **ra_opts): + """ + Sending fails with EADDRNOTAVAIL while the router's link-local + address is still tentative. addrconf_dad_start() only queues + addrconf_dad_work(), and IFA_F_TENTATIVE is cleared when that work + item runs, so retry until it does. + """ + + seen =3D {} + for _ in range(10): + try: + _send_ra(sock, ifindex, **ra_opts) + except OSError: + time.sleep(0.2) + continue + seen.update(_collect_route_ntfs(rtnl, 'newroute-ntf', + want - set(seen.keys()), deadline= =3D2)) + if len(seen) =3D=3D len(want): + break + return seen + + +def ipv6_route_del_reason_ra_withdrawn() -> None: + """ + Routes withdrawn by a zero-lifetime RA (router lifetime, RFC 4861 + PIO, RFC 4191 RIO) report RTA_DEL_REASON =3D=3D ra-withdrawn. + """ + + # (rtm-dst-len, dst); the default route carries no RTA_DST + routes =3D {(0, None), (64, '2001:db8:6::'), (64, '2001:db8:5::')} + + with NetNS() as ns_h, NetNS() as ns_r: + ip(f"link add veth0 netns {ns_h} type veth peer name veth1 netns {= ns_r}") + with NetNSEnter(str(ns_h)): + _write_ipv6_sysctl("conf/veth0/accept_ra", 2) + _write_ipv6_sysctl("conf/veth0/forwarding", 0) + try: + _write_ipv6_sysctl("conf/veth0/accept_ra_rt_info_max_plen"= , 64) + except FileNotFoundError: + raise KsftSkipEx("no CONFIG_IPV6_ROUTE_INFO") + with NetNSEnter(str(ns_r)): + # skip the DAD probe so the router's link-local source only + # has to wait for addrconf_dad_work() to clear IFA_F_TENTATIVE + _write_ipv6_sysctl("conf/veth1/accept_dad", 0) + ip("link set dev veth0 up", ns=3Dstr(ns_h)) + ip("link set dev veth1 up", ns=3Dstr(ns_r)) + + rtnl =3D _rtnl_route_subscribe(ns_h) + sock, ifindex =3D _ra_router_sock(ns_r, "veth1") + + seen =3D _ra_advertise_routes(rtnl, sock, ifindex, routes, + lifetime=3D1800, + rio=3D('2001:db8:5::', 64, 600), + pio=3D('2001:db8:6::', 64, 600)) + ksft_eq(set(seen), routes, "not all RA routes were installed") + if set(seen) !=3D routes: + return + + _send_ra(sock, ifindex, 0, rio=3D('2001:db8:5::', 64, 0), + pio=3D('2001:db8:6::', 64, 0)) + seen =3D _collect_route_ntfs(rtnl, 'delroute-ntf', routes) + for key in routes: + attrs =3D seen.get(key) + ksft_not_none(attrs, f"no RTM_DELROUTE for {key}") + if attrs is not None: + ksft_eq(attrs.get('del-reason'), 'ra-withdrawn') + + +def ipv6_route_del_reason_absent() -> None: + """ + A deletion path that records no cause (here a userspace request) + must not carry RTA_DEL_REASON at all. + """ + + with NetNS() as ns: + rtnl =3D _rtnl_route_subscribe(ns) + ip("link add name dummy1 type dummy", ns=3Dstr(ns)) + ip("link set dev dummy1 up", ns=3Dstr(ns)) + ip("-6 route add 2001:db8:1::/64 dev dummy1", ns=3Dstr(ns)) + ip("-6 route del 2001:db8:1::/64 dev dummy1", ns=3Dstr(ns)) + + attrs =3D _wait_route_ntf(rtnl, 'delroute-ntf', 64, '2001:db8:1::') + ksft_not_none(attrs, "no RTM_DELROUTE for 2001:db8:1::/64") + if attrs is not None: + ksft_not_in('del-reason', attrs, + "user deletion must not carry del-reason") + + def main() -> None: - ksft_run([dump_mcaddr_check, dump_mcaddr6_check, ipv4_devconf_notify]) + ksft_run([dump_mcaddr_check, dump_mcaddr6_check, ipv4_devconf_notify, + ipv6_route_del_reason_expired, + ipv6_route_del_reason_ra_withdrawn, + ipv6_route_del_reason_absent]) ksft_exit() =20 if __name__ =3D=3D "__main__": --=20 2.43.0