* [PATCH net-next v2] neighbour: add support for NUD_PERMANENT proxy entries
@ 2025-06-17 14:13 Nicolas Escande
2025-06-17 23:06 ` Kuniyuki Iwashima
2025-06-19 23:20 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Nicolas Escande @ 2025-06-17 14:13 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni, horms
Cc: netdev, decot+git, kuniyu, gnaaman, Nicolas Escande
As discussesd before in [0] proxy entries (which are more configuration
than runtime data) should stay when the link (carrier) goes does down.
This is what happens for regular neighbour entries.
So lets fix this by:
- storing in proxy entries the fact that it was added as NUD_PERMANENT
- not removing NUD_PERMANENT proxy entries when the carrier goes down
(same as how it's done in neigh_flush_dev() for regular neigh entries)
[0]: https://lore.kernel.org/netdev/c584ef7e-6897-01f3-5b80-12b53f7b4bf4@kernel.org/
Signed-off-by: Nicolas Escande <nico.escande@gmail.com>
---
include/net/neighbour.h | 1 +
net/core/neighbour.c | 12 +++++++++---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/include/net/neighbour.h b/include/net/neighbour.h
index 9a832cab5b1d..c7ce5ec7be23 100644
--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
@@ -182,6 +182,7 @@ struct pneigh_entry {
netdevice_tracker dev_tracker;
u32 flags;
u8 protocol;
+ bool permanent;
u32 key[];
};
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 49dce9a82295..85a5535de8ba 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -54,7 +54,8 @@ static void __neigh_notify(struct neighbour *n, int type, int flags,
u32 pid);
static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid);
static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
- struct net_device *dev);
+ struct net_device *dev,
+ bool skip_perm);
#ifdef CONFIG_PROC_FS
static const struct seq_operations neigh_stat_seq_ops;
@@ -423,7 +424,7 @@ static int __neigh_ifdown(struct neigh_table *tbl, struct net_device *dev,
{
write_lock_bh(&tbl->lock);
neigh_flush_dev(tbl, dev, skip_perm);
- pneigh_ifdown_and_unlock(tbl, dev);
+ pneigh_ifdown_and_unlock(tbl, dev, skip_perm);
pneigh_queue_purge(&tbl->proxy_queue, dev ? dev_net(dev) : NULL,
tbl->family);
if (skb_queue_empty_lockless(&tbl->proxy_queue))
@@ -803,7 +804,8 @@ int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey,
}
static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
- struct net_device *dev)
+ struct net_device *dev,
+ bool skip_perm)
{
struct pneigh_entry *n, **np, *freelist = NULL;
u32 h;
@@ -811,12 +813,15 @@ static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
for (h = 0; h <= PNEIGH_HASHMASK; h++) {
np = &tbl->phash_buckets[h];
while ((n = *np) != NULL) {
+ if (skip_perm && n->permanent)
+ goto skip;
if (!dev || n->dev == dev) {
*np = n->next;
n->next = freelist;
freelist = n;
continue;
}
+skip:
np = &n->next;
}
}
@@ -1983,6 +1988,7 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
pn = pneigh_lookup(tbl, net, dst, dev, 1);
if (pn) {
pn->flags = ndm_flags;
+ pn->permanent = !!(ndm->ndm_state & NUD_PERMANENT);
if (protocol)
pn->protocol = protocol;
err = 0;
--
2.49.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next v2] neighbour: add support for NUD_PERMANENT proxy entries
2025-06-17 14:13 [PATCH net-next v2] neighbour: add support for NUD_PERMANENT proxy entries Nicolas Escande
@ 2025-06-17 23:06 ` Kuniyuki Iwashima
2025-06-19 23:20 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Kuniyuki Iwashima @ 2025-06-17 23:06 UTC (permalink / raw)
To: nico.escande
Cc: davem, decot+git, edumazet, gnaaman, horms, kuba, kuniyu, netdev,
pabeni
From: Nicolas Escande <nico.escande@gmail.com>
Date: Tue, 17 Jun 2025 16:13:34 +0200
> As discussesd before in [0] proxy entries (which are more configuration
> than runtime data) should stay when the link (carrier) goes does down.
> This is what happens for regular neighbour entries.
>
> So lets fix this by:
> - storing in proxy entries the fact that it was added as NUD_PERMANENT
> - not removing NUD_PERMANENT proxy entries when the carrier goes down
> (same as how it's done in neigh_flush_dev() for regular neigh entries)
>
> [0]: https://lore.kernel.org/netdev/c584ef7e-6897-01f3-5b80-12b53f7b4bf4@kernel.org/
>
> Signed-off-by: Nicolas Escande <nico.escande@gmail.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next v2] neighbour: add support for NUD_PERMANENT proxy entries
2025-06-17 14:13 [PATCH net-next v2] neighbour: add support for NUD_PERMANENT proxy entries Nicolas Escande
2025-06-17 23:06 ` Kuniyuki Iwashima
@ 2025-06-19 23:20 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-06-19 23:20 UTC (permalink / raw)
To: Nicolas Escande
Cc: davem, edumazet, kuba, pabeni, horms, netdev, decot+git, kuniyu,
gnaaman
Hello:
This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Tue, 17 Jun 2025 16:13:34 +0200 you wrote:
> As discussesd before in [0] proxy entries (which are more configuration
> than runtime data) should stay when the link (carrier) goes does down.
> This is what happens for regular neighbour entries.
>
> So lets fix this by:
> - storing in proxy entries the fact that it was added as NUD_PERMANENT
> - not removing NUD_PERMANENT proxy entries when the carrier goes down
> (same as how it's done in neigh_flush_dev() for regular neigh entries)
>
> [...]
Here is the summary with links:
- [net-next,v2] neighbour: add support for NUD_PERMANENT proxy entries
https://git.kernel.org/netdev/net-next/c/c7d78566bbd3
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-06-19 23:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-17 14:13 [PATCH net-next v2] neighbour: add support for NUD_PERMANENT proxy entries Nicolas Escande
2025-06-17 23:06 ` Kuniyuki Iwashima
2025-06-19 23:20 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).