Page MenuHomeFreeBSD

D35322.id106383.diff
No OneTemporary

D35322.id106383.diff

Index: sys/net/if_llatbl.h
===================================================================
--- sys/net/if_llatbl.h
+++ sys/net/if_llatbl.h
@@ -160,6 +160,7 @@
typedef int (llt_link_entry_t)(struct lltable *, struct llentry *);
typedef int (llt_unlink_entry_t)(struct llentry *);
typedef void (llt_mark_used_t)(struct llentry *);
+typedef void (llt_post_resolved_t)(struct lltable *, struct llentry *);
typedef int (llt_foreach_cb_t)(struct lltable *, struct llentry *, void *);
typedef int (llt_foreach_entry_t)(struct lltable *, llt_foreach_cb_t *, void *);
@@ -187,6 +188,7 @@
llt_fill_sa_entry_t *llt_fill_sa_entry;
llt_free_tbl_t *llt_free_tbl;
llt_mark_used_t *llt_mark_used;
+ llt_post_resolved_t *llt_post_resolved;
};
MALLOC_DECLARE(M_LLTABLE);
Index: sys/net/if_llatbl.c
===================================================================
--- sys/net/if_llatbl.c
+++ sys/net/if_llatbl.c
@@ -970,15 +970,7 @@
*/
EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_RESOLVED);
LLE_WUNLOCK(lle);
-#ifdef INET
- /* gratuitous ARP */
- if ((laflags & LLE_PUB) && dst->sa_family == AF_INET)
- arprequest(ifp,
- &((struct sockaddr_in *)dst)->sin_addr,
- &((struct sockaddr_in *)dst)->sin_addr,
- (u_char *)LLADDR(dl));
-#endif
-
+ llt->llt_post_resolved(llt, lle);
break;
case RTM_DELETE:
Index: sys/netinet/in.c
===================================================================
--- sys/netinet/in.c
+++ sys/netinet/in.c
@@ -1681,6 +1681,17 @@
return (error);
}
+static void
+in_lltable_post_resolved(struct lltable *llt, struct llentry *lle)
+{
+ struct ifnet *ifp = llt->llt_ifp;
+
+ /* gratuitous ARP */
+ if ((lle->la_flags & LLE_PUB) != 0)
+ arprequest(ifp, &lle->r_l3addr.addr4, &lle->r_l3addr.addr4,
+ lle->ll_addr);
+}
+
static struct lltable *
in_lltattach(struct ifnet *ifp)
{
@@ -1699,6 +1710,7 @@
llt->llt_free_entry = in_lltable_free_entry;
llt->llt_match_prefix = in_lltable_match_prefix;
llt->llt_mark_used = llentry_mark_used;
+ llt->llt_post_resolved = in_lltable_post_resolved;
lltable_link(llt);
return (llt);
Index: sys/netinet6/in6.c
===================================================================
--- sys/netinet6/in6.c
+++ sys/netinet6/in6.c
@@ -2460,6 +2460,12 @@
return (error);
}
+static void
+in6_lltable_post_resolved(struct lltable *llt, struct llentry *lle)
+{
+ /* Handle proxy NDP entries (not yet). */
+}
+
static struct lltable *
in6_lltattach(struct ifnet *ifp)
{
@@ -2478,6 +2484,7 @@
llt->llt_free_entry = in6_lltable_free_entry;
llt->llt_match_prefix = in6_lltable_match_prefix;
llt->llt_mark_used = llentry_mark_used;
+ llt->llt_post_resolved = in6_lltable_post_resolved;
lltable_link(llt);
return (llt);

File Metadata

Mime Type
text/plain
Expires
Tue, Jun 9, 12:50 AM (21 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33822150
Default Alt Text
D35322.id106383.diff (2 KB)

Event Timeline