From nobody Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.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 12815283FD4 for ; Tue, 4 Aug 2026 01:47:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808051; cv=none; b=HkhtJ+//xrDTB7ndHTZtGRf99NuO314sqk6CEtlTldHi+/fRK8kz5mIH2G0LHRydI9Hom1HHtHiJjhspxZemu2un5iJMwkUhP/y1TuGmpD+Uil9txvdxTHfHaWhTyq0qxXLGA597icSfUUQkbTSFb0dRo3n+kLYCpYpV13DuikE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808051; c=relaxed/simple; bh=APcx9K35DMKblVF+0j+9P6be8HvN191a+B2dFfG8i1I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=quhIMicEh78AdM+EHsLh+JxKIfsevjDtpnxQw5mc0D9WZiIb9zOwWA4Q2bWg3ThiKv8Fux+HURILacAL5VbVk7bijIhwpUEEYqToQcvDk/64TTWvLyeAItV1oBU0v5sTNKwzmhPtQgWrn8wX+PuT/ID4vZkPh59yBrgHn4UPy/A= 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=nt+LoF/l; arc=none smtp.client-ip=209.85.210.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="nt+LoF/l" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-84a652535dcso2714559b3a.3 for ; Mon, 03 Aug 2026 18:47:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808049; x=1786412849; 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=sLr3KOJuwu9lQ9y4+Qdhpzg+GLfZHNHrSE0VnJskiH8=; b=nt+LoF/lP3k6RwN+8PPwK3zy3V5Ziie29dQU1ZDGmnSObs/0HmKiRPeL0tHc2gD+fz bvjyPq1o6a3RkvfPuj3/aGDGHeEa3Egwzx5P4eV8/q2K7RsBZuCxk9J9l9HMFt0ImUIK QIZ9Oh5eFID6CGmSnOjzJhJf6OIzgX690Vo79JEmfM7TQtBRkvk7b8w0VaR84MldBkgr MprRPKmItdHN9NItlPEGPljGiHlUa83YFc09WBo/HIMD52Q5fIJdko+XuS72LIIr1zLX jsfyCgAIPLYgM7yD4mU5zGzn8iX6nm/oJw2uuPmPpeMLnI2a2tl/WVn79Cs0w2AWkSBH hZdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808049; x=1786412849; 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=sLr3KOJuwu9lQ9y4+Qdhpzg+GLfZHNHrSE0VnJskiH8=; b=HygEm6J6HdM+WuVTht51QNwSwgZqF+L+WZdrLNUGp9vuKXFCgPJDxbT5KyqJ+8yIfP 2dZ+MzsVLb0RNYBhnFFhklxZAsesyDKpPj06Yh4GsdmTejwFc8gdG6gFepl14r7gjTKF fbWRdXB77qTPjJeMQYd0ilu642svnjQ9CkU3C+G9QW+cU522RM/si8paSO10wsJlso11 tLQEZEvgYn0ZmpMW85HWu9y7+AyTEnUHW/aYHOVmB+DPqtfLgm4zJl9t+y8lb1AmVpL0 4v5wYQ47DvjyQj+wc5/w6jmdXw5mtwCEzzcLXR8NyldN+JgdZ4w3YMskl4qTnWLF//nj uk7w== X-Forwarded-Encrypted: i=1; AHgh+RoaWXNFKEJm4NgoLWI61LgUFt8gSyIf88NSrftMwDoVoBNqSOwQ2RultLj1HGEvIijR83EYTLPfP2W2how=@vger.kernel.org X-Gm-Message-State: AOJu0YwTph23dHqgMHHMMEbg6w5csUDEZzpK9EB6tXKMRtDEPkSY3ZGS N/tpoKyV9Q1hKJ3Ic7yjvOzpnKFwGhIcJq5LiNK0cb0p6jSo4+rbySmu X-Gm-Gg: AR+sD13FtF5saywA0tFfWb4fE2RKY4dtTJXwlQCSlZ+/0HtqAKzZwjMOhIFLjRbWIUw 3e81+WKiNnkIHSWAcPqo9L+rIKUq/qy7O4wY9urkg/TCi8LfuszFQs8oNuCRC3Bud76h2e6sQyg /CK0i97J73fXyGwsHMmqAlPp1mWGeaz8KSPLN09cjHUb6CXaJVeJoLb4DWEBn0+zlhXzGXLoZid jqIc97Bjj6hKf2vDFAQFjcV5oIoUW1jBthoJeyVAKyuI68v5NrFasV6AlXvJpdlps6G5BrFJTjL poXaGNsMQI88q6AAOvSknKSJznGXPI5RM5aInVi7de4S5brKKQQg2dgkSxfnRvub1LhNER5TNRH AsllM+PtQ2lO8ru7tHlo/z9J+uiSO8/k0gJrrugqehQqJ5uCxUVo8NY5B7Ev3uSn3vjmjnyZc5J EoFjaZ3BGeIpE6cWiYgGkeDa1DJhWdGwq9pMtayYw+slw+DPX03w2eA3+2r+Lh0Xe/GiP61RYaE PdA5931KlPoF4tPKNtT7lBntk0xewoa+Zh27qGX8FRYL6yy6sM= X-Received: by 2002:a05:6a00:4b0d:b0:84c:3900:95d4 with SMTP id d2e1a72fcca58-84ee482ad3cmr10771372b3a.11.1785808049287; Mon, 03 Aug 2026 18:47:29 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.47.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:47:28 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 01/10] ipv6: add ip6_del_rt_reason() Date: Tue, 4 Aug 2026 10:47:05 +0900 Message-ID: <20260804014714.4362-2-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 --- include/net/ip6_route.h | 2 ++ include/uapi/linux/rtnetlink.h | 22 ++++++++++++++++++++++ net/ipv6/route.c | 8 ++++++++ 3 files changed, 32 insertions(+) diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 09ffe0f13ce7..7bcf0e5bd887 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h @@ -128,6 +128,8 @@ int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_fl= ags, int ip6_ins_rt(struct net *net, struct fib6_info *f6i); #if IS_ENABLED(CONFIG_IPV6) int ip6_del_rt(struct net *net, struct fib6_info *f6i, bool skip_notify); +int ip6_del_rt_reason(struct net *net, struct fib6_info *f6i, + enum rt_del_reason del_reason); #else static inline int ip6_del_rt(struct net *net, struct fib6_info *f6i, bool skip_notify) diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h index 27265fd31e5f..66cfc17ede0e 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,27 @@ 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 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 Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.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 191021C861D for ; Tue, 4 Aug 2026 01:47:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808057; cv=none; b=Jb3dJ24Gquc6+sWB4gbPj2G3s20CBm1ZvvLPfAG/ADknOIZF6A81fmSHYbN4nVsy7FAqn/b9LpCFvZ3gKvKzub6MPSV6RJ1K6uQvOvsjCMiThd6NuHZsEZRycelE/nB7kSyFWTJdLzUyyxaOlngolf6KvEm5MPhcTBl34hshjN8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808057; c=relaxed/simple; bh=+mZYjK+JXE9ujqKx417c17D23v3zCE7WwDdMjT9YGc4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=COMEB1tLKY9ncYDrXJ03TFWNx9htty3aPCdCxIXlPlNbVfSExGUudHSf7aN4AcoWeVmPkEpqiV4lHvipP1FXTzAr4QdW5Wu1pJG1YkXrdDLko7CNPomxB7aOQILcoFk7yPkrIl91MAT0hqbHHpJTgf65N4ptPa+76rE789KRs1Y= 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=FkmkM7O/; arc=none smtp.client-ip=209.85.210.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="FkmkM7O/" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-84862b0d5aeso4862454b3a.2 for ; Mon, 03 Aug 2026 18:47:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808055; x=1786412855; 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=72G3fgPcIbW4iriADusE+rK+oWTd09ySnxnQjK9hjw0=; b=FkmkM7O/nTkMBe9k7QLXx48ft/EcOR+n+qzUwO2p/eQAkbMQoJ0OucnKfE7KeX9lEx gpyGn4MLr58k9jM11jqQJx99Vrytb4taNwQPpLIGaiSQlxKDlM6hpy46/zPtk0BHryB2 PaqBu5+TMEvDtp+BaW2M3XAjmEhC4VAVaa/r77hSh+98QRCRtV1oVKwTwu0vKH3Lzpjd Uc4vCylRwxQdcHf348lURV4Emjvb5yuv7Yy0paUptLrjkFcUkBGsktwpGjWhJ2Odja5/ egZrAznrtp5JijJqMA7A0d7mS3LtnosRF9OV7eGq9utD7Ald7GMjLhOXYL/QyD56ZGV/ oEWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808055; x=1786412855; 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=72G3fgPcIbW4iriADusE+rK+oWTd09ySnxnQjK9hjw0=; b=LjNdVHnt4BfgoJKNPBVMX4VhRtamg93RShg5gBVmFrKkvnoG5+FGMjg2XlnyYrJmEL P7/xvd20RY87g60yxgRhvqBxJCir7+qmLfIeFMV8fjizlf09xeLBV+CBZ08IzQqfG4Z7 r/1hHD96FbMnTHEh8XS9uIsnweny1izJMNvqt3S2qyGEu8y3Up8telCVuPYpulOEcD0w KLXNLP8voB+s28oyG9RtZxSUPNiy7gN7AhodqdZJX6p57y4GUexBcEiBMFUuPjNOwv7F uu7C3Fh/6As0thLbQfgwJdrTVM/WcORkecWELWccnWOotEnoCT1Ap59vJ6fDi9Wwwigh k57w== X-Forwarded-Encrypted: i=1; AHgh+Ro/VHow0hPKTGHRjMCpFDRaN5eE7ubQrhAfAo4oCfH6yKNLfNlFijilSSBYYsUSfXOv1XBDnH2CQXzdBYs=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/9POa8dGj2F9F5PBgTuMCJOqAdGYygiYNk7hL98istHbNWXT1 sSzsJUUJ9lw5YPl1I6HxRkOt1b7ypCEz4KvH4q9E7PU8mPJKxh/a4Mls X-Gm-Gg: AR+sD10BYWh0P65Jg6e+10v+N4dYGRetJdSDUNjLEjhdS1nVeLDO3rFyq1fCX/GkDWm rMZEHNmBameckW0NSjJYKo8WlONwHeJMdyYsdp8ay5hozOtAmsxzVAb4R4U4HmfUXqg3hkSafsh 4F2TCFT5bD7Gyq0eLdoJqo6uxUOkxZUjTvswJ1ZH1ylY6KFrtf54bSBEO6ukw+SZ1fCklKqqHPJ 4H/TAq1C6lB5s0NCGI9ZT/d/s295Bm7dtvC5FNyklFJdrH5Iqe0SOaI+u/beY3VhuuyZFeNSmFm YQ6n6hDCz1zzzvV1xxvgHZxZYJl0O+88d0duEkaxPgY1hJqemA6sbMmu4Xc84myLqTP02FBxHqF Usz7WXwanr/EKr/5kK2OYp4YtTyK6lPmlfOzfaEmRN5Vma4Ini7InDZ/iVAFge3dhhonLT/BGMM Yp7HXDPJ0wBk2vj1XZ50YcY7/LxfamJG5+8082Tj2VJe7kVZCogNYHeoIeK2qhva1Z2s2F+MW7R QBvK3ralJUlsJtaS+L/7bI1W3vnS5FP+TESt0X3Eq/z6T1ueJI= X-Received: by 2002:a05:6a00:1911:b0:847:9745:2f8f with SMTP id d2e1a72fcca58-84ee47b6541mr10898898b3a.18.1785808055205; Mon, 03 Aug 2026 18:47:35 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.47.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:47:34 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 02/10] ipv6: propagate the route deletion reason to fib6_del_route() Date: Tue, 4 Aug 2026 10:47:06 +0900 Message-ID: <20260804014714.4362-3-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (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 E75081C861D for ; Tue, 4 Aug 2026 01:47:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808063; cv=none; b=YUHaH0b7aNnJBTb1MFjmqDluEgN/dvC+v5goayGW+1T6z3yDv6yX2HX46FB/msY0JbkNPy50DsnS+7WMAIn1w1G/nomGbm5EQ5mgRo62QkVowXShTtdamDJEgRP24u9wCmOIwO6BeY/sZBElVjvWo5Dpvbz7LbjIyUPU9RPFNzo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808063; c=relaxed/simple; bh=g04qQoyUb5HCdV4/wu+1kAFaWTUGCfq/B4BYuQgdtio=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RjZGdHP3Wk7/exNJ31Cs9uVy84ma6pifURXnzogvNrvWmZox3pmDjgF0JI55NP5yQ8IbYZpfAm4KbCNOSCG3Ujrkuhtl5oGWMG6SB/DUDoIuTS1ysoQJQsVjVloNyjJc8MAYguPPsrNonePans8HIRdAo3AJ3VJmHKvurYQ3trc= 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=iZkQR0TO; arc=none smtp.client-ip=209.85.210.176 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="iZkQR0TO" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-84536ecfc5bso4743004b3a.2 for ; Mon, 03 Aug 2026 18:47:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808061; x=1786412861; 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=wpWfveSHmhLndp7WyhzOeHb/aYZ1oeXtiQXrHkx1fpg=; b=iZkQR0TOD245IX44X6nk5zuKBRFgvedZVkS3dlArpzqOxIy9y+XdvENcy6MynxhJVz 8XndwW/mcdQWMSnkRP2WlQcxasxtHDJ0Y6dXKCMI73ad3bOAejIyTt7tP5kspG/N5Pl3 /pmAkczMj3Jd3Oowv6VRvVKXBgbGGDjHOl3O3KJkxdOV8oESxofZlum6PeG8+9W4mtHU rk6Xyo9UsSlRmbXdsGXNdo0FjLoiYuwkC1JeGtzTYcpsSQX0GmV9yO7cs7ews1QJfgoJ BxQX/2CUivRx9EyDiLC0zADfzhREPPOVof10MZnlbOfMg83sCBO4QqGZRqZcVPA4rHKu hfaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808061; x=1786412861; 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=wpWfveSHmhLndp7WyhzOeHb/aYZ1oeXtiQXrHkx1fpg=; b=bnHOhCRSGPKliGImZtLjLYLuBA6YW9apArJEhiJcNwVOZVv4bsSecBuKxY+n/HYPwp mapynWF1CnUpXbD9tk8tk9gkSIdqGeIxA+SjLpE9iCmS3SbxHNBgmRhfaud6StO+Db4j ZofosgunM/Xnu83/g3HMLJfeJZGMgNcbdFO6hZkf8kUyPlXzndoLvRNBbvJCpIQGXDto JDKV6lNZueXAxBRe1eZaBY+blwMdlYcElR+00PvAjGIzLlaMGHHDNEpgduEFgOxw+68C RLVxhZpsPRtpbk8GkOmq1aKcDjyWo/AxXFcv2obE80n0WAEonx5aKbIFOqIm/QLg1tTn 3Iag== X-Forwarded-Encrypted: i=1; AHgh+RpcDFlrykuEb4BC7Vv0M8d9xCSn7B5jSQbtpjPaAh+KxsLH2gyw3dLsuNXAZ5UwQrquYW2uBq/phvoJEKo=@vger.kernel.org X-Gm-Message-State: AOJu0YxHcih0XrIf4U75lOBEQPB9OA0ZNPiQZs3C3mBNI1O0LkpI9i+k fn/JMsJUmeZxUpj4bbRVM5p3zWwFSyqrvAuEG5S6SV+CSUOIfm1tDE1q X-Gm-Gg: AR+sD10KJ5Ihoi5iOtauV6IVkgVKId/1ZeiAz8xbb83qSUIXELi4LBOByCcOQwlVe1R 3LYLBhw5TOLs1/pxYRB0rJjeu9CwGegtNb7ZXqKCH9sLzwqKs/cF4A+M2VmhKIzfViNmUYWz/W+ IjsbFRzlkug63oxbl9bzAIm65YmSgt4/acCgvGcZJkdlcouJdCYIeQ83UhYYV8iUV5LqH9mCt3X NDEUCD7Bz8/0ZlcZGEyoqE/uReORhuSif5WG6DJvEIFEcrSXFLmDSudkexevYKV0DjeA4eqUD0c aejhpH/NPh4+pz8w1pzQrIftkRt9zRMHJDVneAhSJt06ivsxr7QqLatgsw5dksC5jpi63sN6QsH lKVwORy5ZA/mnjRZOz5tgFEG/55QYsp6JWKm66dWzGFDLNDj+cjX4OWAvWQtK6pgwsw2GWeLK30 tlRV1qtCS9D4tueNCUBJ0sfjrA7Onv6yApNGqfsSMCaLHfErn/vxVm3l9mtyvndkZ7S3CbVQj8J d/A1lLN6F6PCrLJka5fovrQ/J30PTtEbRFiJtirqW2NR8P+XD0= X-Received: by 2002:a05:6a00:4518:b0:848:637a:4cb0 with SMTP id d2e1a72fcca58-84ee49ac188mr10538511b3a.60.1785808061205; Mon, 03 Aug 2026 18:47:41 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.47.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:47:40 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 03/10] ipv6: record the reason for kernel-initiated route deletions Date: Tue, 4 Aug 2026 10:47:07 +0900 Message-ID: <20260804014714.4362-4-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (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 DAA512F5A0E for ; Tue, 4 Aug 2026 01:47:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808069; cv=none; b=CLx+TqHIhljAX8dtGumw+6UG3Uz1jJ+a75BybXlNprrJuG+KyWfac6VY6eUVC3NxrXtO8vOtiyu//OGUMx1+ET4Ohn1vnJzLpeLAwCk0f/MSrCF9QU25u9qgnAmOCQSoqCISTp25oYcMqCFZg02qLsiSLEGrFZg2KobOQM80gEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808069; c=relaxed/simple; bh=f5iPNAYIyJSTNkvHBBow6IJ3IWHzS+d8VwQ3xtwEm28=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k1tXY9imfry7+C+TUVN1+3/vSMcybx+o0uNnfj/RcXgeSvsNl27Jq4DkKl6QfrrVx11kMDOtJPrvJo6TPZv9Tv7x/vnQf5iZAOi0WvlcNKmQOSmpVGtKDMk6UwuE6hJd2L2p9JNcpuVQ8IY4tfZsJkcxBDTK/F/SXNqRxtblDx0= 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=XXKM4WEO; arc=none smtp.client-ip=209.85.210.182 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="XXKM4WEO" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-84536ecfc5bso4743059b3a.2 for ; Mon, 03 Aug 2026 18:47:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808067; x=1786412867; 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=dY62WD4TU3Z29Lpr2YEceEfxUVbEPTovp2j+MS49Yco=; b=XXKM4WEOUxNKfgwl1WcakjZsNRVcKvep4CaBVlFsrL6LaZ1bm9R/B8P14QhABdn1hl uePZ6vk0l4GoDMRSomkDAP4eeXyF0nDXzEn5o5xjbLg8cBSstr0T8g97GnwBrJTT6C1m orjr3QOwgYIzLYPmusyrCEsKnvifXQRMOdm2JBLYNRspNeCnSB1JXsM9Smd6OigKi5ZP cV/czZcDe+7L9iSkMm/fatS0xuRGSo4w5xmd/45preJMdK4hOhmFiWZEJZdG/y9aqCJx /id3BdkF5Hfbqzwo75xyFspXG774yOe0ZCxB20ccMAeE/e5cQ+m4VPE0vqJuHZsrpudn Xjuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808067; x=1786412867; 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=dY62WD4TU3Z29Lpr2YEceEfxUVbEPTovp2j+MS49Yco=; b=FSxIt+tSSSwnPI0Tc0a/F/QORTSLbwBmfS+p0TqphiF3KZhQWqCQIBMPxscPoiEbiE T0hlloT7GwVnzZO3klVJm1n+jWa0B+FgwvqjPHYgfK9ybxhauQcNfo+xjBIXAXjDKicZ bPxPOEVN2605xFyYG14uQh/NmSjvaAvy/swXXbS9CQYCjj8MtDDic96e+ycQuO6Msfsn LGwo9O9kVt523rajWwusGPLfS0gtl9lK7PGvRipZgIZPd7NWEz+hJzht/d1xiM0xxIoj gKeuRHQ3/MXM2DmGnQShwdFa7S4s8AQuYIax+hHpsNyZKjsYmqwL7qQU2cwzP72pv8BP 8X6g== X-Forwarded-Encrypted: i=1; AHgh+RrBUElGcrpLff3xCia8RYHftw11e2nOi0ZWe4WgpXOptsIgLO1Ad4oOYhzQMUNgsCLgjrflOljQHfYKUII=@vger.kernel.org X-Gm-Message-State: AOJu0YylHqRI/QaWv81Q9/wzFAWdDecSuv68q4+lJW9plEHGwDS0jIjQ w8No2nhrwOIp59nbTdGZ/AIi4YXKA7cNeuejKAyCyV9kPgJH/l6cZe60 X-Gm-Gg: AR+sD13BkbTFa9jSxZPcuaeZs3kpjDqN6Cp5m2yuf0JqQ3hUU7Ljbk2fZGMLKnGGTeo VAeWmh0irqjdgfkQgoXhMOy61K846qKZRBnLjHJ8ICo29lZEWkfZMvuqRjoAEJez/qxKU61lCeO k9ev5Wym8TtmY0wxtTLyPokRi4lulAiMHajn5BcOmBsVpZ3X0pM0f1MYgHcrRhws6alA52XNgVK 2q0rcjJ6FxWPqHepw/odgf3iYfsMg/7oboQ0PKmCrrAlzoCUSIihT3f7QWGUqMVGExYmqoZW+tv LM0LkKJqHFK63x22ECp45goTeNpBtLmPAJ1HJpfl/46uXBbFfo8132a2g2qgufaQ2+3XWQyyDPc wNigsqfOB2xkMUJmOGHrzVZGs7BWfn/Y1d6N9c4ZBA1hp7svm4fSAwTaIcnrPEJbsyRS29+aXX/ o1mBTlysmOBnSSknfjVnaceQ9HUyHc5wdE7w245MhWqUrlgAqId3K14lUul6z7/zOqtNEJbxAoQ ucB8msEspaTiL5sVCqb0lxfLOtBdcVrqCxgop5Y3pilHhGmkpI= X-Received: by 2002:a05:6a00:429b:b0:848:75a1:a0fe with SMTP id d2e1a72fcca58-84ee485ac05mr11064217b3a.18.1785808067164; Mon, 03 Aug 2026 18:47:47 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.47.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:47:46 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 04/10] ipv6: add a deletion reason argument to rt6_fill_node() Date: Tue, 4 Aug 2026 10:47:08 +0900 Message-ID: <20260804014714.4362-5-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 047C02F5A0E for ; Tue, 4 Aug 2026 01:47:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808075; cv=none; b=ABXOwb2uaR66risi8moI+wu1dEK7fI/3kLGKBKiBzlYCoYYPm652YoHcMvMHB4cxD7QOwiW6vdrau6lMuzzjjQWsW6NMMd5tiZnRTQdD1x1pCHu4YX4BNzrrcdG3By+wCPrGEm+T2RH2Pu9LUKeBfvvgVxVOzV6+QTBuw88DWxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808075; c=relaxed/simple; bh=o1eLQMEHSaO4J5F9k7/YliUZtUTXMI/llAbal8afmHM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dCZwjkFgd/G7iCNBpSa/US+4W6ws1pz6rcpS8RWRHLwMxyRIw6rJaTpT3rUIomY/Ke55jNQZPnFzr0tyxIwJFcNfGzYGK/SHQGTg4FGvSs7bETwcgvOpzl734lOSjuBPNf3SutfSVxDRvda5VJR9gEORXVQ/jbHCQZaSolaP6IE= 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=Uk1dWEOQ; arc=none smtp.client-ip=209.85.210.175 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="Uk1dWEOQ" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-8487214ad2bso5679229b3a.1 for ; Mon, 03 Aug 2026 18:47:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808073; x=1786412873; 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=8L2BgXJHdmrRxQEN7S4xlJQ5TE/oB/hO2agIkDxI05I=; b=Uk1dWEOQ2PSRwLvSnfaelB4IHyMD1Hnb9+GoaDC17pcnc5Mpk4xp87CYhHRDuMySYj HYtio68SSLm3nElyRjWmVVHtRQJjPkQWDf2iHX0DtcDXsRbrJA13nZuCB3GUSnYlhj1y spYAhKqzWLp/xbUL+xJfI5/L/g8Qe/iOmcSSiwmYB+uWJ0GhPqPHi/eQBWGdWhzwiwVF zZGaduaUHDVsOsfQmlOSdbPv1vDRzRjZxf7gph3kLQi+zc9eHP3FCze0o2WPuLlipt+X 1yiLdIXCmw3B5FntiOnJHL8u5+gCHMdHNaJr+te9OYuyoNzRnYXb28FHKedRrOSNWb0L gk6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808073; x=1786412873; 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=8L2BgXJHdmrRxQEN7S4xlJQ5TE/oB/hO2agIkDxI05I=; b=fxHH6+S2vwWjCPyd4QRWhmqgcY+oCB+haIJupzLLj969HGG/wTkd7MOdSx6ySEIRRk 4cJsU6bI8+LSDmxAaKHf01IoAp3rVrShDjwxu5LGN4doTPAYMfk1OuH12ysZYWN3eW13 h6HsCK+x57LEDdumd/8jZujuSkguDX2CoZeh6QktMGzWDO4ro75SFfau0+1DYLlx22oP VbRCIUfO55ApVmN9IHvyrYxt9j/ovtFbXDPs7Eds89wpQbzWqRIMSS3jWUNW8SeAaWEb fKwI8to4OzLiyxaW4mK0bBHVXX568cLRkHiW9vWIzr2Ok4QHhtgFwyI+P344FQtmgjul P1/Q== X-Forwarded-Encrypted: i=1; AHgh+RpbE7CYPUrWf4I05JQb7D9crLrtcjUPJqiYIAG0f6T4VcqreYmvyKMJwhIQUpJOHpKGDb9+AOtssda180s=@vger.kernel.org X-Gm-Message-State: AOJu0Ywf0PVDhQ9zMtwtnbGY9K7TQZGPw41EjQjbRrNtSB6jtF4FSw6r iCifAYCx5Mkt7IIlTWIzI4yLkND+NnIdH6NLPhrf55wMDE7NPxYh0nIc X-Gm-Gg: AR+sD13fWxKPBNmx/pBdfkaCxVeXteDNtftzZLM+I2p0Nx9cOanUz3HbrGrIhBHv82m E6C0b4UmOzQpT87C1st2FyORZAfLJgFOzO+lkxBDICQsU/POKx4g7f9rvfT78tesUozo92X47U3 0Pzs2Ro0xfZpVA62ZensE0zLQwAm9k1BCMunKATuuH6R1C21UTkPrsgkqYnKAF+M2xq/jZrKVJ+ Q8fgTS58CiTC5nMT3Cj15LddOjtkrQFK1xe1AawQOQ48qNE7dFhb36S/kPZgsrQYmE7yebXBukG D3mUFtAvjiNrVvy2R43baGZVMUkrEiicCciVSqRMm7aS0UpMkS+b2ClQKBlJsI3jq6jxum7Bo7c ZvXOThmqAs8AHZnzxItRuGZTtUAW+Q0UPNAYdBee47uaFh4uQCrdePc807GMn0QqGCWCos4fXE5 IsjRhkeL6/WySEdbQrMqCy1xLol5CUzExBq1w9Q75+GJksXHACkK7QDTF7MWdhlhfRZ6FAVWehF 3sJwF5jAp/gzfurmnGqjOYgYqVRmSrt0eOVEmdd4XVNr1WXbYF9 X-Received: by 2002:a05:6a00:10c7:b0:848:367e:ba48 with SMTP id d2e1a72fcca58-84ee4920b4cmr10995404b3a.45.1785808073190; Mon, 03 Aug 2026 18:47:53 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.47.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:47:52 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 05/10] ipv6: expose the route deletion reason in RTM_DELROUTE Date: Tue, 4 Aug 2026 10:47:09 +0900 Message-ID: <20260804014714.4362-6-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (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 D84DA392C25 for ; Tue, 4 Aug 2026 01:47:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808082; cv=none; b=LzM5v5U9fe/aoUZ8oxux+9l0laH9kFIg3o1wC35L0ZNxR4/1LxaPxpuhq/C5Vk4SCb1P3p1emZH6AfnwedUUYXA7hrijzWYF2+4eBlExV4jAn3VLhp0JJQuHUXsviffH4FRmS+5xND2eNd0lrxxVF7eIRhg3hfNca+Ema1dt8Lw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808082; c=relaxed/simple; bh=4OqBbZ37IXEzg2TO7BOGq5d409xbe0y05hAE38ugGOc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f79jvoccWOlUSvjkPSxg90HtA8LWvQ6/ybGAk88mscv+ZOAJCIoY4hLupmhBojiLKm5qBOC6pM4qQDedL6rgKVcX8+Bac0EkXkwzw72DFix+RWgZ1BqW1WnFGJtRLJvsbZEDJAk3r67eXynkbYHH4QEtGP9hdBou+KRYrDKQLn8= 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=iKhK8TyM; arc=none smtp.client-ip=209.85.210.174 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="iKhK8TyM" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-84e27035206so4336387b3a.3 for ; Mon, 03 Aug 2026 18:47:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808079; x=1786412879; 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=BO9P0c12i8oOaunBK0JGFIWu3k1uuj5sihro3agFJaw=; b=iKhK8TyMrQoVGGbRhwtU7BkxgTxaWHlaB3D6Qr0QrsaPivxNghy729vbDAjaltQEN9 R6JRGmyx0Bl/x7vJxCgLqH7PrpIPqjuowAfJ87bSsBG6DGg8opSDieuwkTrW4YQTdfxI RENZeUPzQE/ovsByipRrt23nxUgIj67etQWco3prDl/n827ArsDdN5cOVGxStrNeZ1JW 6ivxzue7BdxvPXQb0sURAivEo4+N4emuGpmIZS0ilfwc8aoaDcal0llVaiJ19nfA14dX Wk1jZtgosuYex+KT6RTnvXyZjsQV2kbPSgi7hIfubXv3iGxyzaBehP6Zlsu9pik5xi5k KfSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808079; x=1786412879; 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=BO9P0c12i8oOaunBK0JGFIWu3k1uuj5sihro3agFJaw=; b=i43w1lWWoN7esC5wwtrOeJedQYO0xRNP2GjyCmnqJ/dETzpTzdaUnIAl83X+rTKKDE 3Yxh0pIYv4YDO7yBWZKGaBsGmYd7uKq6v8rj0bfCMi8oLAb9p3jkmb0OK5/Ii1OyujTH KN3aLHLobaGKQxm9MYNYeKFiooGuiJUC8WqrPHxqrrINgTcOH8Vvq+Vp1XqgOphLKLMq Rg/0vNCLVqKh1FPAiZssuYBVWRz2pOKfqImj+N1oaiy+RZCRSv1656XKXxx8CBYBDhJ/ 8pH+C1uTNtXI1SdUC5D+GA6v+ipPO6cwR2UGe61kFexgeGOEJA5RN3YavIw8VP0YHKIy nt3Q== X-Forwarded-Encrypted: i=1; AHgh+RofaESuuLVYqjPb6cutBd6BMahSKRHWO9lX/2cQ1+ntUfFPNfGwk+F/GoERlkuWInwDFJcX0oyX0x5vZ40=@vger.kernel.org X-Gm-Message-State: AOJu0YzvvdtEkaeUqZEdvwkPzDqCHJXq59AUhMhB8twsZsg8vag2jh9D 6+9IMv/8z1n5pcvOCEFL5OM52mhRR6k9wc2UIxDgtmjnJ5L+5N/293OR X-Gm-Gg: AR+sD112tIeMgjEvjTzx+YTmwd90f2pIaWyXXxZy38IqcxbvwOOPI/jmT1JwhhSVNJD cuK2o0oSvBsf1tUR1BaKC7WdoqBglhvkIrhqpkXFDpChASJ+IZEiT5C+CYyMATcMaIA9f7HmK47 uAttA5zzlMDMgR2EqM1v7jotDK4c10ISI0yQNblDyBsESFw6zbjb6Qvj3w7ZBdVUWhLpZXy1HM3 A8ZLlyRWmKmPALBGfLy8cqQPoBFUnPqRyjtxYJaRvrQHu5moj1HVxeUFGAzEorVAAZufZzo+e1R SYIg4JN81h+h4vREljTxyC+efMpWYCiHvBaIyOIP4pBo9RYRNXTNkEAHNPXFtWHjwnhlNdyB7kU n0tsMmYqnd+wBWSXhzv6smrfCRDyxJP1Wrxi1L3mOf0psZ5zvthRq4Oo3LHxMCDiV+rn70VUlhZ beeVU6ZA8oMSDA4CQ7ANSm9kKlt/tAo77cv0CvWFyVHbT43/PTmvPsH89FmYbcgpO7kK9MaxYH6 9PzcxL2CU2kEx9aU03hgXvp9yX1FEMu27i2tny0fynUhjagCyI= X-Received: by 2002:a05:6a00:c94:b0:845:4cb5:2343 with SMTP id d2e1a72fcca58-84ee47ecde4mr12278447b3a.19.1785808079122; Mon, 03 Aug 2026 18:47:59 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.47.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:47:58 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 06/10] ipv6: add inet6_rt_del_notify() Date: Tue, 4 Aug 2026 10:47:10 +0900 Message-ID: <20260804014714.4362-7-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 8F7BB3BBFDE for ; Tue, 4 Aug 2026 01:48:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808086; cv=none; b=M2Yb/FLfOZrtkFLuCEi13LM+vc8L/8poBpwHhS2IrrMxUvbYxgD5wQniTZbkuTL0OkgtBPHmbZ8E1fO9N/0DZCgwoNwSOPfnTAoDCj70nonQ0MO/tSybFlo0i2LxuvYm90HysBSHzEfZdJyUXTHNU3mFHlP+k3e9xMqtujRyVIk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808086; c=relaxed/simple; bh=B7TewygujZnaDoAvFCdYw3/qv+UCkSEJvMuQcq5Qjm4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kbK4n6yAUY/Bc9MzLKFXti++HV5wPL2CP+7LxfUoGMtHaJE4nzyBse36reN+JywZqqPS1DNkVTEro69T5Eke7V6mBcZ83QqsX51h1KWu4q66R4kjP0GMyUOvvxBDMLHz4SLwIE8QKZB79AYmtUVFNtF+1yTw/2GjNfucVAf1CZY= 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=UxKakGrA; arc=none smtp.client-ip=209.85.210.169 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="UxKakGrA" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-848595b338cso5096478b3a.0 for ; Mon, 03 Aug 2026 18:48:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808085; x=1786412885; 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=UxKakGrAXK+srhhZ7fjyBs5IDSMnp5r+YnxN43B0IJziyG6VhXvAwso8rFShH2FZuZ uShlAXaS4N8JSsxaugTPdL/VwZZ5KC+KDxSUiUknhNmENx1Iqig6QOjKdikfUlea5SaV LWicsudki4ZBMchIQxmPpnd/l2KhU6SDIFZFXSAkNO0Lb3KPzlkX9CWAZjQvXGmg3swd ss8JKOE8AqPJ+qpWnmPOyiuGJwCedNuhYWT2Jb/DL9WyqoPBu5+em5b0rzOWnH7o+iK3 hJE8mSH8BXYsABNz/YQ1vTDwRcJ2o/GaheVu2VnouJuijnFgKqS6Dbz48t6ibgw8v9LM dw8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808085; x=1786412885; 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=ke9xvjmvXAtw2DhPKYnr9KKBXPlH74foC6P+Z/uGoYr685iuauP8TMhx+Yb3f6T3iY 0WuXUmJ85uXd1nZ73WI/9prE8tXIlLFUkOTEFhLZGzVv9oZjNE0k0m+iHiprK4hel0HP BqsSMM5nHNlTjBuLiO7BdU00aYZ4EioxEOXmzco5yw/3IlkymYNxvCgqfaf0mjrICAho eea9gO7tFxqdaokt7UFf7lfVMOM8iGvoESMIQXxH21w7NJiQwXDw5tIrOEtwC+4tWhWG MQpDvP+sC/H73N3D/J6actgJCdAbZyIpzwwuxlskyoc8IO9xdIj8oHRQ8XbMjB0x4GO6 7iWg== X-Forwarded-Encrypted: i=1; AHgh+Rru7FfoDMFPHaTBRTk5/0km+Qi6XQYJsAdsKrNpkBVrh/feF+3LufgUlZqgqZQuiCKI+LMhX/EggNpROqI=@vger.kernel.org X-Gm-Message-State: AOJu0YyTFW6jpqb+RQc/okHGLoUEvrjAmQmtuW4E3G6BI0ZlzaQiBAHd R8vIyPFH90+yypUlJSj3WafmA7LDatcBaHticxIBJ0mCcjDTQPHYkYmH X-Gm-Gg: AR+sD12xkzWapGZrRdMoQpPERZTSSiivDN+ZvzVLJvn4XcjjrVSeQ/SvnKsR8ud6PCY B7JvCAjdkc90L682xjujPziGZ1uyvcyXO85slp96+1CaC8MsaVsvD3HFdWqryoF8VqvXiQeQUIy Uhc5018RK7PCUFU+ZLrqFH5fNPnE8hjAvRbW4f8RzI7pUgrZ+vbBqp3G4UXUDKybz+3h1uKiHTc yXl/CcELjHz2zw15xeG8PX5uG4M2l081p1msHSHuHxUm6QNQiN/+vd0ekWIwiyT6o1rATR8fhA9 53yvieoaMCNvDNYFB+gBYnLevXbAsFpQTLRRfLYSrzqsbm+kRF+JOCdP7ZBvO1y6MgRmQCliG0i FxTKWTUp4Z3g1em9/Ri4qivTtCxvPdhDgoDKHUGY57rlE203fedolJjKfUxZq+5XdW5PwaaS+3i vh9GoZLrd9KurJ5yNSuLMFVIucVoeysXzezUJPZkW5Cfu9ySNA2iPTsSf3oEsIh3JhMDYVLlVHd w0NA7aPCrrX9AzT+VBMq6IPmImiRifhH5IkE/lLCDeRNTo2DtM= X-Received: by 2002:a05:6a00:1488:b0:848:30fe:da34 with SMTP id d2e1a72fcca58-84ee489a8dfmr11000766b3a.45.1785808084960; Mon, 03 Aug 2026 18:48:04 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.47.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:48:04 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 07/10] netlink: specs: rt-route: add route notifications Date: Tue, 4 Aug 2026 10:47:11 +0900 Message-ID: <20260804014714.4362-8-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (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 8BBEA392C25 for ; Tue, 4 Aug 2026 01:48:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808094; cv=none; b=lXDhw2btLejOUimdIFKKeF6MXWsk7Hs1CgVAwEpNpkr4O0m/PS+nQQGNP9y5msgV1Pe/bZn2QBiPmRumwpwtDNG+ksQenm2CmivzRnndjYgnqTACKgDUT2mFZyzSSIdJnSfEvnsj6AhRfMgt+5TnJzT3ZnW/73IasX46rFobxnU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808094; c=relaxed/simple; bh=/1aVlWW0aqZciYFSw+AOVrBgxkbF7Mvd+1bStEYFWQ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R8qf9OgU3IbnYxkuJYAL1EVGa97dMgz+OwwntDdrbFsQf/NDZgf4wT0G1BdAMGCjWg9QX3qoBuhoSl1vQeEkPspB6dBhPa643xR3eN9p1wrwrmX5mKs4HER3GpAYGcG5UL9l95cFyNdtrpD25NglS8lVEyr/+N23N5j+mDQM6Aw= 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=GtDiJHQm; arc=none smtp.client-ip=209.85.210.172 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="GtDiJHQm" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-84874b52eabso5429192b3a.0 for ; Mon, 03 Aug 2026 18:48:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808091; x=1786412891; 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=GtDiJHQm/bFbpu9rUDpLcmlkqztxWEKdfxzGLu7qbDVcTiMYKPXCCgVf0jtu2KlDEl yFGOzqYt6LdYHqRHSVbiIj/SaS1jtUR0rZlFl1R3Omb5aWZvb0WUgjB2CKaJsltxq40o 3IerutTBVBRwl6hD6IGQyN60jNEm7Yz9scVHOIInyG/5mp0xsbpWe2dotXNk4ZKWtPcn r2oLs1uxVnmTbnyECzV4h/tfUuMLC8DRVKuNWPCjfIKX7RzkpuINrNb6FanTPnwAK04a +OPtPu0vJxPHWYAzNyhWtNeyjPjeIf5/IQVXrXRiaf4weXsH7G8DdgmTEu89lLww2A0C magg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808091; x=1786412891; 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=TXojCOIVq/SGHKIEUmZLAOdvl7dXFenHTk5JtojRvWuJzDcXC3QTA9Xoo2KtL5mp+Y XCAAk5YJWznHvFeB8V8ZnZPCyHJANR8aRsw3wfMiWPbinpZhapzsz8154PNvkKkZ6ZVX 3/9R+ekqlY1uS6dC6LQfMnhn0/D4nKwZyxx4/Pb2fk6knREf7nnKWh2de7jHDMGccb5l Uf/kN7IAOceOT/Vj1gZxRzHlmA7JDw+C3mq8kVBwjmHWd+jGPUcRYloTEpalxDvlsKRp +i1nHeCqJJ9Ygov2YttAEr2QsaPzyT8C1LF4PUpBPoPxwEeQNFt2LkR/7YBgBNpwR35t DVeg== X-Forwarded-Encrypted: i=1; AHgh+Rqh2tU5B7ivDmVmo2xZV7LscT3aPNzzUzAf8Hot1tRxItSGuoxjZ5NiX4sGqiVkGY+IlEdsV5Dn7E2ijKQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzRFSZRjuMPzWWAQXFpWmp34+E7jj5djTgL6xzEieH9qqVqsJon fATfJJFyBk+2JrzTYIVj0d7xjQRvMJW2ukEaX2G4xO4nAjX9QR+SNWh3 X-Gm-Gg: AR+sD13V900NrF6Q91JoG0NeFhJtKfZGKRumWnaf2cPEPvoOZfp/+5HolRZr53pAmUl aOPaI+1PMBcPz3T/ypXi34ycl4t8f4O838KxWNcf/T/rPz2tquXMuQajZ58+RYE1Apyc6gej/yH aZ+ApjOTCMEHIFGuARs3LKKODt3EYCxU/B7+/6Up5ouvL2YEZSeAjY4H3oVz0zGMwHGDqGuR/mm jDIrmOFgOGury9PgPJ1vv8dUsOUK/vcooGs71/zvLrI+/YN+QLE+zTlO6SqZ6Jz3VgiDe8ErzEb dfmV+YtcBln+GcxBZkBPikQZcezG9HPRAWaeqXmeAoVxpSQaN+xJLT+JLn1kBWvv/pBA9q8NHlf evOUNtQDVdvaQ430vgxxb0oRBLatvmDQrcu7rBdApj+UYBr4Thuhfy0j+DbPn/zSkUIgiA1pjLs LkrehCIRGi1lKdvbO/qgUR58kkSgWUViCWlSL0Wn9MUmypRLk4s3mRxcGPzVOhmmADzrR42xMKc xINVfpGY50NoD0PdDHdzalV27mGLHl0LxXWhtK9bCVQZyQzoaw= X-Received: by 2002:a05:6a00:ab0f:b0:845:4d71:8d15 with SMTP id d2e1a72fcca58-84ee4921bdemr11575444b3a.37.1785808090858; Mon, 03 Aug 2026 18:48:10 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.48.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:48:10 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 08/10] netlink: specs: rt-route: split out the request attribute list Date: Tue, 4 Aug 2026 10:47:12 +0900 Message-ID: <20260804014714.4362-9-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 Fri Oct 2 07:45:41 2026 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (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 9F8A11D5AC2 for ; Tue, 4 Aug 2026 01:48:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808098; cv=none; b=go/ARf8knHFymnGK21tfyNYsWqFV3XbMFIarw3lRTzyFvLF8GJzdhAKqjEqHwIpUb+wJz/WJ9k9KLhlxgW0Z04mGVNLilh+rndP2PjbvgC17x7gmaHVElPOLY3L09OD9O4D8ArbwcbzcDOA+QRIyvvEapXAuM5W3VW/ZbKdmu50= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808098; c=relaxed/simple; bh=uoRqyxiUw9LCurSdEf9hIm/MOgPeemDa9zCCwG7QUiE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H3nRJuUqo+pL9F2eKq9ug+6dROEk/dF83mq2LPP+2vMqltHoRf1ZO8wIc9aWYF+KtzKPhjJ90djHw6H80p5XLCLeetQs/83lnj1o2+Kdc5rHG9V0agSnJAu7CIHq80H9Gx6dMUmTE6cNJ5layCfLdKczS4psEvWUgLXVcn0yJWc= 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=D4crGZx1; arc=none smtp.client-ip=209.85.215.171 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="D4crGZx1" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-ca766c1c9ccso2321447a12.0 for ; Mon, 03 Aug 2026 18:48:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808097; x=1786412897; 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=hUtJiaQMigx86+BTH4O364XnmOj7lYQYaBG+rEXNuhM=; b=D4crGZx1muWeCgSFPBkDeVZYFB+XQO3WdPl7YbtJI8ydDA6MFM7i36drhbYg7eITNn GCP8Btf4eFVn6Pfi7B02Zdg5g7BctUZcE3xrRaFilscFcT204DNfsH7ktgSTIjTyO/Eu LE8WdO1p7CD16M8K/cohwXdoquUAu5tri6OJycTO+bNeY1OY39afMAHHnJnA35sYx0T5 rRQq7NhT3f8eiNElDzSl1mQ4XiUQDIj1yEvJcTJGETvIU/q3xRE0osLDPOwJhMP6/O0Q cblDLO/5hMPpTLXywtWdLIopDwIA4K3hzxm8o4CyOejSdeFrxq5GHrT1ZL5gvwzfe8iK WXuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808097; x=1786412897; 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=hUtJiaQMigx86+BTH4O364XnmOj7lYQYaBG+rEXNuhM=; b=YG9ezn5hrkeC0x7CZQ5cOkJXTtCx5flg2Nhsq4RWWwVChJheF1QwNqeUjf/Ju9HWd6 nBdHhuarKo/PxFdNH11naLNKpUXxPVy+WTbtwmmVqUrQd0ZxfD4ec/0oEYHcPYhnhMzT PuwgKgMQPbLGTTIhNi+2F65S4UeA/0vy9W79DBCSF0E1ZYRw6Rge4UJ/dglMZoOBeh1B EbUO8trqJK/lI/8aYifqTPbDvyYVe3UZQ6b8nh6q6tTd6UB98uJwyu07BQHaYsNNHZxN WGWd6h58irOb2Pbh8Js4Q32JmZAvnAC67sQxzkhZ51J+lpLeGn65l3RuDFaf262vfcB4 tVxA== X-Forwarded-Encrypted: i=1; AHgh+RobeSGm76mjXFYrNIEwKplHrB7XOO8BklOHH0DcG33E65vnPKeO2Ay8KM/3KAti3GjF8icYs6+uE/CDhQk=@vger.kernel.org X-Gm-Message-State: AOJu0YwgJaVoYtZquTAyNs+RKt2IB3WqCy8A6EIDPAHpudqbRrpfwIGV UPrgwR/01xznBt/7ftRVE5L7skOYw9uDqfapdE5bvqO3gDzequsepkG/ X-Gm-Gg: AR+sD10lBXf0yDG+dIhAkO827KLl/Pandf+Lla/kbFK+iXqWvJUqk0qf7E7vUq2rBwH cGyRyw2bo8C5GUOZd9qnJTXPe9qdUly5Nk9xA2+tMowx8BI9fvk/UUlhO27fhEl4+dWEZtlRjRP 2uZ09BvMeVXvdVzNxfR8pymyhv8c6JimkVhjh2qE4BlXUbDnJ69kqcDL9YqzxNvfkgQcqnLpJBy WhmwBLBaMEisQ/eYsLLdWXTQ3b6gSA+SZWVcvn5kxm85M12OsDhuSWWdfXvn9xiKon0a8LQXpGF wwuFbmQAloCfaeyB3ZgquKGUpKjsC/XLSwYSdYydtRENSea0GHGdrOgLMCXn6el4J+IcLKAtU7U X5Qjeopgm4k83yXN6Ihw60wIMjha9oq7+MC42dawLp+AFjxroh17KNOtuLL0HcBHG6m8G2UoWyj r45JTdWcVPk8QhoirRBlV5MS3FiSN4PN8JPOp+77gTJ/90S18CD4i4nX7JGKv4DP93ToDEHXXBC ZFvCoZGcKteMf7WuV6O+CbD3E2KTBKp84yO1LK+rLDMdtirldK3Zw1G6udkVg== X-Received: by 2002:a05:6a00:951c:b0:842:6a3b:60d1 with SMTP id d2e1a72fcca58-84ee4865f9fmr11371595b3a.31.1785808096804; Mon, 03 Aug 2026 18:48:16 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.48.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:48:16 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 09/10] netlink: specs: rt-route: add the route deletion reason Date: Tue, 4 Aug 2026 10:47:13 +0900 Message-ID: <20260804014714.4362-10-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Documentation/netlink/specs/rt-route.yaml b/Documentation/netl= ink/specs/rt-route.yaml index 9f4a1a253676..f14532798640 100644 --- a/Documentation/netlink/specs/rt-route.yaml +++ b/Documentation/netlink/specs/rt-route.yaml @@ -78,6 +78,15 @@ definitions: - name: rta-used type: u32 + - + name: del-reason + type: enum + name-prefix: rt-del-reason- + enum-name: rt-del-reason + entries: + - unspec + - expired + - ra-withdrawn =20 attribute-sets: - @@ -185,6 +194,10 @@ attribute-sets: type: u32 byte-order: big-endian display-hint: hex + - + name: del-reason + type: u32 + enum: del-reason - name: metrics name-prefix: rtax- @@ -299,6 +312,7 @@ operations: - dport - nh-id - flowlabel + - del-reason dump: request: value: 26 @@ -313,6 +327,9 @@ operations: do: request: value: 24 + # del-reason is notification-only. It is above + # strict_start_type in rtm_ipv6_policy, so the kernel rejects + # it in requests. attributes: &route-req-attrs - dst - src --=20 2.43.0 From nobody Fri Oct 2 07:45:41 2026 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 55E393A5E88 for ; Tue, 4 Aug 2026 01:48:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808104; cv=none; b=mzP3/D4JVFSM/DWG1yuPPnM3IizRSnKnLhEe+42jTl3YBXfWTAyTKKP98Q80tkfM55qPLW3HFj2MXJaFx3RQF8AsvFTtzeM081UPP58ukIgCM0C+dpnFonEo2JHjO/rcdjwvvIdZnHxOAzuLbig+G97xOt7PnfvXIYtEynyv4lw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785808104; c=relaxed/simple; bh=O1CQFr8gL/tx0nZELxNaajoTVr4qy8kYNkp4eOn+3D8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GfD9pnXJwjrbb+oLytA2xdviBDryFaayc3XJ1EDgS9IROj3bTsnlzkEs/maDBhDr7UJP0AwVnCRzeLAX1BLo+lSpGwsolk5WoFYUyn0ByLF4dMHXD14eOy4irynJD5Xgd63kWdq05lvhHV9kuBBC0w34RSgZBeetop5YYdvVOwY= 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=iFLd+eJJ; arc=none smtp.client-ip=209.85.210.170 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="iFLd+eJJ" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-848743155bcso1552362b3a.0 for ; Mon, 03 Aug 2026 18:48:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785808103; x=1786412903; 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=IfEzsYijpMni+dHKVnbyAeGeNkrEFny9SRjpkXNKFps=; b=iFLd+eJJSdtsDCGhSc5ZyuE3+2myHIMNqcNAKOwent4o570T9ECl0/3kcIkxKARVU2 yvoas6ZKzde4ZuedQQWKxxYzhc37ceUp8p/gpnMeQgg6KpzKqXIjS6uVpXOxtgFc69go MbYwvj1clJsKoUlifFjMdX9g9xOjespvjJv8b8KAu+EA7IaBPsHbDdDy9e6lfOewuCor 1CdO595vaN0kHuQdQIy+9WNE6b04yWDuGKyodGci1iqkVPpTEC94tkVjty3PkWdi+Nsm WilZvDCzQ0Kjs+lmec2X1TZlJZCevWhOE8QiE/LBxAxcuutwvfVWoF7CktE087UqPFu0 p9qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785808103; x=1786412903; 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=IfEzsYijpMni+dHKVnbyAeGeNkrEFny9SRjpkXNKFps=; b=QY7UaCLHEuwMQMwVGgMHcLlKbqhZANeDLrNdcLFsX4UPIir2l+FxN+7Dwqvc1vMWMR yzKE0CUna5CNg/sta1H/EeFABhPsJDuV4+e1rNVJHtj+yQA0UL/Cz9c3JmTX3R41+wNZ Gqpu7lfiQH5cijpXIRoWeA6pEbmtlwQo3FANSqmsuR4R4GPPDSGZYyrEtJvCEquCFdaw 2T7OFdo3ATdyRqUnsC9fb85tvVE4+wQsl7LpxckamGlwFaavorHFFtf7XKVvHQOj7yNv Bc0mcgxKi0bM/W+Nqwj/b5OtoafYMKrBb2Uy5M9IYLnuAWE1NwsNGCoA/oztUpgFWOk2 s3jw== X-Forwarded-Encrypted: i=1; AHgh+RrYnLMiP7tQwatEvlKhk36FtwhATlD3EL7jFZmqkmeKmj3f1FPUB96b8wYbIqvO3tpPUdnu9p9iKMj8Fww=@vger.kernel.org X-Gm-Message-State: AOJu0YwOofIyBbGkb00p2FKxUBc6H+4BC3r+slCFjHAjd84fBGEPOVJv 25Er6ZFXo4jZaj3AJ+crFTR5UrsbdbpBMv+3sttzMbMqzSVya2xefewl X-Gm-Gg: AR+sD11QGlrgEfJ9k+aqQ483k89/SfHy28EsRHssZuov+njbAUg+4MAaRWTxWsN3TdE rcUKhTBgj+bs0pzss1LHevgdHcgOdDl1WDIR/PQbxxAJx0BwW9lpq8lJtEeTTFR8U8OP9z9vJH4 cHNp4xxsJuSfTo2TA6av2niQT3BXiJs86nj2WFoCqVH1FUWZ+F/D15dTb+ZBPvBpXTt+PZDy33q DDZSwXi1qHIQ279/vePLBubcKbIJ16c3v+Iz349X+pe+cA1vyf5k7aj06L2bDOHwao25Lfrc2DV zsL5DI3fj2Kwk+Yq7zcl4uyFr2TyMJXakcrmvfWP1ZqWqKaoJoFgDdebBpehaK2k4tFkBXqxIqf b4x320FX7x1FQvaO+U3ZmDPQ0hPlO9YCZ573sg+amOud5MoBN3wiHgE4rmxqKFbQ6JbsZ270Y3x hUd+5nbE2PsnkE35rb9IKMNPayOyYLwkqv2CEl0cQNYi27Z53Lt1A8Ou9oPu29aixqj9QaNRzYG 2f4U5mnoSkti9ajtd/RQPJlDVaHy3u5uOkiFX7hQ7PFKPrpz4B37711sruYEw== X-Received: by 2002:a05:6a00:3926:b0:848:2e3c:9955 with SMTP id d2e1a72fcca58-84ee47e01ecmr10832317b3a.4.1785808102604; Mon, 03 Aug 2026 18:48:22 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:cb1c:934a:3e5f:ef88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84edc2d7b97sm4410164b3a.43.2026.08.03.18.48.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 18:48:22 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Bobby Eshleman , Chris J Arges , Daniel Zahka , David Ahern , David Wei , Dimitri Daskalakis , Donald Hunter , Eric Dumazet , Gal Pressman , Ido Schimmel , Jakub Kicinski , Nimrod Oren , 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 v5 10/10] selftests: net: verify RTA_DEL_REASON on route deletion Date: Tue, 4 Aug 2026 10:47:14 +0900 Message-ID: <20260804014714.4362-11-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804014714.4362-1-sigefriedhyy@gmail.com> References: <20260804014714.4362-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 | 181 +++++++++++++++++- 3 files changed, 187 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..f74ccd5c2d13 100755 --- a/tools/testing/selftests/net/rtnetlink.py +++ b/tools/testing/selftests/net/rtnetlink.py @@ -5,7 +5,8 @@ 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 =20 IPV4_ALL_HOSTS_MULTICAST =3D b'\xe0\x00\x00\x01' IPV4_TEST_MULTICAST =3D b'\xef\x01\x01\x01' @@ -134,8 +135,184 @@ 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() + 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) + return sock, socket.if_nametoindex(ifname) + + +def _ra_advertise_routes(rtnl, sock, ifindex, want, **ra_opts): + """ + Sending fails with EADDRNOTAVAIL until the router's link-local + address passes DAD, so retry. + """ + + 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 DAD so the router's link-local source is usable right a= way + _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