From 3a67d2bc37836a8ea9ddb68c45655b26cdd29bb2 Mon Sep 17 00:00:00 2001 From: Julian Elischer Date: Tue, 23 Jul 1996 01:18:47 +0000 Subject: [PATCH] Submitted by: archie@whistle.com appletalk cleanups --- sbin/ifconfig/ifconfig.c | 88 ++++++-- sbin/route/route.c | 6 +- sys/netatalk/aarp.c | 217 +------------------ sys/netatalk/aarp.h | 4 +- sys/netatalk/at.h | 27 +-- sys/netatalk/at_control.c | 434 +++++++++++++++++++++----------------- sys/netatalk/at_proto.c | 31 +-- sys/netatalk/at_rmx.c | 2 - sys/netatalk/at_var.h | 10 +- sys/netatalk/ddp_input.c | 51 +---- sys/netatalk/ddp_output.c | 126 +---------- sys/netatalk/ddp_pcb.c | 66 +----- sys/netatalk/ddp_usrreq.c | 66 +----- sys/netatalk/endian.h | 62 +----- sys/netatalk/phase2.h | 73 ------- usr.bin/netstat/atalk.c | 79 +++---- usr.bin/netstat/if.c | 4 +- usr.bin/netstat/netstat.h | 3 +- usr.bin/netstat/route.c | 9 +- 19 files changed, 399 insertions(+), 959 deletions(-) diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c index 00d7bd3b434c..e0852c257ec0 100644 --- a/sbin/ifconfig/ifconfig.c +++ b/sbin/ifconfig/ifconfig.c @@ -101,6 +101,7 @@ struct iso_ifreq iso_ridreq; struct iso_aliasreq iso_addreq; #endif struct sockaddr_in netmask; +struct netrange at_nr; /* AppleTalk net range */ char name[32]; int flags; @@ -120,6 +121,7 @@ extern int errno; int setifflags(), setifaddr(), setifdstaddr(), setifnetmask(); int setifmetric(), setifmtu(), setifbroadaddr(), setifipdst(); +int setatrange(), setatphase(), checkatrange(); int notealias(); #ifdef ISO int setsnpaoffset(), setnsellength(); @@ -150,6 +152,8 @@ struct cmd { { "-swabips", -EN_SWABIPS, setifflags }, #endif { "netmask", NEXTARG, setifnetmask }, + { "range", NEXTARG, setatrange }, + { "phase", NEXTARG, setatphase }, { "metric", NEXTARG, setifmetric }, { "broadcast", NEXTARG, setifbroadaddr }, { "ipdst", NEXTARG, setifipdst }, @@ -203,7 +207,7 @@ struct afswtch { { "ipx", AF_IPX, ipx_status, ipx_getaddr, SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, { "atalk", AF_APPLETALK, at_status, at_getaddr, - SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, + SIOCDIFADDR, SIOCAIFADDR, C(addreq), C(addreq) }, #ifdef NS { "ns", AF_NS, xns_status, xns_getaddr, SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) }, @@ -449,6 +453,8 @@ ifconfig(argc,argv,af,rafp) if (setsockopt(s, 0, SO_IPXIP_ROUTE, &rq, size) < 0) Perror("Encapsulation Routing"); } + if (af == AF_APPLETALK) + checkatrange((struct sockaddr_at *) &addreq.ifra_addr); #ifdef NS if (setipdst && af==AF_NS) { struct nsip_req rq; @@ -767,6 +773,7 @@ at_status(force) int force; { struct sockaddr_at *sat, null_sat; + struct netrange *nr; memset(&null_sat, 0, sizeof(null_sat)); @@ -774,20 +781,28 @@ at_status(force) if (!sat || sat->sat_family != AF_APPLETALK) { if (!force) return; - /* warnx("%s has no AF_APPLETALK IFA address!", name); */ sat = &null_sat; } - printf("\tatalk %d.%d ", - ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node); - + nr = (struct netrange *) &sat->sat_zero; + printf("\tatalk %d.%d range %d-%d phase %d", + ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node, + ntohs(nr->nr_firstnet), ntohs(nr->nr_lastnet), nr->nr_phase); if (flags & IFF_POINTOPOINT) { /* note RTAX_BRD overlap with IFF_BROADCAST */ sat = (struct sockaddr_at *)info.rti_info[RTAX_BRD]; if (!sat) sat = &null_sat; - printf("--> %d.%d ", + printf("--> %d.%d", ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node); } + if (flags & IFF_BROADCAST) { + /* note RTAX_BRD overlap with IFF_POINTOPOINT */ + sat = (struct sockaddr_at *)info.rti_info[RTAX_BRD]; + if (sat) + printf(" broadcast %d.%d", + ntohs(sat->sat_addr.s_net), + sat->sat_addr.s_node); + } putchar('\n'); } @@ -987,27 +1002,60 @@ char *addr; printf("Attempt to set IPX netmask will be ineffectual\n"); } -#define SATALK(x) ((struct sockaddr_at *) &(x)) -struct sockaddr_at *atalktab[] = { -SATALK(ridreq.ifr_addr), SATALK(addreq.ifra_addr), -SATALK(addreq.ifra_mask), SATALK(addreq.ifra_broadaddr)}; - -at_getaddr(addr, which) -char *addr; +at_getaddr(char *addr, int which) { - struct sockaddr_at *sat = atalktab[which]; + struct sockaddr_at *sat = (struct sockaddr_at *) &addreq.ifra_addr; u_int net, node; - sat->sat_family = AF_IPX; + sat->sat_family = AF_APPLETALK; sat->sat_len = sizeof(*sat); + if (which == MASK) + errx(1, "AppleTalk does not use netmasks\n"); if (sscanf(addr, "%u.%u", &net, &node) != 2 - /* || net == 0 || net > 0xffff || node == 0 || node > 0xfe */ ) - errx(1, "%s: bad value", addr); + || net == 0 || net > 0xffff || node == 0 || node > 0xfe) + errx(1, "%s: illegal address", addr); sat->sat_addr.s_net = htons(net); sat->sat_addr.s_node = node; - if (which == MASK) - printf("Attempt to set AppleTalk netmask" - " will be ineffectual\n"); +} + +setatrange(char *range) +{ + u_short first = 123, last = 123; + + if (sscanf(range, "%hu-%hu", &first, &last) != 2 + || first == 0 || first > 0xffff + || last == 0 || last > 0xffff || first > last) + errx(1, "%s: illegal net range: %u-%u", range, first, last); + at_nr.nr_firstnet = htons(first); + at_nr.nr_lastnet = htons(last); +} + +setatphase(char *phase) +{ + if (!strcmp(phase, "1")) + at_nr.nr_phase = 1; + else if (!strcmp(phase, "2")) + at_nr.nr_phase = 2; + else + errx(1, "%s: illegal phase", phase); +} + +checkatrange(struct sockaddr_at *sat) +{ + if (at_nr.nr_phase == 0) + at_nr.nr_phase = 2; /* Default phase 2 */ + if (at_nr.nr_firstnet == 0) + at_nr.nr_firstnet = /* Default range of one */ + at_nr.nr_lastnet = sat->sat_addr.s_net; +printf("\tatalk %d.%d range %d-%d phase %d\n", + ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node, + ntohs(at_nr.nr_firstnet), ntohs(at_nr.nr_lastnet), at_nr.nr_phase); + if ((u_short) ntohs(at_nr.nr_firstnet) > + (u_short) ntohs(sat->sat_addr.s_net) + || (u_short) ntohs(at_nr.nr_lastnet) < + (u_short) ntohs(sat->sat_addr.s_net)) + errx(1, "AppleTalk address is not in range"); + *((struct netrange *) &sat->sat_zero) = at_nr; } #ifdef NS diff --git a/sbin/route/route.c b/sbin/route/route.c index a0239b73e7bf..1a00d5261834 100644 --- a/sbin/route/route.c +++ b/sbin/route/route.c @@ -43,7 +43,7 @@ static const char copyright[] = static char sccsid[] = "@(#)route.c 8.3 (Berkeley) 3/19/94"; */ static const char rcsid[] = - "$Id: route.c,v 1.8 1996/05/08 20:48:59 wollman Exp $"; + "$Id: route.c,v 1.9 1996/07/09 19:02:28 julian Exp $"; #endif /* not lint */ #include @@ -1513,7 +1513,7 @@ atalk_aton(const char *text, struct at_addr *addr) if (sscanf(text, "%u.%u", &net, &node) != 2 || net > 0xffff || node > 0xff) return(0); - addr->s_net = net; + addr->s_net = htons(net); addr->s_node = node; return(1); } @@ -1523,6 +1523,6 @@ atalk_ntoa(struct at_addr at) { static char buf[20]; - (void) snprintf(buf, sizeof(buf), "%u.%u", at.s_net, at.s_node); + (void) snprintf(buf, sizeof(buf), "%u.%u", ntohs(at.s_net), at.s_node); return(buf); } diff --git a/sys/netatalk/aarp.c b/sys/netatalk/aarp.c index 84beef40df9a..68c243f6188d 100644 --- a/sys/netatalk/aarp.c +++ b/sys/netatalk/aarp.c @@ -8,30 +8,17 @@ #include #include #include -#if defined( __FreeBSD__ ) #include #include #include -#endif #include #include -#ifndef _IBMR2 #include -#endif _IBMR2 #include #include -#if !defined( __FreeBSD__ ) -#include -#endif #include #undef s_net #include -#ifdef _IBMR2 -#include -#include -#include -#include -#endif _IBMR2 #include #include @@ -43,13 +30,8 @@ static void aarptfree( struct aarptab *aat); static void at_aarpinput( struct arpcom *ac, struct mbuf *m); -#ifdef GATEWAY -#define AARPTAB_BSIZ 16 -#define AARPTAB_NB 37 -#else #define AARPTAB_BSIZ 9 #define AARPTAB_NB 19 -#endif GATEWAY #define AARPTAB_SIZE (AARPTAB_BSIZ * AARPTAB_NB) struct aarptab aarptab[AARPTAB_SIZE]; int aarptab_size = AARPTAB_SIZE; @@ -72,13 +54,9 @@ int aarptab_size = AARPTAB_SIZE; #define AARPT_KILLC 20 #define AARPT_KILLI 3 -#ifdef sun -extern struct ether_addr etherbroadcastaddr; -#else sun # if !defined( __FreeBSD__ ) extern u_char etherbroadcastaddr[6]; # endif __FreeBSD__ -#endif sun u_char atmulticastaddr[ 6 ] = { 0x09, 0x00, 0x07, 0xff, 0xff, 0xff, @@ -116,10 +94,8 @@ at_ifawithnet( sat, ifa ) struct sockaddr_at *sat; struct ifaddr *ifa; { - struct at_ifaddr *aa; for (; ifa; ifa = ifa->ifa_next ) { -#ifdef BSD4_4 if ( ifa->ifa_addr->sa_family != AF_APPLETALK ) { continue; } @@ -127,16 +103,6 @@ at_ifawithnet( sat, ifa ) sat->sat_addr.s_net ) { break; } -#else BSD4_4 - if ( ifa->ifa_addr.sa_family != AF_APPLETALK ) { - continue; - } - aa = (struct at_ifaddr *)ifa; - if ( ntohs( sat->sat_addr.s_net ) >= ntohs( aa->aa_firstnet ) && - ntohs( sat->sat_addr.s_net ) <= ntohs( aa->aa_lastnet )) { - break; - } -#endif BSD4_4 } return( ifa ); } @@ -151,20 +117,12 @@ aarpwhohas( struct arpcom *ac, struct sockaddr_at *sat ) struct llc *llc; struct sockaddr sa; -#ifdef BSD4_4 if (( m = m_gethdr( M_DONTWAIT, MT_DATA )) == NULL ) { return; } m->m_len = sizeof( *ea ); m->m_pkthdr.len = sizeof( *ea ); MH_ALIGN( m, sizeof( *ea )); -#else BSD4_4 - if (( m = m_get( M_DONTWAIT, MT_DATA )) == NULL ) { - return; - } - m->m_len = sizeof( *ea ); - m->m_off = MMAXOFF - sizeof( *ea ); -#endif BSD4_4 ea = mtod( m, struct ether_aarp *); bzero((caddr_t)ea, sizeof( *ea )); @@ -174,13 +132,8 @@ aarpwhohas( struct arpcom *ac, struct sockaddr_at *sat ) ea->aarp_hln = sizeof( ea->aarp_sha ); ea->aarp_pln = sizeof( ea->aarp_spu ); ea->aarp_op = htons( AARPOP_REQUEST ); -#ifdef sun - bcopy((caddr_t)&ac->ac_enaddr, (caddr_t)ea->aarp_sha, - sizeof( ea->aarp_sha )); -#else sun bcopy((caddr_t)ac->ac_enaddr, (caddr_t)ea->aarp_sha, sizeof( ea->aarp_sha )); -#endif sun /* * We need to check whether the output ethernet type should @@ -198,24 +151,10 @@ aarpwhohas( struct arpcom *ac, struct sockaddr_at *sat ) eh = (struct ether_header *)sa.sa_data; if ( aa->aa_flags & AFA_PHASE2 ) { -#ifdef sun - bcopy((caddr_t)atmulticastaddr, (caddr_t)&eh->ether_dhost, - sizeof( eh->ether_dhost )); -#else sun bcopy((caddr_t)atmulticastaddr, (caddr_t)eh->ether_dhost, sizeof( eh->ether_dhost )); -#endif sun -#if defined(sun) && defined(i386) eh->ether_type = htons(sizeof(struct llc) + sizeof(struct ether_aarp)); -#else - eh->ether_type = sizeof(struct llc) + sizeof(struct ether_aarp); -#endif -#ifdef BSD4_4 M_PREPEND( m, sizeof( struct llc ), M_WAIT ); -#else BSD4_4 - m->m_len += sizeof( struct llc ); - m->m_off -= sizeof( struct llc ); -#endif BSD4_4 llc = mtod( m, struct llc *); llc->llc_dsap = llc->llc_ssap = LLC_SNAP_LSAP; llc->llc_control = LLC_UI; @@ -229,18 +168,9 @@ aarpwhohas( struct arpcom *ac, struct sockaddr_at *sat ) ea->aarp_spnode = AA_SAT( aa )->sat_addr.s_node; ea->aarp_tpnode = sat->sat_addr.s_node; } else { -#ifdef sun - bcopy((caddr_t)ðerbroadcastaddr, (caddr_t)&eh->ether_dhost, - sizeof( eh->ether_dhost )); -#else sun bcopy((caddr_t)etherbroadcastaddr, (caddr_t)eh->ether_dhost, sizeof( eh->ether_dhost )); -#endif sun -#if defined(sun) && defined(i386) eh->ether_type = htons( ETHERTYPE_AARP ); -#else - eh->ether_type = ETHERTYPE_AARP; -#endif ea->aarp_spa = AA_SAT( aa )->sat_addr.s_node; ea->aarp_tpa = sat->sat_addr.s_node; @@ -252,15 +182,10 @@ aarpwhohas( struct arpcom *ac, struct sockaddr_at *sat ) AA_SAT( aa )->sat_addr.s_node); #endif NETATALKDEBUG -#ifdef BSD4_4 sa.sa_len = sizeof( struct sockaddr ); -#endif BSD4_4 sa.sa_family = AF_UNSPEC; - (*ac->ac_if.if_output)(&ac->ac_if, m, &sa -#if defined( __FreeBSD__ ) - , NULL /* XXX should be routing information */ -#endif __FreeBSD__ - ); + (*ac->ac_if.if_output)(&ac->ac_if, + m, &sa, NULL); /* XXX NULL should be routing information */ } int @@ -268,14 +193,9 @@ aarpresolve( ac, m, destsat, desten ) struct arpcom *ac; struct mbuf *m; struct sockaddr_at *destsat; -#ifdef sun - struct ether_addr *desten; -#else sun u_char *desten; -#endif sun { struct at_ifaddr *aa; - struct ifaddr ifa; struct aarptab *aat; int s; @@ -289,13 +209,8 @@ aarpresolve( ac, m, destsat, desten ) bcopy( (caddr_t)atmulticastaddr, (caddr_t)desten, sizeof( atmulticastaddr )); } else { -#ifdef sun - bcopy( (caddr_t)ðerbroadcastaddr, (caddr_t)desten, - sizeof( etherbroadcastaddr )); -#else sun bcopy( (caddr_t)etherbroadcastaddr, (caddr_t)desten, sizeof( etherbroadcastaddr )); -#endif sun } return( 1 ); } @@ -340,10 +255,6 @@ aarpinput( ac, m ) if ( ac->ac_if.if_flags & IFF_NOARP ) goto out; -#ifndef BSD4_4 - IF_ADJ( m ); -#endif BSD4_4 - if ( m->m_len < sizeof( struct arphdr )) { goto out; } @@ -374,7 +285,6 @@ aarpinput( ac, m ) static void at_aarpinput( struct arpcom *ac, struct mbuf *m) { - struct mbuf *m0; struct ether_aarp *ea; struct at_ifaddr *aa; struct aarptab *aat; @@ -383,33 +293,23 @@ at_aarpinput( struct arpcom *ac, struct mbuf *m) struct sockaddr_at sat; struct sockaddr sa; struct at_addr spa, tpa, ma; - int op, s; + int op; u_short net; ea = mtod( m, struct ether_aarp *); /* Check to see if from my hardware address */ -#ifdef sun - if ( !bcmp(( caddr_t )ea->aarp_sha, ( caddr_t )&ac->ac_enaddr, - sizeof( ac->ac_enaddr ))) { - m_freem( m ); - return; - } -#else sun if ( !bcmp(( caddr_t )ea->aarp_sha, ( caddr_t )ac->ac_enaddr, sizeof( ac->ac_enaddr ))) { m_freem( m ); return; } -#endif sun op = ntohs( ea->aarp_op ); bcopy( ea->aarp_tpnet, &net, sizeof( net )); if ( net != 0 ) { /* should be ATADDR_ANYNET? */ -#ifdef BSD4_4 sat.sat_len = sizeof(struct sockaddr_at); -#endif BSD4_4 sat.sat_family = AF_APPLETALK; sat.sat_addr.s_net = net; if (( aa = (struct at_ifaddr *)at_ifawithnet( &sat, @@ -463,16 +363,10 @@ at_aarpinput( struct arpcom *ac, struct mbuf *m) * that someone's saying they have the same source address * as the one we're using. Get upset... */ -#ifndef _IBMR2 -#ifdef ultrix - mprintf( LOG_ERR, -#else ultrix log( LOG_ERR, -#endif ultrix "aarp: duplicate AT address!! %x:%x:%x:%x:%x:%x\n", ea->aarp_sha[ 0 ], ea->aarp_sha[ 1 ], ea->aarp_sha[ 2 ], ea->aarp_sha[ 3 ], ea->aarp_sha[ 4 ], ea->aarp_sha[ 5 ]); -#endif _IBMR2 m_freem( m ); return; } @@ -495,32 +389,11 @@ at_aarpinput( struct arpcom *ac, struct mbuf *m) sizeof( ea->aarp_sha )); aat->aat_flags |= ATF_COM; if ( aat->aat_hold ) { -#ifdef _IBMR2 - /* - * Like in ddp_output(), we can't rely on the if_output - * routine to resolve AF_APPLETALK addresses, on the rs6k. - * So, we fill the destination ethernet address here. - * - * This should really be replaced with something like - * rsif_output(). XXX Will have to be for phase 2. - */ - /* XXX maybe fill in the rest of the frame header */ - sat.sat_family = AF_UNSPEC; - bcopy( aat->aat_enaddr, (*(struct sockaddr *)&sat).sa_data, - sizeof( aat->aat_enaddr )); -#else _IBMR2 -#ifdef BSD4_4 sat.sat_len = sizeof(struct sockaddr_at); -#endif BSD4_4 sat.sat_family = AF_APPLETALK; sat.sat_addr = spa; -#endif _IBMR2 (*ac->ac_if.if_output)( &ac->ac_if, aat->aat_hold, - (struct sockaddr *)&sat -#if defined( __FreeBSD__ ) - , NULL /* XXX */ -#endif __FreeBSD__ - ); + (struct sockaddr *)&sat, NULL); /* XXX */ aat->aat_hold = 0; } } @@ -546,47 +419,21 @@ at_aarpinput( struct arpcom *ac, struct mbuf *m) bcopy(( caddr_t )ea->aarp_sha, ( caddr_t )ea->aarp_tha, sizeof( ea->aarp_sha )); -#ifdef sun - bcopy(( caddr_t )&ac->ac_enaddr, ( caddr_t )ea->aarp_sha, - sizeof( ea->aarp_sha )); -#else sun bcopy(( caddr_t )ac->ac_enaddr, ( caddr_t )ea->aarp_sha, sizeof( ea->aarp_sha )); -#endif sun /* XXX */ eh = (struct ether_header *)sa.sa_data; -#ifdef sun - bcopy(( caddr_t )ea->aarp_tha, ( caddr_t )&eh->ether_dhost, - sizeof( eh->ether_dhost )); -#else sun bcopy(( caddr_t )ea->aarp_tha, ( caddr_t )eh->ether_dhost, sizeof( eh->ether_dhost )); -#endif sun if ( aa->aa_flags & AFA_PHASE2 ) { -#if defined(sun) && defined(i386) eh->ether_type = htons( sizeof( struct llc ) + sizeof( struct ether_aarp )); -#else - eh->ether_type = sizeof( struct llc ) + sizeof( struct ether_aarp ); -#endif -#ifdef BSD4_4 M_PREPEND( m, sizeof( struct llc ), M_DONTWAIT ); if ( m == NULL ) { return; } -#else BSD4_4 - MGET( m0, M_DONTWAIT, MT_HEADER ); - if ( m0 == NULL ) { - m_freem( m ); - return; - } - m0->m_next = m; - m = m0; - m->m_off = MMAXOFF - sizeof( struct llc ); - m->m_len = sizeof ( struct llc ); -#endif BSD4_4 llc = mtod( m, struct llc *); llc->llc_dsap = llc->llc_ssap = LLC_SNAP_LSAP; llc->llc_control = LLC_UI; @@ -596,26 +443,16 @@ at_aarpinput( struct arpcom *ac, struct mbuf *m) bcopy( ea->aarp_spnet, ea->aarp_tpnet, sizeof( ea->aarp_tpnet )); bcopy( &ma.s_net, ea->aarp_spnet, sizeof( ea->aarp_spnet )); } else { -#if defined(sun) && defined(i386) eh->ether_type = htons( ETHERTYPE_AARP ); -#else - eh->ether_type = ETHERTYPE_AARP; -#endif } ea->aarp_tpnode = ea->aarp_spnode; ea->aarp_spnode = ma.s_node; ea->aarp_op = htons( AARPOP_RESPONSE ); -#ifdef BSD4_4 sa.sa_len = sizeof( struct sockaddr ); -#endif BSD4_4 sa.sa_family = AF_UNSPEC; - (*ac->ac_if.if_output)( &ac->ac_if, m, &sa -#if defined( __FreeBSD__ ) - , NULL /* XXX */ -#endif - ); + (*ac->ac_if.if_output)( &ac->ac_if, m, &sa, NULL); /* XXX */ return; } @@ -703,20 +540,12 @@ aarpprobe( struct arpcom *ac ) timeout( (timeout_func_t)aarpprobe, (caddr_t)ac, hz / 5 ); } -#ifdef BSD4_4 if (( m = m_gethdr( M_DONTWAIT, MT_DATA )) == NULL ) { return; } m->m_len = sizeof( *ea ); m->m_pkthdr.len = sizeof( *ea ); MH_ALIGN( m, sizeof( *ea )); -#else BSD4_4 - if (( m = m_get( M_DONTWAIT, MT_DATA )) == NULL ) { - return; - } - m->m_len = sizeof( *ea ); - m->m_off = MMAXOFF - sizeof( *ea ); -#endif BSD4_4 ea = mtod( m, struct ether_aarp *); bzero((caddr_t)ea, sizeof( *ea )); @@ -726,36 +555,17 @@ aarpprobe( struct arpcom *ac ) ea->aarp_hln = sizeof( ea->aarp_sha ); ea->aarp_pln = sizeof( ea->aarp_spu ); ea->aarp_op = htons( AARPOP_PROBE ); -#ifdef sun - bcopy((caddr_t)&ac->ac_enaddr, (caddr_t)ea->aarp_sha, - sizeof( ea->aarp_sha )); -#else sun bcopy((caddr_t)ac->ac_enaddr, (caddr_t)ea->aarp_sha, sizeof( ea->aarp_sha )); -#endif sun eh = (struct ether_header *)sa.sa_data; if ( aa->aa_flags & AFA_PHASE2 ) { -#ifdef sun - bcopy((caddr_t)atmulticastaddr, (caddr_t)&eh->ether_dhost, - sizeof( eh->ether_dhost )); -#else sun bcopy((caddr_t)atmulticastaddr, (caddr_t)eh->ether_dhost, sizeof( eh->ether_dhost )); -#endif sun -#if defined(sun) && defined(i386) eh->ether_type = htons( sizeof( struct llc ) + sizeof( struct ether_aarp )); -#else - eh->ether_type = sizeof( struct llc ) + sizeof( struct ether_aarp ); -#endif -#ifdef BSD4_4 M_PREPEND( m, sizeof( struct llc ), M_WAIT ); -#else BSD4_4 - m->m_len += sizeof( struct llc ); - m->m_off -= sizeof( struct llc ); -#endif BSD4_4 llc = mtod( m, struct llc *); llc->llc_dsap = llc->llc_ssap = LLC_SNAP_LSAP; llc->llc_control = LLC_UI; @@ -768,18 +578,9 @@ aarpprobe( struct arpcom *ac ) sizeof( ea->aarp_tpnet )); ea->aarp_spnode = ea->aarp_tpnode = AA_SAT( aa )->sat_addr.s_node; } else { -#ifdef sun - bcopy((caddr_t)ðerbroadcastaddr, (caddr_t)&eh->ether_dhost, - sizeof( eh->ether_dhost )); -#else sun bcopy((caddr_t)etherbroadcastaddr, (caddr_t)eh->ether_dhost, sizeof( eh->ether_dhost )); -#endif sun -#if defined(sun) && defined(i386) eh->ether_type = htons( ETHERTYPE_AARP ); -#else - eh->ether_type = ETHERTYPE_AARP; -#endif ea->aarp_spa = ea->aarp_tpa = AA_SAT( aa )->sat_addr.s_node; } @@ -789,15 +590,9 @@ aarpprobe( struct arpcom *ac ) AA_SAT( aa )->sat_addr.s_node); #endif NETATALKDEBUG -#ifdef BSD4_4 sa.sa_len = sizeof( struct sockaddr ); -#endif BSD4_4 sa.sa_family = AF_UNSPEC; - (*ac->ac_if.if_output)(&ac->ac_if, m, &sa -#if defined( __FreeBSD__ ) - , NULL /* XXX */ -#endif __FreeBSD__ - ); + (*ac->ac_if.if_output)(&ac->ac_if, m, &sa, NULL); /* XXX */ aa->aa_probcnt--; } diff --git a/sys/netatalk/aarp.h b/sys/netatalk/aarp.h index 4911538a6b79..d97c31fadd06 100644 --- a/sys/netatalk/aarp.h +++ b/sys/netatalk/aarp.h @@ -55,8 +55,6 @@ struct aarptab { #ifdef KERNEL struct aarptab *aarptnew(struct at_addr *); -#if !defined( __FreeBSD__ ) -int aarpprobe(); -#endif #endif + #endif /* _NETATALK_AARP_H_ */ diff --git a/sys/netatalk/at.h b/sys/netatalk/at.h index eca11fb50cda..d9b469139719 100644 --- a/sys/netatalk/at.h +++ b/sys/netatalk/at.h @@ -58,11 +58,7 @@ struct at_addr { u_char s_node; }; -#if defined( BSD4_4 ) && !defined( __FreeBSD__ ) -#define ATADDR_ANYNET (u_short)0xffff -#else #define ATADDR_ANYNET (u_short)0x0000 -#endif #define ATADDR_ANYNODE (u_char)0x00 #define ATADDR_ANYPORT (u_char)0x00 #define ATADDR_BCAST (u_char)0xff /* There is no BCAST for NET */ @@ -75,32 +71,11 @@ struct at_addr { * by the kernel. */ struct sockaddr_at { -#ifdef BSD4_4 u_char sat_len; u_char sat_family; -#else BSD4_4 - short sat_family; -#endif BSD4_4 u_char sat_port; struct at_addr sat_addr; -#ifdef notdef - struct { - u_char sh_type; -# define SATHINT_NONE 0 -# define SATHINT_CONFIG 1 -# define SATHINT_IFACE 2 - union { - char su_zero[ 7 ]; /* XXX check size */ - struct { - u_char sr_phase; - u_short sr_firstnet, sr_lastnet; - } su_range; - u_short su_interface; - } sh_un; - } sat_hints; -#else notdef - char sat_zero[ 8 ]; -#endif notdef + char sat_zero[ 8 ]; /* Hide a struct netrange in here */ }; struct netrange { diff --git a/sys/netatalk/at_control.c b/sys/netatalk/at_control.c index 5a1294f6ce81..8ae0f62b98f5 100644 --- a/sys/netatalk/at_control.c +++ b/sys/netatalk/at_control.c @@ -5,31 +5,19 @@ #include #include -#ifdef ibm032 -#include -#endif ibm032 #include -#ifndef BSD4_4 -#include -#endif #include #include #include #include -#ifndef _IBMR2 #include -#endif _IBMR2 #include #include #include -/* #include */ #include #include #undef s_net #include -#ifdef _IBMR2 -#include -#endif _IBMR2 #include "at.h" #include "at_var.h" @@ -37,47 +25,21 @@ #include "phase2.h" #include +static int aa_addrangeroute(struct ifaddr *ifa, int first, int last); +static int aa_addsingleroute(struct ifaddr *ifa, + struct at_addr *addr, struct at_addr *mask); +static int aa_delsingleroute(struct ifaddr *ifa, + struct at_addr *addr, struct at_addr *mask); +static int aa_dosingleroute(struct ifaddr *ifa, struct at_addr *addr, + struct at_addr *mask, int cmd, int flags); static int at_scrub( struct ifnet *ifp, struct at_ifaddr *aa ); static int at_ifinit( struct ifnet *ifp, struct at_ifaddr *aa, struct sockaddr_at *sat ); -#ifdef BSD4_4 # define sateqaddr(a,b) ((a)->sat_len == (b)->sat_len && \ (a)->sat_family == (b)->sat_family && \ (a)->sat_addr.s_net == (b)->sat_addr.s_net && \ (a)->sat_addr.s_node == (b)->sat_addr.s_node ) -#else BSD4_4 -atalk_hash( sat, hp ) - struct sockaddr_at *sat; - struct afhash *hp; -{ - hp->afh_nethash = sat->sat_addr.s_net; - hp->afh_hosthash = ( sat->sat_addr.s_net << 8 ) + - sat->sat_addr.s_node; -} - -/* - * Note the magic to get ifa_ifwithnet() to work without adding an - * ifaddr entry for each net in our local range. - */ -int -atalk_netmatch( sat1, sat2 ) - struct sockaddr_at *sat1, *sat2; -{ - struct at_ifaddr *aa; - - for ( aa = at_ifaddr; aa; aa = aa->aa_next ) { - if ( AA_SAT( aa ) == sat1 ) { - break; - } - } - if ( aa ) { - return( ntohs( aa->aa_firstnet ) <= ntohs( sat2->sat_addr.s_net ) && - ntohs( aa->aa_lastnet ) >= ntohs( sat2->sat_addr.s_net )); - } - return( sat1->sat_addr.s_net == sat2->sat_addr.s_net ); -} -#endif BSD4_4 int at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) @@ -85,10 +47,8 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) struct ifreq *ifr = (struct ifreq *)data; struct sockaddr_at *sat; struct netrange *nr; -#ifdef BSD4_4 struct at_aliasreq *ifra = (struct at_aliasreq *)data; struct at_ifaddr *aa0; -#endif BSD4_4 struct at_ifaddr *aa = 0; struct mbuf *m; struct ifaddr *ifa; @@ -100,7 +60,6 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) } switch ( cmd ) { -#ifdef BSD4_4 case SIOCAIFADDR: case SIOCDIFADDR: if ( ifra->ifra_addr.sat_family == AF_APPLETALK ) { @@ -115,26 +74,11 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) return( EADDRNOTAVAIL ); } /*FALLTHROUGH*/ -#endif BSD4_4 case SIOCSIFADDR: -#ifdef BSD4_4 - /* - * What a great idea this is: Let's reverse the meaning of - * the return... - */ -#if defined( __FreeBSD__ ) if ( suser(p->p_ucred, &p->p_acflag) ) { -#else - if ( suser( u.u_cred, &u.u_acflag )) { -#endif return( EPERM ); } -#else BSD4_4 - if ( !suser()) { - return( EPERM ); - } -#endif BSD4_4 sat = satosat( &ifr->ifr_addr ); nr = (struct netrange *)sat->sat_zero; @@ -191,11 +135,9 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) ifp->if_addrlist = (struct ifaddr *)aa; } -#ifdef BSD4_4 aa->aa_ifa.ifa_addr = (struct sockaddr *)&aa->aa_addr; aa->aa_ifa.ifa_dstaddr = (struct sockaddr *)&aa->aa_addr; aa->aa_ifa.ifa_netmask = (struct sockaddr *)&aa->aa_netmask; -#endif BSD4_4 /* * Set/clear the phase 2 bit. @@ -236,17 +178,17 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) switch ( cmd ) { case SIOCGIFADDR: -#ifdef BSD4_4 - *(struct sockaddr_at *)&ifr->ifr_addr = aa->aa_addr; -#else BSD4_4 - ifr->ifr_addr = aa->aa_addr; -#endif BSD4_4 + sat = (struct sockaddr_at *)&ifr->ifr_addr; + *sat = aa->aa_addr; + ((struct netrange *)&sat->sat_zero)->nr_phase + = (aa->aa_flags & AFA_PHASE2) ? 2 : 1; + ((struct netrange *)&sat->sat_zero)->nr_firstnet = aa->aa_firstnet; + ((struct netrange *)&sat->sat_zero)->nr_lastnet = aa->aa_lastnet; break; case SIOCSIFADDR: return( at_ifinit( ifp, aa, (struct sockaddr_at *)&ifr->ifr_addr )); -#ifdef BSD4_4 case SIOCAIFADDR: if ( sateqaddr( &ifra->ifra_addr, &aa->aa_addr )) { return( 0 ); @@ -283,7 +225,6 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) } m_free( dtom( aa0 )); break; -#endif BSD4_4 default: if ( ifp == 0 || ifp->if_ioctl == 0 ) @@ -292,60 +233,25 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) } return( 0 ); } + static int at_scrub( ifp, aa ) struct ifnet *ifp; struct at_ifaddr *aa; { -#ifndef BSD4_4 - struct sockaddr_at netsat; - u_short net; -#endif BSD4_4 int error; if ( aa->aa_flags & AFA_ROUTE ) { -#ifdef BSD4_4 if (( error = rtinit( &(aa->aa_ifa), RTM_DELETE, ( ifp->if_flags & IFF_LOOPBACK ) ? RTF_HOST : 0 )) != 0 ) { return( error ); } aa->aa_ifa.ifa_flags &= ~IFA_ROUTE; -#else BSD4_4 - if ( ifp->if_flags & IFF_LOOPBACK ) { - rtinit( &aa->aa_addr, &aa->aa_addr, SIOCDELRT, RTF_HOST ); - } else { - bzero( &netsat, sizeof( struct sockaddr_at )); - netsat.sat_family = AF_APPLETALK; - netsat.sat_addr.s_node = ATADDR_ANYNODE; - - /* - * If the range is the full 0-fffe range, just use - * the default route. - */ - if ( aa->aa_firstnet == htons( 0x0000 ) && - aa->aa_lastnet == htons( 0xfffe )) { - netsat.sat_addr.s_net = 0; - rtinit((struct sockaddr *)&netsat, &aa->aa_addr, - (int)SIOCDELRT, 0 ); - } else { - for ( net = ntohs( aa->aa_firstnet ); - net <= ntohs( aa->aa_lastnet ); net++ ) { - netsat.sat_addr.s_net = htons( net ); - rtinit((struct sockaddr *)&netsat, &aa->aa_addr, - (int)SIOCDELRT, 0 ); - } - } - } -#endif BSD4_4 aa->aa_flags &= ~AFA_ROUTE; } return( 0 ); } -#if !defined( __FreeBSD__ ) -extern struct timeval time; -#endif __FreeBSD__ - static int at_ifinit( ifp, aa, sat ) struct ifnet *ifp; @@ -353,18 +259,15 @@ at_ifinit( ifp, aa, sat ) struct sockaddr_at *sat; { struct netrange nr, onr; -#ifdef BSD4_4 struct sockaddr_at oldaddr; -#else BSD4_4 - struct sockaddr oldaddr; -#endif BSD4_4 - struct sockaddr_at netaddr; - int s = splimp(), error = 0, i, j, netinc, nodeinc, nnets; + int s = splimp(), error = 0, i, j; + int flags = RTF_UP, netinc, nodeinc, nnets; u_short net; oldaddr = aa->aa_addr; bzero( AA_SAT( aa ), sizeof( struct sockaddr_at )); bcopy( sat->sat_zero, &nr, sizeof( struct netrange )); + bcopy( sat->sat_zero, AA_SAT( aa )->sat_zero, sizeof( struct netrange )); nnets = ntohs( nr.nr_lastnet ) - ntohs( nr.nr_firstnet ) + 1; onr.nr_firstnet = aa->aa_firstnet; @@ -372,6 +275,13 @@ at_ifinit( ifp, aa, sat ) aa->aa_firstnet = nr.nr_firstnet; aa->aa_lastnet = nr.nr_lastnet; +/* XXX ALC */ + printf("at_ifinit: %s: %u.%u range %u-%u phase %d\n", + ifp->if_name, + ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node, + ntohs(aa->aa_firstnet), ntohs(aa->aa_lastnet), + (aa->aa_flags & AFA_PHASE2) ? 2 : 1); + /* * We could eliminate the need for a second phase 1 probe (post * autoconf) if we check whether we're resetting the node. Note @@ -379,17 +289,17 @@ at_ifinit( ifp, aa, sat ) * phase 2, both the net and node must be the same. */ if ( ifp->if_flags & IFF_LOOPBACK ) { -#ifdef BSD4_4 AA_SAT( aa )->sat_len = sat->sat_len; -#endif BSD4_4 AA_SAT( aa )->sat_family = AF_APPLETALK; AA_SAT( aa )->sat_addr.s_net = sat->sat_addr.s_net; AA_SAT( aa )->sat_addr.s_node = sat->sat_addr.s_node; +#if 0 + } else if ( fp->if_flags & IFF_POINTOPOINT) { + /* unimplemented */ +#endif } else { aa->aa_flags |= AFA_PROBING; -#ifdef BSD4_4 AA_SAT( aa )->sat_len = sizeof(struct sockaddr_at); -#endif BSD4_4 AA_SAT( aa )->sat_family = AF_APPLETALK; if ( aa->aa_flags & AFA_PHASE2 ) { if ( sat->sat_addr.s_net == ATADDR_ANYNET ) { @@ -431,14 +341,8 @@ at_ifinit( ifp, aa, sat ) aa->aa_probcnt = 10; timeout( (timeout_func_t)aarpprobe, (caddr_t)ifp, hz / 5 ); splx( s ); - if ( -#if defined( __FreeBSD__ ) - tsleep( aa, PPAUSE|PCATCH, "at_ifinit", 0 ) -#else - sleep( aa, PSLEP|PCATCH ) -#endif - ) { - printf( "at_ifinit why did this happen?!\n" ); + if ( tsleep( aa, PPAUSE|PCATCH, "at_ifinit", 0 )) { + printf( "at_ifinit: why did this happen?!\n" ); aa->aa_addr = oldaddr; aa->aa_firstnet = onr.nr_firstnet; aa->aa_lastnet = onr.nr_lastnet; @@ -467,86 +371,79 @@ at_ifinit( ifp, aa, sat ) if ( ifp->if_ioctl && ( error = (*ifp->if_ioctl)( ifp, SIOCSIFADDR, (caddr_t)aa ))) { - splx( s ); aa->aa_addr = oldaddr; aa->aa_firstnet = onr.nr_firstnet; aa->aa_lastnet = onr.nr_lastnet; + splx( s ); return( error ); } -#ifdef BSD4_4 - aa->aa_netmask.sat_len = 6/*sizeof(struct sockaddr_at)*/; + /* Initialize interface netmask, which is silly for us */ + + bzero(&aa->aa_netmask, sizeof(aa->aa_netmask)); + aa->aa_netmask.sat_len = sizeof(struct sockaddr_at); aa->aa_netmask.sat_family = AF_APPLETALK; - aa->aa_netmask.sat_addr.s_net = 0xffff; - aa->aa_netmask.sat_addr.s_node = 0; -#if defined( __FreeBSD__ ) - aa->aa_ifa.ifa_netmask =(struct sockaddr *) &(aa->aa_netmask); /* XXX */ -#endif __FreeBSD__ -#endif BSD4_4 + aa->aa_ifa.ifa_netmask = (struct sockaddr *) &aa->aa_netmask; - if ( ifp->if_flags & IFF_LOOPBACK ) { -#ifndef BSD4_4 - rtinit( &aa->aa_addr, &aa->aa_addr, (int)SIOCADDRT, - RTF_HOST|RTF_UP ); -#else BSD4_4 - error = rtinit( &(aa->aa_ifa), (int)RTM_ADD, -#if !defined( __FreeBSD__ ) - RTF_HOST | -#else - /* XXX not a host route? */ -#endif __FreeBSD__ - RTF_UP ); -#endif BSD4_4 - } else { -#ifndef BSD4_4 - /* - * rtrequest looks for point-to-point links first. The - * broadaddr is in the same spot as the destaddr. So, if - * ATADDR_ANYNET is 0, and we don't fill in the broadaddr, we - * get 0.0 routed out the ether interface. So, initialize the - * broadaddr, even tho we don't use it. - * - * We *could* use the broadaddr field to reduce some of the - * sockaddr_at overloading that we've done. E.g. Just send - * to INTERFACE-NET.255, and have the kernel reroute that - * to broadaddr, which would be 0.255 for phase 2 interfaces, - * and IFACE-NET.255 for phase 1 interfaces. - */ - ((struct sockaddr_at *)&aa->aa_broadaddr)->sat_addr.s_net = - sat->sat_addr.s_net; - ((struct sockaddr_at *)&aa->aa_broadaddr)->sat_addr.s_node = - ATADDR_BCAST; + /* "Add a route to the network" */ - bzero( &netaddr, sizeof( struct sockaddr_at )); - netaddr.sat_family = AF_APPLETALK; - netaddr.sat_addr.s_node = ATADDR_ANYNODE; - if (( aa->aa_flags & AFA_PHASE2 ) == 0 ) { - netaddr.sat_addr.s_net = AA_SAT( aa )->sat_addr.s_net; - rtinit((struct sockaddr *)&netaddr, &aa->aa_addr, - (int)SIOCADDRT, RTF_UP ); - } else { - /* - * If the range is the full 0-fffe range, just use - * the default route. - */ - if ( aa->aa_firstnet == htons( 0x0000 ) && - aa->aa_lastnet == htons( 0xfffe )) { - netaddr.sat_addr.s_net = 0; - rtinit((struct sockaddr *)&netaddr, &aa->aa_addr, - (int)SIOCADDRT, RTF_UP ); - } else { - for ( net = ntohs( aa->aa_firstnet ); - net <= ntohs( aa->aa_lastnet ); net++ ) { - netaddr.sat_addr.s_net = htons( net ); - rtinit((struct sockaddr *)&netaddr, &aa->aa_addr, - (int)SIOCADDRT, RTF_UP ); - } - } - } -#else BSD4_4 - error = rtinit( &(aa->aa_ifa), (int)RTM_ADD, RTF_UP ); -#endif BSD4_4 + aa->aa_ifa.ifa_metric = ifp->if_metric; + if (ifp->if_flags & IFF_BROADCAST) { + bzero(&aa->aa_broadaddr, sizeof(aa->aa_broadaddr)); + aa->aa_broadaddr.sat_len = sat->sat_len; + aa->aa_broadaddr.sat_family = AF_APPLETALK; + aa->aa_broadaddr.sat_addr.s_net = htons(0); + aa->aa_broadaddr.sat_addr.s_node = 0xff; + aa->aa_ifa.ifa_broadaddr = (struct sockaddr *) &aa->aa_broadaddr; + aa->aa_netmask.sat_addr.s_net = htons(0xffff); /* XXX */ + aa->aa_netmask.sat_addr.s_node = htons(0); /* XXX */ + } else if (ifp->if_flags & IFF_LOOPBACK) { + aa->aa_ifa.ifa_dstaddr = aa->aa_ifa.ifa_addr; + aa->aa_netmask.sat_addr.s_net = htons(0xffff); /* XXX */ + aa->aa_netmask.sat_addr.s_node = htons(0xffff); /* XXX */ + flags |= RTF_HOST; + } else if (ifp->if_flags & IFF_POINTOPOINT) { + aa->aa_ifa.ifa_dstaddr = aa->aa_ifa.ifa_addr; + aa->aa_netmask.sat_addr.s_net = htons(0xffff); + aa->aa_netmask.sat_addr.s_node = htons(0xffff); + flags |= RTF_HOST; } + error = rtinit(&(aa->aa_ifa), (int)RTM_ADD, flags); + +#if 0 + if ( ifp->if_flags & IFF_LOOPBACK ) { + struct at_addr rtaddr, rtmask; + + bzero(&rtaddr, sizeof(rtaddr)); + bzero(&rtmask, sizeof(rtmask)); + rtaddr.s_net = AA_SAT( aa )->sat_addr.s_net; + rtaddr.s_node = AA_SAT( aa )->sat_addr.s_node; + rtmask.s_net = 0xffff; + rtmask.s_node = 0xff; + + error = aa_addsingleroute(&aa->aa_ifa, &rtaddr, &rtmask); + + } else { + + /* Install routes for our own network, and then also for + all networks above and below it in the network range */ + + error = aa_addrangeroute(&aa->aa_ifa, + ntohs(aa->aa_addr.sat_addr.s_net), + ntohs(aa->aa_addr.sat_addr.s_net) + 1); + if (!error + && ntohs(aa->aa_firstnet) < ntohs(aa->aa_addr.sat_addr.s_net)) + error = aa_addrangeroute(&aa->aa_ifa, + ntohs(aa->aa_firstnet), ntohs(aa->aa_addr.sat_addr.s_net)); + if (!error + && ntohs(aa->aa_addr.sat_addr.s_net) < ntohs(aa->aa_lastnet)) + error = aa_addrangeroute(&aa->aa_ifa, + ntohs(aa->aa_addr.sat_addr.s_net) + 1, + ntohs(aa->aa_lastnet) + 1); + } +#endif + + if ( error ) { aa->aa_addr = oldaddr; aa->aa_firstnet = onr.nr_firstnet; @@ -555,9 +452,7 @@ at_ifinit( ifp, aa, sat ) return( error ); } -#ifdef BSD4_4 aa->aa_ifa.ifa_flags |= IFA_ROUTE; -#endif BSD4_4 aa->aa_flags |= AFA_ROUTE; splx( s ); return( 0 ); @@ -586,6 +481,146 @@ at_broadcast( sat ) return( 0 ); } +/* + * aa_addrangeroute() + * + * Add a route for a range of networks from bot to top - 1. + * Algorithm: + * + * Split the range into three subranges such that the middle + * subrange is from (base + 2^N) to (base + 2^N + 2^(N-1)) for + * some N. Then add a route for the middle range and recurse on + * the upper and lower sub-ranges. As a degenerate case, it may + * be that the middle subrange is empty. + */ + +static int +aa_addrangeroute(struct ifaddr *ifa, int bot, int top) +{ + int base, mask, mbot, mtop; + int a, b, abit, bbit, error; + struct at_addr rtaddr, rtmask; + +/* Special case the whole range */ + + if (bot == 0 && top == 0xffff) + { + bzero(&rtaddr, sizeof(rtaddr)); + bzero(&rtmask, sizeof(rtmask)); + return(aa_addsingleroute(ifa, &rtaddr, &rtmask)); + } + + if (top <= bot) + panic("aa_addrangeroute"); + +/* Mask out the high order bits on which both bounds agree */ + + for (mask = 0xffff; (bot & mask) != (top & mask); mask <<= 1); + base = bot & mask; + a = bot & ~mask; + b = top & ~mask; + +/* Find suitable powers of two between a and b we can make a route with */ + + for (bbit = 0x8000; bbit > b; bbit >>= 1); + if (a == 0) + abit = 0; + else + { + for (abit = 0x0001; a > abit; abit <<= 1); + if ((abit << 1) > bbit) + bbit = abit; + else + bbit = abit << 1; + } + +/* Now we have a "square" middle chunk from abit to bbit, possibly empty */ + + mbot = base + abit; + mtop = base + bbit; + mask = ~(bbit - 1); + +/* Route to the middle chunk */ + + if (mbot < mtop) + { + bzero(&rtaddr, sizeof(rtaddr)); + bzero(&rtmask, sizeof(rtmask)); + rtaddr.s_net = htons((u_short) mbot); + rtmask.s_net = htons((u_short) mask); + if ((error = aa_addsingleroute(ifa, &rtaddr, &rtmask))) + return(error); + } + +/* Recurse on the upper and lower chunks we didn't get to */ + + if (bot < mbot) + if ((error = aa_addrangeroute(ifa, bot, mbot))) + { + if (mbot < mtop) + aa_delsingleroute(ifa, &rtaddr, &rtmask); + return(error); + } + if (mtop < top) + if ((error = aa_addrangeroute(ifa, mtop, top))) + { + if (mbot < mtop) + aa_delsingleroute(ifa, &rtaddr, &rtmask); + return(error); + } + return(0); +} + +static int +aa_addsingleroute(struct ifaddr *ifa, + struct at_addr *addr, struct at_addr *mask) +{ + int error; + + printf("aa_addsingleroute: %x.%x mask %x.%x ...\n", + ntohs(addr->s_net), addr->s_node, + ntohs(mask->s_net), mask->s_node); + + error = aa_dosingleroute(ifa, addr, mask, RTM_ADD, RTF_UP); + if (error) + printf("error %d\n", error); + return(error); +} + +static int +aa_delsingleroute(struct ifaddr *ifa, + struct at_addr *addr, struct at_addr *mask) +{ + int error; + + error = aa_dosingleroute(ifa, addr, mask, RTM_DELETE, 0); + if (error) + printf("aa_delsingleroute: error %d\n", error); + return(error); +} + +static int +aa_dosingleroute(struct ifaddr *ifa, + struct at_addr *at_addr, struct at_addr *at_mask, int cmd, int flags) +{ + struct sockaddr_at addr, mask; + + bzero(&addr, sizeof(addr)); + bzero(&mask, sizeof(mask)); + addr.sat_family = AF_APPLETALK; + addr.sat_len = sizeof(struct sockaddr_at); + addr.sat_addr.s_net = at_addr->s_net; + addr.sat_addr.s_node = at_addr->s_node; + mask.sat_addr.s_net = at_mask->s_net; + mask.sat_addr.s_node = at_mask->s_node; + if (at_mask->s_node) + flags |= RTF_HOST; + return(rtrequest(cmd, (struct sockaddr *) &addr, ifa->ifa_addr, + (struct sockaddr *) &mask, flags, NULL)); +} + +#if 0 + static void aa_clean(void) { @@ -612,3 +647,6 @@ aa_clean(void) } } } + +#endif + diff --git a/sys/netatalk/at_proto.c b/sys/netatalk/at_proto.c index 0c8fdbffc71f..ce830b6c30d8 100644 --- a/sys/netatalk/at_proto.c +++ b/sys/netatalk/at_proto.c @@ -28,14 +28,12 @@ #include #include -#if defined( __FreeBSD__ ) #include #include #include #include #include #include -#endif #include "at.h" #include "ddp.h" @@ -44,12 +42,6 @@ #include -#ifdef ultrix -extern int ddp_ifoutput(); -extern int ddp_ifinput(); -extern int ddp_ifioctl(); -#endif ultrix - struct protosw atalksw[] = { { /* Identifiers */ @@ -67,29 +59,16 @@ struct protosw atalksw[] = { ddp_usrreq, /* utility routines. */ ddp_init, 0, 0, 0, -#ifdef ultrix - /* interface hooks */ - ddp_ifoutput, ddp_ifinput, ddp_ifioctl, 0, -#endif ultrix }, }; -#if defined( __FreeBSD__ ) && defined ( NETATALKDEBUG ) -extern int at_inithead(); -#endif - struct domain atalkdomain = { AF_APPLETALK, "appletalk", 0, 0, 0, - atalksw, &atalksw[sizeof(atalksw)/sizeof(atalksw[0])] -#if defined( __FreeBSD__ ) -#ifdef NETATALKDEBUG - , 0, at_inithead, 32, sizeof(struct sockaddr_at) -#else - , 0, rn_inithead, 32, sizeof(struct sockaddr_at) -#endif -#endif + atalksw, &atalksw[sizeof(atalksw)/sizeof(atalksw[0])], + 0, rn_inithead, + ((caddr_t) &((struct sockaddr_at *) 0)->sat_addr - (caddr_t)0), + sizeof(struct sockaddr_at) }; -#if defined( __FreeBSD__ ) DOMAIN_SET(atalk); -#endif + diff --git a/sys/netatalk/at_rmx.c b/sys/netatalk/at_rmx.c index 73747b64e9d5..2dc4ffd89663 100644 --- a/sys/netatalk/at_rmx.c +++ b/sys/netatalk/at_rmx.c @@ -78,7 +78,6 @@ at_addroute(void *v_arg, void *n_arg, struct radix_node_head *head, struct radix_node *treenodes) { struct radix_node *rn; - struct sockaddr_at *dst = v_arg, *mask = n_arg; printf("at_addroute: v=%s\n", prsockaddr(v_arg)); printf("at_addroute: n=%s\n", prsockaddr(n_arg)); @@ -95,7 +94,6 @@ static struct radix_node * at_matroute(void *v_arg, struct radix_node_head *head) { struct radix_node *rn; - struct sockaddr_at *dst = v_arg; printf("at_matroute: v=%s\n", prsockaddr(v_arg)); printf("at_matroute: head=%x\n", head); diff --git a/sys/netatalk/at_var.h b/sys/netatalk/at_var.h index 31b452651755..49af480f6cf5 100644 --- a/sys/netatalk/at_var.h +++ b/sys/netatalk/at_var.h @@ -30,22 +30,16 @@ struct at_ifaddr { struct ifaddr aa_ifa; # define aa_ifp aa_ifa.ifa_ifp -#ifdef BSD4_4 struct sockaddr_at aa_addr; struct sockaddr_at aa_broadaddr; +# define aa_dstaddr aa_netmask struct sockaddr_at aa_netmask; -#else BSD4_4 -# define aa_addr aa_ifa.ifa_addr -# define aa_broadaddr aa_ifa.ifa_broadaddr -# define aa_dstaddr aa_ifa.ifa_dstaddr -#endif BSD4_4 int aa_flags; u_short aa_firstnet, aa_lastnet; int aa_probcnt; struct at_ifaddr *aa_next; }; -#ifdef BSD4_4 struct at_aliasreq { char ifra_name[IFNAMSIZ]; /* if name, e.g. "en0" */ struct sockaddr_at ifra_addr; @@ -53,7 +47,6 @@ struct at_aliasreq { #define ifra_dstaddr ifra_broadaddr struct sockaddr_at ifra_mask; }; -#endif BSD4_4 #define AA_SAT(aa) \ ((struct sockaddr_at *)&((struct at_ifaddr *)(aa))->aa_addr) @@ -68,4 +61,5 @@ struct at_ifaddr *at_ifaddr; struct ifqueue atintrq1, atintrq2; int atdebug; #endif + #endif /* _NETATALK_AT_VAR_H_ */ diff --git a/sys/netatalk/ddp_input.c b/sys/netatalk/ddp_input.c index 45a0c28cb89f..ca8c0f19080c 100644 --- a/sys/netatalk/ddp_input.c +++ b/sys/netatalk/ddp_input.c @@ -5,20 +5,15 @@ #include #include -#if defined( __FreeBSD__ ) #include #include #include -#endif __FreeBSD__ #include #include #include #include #include #include -#ifdef _IBMR2 -#include -#endif _IBMR2 #include #include @@ -47,27 +42,17 @@ atintr( void ) int s; for (;;) { -#ifndef _IBMR2 s = splimp(); -#endif _IBMR2 -#ifdef BSD4_4 IF_DEQUEUE( &atintrq2, m ); -#else BSD4_4 - IF_DEQUEUEIF( &atintrq2, m, ifp ); -#endif BSD4_4 -#ifndef _IBMR2 splx( s ); -#endif _IBMR2 if ( m == 0 ) { /* no more queued packets */ break; } -#ifdef BSD4_4 ifp = m->m_pkthdr.rcvif; -#endif BSD4_4 for ( aa = at_ifaddr; aa; aa = aa->aa_next ) { if ( aa->aa_ifp == ifp && ( aa->aa_flags & AFA_PHASE2 )) { break; @@ -82,27 +67,17 @@ atintr( void ) } for (;;) { -#ifndef _IBMR2 s = splimp(); -#endif _IBMR2 -#ifdef BSD4_4 IF_DEQUEUE( &atintrq1, m ); -#else BSD4_4 - IF_DEQUEUEIF( &atintrq1, m, ifp ); -#endif BSD4_4 -#ifndef _IBMR2 splx( s ); -#endif _IBMR2 if ( m == 0 ) { /* no more queued packets */ break; } -#ifdef BSD4_4 ifp = m->m_pkthdr.rcvif; -#endif BSD4_4 for ( aa = at_ifaddr; aa; aa = aa->aa_next ) { if ( aa->aa_ifp == ifp && ( aa->aa_flags & AFA_PHASE2 ) == 0 ) { break; @@ -132,9 +107,7 @@ atintr( void ) return; } -#if defined( __FreeBSD__ ) NETISR_SET(NETISR_ATALK, atintr); -#endif __FreeBSD__ struct route forwro; @@ -148,13 +121,10 @@ ddp_input( m, ifp, elh, phase ) struct sockaddr_at from, to; struct ddpshdr *dsh, ddps; struct at_ifaddr *aa; - struct ddpehdr *deh, ddpe; -#ifndef BSD4_4 - struct mbuf *mp; -#endif BSD4_4 + struct ddpehdr *deh = NULL, ddpe; struct ddpcb *ddp; int dlen, mlen; - u_short cksum; + u_short cksum = 0; bzero( (caddr_t)&from, sizeof( struct sockaddr_at )); if ( elh ) { @@ -255,13 +225,7 @@ ddp_input( m, ifp, elh, phase ) * at a link layer. We do this before we attempt to forward a packet, * possibly on a different media. */ -#ifdef BSD4_4 mlen = m->m_pkthdr.len; -#else BSD4_4 - for ( mlen = 0, mp = m; mp; mp = mp->m_next ) { - mlen += mp->m_len; - } -#endif BSD4_4 if ( mlen < dlen ) { ddpstat.ddps_toosmall++; m_freem( m ); @@ -285,18 +249,12 @@ ddp_input( m, ifp, elh, phase ) to.sat_addr.s_net || satosat( &forwro.ro_dst )->sat_addr.s_node != to.sat_addr.s_node )) { -#ifdef ultrix - rtfree( forwro.ro_rt ); -#else ultrix RTFREE( forwro.ro_rt ); -#endif ultrix forwro.ro_rt = (struct rtentry *)0; } if ( forwro.ro_rt == (struct rtentry *)0 || forwro.ro_rt->rt_ifp == (struct ifnet *)0 ) { -#ifdef BSD4_4 forwro.ro_dst.sa_len = sizeof( struct sockaddr_at ); -#endif BSD4_4 forwro.ro_dst.sa_family = AF_APPLETALK; satosat( &forwro.ro_dst )->sat_addr.s_net = to.sat_addr.s_net; satosat( &forwro.ro_dst )->sat_addr.s_node = to.sat_addr.s_node; @@ -326,9 +284,7 @@ ddp_input( m, ifp, elh, phase ) return; } -#ifdef BSD4_4 from.sat_len = sizeof( struct sockaddr_at ); -#endif BSD4_4 from.sat_family = AF_APPLETALK; if ( elh ) { @@ -356,6 +312,8 @@ ddp_input( m, ifp, elh, phase ) sorwakeup( ddp->ddp_socket ); } +#if 0 + #define BPXLEN 48 #define BPALEN 16 #include @@ -411,3 +369,4 @@ m_printm( struct mbuf *m ) bprint( mtod( m, char * ), m->m_len ); } } +#endif diff --git a/sys/netatalk/ddp_output.c b/sys/netatalk/ddp_output.c index 54a2c7a51cbf..be39935a70b5 100644 --- a/sys/netatalk/ddp_output.c +++ b/sys/netatalk/ddp_output.c @@ -23,9 +23,7 @@ #include #include -#if defined( __FreeBSD__ ) #include -#endif __FreeBSD__ #include #include #include @@ -50,44 +48,15 @@ int ddp_cksum = 1; int ddp_output( struct ddpcb *ddp, struct mbuf *m) { -#ifndef BSD4_4 - struct mbuf *m0; - int len; -#endif BSD4_4 - struct ifnet *ifp; - struct at_ifaddr *aa = NULL; struct ddpehdr *deh; - u_short net; -#ifdef BSD4_4 M_PREPEND( m, sizeof( struct ddpehdr ), M_WAIT ); -#else BSD4_4 - for ( len = 0, m0 = m; m; m = m->m_next ) { - len += m->m_len; - } - MGET( m, M_WAIT, MT_HEADER ); - if ( m == 0 ) { - m_freem( m0 ); - return( ENOBUFS ); - } - m->m_next = m0; -#endif BSD4_4 - -#ifndef BSD4_4 -# define align(a) (((a)+3)&0xfc) - m->m_off = MMINOFF + align( SZ_ELAPHDR ); - m->m_len = sizeof( struct ddpehdr ); -#endif BSD4_4 deh = mtod( m, struct ddpehdr *); deh->deh_pad = 0; deh->deh_hops = 0; -#ifdef BSD4_4 deh->deh_len = m->m_pkthdr.len; -#else BSD4_4 - deh->deh_len = len + sizeof( struct ddpehdr ); -#endif BSD4_4 deh->deh_dnet = ddp->ddp_fsat.sat_addr.s_net; deh->deh_dnode = ddp->ddp_fsat.sat_addr.s_node; @@ -145,15 +114,10 @@ ddp_route( struct mbuf *m, struct route *ro) struct mbuf *m0; struct at_ifaddr *aa = NULL; struct ifnet *ifp = NULL; - int mlen; u_short net; if ( ro->ro_rt && ( ifp = ro->ro_rt->rt_ifp )) { -#ifdef BSD4_4 net = satosat( ro->ro_rt->rt_gateway )->sat_addr.s_net; -#else BSD4_4 - net = satosat( &ro->ro_rt->rt_gateway )->sat_addr.s_net; -#endif BSD4_4 for ( aa = at_ifaddr; aa; aa = aa->aa_next ) { if ( aa->aa_ifp == ifp && ntohs( net ) >= ntohs( aa->aa_firstnet ) && @@ -174,35 +138,7 @@ printf( "ddp_route: oops\n" ); * This is bad for transition routing, since phase 1 and phase 2 * packets end up poorly aligned due to the three byte elap header. */ - if ( aa->aa_flags & AFA_PHASE2 ) { -#if defined( __FreeBSD__ ) - /* XXX don't need this because we can change if_ethersubr.c */ -#else - for ( mlen = 0, m0 = m; m0; m0 = m0->m_next ) { - mlen += m0->m_len; - } -#ifndef MIN -#define MIN(x,y) ((x)<(y)?(x):(y)) -#endif - if (( m = m_pullup( m, MIN( MLEN, mlen ))) == 0 ) { - printf("ddp_route: m_pullup of %d (mlen=%d) failed\n", - MIN( MLEN, mlen ), mlen); - return( ENOBUFS ); - } -#endif __FreeBSD__ - } else { -# ifdef notdef -#ifdef BSD4_4 - M_PREPEND( m, SZ_ELAPHDR, M_DONTWAIT ); - if ( m == NULL ) { - return( ENOBUFS ); - } -#else BSD4_4 - m->m_off -= SZ_ELAPHDR; - m->m_len += SZ_ELAPHDR; -#endif BSD4_4 -# endif notdef - + if ( !(aa->aa_flags & AFA_PHASE2) ) { MGET( m0, M_WAIT, MT_HEADER ); if ( m0 == 0 ) { m_freem( m ); @@ -210,12 +146,7 @@ printf( "ddp_route: oops\n" ); return( ENOBUFS ); } m0->m_next = m; - -#ifndef BSD4_4 - m0->m_off = MMINOFF + align( sizeof( struct ether_header )); -#else /* XXX perhaps we ought to align the header? */ -#endif BSD4_4 m0->m_len = SZ_ELAPHDR; m = m0; @@ -228,11 +159,7 @@ printf( "ddp_route: oops\n" ); ntohs( aa->aa_lastnet )) { elh->el_dnode = satosat( &ro->ro_dst )->sat_addr.s_node; } else { -#ifdef BSD4_4 elh->el_dnode = satosat( ro->ro_rt->rt_gateway )->sat_addr.s_node; -#else BSD4_4 - elh->el_dnode = satosat( &ro->ro_rt->rt_gateway )->sat_addr.s_node; -#endif BSD4_4 } } @@ -242,57 +169,10 @@ printf( "ddp_route: oops\n" ); ntohs( aa->aa_lastnet )) { gate = *satosat( &ro->ro_dst ); } else { -#ifdef BSD4_4 gate = *satosat( ro->ro_rt->rt_gateway ); -#else BSD4_4 - gate = *satosat( &ro->ro_rt->rt_gateway ); -#endif BSD4_4 } ro->ro_rt->rt_use++; -#ifdef ultrix - /* - * SAIEW: We can't make changes to net/if_loop.c, so we don't route - * further than this: if it's going to go through the lookback, - * short-circuit to ddp_input(). Who needs queuing? - * - * Note: Passing NULL for the elaphdr is cool, since we'll only ever - * try to send long form ddp throught the loopback. - */ - if ( ifp->if_flags & IFF_LOOPBACK ) { -#ifdef notdef - m->m_off += SZ_ELAPHDR; - m->m_len -= SZ_ELAPHDR; -#endif notdef - ddp_input( m, ifp, (struct elaphdr *)NULL, 2 ); - return( 0 ); - } -#endif ultrix - -#ifdef _IBMR2 - /* - * We can't make changes to the interface routines on RS6ks, and - * they don't provide hooks for if_output, so we just resolve - * our address here, and pass the packet as a raw ethernet packet. - * This doesn't work particularly well, if we aren't *on* ethernet, - * but it's ok for the moment. - */ - if ( ! ( ifp->if_flags & IFF_LOOPBACK )) { - struct ether_header eh; - - if ( !aarpresolve(( struct arpcom *)ifp, m, - &gate, eh.ether_dhost )) { - return( 0 ); - } - eh.ether_type = htons( ETHERTYPE_AT ); - gate.sat_family = AF_UNSPEC; - bcopy( &eh, (*(struct sockaddr *)&gate).sa_data, - sizeof( (*(struct sockaddr *)&gate).sa_data )); - } -#endif _IBMR2 - return((*ifp->if_output)( ifp, m, &gate -#if defined( __FreeBSD__ ) - , NULL /* XXX */ -#endif __FreeBSD__ - )); + return((*ifp->if_output)( ifp, + m, (struct sockaddr *)&gate, NULL)); /* XXX */ } diff --git a/sys/netatalk/ddp_pcb.c b/sys/netatalk/ddp_pcb.c index f2557bac12d2..a9886b822a8e 100644 --- a/sys/netatalk/ddp_pcb.c +++ b/sys/netatalk/ddp_pcb.c @@ -7,15 +7,7 @@ #include #include #include -#if defined( __FreeBSD__ ) #include -#endif __FreeBSD__ -#ifdef ibm032 -#include -#endif ibm032 -#ifndef __FreeBSD__ -#include -#endif #include #include #include @@ -25,9 +17,6 @@ #include #include #include -#ifdef _IBMR2 -#include -#endif _IBMR2 #include "at.h" #include "at_var.h" @@ -53,9 +42,7 @@ int ddp_usrreq( struct socket *so, int req, struct mbuf *m, struct mbuf *addr, struct mbuf *rights) { -#if defined( __FreeBSD__ ) struct proc *p = curproc; /* XXX */ -#endif __FreeBSD__ struct ddpcb *ddp; int error = 0; @@ -63,11 +50,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, if ( req == PRU_CONTROL ) { return( at_control( (int) m, (caddr_t) addr, - (struct ifnet *) rights -#if defined( __FreeBSD__ ) - , (struct proc *)p -#endif __FreeBSD__ - )); + (struct ifnet *) rights, (struct proc *)p )); } if ( rights && rights->m_len ) { @@ -97,11 +80,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, break; case PRU_BIND : - error = at_pcbsetaddr( ddp, addr -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - ); + error = at_pcbsetaddr( ddp, addr, p ); break; case PRU_SOCKADDR : @@ -114,11 +93,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, break; } - error = at_pcbconnect( ddp, addr -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - ); + error = at_pcbconnect( ddp, addr, p ); if ( error == 0 ) soisconnected( so ); break; @@ -146,11 +121,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, } s = splnet(); - error = at_pcbconnect( ddp, addr -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - ); + error = at_pcbconnect( ddp, addr, p ); if ( error ) { splx( s ); break; @@ -260,29 +231,16 @@ at_pcbsetaddr( struct ddpcb *ddp, struct mbuf *addr, struct proc *p ) sat->sat_port >= ATPORT_LAST ) { return( EINVAL ); } -#ifdef BSD4_4 if ( sat->sat_port < ATPORT_RESERVED && -#if defined( __FreeBSD__ ) - suser( p->p_ucred, &p->p_acflag ) -#else - suser( u.u_cred, &u.u_acflag ) -#endif __FreeBSD__ - ) { + suser( p->p_ucred, &p->p_acflag ) ) { return( EACCES ); } -#else BSD4_4 - if ( sat->sat_port < ATPORT_RESERVED && ( !suser())) { - return( EACCES ); - } -#endif BSD4_4 } } else { bzero( (caddr_t)&lsat, sizeof( struct sockaddr_at )); -#ifdef BSD4_4 lsat.sat_len = sizeof(struct sockaddr_at); lsat.sat_addr.s_node = ATADDR_ANYNODE; lsat.sat_addr.s_net = ATADDR_ANYNET; -#endif BSD4_4 lsat.sat_family = AF_APPLETALK; sat = &lsat; } @@ -386,11 +344,7 @@ at_pcbconnect( struct ddpcb *ddp, struct mbuf *addr, struct proc *p) ( hintnet ? hintnet : sat->sat_addr.s_net ) || satosat( &ro->ro_dst )->sat_addr.s_node != sat->sat_addr.s_node )) { -#ifdef ultrix - rtfree( ro->ro_rt ); -#else ultrix RTFREE( ro->ro_rt ); -#endif ultrix ro->ro_rt = (struct rtentry *)0; } } @@ -400,9 +354,7 @@ at_pcbconnect( struct ddpcb *ddp, struct mbuf *addr, struct proc *p) */ if ( ro->ro_rt == (struct rtentry *)0 || ro->ro_rt->rt_ifp == (struct ifnet *)0 ) { -#ifdef BSD4_4 ro->ro_dst.sa_len = sizeof( struct sockaddr_at ); -#endif BSD4_4 ro->ro_dst.sa_family = AF_APPLETALK; if ( hintnet ) { satosat( &ro->ro_dst )->sat_addr.s_net = hintnet; @@ -430,11 +382,7 @@ at_pcbconnect( struct ddpcb *ddp, struct mbuf *addr, struct proc *p) ddp->ddp_fsat = *sat; if ( ddp->ddp_lsat.sat_port == ATADDR_ANYPORT ) { - return( at_pcbsetaddr( ddp, (struct mbuf *)0 -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - )); + return( at_pcbsetaddr( ddp, (struct mbuf *)0, p )); } return( 0 ); } @@ -566,6 +514,7 @@ ddp_init(void ) atintrq2.ifq_maxlen = IFQ_MAXLEN; } +#if 0 static void ddp_clean(void ) { @@ -575,3 +524,4 @@ ddp_clean(void ) at_pcbdetach( ddp->ddp_socket, ddp ); } } +#endif diff --git a/sys/netatalk/ddp_usrreq.c b/sys/netatalk/ddp_usrreq.c index f2557bac12d2..a9886b822a8e 100644 --- a/sys/netatalk/ddp_usrreq.c +++ b/sys/netatalk/ddp_usrreq.c @@ -7,15 +7,7 @@ #include #include #include -#if defined( __FreeBSD__ ) #include -#endif __FreeBSD__ -#ifdef ibm032 -#include -#endif ibm032 -#ifndef __FreeBSD__ -#include -#endif #include #include #include @@ -25,9 +17,6 @@ #include #include #include -#ifdef _IBMR2 -#include -#endif _IBMR2 #include "at.h" #include "at_var.h" @@ -53,9 +42,7 @@ int ddp_usrreq( struct socket *so, int req, struct mbuf *m, struct mbuf *addr, struct mbuf *rights) { -#if defined( __FreeBSD__ ) struct proc *p = curproc; /* XXX */ -#endif __FreeBSD__ struct ddpcb *ddp; int error = 0; @@ -63,11 +50,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, if ( req == PRU_CONTROL ) { return( at_control( (int) m, (caddr_t) addr, - (struct ifnet *) rights -#if defined( __FreeBSD__ ) - , (struct proc *)p -#endif __FreeBSD__ - )); + (struct ifnet *) rights, (struct proc *)p )); } if ( rights && rights->m_len ) { @@ -97,11 +80,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, break; case PRU_BIND : - error = at_pcbsetaddr( ddp, addr -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - ); + error = at_pcbsetaddr( ddp, addr, p ); break; case PRU_SOCKADDR : @@ -114,11 +93,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, break; } - error = at_pcbconnect( ddp, addr -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - ); + error = at_pcbconnect( ddp, addr, p ); if ( error == 0 ) soisconnected( so ); break; @@ -146,11 +121,7 @@ ddp_usrreq( struct socket *so, int req, struct mbuf *m, } s = splnet(); - error = at_pcbconnect( ddp, addr -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - ); + error = at_pcbconnect( ddp, addr, p ); if ( error ) { splx( s ); break; @@ -260,29 +231,16 @@ at_pcbsetaddr( struct ddpcb *ddp, struct mbuf *addr, struct proc *p ) sat->sat_port >= ATPORT_LAST ) { return( EINVAL ); } -#ifdef BSD4_4 if ( sat->sat_port < ATPORT_RESERVED && -#if defined( __FreeBSD__ ) - suser( p->p_ucred, &p->p_acflag ) -#else - suser( u.u_cred, &u.u_acflag ) -#endif __FreeBSD__ - ) { + suser( p->p_ucred, &p->p_acflag ) ) { return( EACCES ); } -#else BSD4_4 - if ( sat->sat_port < ATPORT_RESERVED && ( !suser())) { - return( EACCES ); - } -#endif BSD4_4 } } else { bzero( (caddr_t)&lsat, sizeof( struct sockaddr_at )); -#ifdef BSD4_4 lsat.sat_len = sizeof(struct sockaddr_at); lsat.sat_addr.s_node = ATADDR_ANYNODE; lsat.sat_addr.s_net = ATADDR_ANYNET; -#endif BSD4_4 lsat.sat_family = AF_APPLETALK; sat = &lsat; } @@ -386,11 +344,7 @@ at_pcbconnect( struct ddpcb *ddp, struct mbuf *addr, struct proc *p) ( hintnet ? hintnet : sat->sat_addr.s_net ) || satosat( &ro->ro_dst )->sat_addr.s_node != sat->sat_addr.s_node )) { -#ifdef ultrix - rtfree( ro->ro_rt ); -#else ultrix RTFREE( ro->ro_rt ); -#endif ultrix ro->ro_rt = (struct rtentry *)0; } } @@ -400,9 +354,7 @@ at_pcbconnect( struct ddpcb *ddp, struct mbuf *addr, struct proc *p) */ if ( ro->ro_rt == (struct rtentry *)0 || ro->ro_rt->rt_ifp == (struct ifnet *)0 ) { -#ifdef BSD4_4 ro->ro_dst.sa_len = sizeof( struct sockaddr_at ); -#endif BSD4_4 ro->ro_dst.sa_family = AF_APPLETALK; if ( hintnet ) { satosat( &ro->ro_dst )->sat_addr.s_net = hintnet; @@ -430,11 +382,7 @@ at_pcbconnect( struct ddpcb *ddp, struct mbuf *addr, struct proc *p) ddp->ddp_fsat = *sat; if ( ddp->ddp_lsat.sat_port == ATADDR_ANYPORT ) { - return( at_pcbsetaddr( ddp, (struct mbuf *)0 -#if defined( __FreeBSD__ ) - , p -#endif __FreeBSD__ - )); + return( at_pcbsetaddr( ddp, (struct mbuf *)0, p )); } return( 0 ); } @@ -566,6 +514,7 @@ ddp_init(void ) atintrq2.ifq_maxlen = IFQ_MAXLEN; } +#if 0 static void ddp_clean(void ) { @@ -575,3 +524,4 @@ ddp_clean(void ) at_pcbdetach( ddp->ddp_socket, ddp ); } } +#endif diff --git a/sys/netatalk/endian.h b/sys/netatalk/endian.h index 919d351489ab..255c2268450a 100644 --- a/sys/netatalk/endian.h +++ b/sys/netatalk/endian.h @@ -21,67 +21,9 @@ * netatalk@itd.umich.edu */ -# ifndef _ATALK_ENDIAN_H_ +#ifndef _ATALK_ENDIAN_H_ #define _ATALK_ENDIAN_H_ -#ifdef _IBMR2 -#include -#endif _IBMR2 - -#ifdef linux -#include -#define BYTE_ORDER __BYTE_ORDER -#endif linux - -#ifdef __FreeBSD__ #include -#endif __FreeBSD__ -# ifndef BYTE_ORDER -#define LITTLE_ENDIAN 1234 -#define BIG_ENDIAN 4321 -#define PDP_ENDIAN 3412 - -#ifdef sun -#ifdef i386 -#define BYTE_ORDER LITTLE_ENDIAN -#else i386 -#define BYTE_ORDER BIG_ENDIAN -#endif i386 -#else -#ifdef MIPSEB -#define BYTE_ORDER BIG_ENDIAN -#else -#ifdef MIPSEL -#define BYTE_ORDER LITTLE_ENDIAN -#else -Like, what is your byte order, man? -#endif MIPSEL -#endif MIPSEB -#endif sun -# endif BYTE_ORDER - -# ifndef ntohl -# if defined( sun ) || defined( ultrix ) || defined( _IBMR2 ) -#if BYTE_ORDER == BIG_ENDIAN -#define ntohl(x) (x) -#define ntohs(x) (x) -#define htonl(x) (x) -#define htons(x) (x) - -#else -#if defined( mips ) && defined( KERNEL ) -#define ntohl(x) nuxi_l(x) -#define ntohs(x) nuxi_s(x) -#define htonl(x) nuxi_l(x) -#define htons(x) nuxi_s(x) - -#else mips KERNEL -unsigned short ntohs(), htons(); -unsigned long ntohl(), htonl(); - -#endif mips KERNEL -#endif BYTE_ORDER -# endif sun ultrix _IBMR2 -# endif ntohl -# endif _ATALK_ENDIAN_H_ +#endif _ATALK_ENDIAN_H_ diff --git a/sys/netatalk/phase2.h b/sys/netatalk/phase2.h index 9535a6a00c39..112c06205e58 100644 --- a/sys/netatalk/phase2.h +++ b/sys/netatalk/phase2.h @@ -3,83 +3,10 @@ * All Rights Reserved. */ -# if defined( ultrix ) || defined( BSD4_4 ) #include -# if defined( __FreeBSD__ ) -#define llc_org_code llc_un.type_snap.org_code -#define llc_ether_type llc_un.type_snap.ether_type -# endif __FreeBSD__ -# else ultrix BSD4_4 -#ifdef sun -#include -#endif sun - -/* - * Copyright (c) 1988 Regents of the University of California. - * All rights reserved. - * - * @(#)if_llc.h 7.2 (Berkeley) 6/28/90 - */ - -/* - * IEEE 802.2 Link Level Control headers, for use in conjunction with - * 802.{3,4,5} media access control methods. - * - * Headers here do not use bit fields due to shortcommings in many - * compilers. - */ - -struct llc { - u_char llc_dsap; - u_char llc_ssap; - union { - struct { - u_char control; - u_char format_id; - u_char class; - u_char window_x2; - } type_u; - struct { - u_char num_snd_x2; - u_char num_rcv_x2; - } type_i; - struct { - u_char control; - u_char num_rcv_x2; - } type_s; - struct { - u_char control; - u_char org_code[3]; - u_short ether_type; - } type_snap; - } llc_un; -}; -#define llc_control llc_un.type_u.control -#define llc_fid llc_un.type_u.format_id -#define llc_class llc_un.type_u.class -#define llc_window llc_un.type_u.window_x2 #define llc_org_code llc_un.type_snap.org_code #define llc_ether_type llc_un.type_snap.ether_type -#define LLC_UI 0x3 -#define LLC_UI_P 0x13 -#define LLC_XID 0xaf -#define LLC_XID_P 0xbf -#define LLC_TEST 0xe3 -#define LLC_TEST_P 0xf3 - -#define LLC_ISO_LSAP 0xfe -#define LLC_SNAP_LSAP 0xaa - -# endif ultrix BSD4_4 - -#if defined( sun ) || defined( ibm032 ) -#define SIOCPHASE1 _IOW(i, 100, struct ifreq) /* AppleTalk phase 1 */ -#define SIOCPHASE2 _IOW(i, 101, struct ifreq) /* AppleTalk phase 2 */ -#endif sun ibm032 - -#if defined( ultrix ) || defined( BSD4_4 ) || defined( _IBMR2 ) #define SIOCPHASE1 _IOW('i', 100, struct ifreq) /* AppleTalk phase 1 */ #define SIOCPHASE2 _IOW('i', 101, struct ifreq) /* AppleTalk phase 2 */ -#endif ultrix BSD4_4 _IBMR2 diff --git a/usr.bin/netstat/atalk.c b/usr.bin/netstat/atalk.c index e0c1a53d3995..e219335ac731 100644 --- a/usr.bin/netstat/atalk.c +++ b/usr.bin/netstat/atalk.c @@ -70,35 +70,37 @@ static int first = 1; * -a (all) flag is specified. */ -char * -at_pr_net(struct sockaddr_at *sat) +static char * +at_pr_net(struct sockaddr_at *sat, int numeric) { static char mybuf[50]; - switch(sat->sat_addr.s_net) { - case 0xffff: - return "????"; - case ATADDR_ANYNET: - return("*"); - default: - sprintf(mybuf,"%hu",ntohs(sat->sat_addr.s_net)); + if (!numeric) { + switch(sat->sat_addr.s_net) { + case 0xffff: + return "????"; + case ATADDR_ANYNET: + return("*"); + } } + sprintf(mybuf,"%hu",ntohs(sat->sat_addr.s_net)); return mybuf; } -char * -at_pr_host(struct sockaddr_at *sat) +static char * +at_pr_host(struct sockaddr_at *sat, int numeric) { static char mybuf[50]; - switch(sat->sat_addr.s_node) { - case ATADDR_BCAST: - return "bcast"; - case ATADDR_ANYNODE: - return("*"); - default: - sprintf(mybuf,"%d",(unsigned int)sat->sat_addr.s_node); + if (!numeric) { + switch(sat->sat_addr.s_node) { + case ATADDR_BCAST: + return "bcast"; + case ATADDR_ANYNODE: + return("*"); + } } + sprintf(mybuf,"%d",(unsigned int)sat->sat_addr.s_node); return mybuf; } @@ -122,47 +124,48 @@ static char mybuf[50]; /* 1 for net */ /* 2 for host */ /* 4 for port */ +/* 8 for numeric only */ char * atalk_print(sa,what) register struct sockaddr *sa; { struct sockaddr_at *sat = (struct sockaddr_at *)sa; -static char mybuf[50]; + static char mybuf[50]; + int numeric = (what & 0x08); mybuf[0] = 0; - switch (what & 3 ) { + switch (what & 3) { case 0: mybuf[0] = 0; break; case 1: - sprintf(mybuf,"%s",at_pr_net(sat)); + sprintf(mybuf,"%s",at_pr_net(sat, numeric)); break; case 2: - sprintf(mybuf,"%s",at_pr_host(sat)); + sprintf(mybuf,"%s",at_pr_host(sat, numeric)); break; case 3: - sprintf(mybuf,"[%s.%s]", - at_pr_net(sat), - at_pr_host(sat)); + sprintf(mybuf,"%s.%s", + at_pr_net(sat, numeric), + at_pr_host(sat, numeric)); } if (what & 4) { sprintf(mybuf+strlen(mybuf),"%s",at_pr_port(sat)); } -#if 0 - switch(sat->sat_hints.type) { - case SATHINT_NONE: - sprintf(mybuf,"[no type]"); - break; - case SATHINT_CONFIG: - case SATHINT_IFACE: - sprintf(mybuf,"[too hard for now]"); - break; - default: - sprintf(mybuf,"[unknown type]"); - } -#endif return mybuf; } + +char * +atalk_print2(struct sockaddr *sa, struct sockaddr *mask, int what) +{ + int n; + static char buf[100]; + + n = snprintf(buf, sizeof(buf), "%s", atalk_print(sa, what)); + snprintf(buf + n, sizeof(buf) - n, "/%s", atalk_print(mask, what)); + return(buf); +} + void atalkprotopr(off, name) u_long off; diff --git a/usr.bin/netstat/if.c b/usr.bin/netstat/if.c index 293989014da9..bfe8432fd6c6 100644 --- a/usr.bin/netstat/if.c +++ b/usr.bin/netstat/if.c @@ -188,8 +188,8 @@ intpr(interval, ifnetaddr) break; case AF_APPLETALK: - printf("atalk:%-7.7s ",atalk_print(sa,1) ); - printf("%-15.15s ",atalk_print(sa,3) ); + printf("atalk:%-7.7s ",atalk_print(sa,9) ); + printf("%-15.15s ",atalk_print(sa,11) ); break; #ifdef NS case AF_NS: diff --git a/usr.bin/netstat/netstat.h b/usr.bin/netstat/netstat.h index da98ff4a3472..708094f1bdac 100644 --- a/usr.bin/netstat/netstat.h +++ b/usr.bin/netstat/netstat.h @@ -88,7 +88,8 @@ void upHex __P((char *)); char *routename __P((u_long)); char *netname __P((u_long, u_long)); -char *atalk_print __P((struct sockaddr *,int)); +char *atalk_print __P((struct sockaddr *, int)); +char *atalk_print2 __P((struct sockaddr *, struct sockaddr *, int)); char *ipx_print __P((struct sockaddr *)); char *ns_print __P((struct sockaddr *)); void routepr __P((u_long)); diff --git a/usr.bin/netstat/route.c b/usr.bin/netstat/route.c index 85fe14776d4b..77cd001bdcf8 100644 --- a/usr.bin/netstat/route.c +++ b/usr.bin/netstat/route.c @@ -36,7 +36,7 @@ static char sccsid[] = "From: @(#)route.c 8.6 (Berkeley) 4/28/95"; #endif static const char rcsid[] = - "$Id: route.c,v 1.15 1996/06/10 21:03:38 julian Exp $"; + "$Id: route.c,v 1.16 1996/06/15 17:08:40 peter Exp $"; #endif /* not lint */ #include @@ -188,7 +188,7 @@ pr_family(af) afname = "ISO"; break; case AF_APPLETALK: - afname = "ATALK"; + afname = "AppleTalk"; break; case AF_CCITT: afname = "X.25"; @@ -418,7 +418,10 @@ p_sockaddr(sa, mask, flags, width) } case AF_APPLETALK: { - cp = atalk_print(sa,3); + if (mask) + cp = atalk_print2(sa,mask,11); + else + cp = atalk_print(sa,11); break; } #ifdef NS