|
@@ -55,9 +55,8 @@
|
|
|
#define PNEIGH_HASHMASK 0xF
|
|
|
|
|
|
static void neigh_timer_handler(unsigned long arg);
|
|
|
-#ifdef CONFIG_ARPD
|
|
|
-static void neigh_app_notify(struct neighbour *n);
|
|
|
-#endif
|
|
|
+static void __neigh_notify(struct neighbour *n, int type, int flags);
|
|
|
+static void neigh_update_notify(struct neighbour *neigh);
|
|
|
static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev);
|
|
|
void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev);
|
|
|
|
|
@@ -110,6 +109,7 @@ static void neigh_cleanup_and_release(struct neighbour *neigh)
|
|
|
if (neigh->parms->neigh_cleanup)
|
|
|
neigh->parms->neigh_cleanup(neigh);
|
|
|
|
|
|
+ __neigh_notify(neigh, RTM_DELNEIGH, 0);
|
|
|
neigh_release(neigh);
|
|
|
}
|
|
|
|
|
@@ -830,13 +830,10 @@ static void neigh_timer_handler(unsigned long arg)
|
|
|
out:
|
|
|
write_unlock(&neigh->lock);
|
|
|
}
|
|
|
+
|
|
|
if (notify)
|
|
|
- call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
|
|
|
+ neigh_update_notify(neigh);
|
|
|
|
|
|
-#ifdef CONFIG_ARPD
|
|
|
- if (notify && neigh->parms->app_probes)
|
|
|
- neigh_app_notify(neigh);
|
|
|
-#endif
|
|
|
neigh_release(neigh);
|
|
|
}
|
|
|
|
|
@@ -1065,11 +1062,8 @@ out:
|
|
|
write_unlock_bh(&neigh->lock);
|
|
|
|
|
|
if (notify)
|
|
|
- call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
|
|
|
-#ifdef CONFIG_ARPD
|
|
|
- if (notify && neigh->parms->app_probes)
|
|
|
- neigh_app_notify(neigh);
|
|
|
-#endif
|
|
|
+ neigh_update_notify(neigh);
|
|
|
+
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -2002,6 +1996,11 @@ nla_put_failure:
|
|
|
return -EMSGSIZE;
|
|
|
}
|
|
|
|
|
|
+static void neigh_update_notify(struct neighbour *neigh)
|
|
|
+{
|
|
|
+ call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
|
|
|
+ __neigh_notify(neigh, RTM_NEWNEIGH, 0);
|
|
|
+}
|
|
|
|
|
|
static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
|
|
|
struct netlink_callback *cb)
|
|
@@ -2421,7 +2420,6 @@ static const struct file_operations neigh_stat_seq_fops = {
|
|
|
|
|
|
#endif /* CONFIG_PROC_FS */
|
|
|
|
|
|
-#ifdef CONFIG_ARPD
|
|
|
static inline size_t neigh_nlmsg_size(void)
|
|
|
{
|
|
|
return NLMSG_ALIGN(sizeof(struct ndmsg))
|
|
@@ -2453,16 +2451,11 @@ errout:
|
|
|
rtnl_set_sk_err(RTNLGRP_NEIGH, err);
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_ARPD
|
|
|
void neigh_app_ns(struct neighbour *n)
|
|
|
{
|
|
|
__neigh_notify(n, RTM_GETNEIGH, NLM_F_REQUEST);
|
|
|
}
|
|
|
-
|
|
|
-static void neigh_app_notify(struct neighbour *n)
|
|
|
-{
|
|
|
- __neigh_notify(n, RTM_NEWNEIGH, 0);
|
|
|
-}
|
|
|
-
|
|
|
#endif /* CONFIG_ARPD */
|
|
|
|
|
|
#ifdef CONFIG_SYSCTL
|