|
|
1.1 ! root 1: /*********************************************************** ! 2: Copyright IBM Corporation 1987 ! 3: ! 4: All Rights Reserved ! 5: ! 6: Permission to use, copy, modify, and distribute this software and its ! 7: documentation for any purpose and without fee is hereby granted, ! 8: provided that the above copyright notice appear in all copies and that ! 9: both that copyright notice and this permission notice appear in ! 10: supporting documentation, and that the name of IBM not be ! 11: used in advertising or publicity pertaining to distribution of the ! 12: software without specific, written prior permission. ! 13: ! 14: IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 15: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 16: IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 17: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 18: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 19: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 20: SOFTWARE. ! 21: ! 22: ******************************************************************/ ! 23: ! 24: /* ! 25: * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison ! 26: */ ! 27: /* $Header: clnp_debug.c,v 4.2 88/06/29 14:58:34 hagens Exp $ */ ! 28: /* $Source: /usr/argo/sys/netargo/RCS/clnp_debug.c,v $ */ ! 29: /* @(#)clnp_debug.c 7.4 (Berkeley) 8/29/89 */ ! 30: ! 31: #ifndef lint ! 32: static char *rcsid = "$Header: clnp_debug.c,v 4.2 88/06/29 14:58:34 hagens Exp $"; ! 33: #endif lint ! 34: ! 35: #include "types.h" ! 36: #include "param.h" ! 37: #include "mbuf.h" ! 38: #include "domain.h" ! 39: #include "protosw.h" ! 40: #include "socket.h" ! 41: #include "socketvar.h" ! 42: #include "errno.h" ! 43: ! 44: #include "../net/if.h" ! 45: #include "../net/route.h" ! 46: ! 47: #include "iso.h" ! 48: #include "clnp.h" ! 49: #include "clnp_stat.h" ! 50: #include "argo_debug.h" ! 51: ! 52: #ifdef ARGO_DEBUG ! 53: ! 54: #ifdef TESTDEBUG ! 55: #ifdef notdef ! 56: struct addr_37 u_37 = { ! 57: {0x00, 0x02, 0x00, 0x10, 0x20, 0x30, 0x35}, ! 58: {0x01, 0x02, 0x03, 0x04, 0x50, 0x60, 0x70, 0x80, 0x90} ! 59: }; ! 60: struct addr_osinet u_osinet = { ! 61: {0x00, 0x04}, ! 62: {0x00, 0x02, 0x00, 0x01, 0x23, 0x42, 0x78, 0x20, 0x01, 0x05, 0x00} ! 63: }; ! 64: #endif notdef ! 65: struct addr_rfc986 u_rfc986 = { ! 66: {0x00, 0x06}, ! 67: {0x01, 0xc0, 0x0c, 0x0c, 0xab, 0x11} ! 68: }; ! 69: struct addr_rfc986 u_bad = { ! 70: {0x00, 0x01}, ! 71: {0x01, 0xc0, 0x0c, 0x0c, 0xab, 0x11} ! 72: }; ! 73: #include <stdio.h> ! 74: main() ! 75: { ! 76: struct iso_addr a; ! 77: ! 78: a.isoa_afi = AFI_37; ! 79: a.isoa_u.addr_37 = u_37; ! 80: a.isoa_len = 17; ! 81: printf("type 37: %s\n", clnp_iso_addrp(&a)); ! 82: ! 83: a.isoa_afi = AFI_OSINET; ! 84: a.isoa_u.addr_osinet = u_osinet; ! 85: a.isoa_len = 14; ! 86: printf("type osinet: %s\n", clnp_iso_addrp(&a)); ! 87: ! 88: a.isoa_afi = AFI_RFC986; ! 89: a.isoa_u.addr_rfc986 = u_rfc986; ! 90: a.isoa_len = 9; ! 91: printf("type rfc986: %s\n", clnp_iso_addrp(&a)); ! 92: ! 93: a.isoa_afi = 12; ! 94: a.isoa_u.addr_rfc986 = u_rfc986; ! 95: a.isoa_len = 9; ! 96: printf("type bad afi: %s\n", clnp_iso_addrp(&a)); ! 97: ! 98: a.isoa_afi = AFI_RFC986; ! 99: a.isoa_u.addr_rfc986 = u_bad; ! 100: a.isoa_len = 9; ! 101: printf("type bad idi: %s\n", clnp_iso_addrp(&a)); ! 102: } ! 103: #endif TESTDEBUG ! 104: ! 105: unsigned int clnp_debug; ! 106: static char letters[] = "0123456789abcdef"; ! 107: ! 108: /* ! 109: * Print buffer in hex, return addr of where we left off. ! 110: * Do not null terminate. ! 111: */ ! 112: char * ! 113: clnp_hexp(src, len, where) ! 114: char *src; /* src of data to print */ ! 115: int len; /* lengthof src */ ! 116: char *where; /* where to put data */ ! 117: { ! 118: int i; ! 119: ! 120: for (i=0; i<len; i++) { ! 121: *where++ = letters[src[i] >> 4]; ! 122: *where++ = letters[src[i] & 0x0f]; ! 123: } ! 124: return where; ! 125: } ! 126: ! 127: /* ! 128: * Return a ptr to a human readable form of an iso addr ! 129: */ ! 130: static char iso_addr_b[50]; ! 131: #define DELIM '.'; ! 132: ! 133: char * ! 134: clnp_iso_addrp(isoa) ! 135: struct iso_addr *isoa; ! 136: { ! 137: char *cp; ! 138: ! 139: /* print length */ ! 140: clnp_sprintf(iso_addr_b, "[%d] ", isoa->isoa_len); ! 141: ! 142: /* set cp to end of what we have */ ! 143: cp = iso_addr_b; ! 144: while (*cp) ! 145: cp++; ! 146: ! 147: /* print afi */ ! 148: cp = clnp_hexp(isoa->isoa_genaddr, (int)isoa->isoa_len, cp); ! 149: #ifdef notdef ! 150: *cp++ = DELIM; ! 151: ! 152: /* print type specific part */ ! 153: switch(isoa->isoa_afi) { ! 154: case AFI_37: ! 155: cp = clnp_hexp(isoa->t37_idi, ADDR37_IDI_LEN, cp); ! 156: *cp++ = DELIM; ! 157: cp = clnp_hexp(isoa->t37_dsp, ADDR37_DSP_LEN, cp); ! 158: break; ! 159: ! 160: /* case AFI_OSINET:*/ ! 161: case AFI_RFC986: { ! 162: u_short idi; ! 163: ! 164: /* osinet and rfc986 have idi in the same place */ ! 165: /* print idi */ ! 166: cp = clnp_hexp(isoa->rfc986_idi, ADDROSINET_IDI_LEN, cp); ! 167: *cp++ = DELIM; ! 168: CTOH(isoa->rfc986_idi[0], isoa->rfc986_idi[1], idi); ! 169: ! 170: if (idi == IDI_OSINET) { ! 171: struct ovl_osinet *oosi = (struct ovl_osinet *)isoa; ! 172: cp = clnp_hexp(oosi->oosi_orgid, OVLOSINET_ORGID_LEN, cp); ! 173: *cp++ = DELIM; ! 174: cp = clnp_hexp(oosi->oosi_snetid, OVLOSINET_SNETID_LEN, cp); ! 175: *cp++ = DELIM; ! 176: cp = clnp_hexp(oosi->oosi_snpa, OVLOSINET_SNPA_LEN, cp); ! 177: *cp++ = DELIM; ! 178: cp = clnp_hexp(oosi->oosi_nsap, OVLOSINET_NSAP_LEN, cp); ! 179: } else if (idi == IDI_RFC986) { ! 180: struct ovl_rfc986 *o986 = (struct ovl_rfc986 *)isoa; ! 181: cp = clnp_hexp(&o986->o986_vers, 1, cp); ! 182: *cp++ = DELIM; ! 183: #ifdef vax ! 184: clnp_sprintf(cp, "%d.%d.%d.%d.%d", ! 185: o986->o986_inetaddr[0] & 0xff, ! 186: o986->o986_inetaddr[1] & 0xff, ! 187: o986->o986_inetaddr[2] & 0xff, ! 188: o986->o986_inetaddr[3] & 0xff, ! 189: o986->o986_upid & 0xff); ! 190: return(iso_addr_b); ! 191: #else ! 192: cp = clnp_hexp(&o986->o986_inetaddr[0], 1, cp); ! 193: *cp++ = DELIM; ! 194: cp = clnp_hexp(&o986->o986_inetaddr[1], 1, cp); ! 195: *cp++ = DELIM; ! 196: cp = clnp_hexp(&o986->o986_inetaddr[2], 1, cp); ! 197: *cp++ = DELIM; ! 198: cp = clnp_hexp(&o986->o986_inetaddr[3], 1, cp); ! 199: *cp++ = DELIM; ! 200: cp = clnp_hexp(&o986->o986_upid, 1, cp); ! 201: #endif vax ! 202: } ! 203: ! 204: } break; ! 205: ! 206: default: ! 207: *cp++ = '?'; ! 208: break; ! 209: } ! 210: #endif notdef ! 211: *cp = (char)0; ! 212: ! 213: return(iso_addr_b); ! 214: } ! 215: ! 216: char * ! 217: clnp_saddr_isop(s) ! 218: register struct sockaddr_iso *s; ! 219: { ! 220: register char *cp = clnp_iso_addrp(&s->siso_addr); ! 221: ! 222: while (*cp) cp++; ! 223: *cp++ = '('; ! 224: cp = clnp_hexp(TSEL(s), (int)s->siso_tlen, cp); ! 225: *cp++ = ')'; ! 226: *cp++ = 0; ! 227: return (iso_addr_b); ! 228: } ! 229: ! 230: ! 231: /* ! 232: * The following hacks are a trimmed down version of sprintf. ! 233: */ ! 234: /*VARARGS1*/ ! 235: /*ARGSUSED*/ ! 236: clnp_sprintf(buf, fmt, x1, x2) ! 237: register char *buf, *fmt; ! 238: unsigned x1, x2; ! 239: { ! 240: clnp_prf(buf, fmt, (unsigned int *)&x1); ! 241: } ! 242: ! 243: clnp_prf(buf, fmt, adx) ! 244: register char *buf; ! 245: register char *fmt; ! 246: register unsigned int *adx; ! 247: { ! 248: register int b, c, i; ! 249: char *s; ! 250: char *clnp_printn(); ! 251: ! 252: loop: ! 253: while ((c = *fmt++) != '%') { ! 254: if(c == '\0') { ! 255: *buf++ = (char)0; ! 256: return; ! 257: } ! 258: *buf++ = c; ! 259: } ! 260: again: ! 261: c = *fmt++; ! 262: switch (c) { ! 263: case 'l': ! 264: goto again; ! 265: case 'x': case 'X': ! 266: b = 16; ! 267: goto number; ! 268: case 'd': case 'D': ! 269: case 'u': /* what a joke */ ! 270: b = 10; ! 271: goto number; ! 272: case 'o': case 'O': ! 273: b = 8; ! 274: number: ! 275: buf = clnp_printn((unsigned long)*adx, b, buf); ! 276: break; ! 277: case 'c': ! 278: b = *adx; ! 279: for (i = 24; i >= 0; i -= 8) ! 280: if (c = (b >> i) & 0x7f) ! 281: *buf++ = c; ! 282: break; ! 283: ! 284: case 's': ! 285: s = (char *)*adx; ! 286: while (*s) ! 287: *buf++ = *s++; ! 288: break; ! 289: ! 290: case '%': ! 291: *buf++ = '%'; ! 292: break; ! 293: } ! 294: adx++; ! 295: goto loop; ! 296: } ! 297: ! 298: char * ! 299: clnp_printn(n, b, where) ! 300: unsigned long n; ! 301: int b; ! 302: char *where; ! 303: { ! 304: char prbuf[11]; ! 305: register char *cp; ! 306: ! 307: if (b == 10 && (int)n < 0) { ! 308: *where++ = '-'; ! 309: n = (unsigned)(-(int)n); ! 310: } ! 311: cp = prbuf; ! 312: do { ! 313: *cp++ = "0123456789abcdef"[n%b]; ! 314: n /= b; ! 315: } while (n); ! 316: do { ! 317: *where++ = *--cp; ! 318: } while (cp > prbuf); ! 319: return(where); ! 320: } ! 321: #endif ARGO_DEBUG
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.