svn commit: r196995 - in head/sys: net netinet
Navdeep Parhar
np at FreeBSD.org
Tue Sep 8 21:17:18 UTC 2009
Author: np
Date: Tue Sep 8 21:17:17 2009
New Revision: 196995
URL: http://svn.freebsd.org/changeset/base/196995
Log:
Add arp_update_event. This replaces route_arp_update_event, which
has not worked since the arp-v2 rewrite.
The event handler will be called with the llentry write-locked and
can examine la_flags to determine whether the entry is being added
or removed.
Reviewed by: gnn, kmacy
Approved by: gnn (mentor)
MFC after: 1 month
Modified:
head/sys/net/route.h
head/sys/netinet/if_ether.c
head/sys/netinet/if_ether.h
head/sys/netinet/in.c
Modified: head/sys/net/route.h
==============================================================================
--- head/sys/net/route.h Tue Sep 8 20:45:40 2009 (r196994)
+++ head/sys/net/route.h Tue Sep 8 21:17:17 2009 (r196995)
@@ -435,6 +435,7 @@ int rtrequest1_fib(int, struct rt_addri
#include <sys/eventhandler.h>
typedef void (*rtevent_arp_update_fn)(void *, struct rtentry *, uint8_t *, struct sockaddr *);
typedef void (*rtevent_redirect_fn)(void *, struct rtentry *, struct rtentry *, struct sockaddr *);
+/* route_arp_update_event is no longer generated; see arp_update_event */
EVENTHANDLER_DECLARE(route_arp_update_event, rtevent_arp_update_fn);
EVENTHANDLER_DECLARE(route_redirect_event, rtevent_redirect_fn);
#endif
Modified: head/sys/netinet/if_ether.c
==============================================================================
--- head/sys/netinet/if_ether.c Tue Sep 8 20:45:40 2009 (r196994)
+++ head/sys/netinet/if_ether.c Tue Sep 8 21:17:17 2009 (r196995)
@@ -684,6 +684,8 @@ match:
(void)memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen);
la->la_flags |= LLE_VALID;
+ EVENTHANDLER_INVOKE(arp_update_event, la);
+
if (!(la->la_flags & LLE_STATIC)) {
la->la_expire = time_uptime + V_arpt_keep;
callout_reset(&la->la_timer, hz * V_arpt_keep,
Modified: head/sys/netinet/if_ether.h
==============================================================================
--- head/sys/netinet/if_ether.h Tue Sep 8 20:45:40 2009 (r196994)
+++ head/sys/netinet/if_ether.h Tue Sep 8 21:17:17 2009 (r196995)
@@ -117,6 +117,11 @@ int arpresolve(struct ifnet *ifp, struct
struct llentry **lle);
void arp_ifinit(struct ifnet *, struct ifaddr *);
void arp_ifinit2(struct ifnet *, struct ifaddr *, u_char *);
+
+#include <sys/eventhandler.h>
+typedef void (*llevent_arp_update_fn)(void *, struct llentry *);
+EVENTHANDLER_DECLARE(arp_update_event, llevent_arp_update_fn);
+
#endif
#endif
Modified: head/sys/netinet/in.c
==============================================================================
--- head/sys/netinet/in.c Tue Sep 8 20:45:40 2009 (r196994)
+++ head/sys/netinet/in.c Tue Sep 8 21:17:17 2009 (r196995)
@@ -1418,6 +1418,7 @@ in_lltable_lookup(struct lltable *llt, u
if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
LLE_WLOCK(lle);
lle->la_flags = LLE_DELETED;
+ EVENTHANDLER_INVOKE(arp_update_event, lle);
LLE_WUNLOCK(lle);
#ifdef DIAGNOSTICS
log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
More information about the svn-src-head
mailing list