PERFORCE change 128306 for review
Kip Macy
kmacy at FreeBSD.org
Mon Oct 29 14:47:01 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=128306
Change 128306 by kmacy at kmacy:storage:toestack on 2007/10/29 21:46:43
let arpresolve take a null mbuf
remove code duplication in arp_ifinit and arp_ifinit2
hook arp update with arp_update eventhandler
Affected files ...
.. //depot/projects/toestack/sys/netinet/if_ether.c#6 edit
Differences ...
==== //depot/projects/toestack/sys/netinet/if_ether.c#6 (text+ko) ====
@@ -362,15 +362,17 @@
struct sockaddr_dl *sdl;
int error;
- if (m->m_flags & M_BCAST) { /* broadcast */
- (void)memcpy(desten, ifp->if_broadcastaddr, ifp->if_addrlen);
- return (0);
+ if (m) {
+ if (m->m_flags & M_BCAST) { /* broadcast */
+ (void)memcpy(desten, ifp->if_broadcastaddr, ifp->if_addrlen);
+ return (0);
+ }
+ if (m->m_flags & M_MCAST && ifp->if_type != IFT_ARCNET) {/* multicast */
+ ETHER_MAP_IP_MULTICAST(&SIN(dst)->sin_addr, desten);
+ return (0);
+ }
}
- if (m->m_flags & M_MCAST && ifp->if_type != IFT_ARCNET) {/* multicast */
- ETHER_MAP_IP_MULTICAST(&SIN(dst)->sin_addr, desten);
- return (0);
- }
-
+
if (rt0 != NULL) {
error = rt_check(&rt, &rt0, dst);
if (error) {
@@ -413,7 +415,8 @@
sdl->sdl_family == AF_LINK && sdl->sdl_alen != 0) {
bcopy(LLADDR(sdl), desten, sdl->sdl_alen);
-
+ EVENTHANDLER_INVOKE(arp_update, rt);
+
/*
* If entry has an expiry time and it is approaching,
* send an ARP request.
@@ -449,10 +452,12 @@
* response yet. Replace the held mbuf with this
* latest one.
*/
- if (la->la_hold)
- m_freem(la->la_hold);
- la->la_hold = m;
-
+ if (m) {
+ if (la->la_hold)
+ m_freem(la->la_hold);
+ la->la_hold = m;
+ }
+
KASSERT(rt->rt_expire > 0, ("sending ARP request for static entry"));
/*
@@ -936,12 +941,12 @@
}
}
-void
-arp_ifinit(struct ifnet *ifp, struct ifaddr *ifa)
+static __inline
+arp_ifinit_internal(struct ifnet *ifp, struct ifaddr *ifa, u_char *enaddr)
{
if (ntohl(IA_SIN(ifa)->sin_addr.s_addr) != INADDR_ANY)
arprequest(ifp, &IA_SIN(ifa)->sin_addr,
- &IA_SIN(ifa)->sin_addr, IF_LLADDR(ifp));
+ &IA_SIN(ifa)->sin_addr, enaddr);
ifa->ifa_rtrequest = arp_rtrequest;
ifa->ifa_flags |= RTF_CLONING;
}
@@ -949,11 +954,13 @@
void
arp_ifinit2(struct ifnet *ifp, struct ifaddr *ifa, u_char *enaddr)
{
- if (ntohl(IA_SIN(ifa)->sin_addr.s_addr) != INADDR_ANY)
- arprequest(ifp, &IA_SIN(ifa)->sin_addr,
- &IA_SIN(ifa)->sin_addr, enaddr);
- ifa->ifa_rtrequest = arp_rtrequest;
- ifa->ifa_flags |= RTF_CLONING;
+ arp_ifinit_internal(ifp, ifa, enaddr);
+}
+
+void
+arp_ifinit(struct ifnet *ifp, struct ifaddr *ifa)
+{
+ arp_ifinit_internal(ifp, ifa, IF_LLADDR(ifp));
}
static void
More information about the p4-projects
mailing list