Re: [PATCH] net: neighbour: add neigh_parms_lookup_dev() helper

From: Kuniyuki Iwashima

Date: Mon Jun 29 2026 - 14:25:58 EST


On Mon, Jun 29, 2026 at 8:58 AM Paritosh Potukuchi
<paritoshpotukuchi@xxxxxxxxx> wrote:
>
> Provide a helper to lookup neigh_parms associated
> with a given (neigh_table, net_device) pair.
>
> The existing lookup_neigh_parms() helper is internal to the
> neighbour subsystem and cannot be used by other subsystems.
> Some stacked/virtual devices like bond require access to the
> underlying device's neigh_parms.
>
> neigh_parms_lookup_dev() is designed to be a wrapper around
> lookup_neigh_parms(). The function provides controlled access
> to per device neigh_parms.

Please post a series of patches with the neigh_parms_lookup_dev()
users.


>
> The caller is expected to hold rcu_read_lock().
>
> This does not break any existing functionality.
>
> Signed-off-by: Paritosh Potukuchi <paritosh.potukuchi@xxxxxxx>
> ---
> include/net/neighbour.h | 2 ++
> net/core/neighbour.c | 8 ++++++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/include/net/neighbour.h b/include/net/neighbour.h
> index 8860cc2175fc..1b3b06eda886 100644
> --- a/include/net/neighbour.h
> +++ b/include/net/neighbour.h
> @@ -438,6 +438,8 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
> proc_handler *proc_handler);
> void neigh_sysctl_unregister(struct neigh_parms *p);
>
> +struct neigh_parms *neigh_parms_lookup_dev(struct neigh_table *tbl, struct net_device *dev);
> +
> static inline void __neigh_parms_put(struct neigh_parms *parms)
> {
> refcount_dec(&parms->refcnt);
> diff --git a/net/core/neighbour.c b/net/core/neighbour.c
> index 1349c0eedb64..6d32c2668af3 100644
> --- a/net/core/neighbour.c
> +++ b/net/core/neighbour.c
> @@ -1757,6 +1757,14 @@ static inline struct neigh_parms *lookup_neigh_parms(struct neigh_table *tbl,
> return NULL;
> }
>
> +/* Caller must hold rcu_read_lock()*/
> +
> +struct neigh_parms *neigh_parms_lookup_dev(struct neigh_table *tbl, struct net_device *dev)
> +{
> + return lookup_neigh_parms(tbl, dev_net(dev), dev->ifindex);
> +}
> +EXPORT_SYMBOL(neigh_parms_lookup_dev);
> +
> struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
> struct neigh_table *tbl)
> {
> --
> 2.43.0
>