summaryrefslogtreecommitdiffstats
path: root/sys/netinet/if_ether.c
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>1996-03-23 01:32:30 +0000
committerfenner <fenner@FreeBSD.org>1996-03-23 01:32:30 +0000
commit02d2342bc2d78ff157a84154ae3b835da1020fa7 (patch)
tree5a6a6e061e842ce19bb534986fea8f35b3fee56f /sys/netinet/if_ether.c
parent84632cab799768cfd3297fc5671988460e48e292 (diff)
downloadFreeBSD-src-02d2342bc2d78ff157a84154ae3b835da1020fa7.zip
FreeBSD-src-02d2342bc2d78ff157a84154ae3b835da1020fa7.tar.gz
Send ARP's for aliased subnets with the proper source address.
Get rid of ac->ac_ipaddr and arpwhohas() since they assume that an interface has only one address. Obtained from: BSD/OS 2.1, via Rich Stevens <rstevens@noao.edu>
Diffstat (limited to 'sys/netinet/if_ether.c')
-rw-r--r--sys/netinet/if_ether.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 257a94b..bd6ea2a 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)if_ether.c 8.1 (Berkeley) 6/10/93
- * $Id: if_ether.c,v 1.27 1996/02/05 18:04:30 wollman Exp $
+ * $Id: if_ether.c,v 1.28 1996/02/20 17:54:17 fenner Exp $
*/
/*
@@ -106,7 +106,6 @@ static void arprequest __P((struct arpcom *, u_long *, u_long *, u_char *));
static void arpintr __P((void));
static void arptfree __P((struct llinfo_arp *));
static void arptimer __P((void *));
-static void arpwhohas __P((struct arpcom *ac, struct in_addr *addr));
static struct llinfo_arp
*arplookup __P((u_long, int, int));
static void in_arpinput __P((struct mbuf *));
@@ -258,16 +257,6 @@ arp_rtrequest(req, rt, sa)
Free((caddr_t)la);
}
}
-/*
- * Broadcast an ARP packet, asking who has addr on interface ac.
- */
-static void
-arpwhohas(ac, addr)
- struct arpcom *ac;
- struct in_addr *addr;
-{
- arprequest(ac, &ac->ac_ipaddr.s_addr, &addr->s_addr, ac->ac_enaddr);
-}
/*
* Broadcast an ARP request. Caller specifies:
@@ -375,7 +364,10 @@ arpresolve(ac, rt, m, dst, desten, rt0)
if (la->la_asked == 0 || rt->rt_expire != time.tv_sec) {
rt->rt_expire = time.tv_sec;
if (la->la_asked++ < arp_maxtries)
- arpwhohas(ac, &(SIN(dst)->sin_addr));
+ arprequest(ac,
+ &(SIN(rt0->rt_ifa->ifa_addr)->sin_addr.s_addr),
+ &(SIN(dst)->sin_addr.s_addr),
+ ac->ac_enaddr);
else {
rt->rt_flags |= RTF_REJECT;
rt->rt_expire += arpt_down;
@@ -634,8 +626,8 @@ arp_ifinit(ac, ifa)
struct arpcom *ac;
struct ifaddr *ifa;
{
- ac->ac_ipaddr = IA_SIN(ifa)->sin_addr;
- arpwhohas(ac, &ac->ac_ipaddr);
+ arprequest(ac, &(IA_SIN(ifa)->sin_addr.s_addr),
+ &(IA_SIN(ifa)->sin_addr.s_addr), ac->ac_enaddr);
ifa->ifa_rtrequest = arp_rtrequest;
ifa->ifa_flags |= RTF_CLONING;
}
OpenPOWER on IntegriCloud