In the presence of multiple network namespaces the logic needed
to allocate the a default parameter table is just barely non-trivial.
So add a function to automate it to make everyone's life easier.

Signed-off-by: Eric W. Biederman <[EMAIL PROTECTED]>
Signed-off-by: Daniel Lezcano <[EMAIL PROTECTED]>
---
 include/net/neighbour.h |    1 +
 net/core/neighbour.c    |   15 +++++++++++++++
 2 files changed, 16 insertions(+)

Index: net-2.6.25/include/net/neighbour.h
===================================================================
--- net-2.6.25.orig/include/net/neighbour.h
+++ net-2.6.25/include/net/neighbour.h
@@ -208,6 +208,7 @@ extern struct neighbour     *neigh_event_ns
                                                struct net_device *dev);
 
 extern struct neigh_parms      *neigh_parms_alloc(struct net_device *dev, 
struct neigh_table *tbl);
+extern struct neigh_parms      *neigh_parms_alloc_default(struct neigh_table 
*tbl, struct net *net);
 extern void                    neigh_parms_release(struct neigh_table *tbl, 
struct neigh_parms *parms);
 extern void                    neigh_parms_destroy(struct neigh_parms *parms);
 extern unsigned long           neigh_rand_reach_time(unsigned long base);
Index: net-2.6.25/net/core/neighbour.c
===================================================================
--- net-2.6.25.orig/net/core/neighbour.c
+++ net-2.6.25/net/core/neighbour.c
@@ -1325,6 +1325,20 @@ struct neigh_parms *neigh_parms_alloc(st
        return p;
 }
 
+struct neigh_parms *neigh_parms_alloc_default(struct neigh_table *tbl,
+                                               struct net *net)
+{
+       struct neigh_parms *parms;
+       if (net != &init_net) {
+               parms = neigh_parms_alloc(NULL, tbl);
+               release_net(parms->net);
+               parms->net = hold_net(net);
+       }
+       else
+               parms = neigh_parms_clone(&tbl->parms);
+       return parms;
+}
+
 static void neigh_rcu_free_parms(struct rcu_head *head)
 {
        struct neigh_parms *parms =
@@ -2787,6 +2801,7 @@ EXPORT_SYMBOL(neigh_ifdown);
 EXPORT_SYMBOL(neigh_lookup);
 EXPORT_SYMBOL(neigh_lookup_nodev);
 EXPORT_SYMBOL(neigh_parms_alloc);
+EXPORT_SYMBOL(neigh_parms_alloc_default);
 EXPORT_SYMBOL(neigh_parms_release);
 EXPORT_SYMBOL(neigh_rand_reach_time);
 EXPORT_SYMBOL(neigh_resolve_output);

-- 
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to