=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/netstat/route.c,v retrieving revision 1.4 retrieving revision 1.5 diff -c -r1.4 -r1.5 *** src/usr.bin/netstat/route.c 1996/08/06 18:35:09 1.4 --- src/usr.bin/netstat/route.c 1996/08/16 09:29:34 1.5 *************** *** 1,4 **** ! /* $OpenBSD: route.c,v 1.4 1996/08/06 18:35:09 deraadt Exp $ */ /* $NetBSD: route.c,v 1.15 1996/05/07 02:55:06 thorpej Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: route.c,v 1.5 1996/08/16 09:29:34 mickey Exp $ */ /* $NetBSD: route.c,v 1.15 1996/05/07 02:55:06 thorpej Exp $ */ /* *************** *** 38,44 **** #if 0 static char sccsid[] = "from: @(#)route.c 8.3 (Berkeley) 3/9/94"; #else ! static char *rcsid = "$OpenBSD: route.c,v 1.4 1996/08/06 18:35:09 deraadt Exp $"; #endif #endif /* not lint */ --- 38,44 ---- #if 0 static char sccsid[] = "from: @(#)route.c 8.3 (Berkeley) 3/9/94"; #else ! static char *rcsid = "$OpenBSD: route.c,v 1.5 1996/08/16 09:29:34 mickey Exp $"; #endif #endif /* not lint */ *************** *** 57,62 **** --- 57,64 ---- #include + #include + #include #include *************** *** 169,174 **** --- 171,179 ---- case AF_NS: afname = "XNS"; break; + case AF_IPX: + afname = "IPX"; + break; case AF_ISO: afname = "ISO"; break; *************** *** 376,381 **** --- 381,390 ---- cp = ns_print(sa); break; + case AF_IPX: + cp = ipx_print(sa); + break; + case AF_LINK: { register struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa; *************** *** 599,604 **** --- 608,614 ---- printf("\t%u use%s of a wildcard route\n", rtstat.rts_wildcard, plural(rtstat.rts_wildcard)); } + short ns_nullh[] = {0,0,0}; short ns_bh[] = {-1,-1,-1}; *************** *** 663,668 **** --- 673,744 ---- work.sns_addr.x_net = ns_zeronet; p = ns_print((struct sockaddr *)&work); + if (strncmp("0H.", p, 3) == 0) p += 3; + return(p); + } + + u_short ipx_nullh[] = {0,0,0}; + u_short ipx_bh[] = {0xffff,0xffff,0xffff}; + + char * + ipx_print(sa) + register struct sockaddr *sa; + { + register struct sockaddr_ipx *sipx = (struct sockaddr_ipx*)sa; + struct ipx_addr work; + union { union ipx_net net_e; u_long long_e; } net; + u_short port; + static char mybuf[50], cport[10], chost[25]; + char *host = ""; + register char *p; register u_char *q; + + work = sipx->sipx_addr; + port = ntohs(work.ipx_port); + work.ipx_port = 0; + net.net_e = work.ipx_net; + if (ipx_nullhost(work) && net.long_e == 0) { + if (port != 0) { + sprintf(mybuf, "*.%xH", port); + upHex(mybuf); + } else + sprintf(mybuf, "*.*"); + return (mybuf); + } + + if (bcmp(ipx_bh, work.ipx_host.c_host, 6) == 0) { + host = "any"; + } else if (bcmp(ipx_nullh, work.ipx_host.c_host, 6) == 0) { + host = "*"; + } else { + q = work.ipx_host.c_host; + sprintf(chost, "%02x:%02x:%02x:%02x:%02x:%02x", + q[0], q[1], q[2], q[3], q[4], q[5]); + host = chost; + } + if (port) + sprintf(cport, ".%xH", htons(port)); + else + *cport = 0; + + sprintf(mybuf,"%xH.%s%s", ntohl(net.long_e), host, cport); + upHex(mybuf); + return(mybuf); + } + + char * + ipx_phost(sa) + struct sockaddr *sa; + { + register struct sockaddr_ipx *sipx = (struct sockaddr_ipx *)sa; + struct sockaddr_ipx work; + static union ipx_net ipx_zeronet; + char *p; + + work = *sipx; + work.sipx_addr.ipx_port = 0; + work.sipx_addr.ipx_net = ipx_zeronet; + + p = ipx_print((struct sockaddr *)&work); if (strncmp("0H.", p, 3) == 0) p += 3; return(p); }