From: Yuyang Huang <sigefriedhyy@gmail.com>
To: Yuyang Huang <sigefriedhyy@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Chris J Arges <carges@cloudflare.com>,
Daniel Zahka <daniel.zahka@gmail.com>,
David Ahern <dsahern@kernel.org>, David Wei <dw@davidwei.uk>,
Dimitri Daskalakis <dimitri.daskalakis1@gmail.com>,
Donald Hunter <donald.hunter@gmail.com>,
Eric Dumazet <edumazet@google.com>,
Ido Schimmel <idosch@nvidia.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Shuah Khan <shuah@kernel.org>, Simon Horman <horms@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>,
Willem de Bruijn <willemb@google.com>,
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 [thread overview]
Message-ID: <20260808005642.26901-5-sigefriedhyy@gmail.com> (raw)
In-Reply-To: <20260808005642.26901-1-sigefriedhyy@gmail.com>
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 <sigefriedhyy@gmail.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
---
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_buff *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)
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 = NULL;
} else
@@ -5786,7 +5787,7 @@ static int rt6_fill_node(struct net *net, struct sk_buff *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 = 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;
@@ -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_skb, struct nlmsghdr *nlh,
err = 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 = 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 = -ENETUNREACH;
}
@@ -6388,7 +6393,8 @@ void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info,
goto errout;
err = 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;
err = 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 == -EMSGSIZE);
@@ -6474,7 +6481,7 @@ void fib6_info_hw_flags_set(struct net *net, struct fib6_info *f6i,
}
err = 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 == -EMSGSIZE);
--
2.43.0
next prev parent reply other threads:[~2026-08-08 0:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-08 0:56 [PATCH net-next v6 00/10] ipv6: report why a route was deleted in RTM_DELROUTE Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 01/10] ipv6: add ip6_del_rt_reason() Yuyang Huang
2026-08-09 8:50 ` Ido Schimmel
2026-08-09 12:30 ` Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 02/10] ipv6: propagate the route deletion reason to fib6_del_route() Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 03/10] ipv6: record the reason for kernel-initiated route deletions Yuyang Huang
2026-08-08 0:56 ` Yuyang Huang [this message]
2026-08-08 0:56 ` [PATCH net-next v6 05/10] ipv6: expose the route deletion reason in RTM_DELROUTE Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 06/10] ipv6: add inet6_rt_del_notify() Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 07/10] netlink: specs: rt-route: add route notifications Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 08/10] netlink: specs: rt-route: split out the request attribute list Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 09/10] netlink: specs: rt-route: add the route deletion reason Yuyang Huang
2026-08-08 0:56 ` [PATCH net-next v6 10/10] selftests: net: verify RTA_DEL_REASON on route deletion Yuyang Huang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260808005642.26901-5-sigefriedhyy@gmail.com \
--to=sigefriedhyy@gmail.com \
--cc=carges@cloudflare.com \
--cc=daniel.zahka@gmail.com \
--cc=davem@davemloft.net \
--cc=dimitri.daskalakis1@gmail.com \
--cc=donald.hunter@gmail.com \
--cc=dsahern@kernel.org \
--cc=dw@davidwei.uk \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=idosch@nvidia.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=willemb@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox