summaryrefslogtreecommitdiffstats
path: root/sys/netatalk/aarp.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1997-10-29 00:30:52 +0000
committerjulian <julian@FreeBSD.org>1997-10-29 00:30:52 +0000
commit827244dc7af41cc23a70ef09c97f87098cca61c1 (patch)
treebbce555746658d160f7816b2ad5ce769375f26e1 /sys/netatalk/aarp.c
parentee40c84c0b3204e606998712fa949e6e5907d5d4 (diff)
downloadFreeBSD-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.c45
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;
}
OpenPOWER on IntegriCloud