diff options
author | julian <julian@FreeBSD.org> | 1997-10-29 00:30:52 +0000 |
---|---|---|
committer | julian <julian@FreeBSD.org> | 1997-10-29 00:30:52 +0000 |
commit | 827244dc7af41cc23a70ef09c97f87098cca61c1 (patch) | |
tree | bbce555746658d160f7816b2ad5ce769375f26e1 /sys/netatalk/aarp.c | |
parent | ee40c84c0b3204e606998712fa949e6e5907d5d4 (diff) | |
download | FreeBSD-src-827244dc7af41cc23a70ef09c97f87098cca61c1.zip FreeBSD-src-827244dc7af41cc23a70ef09c97f87098cca61c1.tar.gz |
Fix various problems with netatalk kernel support.
Some of these changes are a bit rough and will become
more polished later. the changes to if_ethersubr should largely be moved
to within the appletalk code, but that will happen later.
A few of these were related to network-byteorder problems,
and more were related to loopback failures.
Diffstat (limited to 'sys/netatalk/aarp.c')
-rw-r--r-- | sys/netatalk/aarp.c | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/sys/netatalk/aarp.c b/sys/netatalk/aarp.c index 56c8924..ea85368 100644 --- a/sys/netatalk/aarp.c +++ b/sys/netatalk/aarp.c @@ -92,31 +92,24 @@ aarptimer(void *ignored) * the given network.. remember to take netranges into * consideration. */ -struct ifaddr * -at_ifawithnet( sat, ifah ) - struct sockaddr_at *sat; - struct ifaddrhead *ifah; +struct at_ifaddr * +at_ifawithnet(struct sockaddr_at *sat ) { + struct at_ifaddr *aa; struct sockaddr_at *sat2; - struct netrange *nr; - struct ifaddr *ifa; - for (ifa = ifah->tqh_first; ifa; ifa = ifa->ifa_link.tqe_next ) { - if ( ifa->ifa_addr->sa_family != AF_APPLETALK ) { - continue; - } - sat2 = satosat( ifa->ifa_addr ); - if ( sat2->sat_addr.s_net == sat->sat_addr.s_net ) { - break; + for ( aa = at_ifaddr; aa; aa = aa->aa_next ) { + sat2 = &(aa->aa_addr); + if ( sat2->sat_addr.s_net == sat->sat_addr.s_net ) { + break; + } + if( (aa->aa_flags & AFA_PHASE2 ) + && (ntohs(aa->aa_firstnet) <= ntohs(sat->sat_addr.s_net)) + && (ntohs(aa->aa_lastnet) >= ntohs(sat->sat_addr.s_net))) { + break; + } } - nr = (struct netrange *)(sat2->sat_zero); - if( (nr->nr_phase == 2 ) - && (nr->nr_firstnet <= sat->sat_addr.s_net) - && (nr->nr_lastnet >= sat->sat_addr.s_net)) { - break; - } - } - return( ifa ); + return( aa ); } static void @@ -154,8 +147,7 @@ aarpwhohas( struct arpcom *ac, struct sockaddr_at *sat ) * interface with the same address as we're looking for. If the * net is phase 2, generate an 802.2 and SNAP header. */ - if ((aa = (struct at_ifaddr *)at_ifawithnet(sat, &ac->ac_if.if_addrhead)) - == NULL) { + if ((aa = at_ifawithnet( sat )) == NULL) { m_freem( m ); return; } @@ -212,8 +204,8 @@ aarpresolve( ac, m, destsat, desten ) int s; if ( at_broadcast( destsat )) { - if ((aa = (struct at_ifaddr *)at_ifawithnet(destsat, - &((struct ifnet *)ac)->if_addrhead)) == NULL) { + m->m_flags |= M_BCAST; + if ((aa = at_ifawithnet( destsat )) == NULL) { m_freem( m ); return( 0 ); } @@ -324,8 +316,7 @@ at_aarpinput( struct arpcom *ac, struct mbuf *m) sat.sat_len = sizeof(struct sockaddr_at); sat.sat_family = AF_APPLETALK; sat.sat_addr.s_net = net; - if ((aa = (struct at_ifaddr *)at_ifawithnet(&sat, - &ac->ac_if.if_addrhead)) == NULL) { + if ((aa = at_ifawithnet( &sat )) == NULL) { m_freem( m ); return; } |