hops@gmdzi.UUCP (Peter Seuffert) (09/29/89)
This week we got some SPARCs and we did a quick&dirty hack to the KFPS boot daemon "atalkad.c" of KIP-Release KIP0688 to run it on the SPARC. Works OK. Would any kind soul mail the patch files "at-kip-align.shar" to me ??? I missed them on USENET. Thanks Peter ------------------------------------------------------------------------------ Mail: Peter Seuffert c/o German National Research Center for Computer Science (GMD) Schloss Birlinghoven Postfach 1240 D-5205 St.Augustin 1 FRG Phone: (++49 2241) 142868 Fax: (++49 2241) 142084 Email: hops@gmdzi.gmd.de or ...!{uunet|mcavx}!unido!gmdzi!hops ------------------------------------------------------------------------------ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: atalkad.SPARC.diff # Wrapped by hops@f3svb on Fri Sep 29 09:04:00 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'atalkad.SPARC.diff' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'atalkad.SPARC.diff'\" else echo shar: Extracting \"'atalkad.SPARC.diff'\" \(11289 characters\) sed "s/^X//" >'atalkad.SPARC.diff' <<'END_OF_FILE' X*** atalkad.c Wed Sep 6 11:29:45 1989 X--- atalkad.c.SPARC1 Fri Sep 29 08:58:27 1989 X*************** X*** 130,135 **** X--- 130,143 ---- X exit(1); X } X X+ static char *innethac(laddr) iaddr_t laddr; { X+ struct in_addr iaddr; X+ char *inet_ntoa(); X+ X+ iaddr.s_addr = laddr; X+ return(inet_ntoa(iaddr)); X+ } X+ X main(argc, argv) X char *argv[]; X { X*************** X*** 268,292 **** X (an->flags & arouteKbox) && X (an->flags & arouteEtalk) == 0) X goto found; X! log("aaCONF from %s ***** not in table", inet_ntoa(aa.ipaddr)); X return; X found: X! log("aaCONF to %s", inet_ntoa(aa.ipaddr)); X n = an->confsize; X bcopy(an->conf, aa.stuff, n); X break; X case aaZONE: X! log("aaZONE to %s", inet_ntoa(aa.ipaddr)); X n = azoneslen; X bcopy(azones, aa.stuff, n); X break; X case aaZONEQ: X! log("aaZONEq from %s", inet_ntoa(aa.ipaddr)); X if ((n = zipinput()) <= 0) X return; /* drop */ X break; X case aaROUTEI: X! log("aaROUTEI to %s", inet_ntoa(aa.ipaddr)); X n = arouteslen; X bcopy(aroutes, aa.stuff, n); X break; X--- 276,300 ---- X (an->flags & arouteKbox) && X (an->flags & arouteEtalk) == 0) X goto found; X! log("aaCONF from %s ***** not in table", innethac(aa.ipaddr)); X return; X found: X! log("aaCONF to %s", innethac(aa.ipaddr)); X n = an->confsize; X bcopy(an->conf, aa.stuff, n); X break; X case aaZONE: X! log("aaZONE to %s", innethac(aa.ipaddr)); X n = azoneslen; X bcopy(azones, aa.stuff, n); X break; X case aaZONEQ: X! log("aaZONEq from %s", innethac(aa.ipaddr)); X if ((n = zipinput()) <= 0) X return; /* drop */ X break; X case aaROUTEI: X! log("aaROUTEI to %s", innethac(aa.ipaddr)); X n = arouteslen; X bcopy(aroutes, aa.stuff, n); X break; X*************** X*** 369,375 **** X putchar('\n'); X if ((an->flags & arouteKbox) && (an->flags & arouteEtalk) == 0) { X conf = (struct conf *)an->conf; X! printf("\tIP Broadcast: %s, ", inet_ntoa(conf->ipbroad)); X if (conf->ipname == conf->ipdebug) { X printf("IP name and debug: %s\n", hostnameof(conf->ipname)); X printf("\tIP file server (unused)", hostnameof(conf->ipfile)); X--- 377,383 ---- X putchar('\n'); X if ((an->flags & arouteKbox) && (an->flags & arouteEtalk) == 0) { X conf = (struct conf *)an->conf; X! printf("\tIP Broadcast: %s, ", innethac(conf->ipbroad)); X if (conf->ipname == conf->ipdebug) { X printf("IP name and debug: %s\n", hostnameof(conf->ipname)); X printf("\tIP file server (unused)", hostnameof(conf->ipfile)); X*************** X*** 407,414 **** X re = rs = ntohl(an->iaddr)+1; X re += (ntohs(conf->ipstatic)-1); X printf("\tIP static address range: %s", X! inet_ntoa(htonl(rs))); X! printf(" %s\n",inet_ntoa(htonl(re))); X } else { X printf("\tIP static address range: empty\n"); X re = ntohl(an->iaddr); X--- 415,422 ---- X re = rs = ntohl(an->iaddr)+1; X re += (ntohs(conf->ipstatic)-1); X printf("\tIP static address range: %s", X! innethac(htonl(rs))); X! printf(" %s\n",innethac(htonl(re))); X } else { X printf("\tIP static address range: empty\n"); X re = ntohl(an->iaddr); X*************** X*** 417,424 **** X re = rs = re+1; X re += (ntohs(conf->ipdynamic)-1); X printf("\tIP dynamic address range: %s", X! inet_ntoa(htonl(rs))); X! printf(" %s\n",inet_ntoa(htonl(re))); X } else { X printf("\tIP dynamic address range: empty\n"); X re = ntohl(an->iaddr); X--- 425,432 ---- X re = rs = re+1; X re += (ntohs(conf->ipdynamic)-1); X printf("\tIP dynamic address range: %s", X! innethac(htonl(rs))); X! printf(" %s\n",innethac(htonl(re))); X } else { X printf("\tIP dynamic address range: empty\n"); X re = ntohl(an->iaddr); X*************** X*** 443,470 **** X * Return byte count of tuples deposited. X */ X buildart(at, maxsize) X! register struct arouteTuple *at; X int maxsize; X { X! register struct anets *an; X! register n, size; X! X size = 0; X for (an = &anets[0], n = 0 ; n < nanets ; an++, n++, at++) { X! size += sizeof *at; X at->node = an->iaddr; X at->net = an->net; X at->flags = an->flags; X at->hops = 0; /* start at one - incremented in gateway */ X } X! log("art build: %d bytes, %d entries, %d maximum", X! size, size/(sizeof(struct arouteTuple)), X! maxsize/(sizeof(struct arouteTuple))); X if (size > maxsize) X log("art build: routing table too big!!"); X! if (size > (maxsize - 10) ) X! log("art build: routing table size %d is near maximum of %d", X! size, maxsize ); X return (size); X } X X--- 451,481 ---- X * Return byte count of tuples deposited. X */ X buildart(at, maxsize) X! struct arouteTuple *at; X int maxsize; X { X! struct anets *an; X! int n, size, inc; X size = 0; X+ inc = sizeof( struct arouteTuple); X for (an = &anets[0], n = 0 ; n < nanets ; an++, n++, at++) { X! size += inc; X at->node = an->iaddr; X at->net = an->net; X at->flags = an->flags; X at->hops = 0; /* start at one - incremented in gateway */ X } X! log("art build: %d bytes", size); X! log("art build: %d entries",size/(sizeof(struct arouteTuple))); X! log("art build: %d maximum",maxsize/(sizeof(struct arouteTuple))); X if (size > maxsize) X log("art build: routing table too big!!"); X! if (size > (maxsize - 10) ) { X! log("art build: routing table size %d ", X! size); X! log("art build: ... is near maximum of %d", X! maxsize ); X! } X return (size); X } X X*************** X*** 526,535 **** X if (n > sizeof(azones)) { X log("buildzones: ZIP table too large"); X log("buildzones: don't worry if you are using a KIP later than 1/88"); X! } else if (n > (sizeof(azones)-10)) X! log("buildzones: ZIP table size %d approaching maximum of %d", X! n, sizeof(azones)); X log("zone names take %d bytes in gateway", n); X return (n); X } X X--- 537,547 ---- X if (n > sizeof(azones)) { X log("buildzones: ZIP table too large"); X log("buildzones: don't worry if you are using a KIP later than 1/88"); X! } else if (n > (sizeof(azones)-10)) { X! log("buildzones: ZIP table size %d", n); X! log("buildzones: ... approaching maximum of %d", sizeof(azones)); X log("zone names take %d bytes in gateway", n); X+ } X return (n); X } X X*************** X*** 583,589 **** X continue; X } X log("no response from %s", X! inet_ntoa(an->iaddr)); X break; X } X fsinlen = sizeof fsin; X--- 595,601 ---- X continue; X } X log("no response from %s", X! innethac(an->iaddr)); X break; X } X fsinlen = sizeof fsin; X*************** X*** 742,748 **** X case '0': case '1': case '2': case '3': X i |= (*cpp - '0'); break; X default: X! log("bad switch %s, linenum %d", st, linenum); X } X } X an->flags = i; X--- 754,761 ---- X case '0': case '1': case '2': case '3': X i |= (*cpp - '0'); break; X default: X! log("bad switch %s ", st); X! log("... linenum %d", linenum); X } X } X an->flags = i; X*************** X*** 783,795 **** X (char*)&conf_proto.atneta-(char*)&conf_proto) X flag = arouteKbox; X else { X! log("%%N at unexpected offset %d, line %d\n", X! cp - an->conf, linenum); X flag = arouteKbox; X } X X! if ((*(short *)cp = X! getanet(flag, an->iaddr)) == 0) X log("%%N not set, line %d\n", linenum); X cp += 2; X an->confsize += 2; X--- 796,807 ---- X (char*)&conf_proto.atneta-(char*)&conf_proto) X flag = arouteKbox; X else { X! log("%%N at unexpected offset %d", cp - an->conf); X! log("... line %d\n", linenum); X flag = arouteKbox; X } X X! if ((*(short *)cp=getanet(flag,an->iaddr)) == 0) X log("%%N not set, line %d\n", linenum); X cp += 2; X an->confsize += 2; X*************** X*** 796,802 **** X break; X X default: X! log("bad field type %s, linenum %d", st, linenum); X break; X } X break; X--- 808,815 ---- X break; X X default: X! log("bad field type %s", st); X! log("... linenum %d", linenum); X break; X } X break; X*************** X*** 852,865 **** X break; X X default: X! log("bad field type %s, linenum %d", X! st, linenum); X break; X } X continue; /* get next field in line */ X badalign: X! log("long/short bad alignment %s, linenum %d", X! st, linenum); X break; X } X /* get next line */ X--- 865,878 ---- X break; X X default: X! log("bad field type %s", st); X! log("... linenum %d", linenum); X break; X } X continue; /* get next field in line */ X badalign: X! log("long/short bad alignment %s,", st); X! log("... linenum %d", linenum); X break; X } X /* get next line */ X*************** X*** 905,911 **** X *cp++ = *linep; X if (--len <= 0) { X *cp = 0; X! log("string truncated: %s, linenum %d", str, linenum); X return; X } X } X--- 918,925 ---- X *cp++ = *linep; X if (--len <= 0) { X *cp = 0; X! log("string truncated: %s,", str); X! log("... linenum %d", linenum); X return; X } X } X*************** X*** 930,937 **** X } else { X c = "%d"; X } X! if (sscanf(s, c, &v) != 1) X! log("bad numeric field %s, linenum %d", s, linenum); X return (v); X } X X--- 944,953 ---- X } else { X c = "%d"; X } X! if (sscanf(s, c, &v) != 1) { X! log("bad numeric field %s, ", s); X! log("... linenum %d", linenum); X! } X return (v); X } X X*************** X*** 947,956 **** X X if (isdigit(*st)) { X if ((iaddr = inet_addr(st)) == -1 || iaddr == 0) X! log("bad ipaddress %s, linenum %d", st, linenum); X } else { X! if ((host = gethostbyname(st)) == 0) X! log("bad hostname %s, linenum %d", st, linenum); X bcopy(host->h_addr, (caddr_t)&iaddr, sizeof iaddr); X } X return (iaddr); X--- 963,974 ---- X X if (isdigit(*st)) { X if ((iaddr = inet_addr(st)) == -1 || iaddr == 0) X! log("bad ipaddress %s, ", st); X } else { X! if ((host = gethostbyname(st)) == 0) { X! log("bad hostname %s, ", st); X! log("... linenum %d", linenum); X! } X bcopy(host->h_addr, (caddr_t)&iaddr, sizeof iaddr); X } X return (iaddr); X*************** X*** 1032,1038 **** X a->iaddr == ia)) X return(a->net); X } X! log("unable to match appletalk net (%x), line %d\n", flags, linenum); X return(0); X } X X--- 1050,1057 ---- X a->iaddr == ia)) X return(a->net); X } X! log("unable to match appletalk net (%x), ", flags); X! log("... line %d\n", linenum); X return(0); X } X X*************** X*** 1046,1060 **** X return((a1 & node_mask) == (a2 & node_mask)); X } X X! char * X! hostnameof(ipaddr) X! struct in_addr ipaddr; X! { X struct hostent *host; X X! host = gethostbyaddr(&ipaddr.s_addr, sizeof(ipaddr.s_addr), AF_INET); X! if (!host) X! return((char *)inet_ntoa(ipaddr)); X return(host->h_name); X } X X--- 1065,1075 ---- X return((a1 & node_mask) == (a2 & node_mask)); X } X X! char * hostnameof(ipaddr) iaddr_t ipaddr; { X struct hostent *host; X X! host = gethostbyaddr( (char *)&ipaddr, sizeof(ipaddr), AF_INET ); X! if (!host) return(innethac(ipaddr)); X return(host->h_name); X } X END_OF_FILE if test 11289 -ne `wc -c <'atalkad.SPARC.diff'`; then echo shar: \"'atalkad.SPARC.diff'\" unpacked with wrong size! fi # end of 'atalkad.SPARC.diff' fi echo shar: End of shell archive. exit 0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++