149267Sbostic /*- 249267Sbostic * Copyright (c) 1991 The Regents of the University of California. 349267Sbostic * All rights reserved. 449267Sbostic * 549267Sbostic * %sccs.include.redist.c% 649267Sbostic * 7*52487Ssklower * @(#)clnp_debug.c 7.9 (Berkeley) 02/14/92 849267Sbostic */ 949267Sbostic 1036368Ssklower /*********************************************************** 1136368Ssklower Copyright IBM Corporation 1987 1236368Ssklower 1336368Ssklower All Rights Reserved 1436368Ssklower 1536368Ssklower Permission to use, copy, modify, and distribute this software and its 1636368Ssklower documentation for any purpose and without fee is hereby granted, 1736368Ssklower provided that the above copyright notice appear in all copies and that 1836368Ssklower both that copyright notice and this permission notice appear in 1936368Ssklower supporting documentation, and that the name of IBM not be 2036368Ssklower used in advertising or publicity pertaining to distribution of the 2136368Ssklower software without specific, written prior permission. 2236368Ssklower 2336368Ssklower IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 2436368Ssklower ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 2536368Ssklower IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 2636368Ssklower ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 2736368Ssklower WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 2836368Ssklower ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 2936368Ssklower SOFTWARE. 3036368Ssklower 3136368Ssklower ******************************************************************/ 3236368Ssklower 3336368Ssklower /* 3436368Ssklower * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison 3536368Ssklower */ 3636368Ssklower /* $Header: clnp_debug.c,v 4.2 88/06/29 14:58:34 hagens Exp $ */ 3736368Ssklower /* $Source: /usr/argo/sys/netargo/RCS/clnp_debug.c,v $ */ 3836368Ssklower 3937536Smckusick #include "types.h" 4037536Smckusick #include "param.h" 4137536Smckusick #include "mbuf.h" 4237536Smckusick #include "domain.h" 4337536Smckusick #include "protosw.h" 4437536Smckusick #include "socket.h" 4537536Smckusick #include "socketvar.h" 4637536Smckusick #include "errno.h" 4736368Ssklower 4836368Ssklower #include "../net/if.h" 4936368Ssklower #include "../net/route.h" 5036368Ssklower 5137469Ssklower #include "iso.h" 5237469Ssklower #include "clnp.h" 5337469Ssklower #include "clnp_stat.h" 5437469Ssklower #include "argo_debug.h" 5536368Ssklower 5636368Ssklower #ifdef ARGO_DEBUG 5736368Ssklower 5836368Ssklower #ifdef TESTDEBUG 5936368Ssklower #ifdef notdef 6036368Ssklower struct addr_37 u_37 = { 6136368Ssklower {0x00, 0x02, 0x00, 0x10, 0x20, 0x30, 0x35}, 6236368Ssklower {0x01, 0x02, 0x03, 0x04, 0x50, 0x60, 0x70, 0x80, 0x90} 6336368Ssklower }; 6436368Ssklower struct addr_osinet u_osinet = { 6536368Ssklower {0x00, 0x04}, 6636368Ssklower {0x00, 0x02, 0x00, 0x01, 0x23, 0x42, 0x78, 0x20, 0x01, 0x05, 0x00} 6736368Ssklower }; 6836368Ssklower #endif notdef 6936368Ssklower struct addr_rfc986 u_rfc986 = { 7036368Ssklower {0x00, 0x06}, 7136368Ssklower {0x01, 0xc0, 0x0c, 0x0c, 0xab, 0x11} 7236368Ssklower }; 7336368Ssklower struct addr_rfc986 u_bad = { 7436368Ssklower {0x00, 0x01}, 7536368Ssklower {0x01, 0xc0, 0x0c, 0x0c, 0xab, 0x11} 7636368Ssklower }; 7736368Ssklower #include <stdio.h> 7836368Ssklower main() 7936368Ssklower { 8036368Ssklower struct iso_addr a; 8136368Ssklower 8236368Ssklower a.isoa_afi = AFI_37; 8336368Ssklower a.isoa_u.addr_37 = u_37; 8436368Ssklower a.isoa_len = 17; 8536368Ssklower printf("type 37: %s\n", clnp_iso_addrp(&a)); 8636368Ssklower 8736368Ssklower a.isoa_afi = AFI_OSINET; 8836368Ssklower a.isoa_u.addr_osinet = u_osinet; 8936368Ssklower a.isoa_len = 14; 9036368Ssklower printf("type osinet: %s\n", clnp_iso_addrp(&a)); 9136368Ssklower 9236368Ssklower a.isoa_afi = AFI_RFC986; 9336368Ssklower a.isoa_u.addr_rfc986 = u_rfc986; 9436368Ssklower a.isoa_len = 9; 9536368Ssklower printf("type rfc986: %s\n", clnp_iso_addrp(&a)); 9636368Ssklower 9736368Ssklower a.isoa_afi = 12; 9836368Ssklower a.isoa_u.addr_rfc986 = u_rfc986; 9936368Ssklower a.isoa_len = 9; 10036368Ssklower printf("type bad afi: %s\n", clnp_iso_addrp(&a)); 10136368Ssklower 10236368Ssklower a.isoa_afi = AFI_RFC986; 10336368Ssklower a.isoa_u.addr_rfc986 = u_bad; 10436368Ssklower a.isoa_len = 9; 10536368Ssklower printf("type bad idi: %s\n", clnp_iso_addrp(&a)); 10636368Ssklower } 10736368Ssklower #endif TESTDEBUG 10836368Ssklower 10936368Ssklower unsigned int clnp_debug; 11036368Ssklower static char letters[] = "0123456789abcdef"; 11136368Ssklower 11236368Ssklower /* 11336368Ssklower * Print buffer in hex, return addr of where we left off. 11436368Ssklower * Do not null terminate. 11536368Ssklower */ 11636368Ssklower char * 11736368Ssklower clnp_hexp(src, len, where) 11836368Ssklower char *src; /* src of data to print */ 119*52487Ssklower int len; /* lengthof src */ 12036368Ssklower char *where; /* where to put data */ 12136368Ssklower { 12236368Ssklower int i; 12336368Ssklower 12436368Ssklower for (i=0; i<len; i++) { 125*52487Ssklower register int j = ((u_char *)src)[i]; 126*52487Ssklower *where++ = letters[j >> 4]; 127*52487Ssklower *where++ = letters[j & 0x0f]; 12836368Ssklower } 12936368Ssklower return where; 13036368Ssklower } 13136368Ssklower 13236368Ssklower /* 13336368Ssklower * Return a ptr to a human readable form of an iso addr 13436368Ssklower */ 13536368Ssklower static char iso_addr_b[50]; 13636368Ssklower #define DELIM '.'; 13736368Ssklower 13836368Ssklower char * 13936368Ssklower clnp_iso_addrp(isoa) 14036368Ssklower struct iso_addr *isoa; 14136368Ssklower { 14236368Ssklower char *cp; 14336368Ssklower 14436368Ssklower /* print length */ 14549481Sbostic sprintf(iso_addr_b, "[%d] ", isoa->isoa_len); 14636368Ssklower 14736368Ssklower /* set cp to end of what we have */ 14836368Ssklower cp = iso_addr_b; 14936368Ssklower while (*cp) 15036368Ssklower cp++; 15136368Ssklower 15236368Ssklower /* print afi */ 15337469Ssklower cp = clnp_hexp(isoa->isoa_genaddr, (int)isoa->isoa_len, cp); 15437469Ssklower #ifdef notdef 15536368Ssklower *cp++ = DELIM; 15636368Ssklower 15736368Ssklower /* print type specific part */ 15836368Ssklower switch(isoa->isoa_afi) { 15936368Ssklower case AFI_37: 16036368Ssklower cp = clnp_hexp(isoa->t37_idi, ADDR37_IDI_LEN, cp); 16136368Ssklower *cp++ = DELIM; 16236368Ssklower cp = clnp_hexp(isoa->t37_dsp, ADDR37_DSP_LEN, cp); 16336368Ssklower break; 16436368Ssklower 16536368Ssklower /* case AFI_OSINET:*/ 16636368Ssklower case AFI_RFC986: { 16736368Ssklower u_short idi; 16836368Ssklower 16936368Ssklower /* osinet and rfc986 have idi in the same place */ 17036368Ssklower /* print idi */ 17136368Ssklower cp = clnp_hexp(isoa->rfc986_idi, ADDROSINET_IDI_LEN, cp); 17236368Ssklower *cp++ = DELIM; 17336368Ssklower CTOH(isoa->rfc986_idi[0], isoa->rfc986_idi[1], idi); 17436368Ssklower 17536368Ssklower if (idi == IDI_OSINET) { 17636368Ssklower struct ovl_osinet *oosi = (struct ovl_osinet *)isoa; 17736368Ssklower cp = clnp_hexp(oosi->oosi_orgid, OVLOSINET_ORGID_LEN, cp); 17836368Ssklower *cp++ = DELIM; 17936368Ssklower cp = clnp_hexp(oosi->oosi_snetid, OVLOSINET_SNETID_LEN, cp); 18036368Ssklower *cp++ = DELIM; 18136368Ssklower cp = clnp_hexp(oosi->oosi_snpa, OVLOSINET_SNPA_LEN, cp); 18236368Ssklower *cp++ = DELIM; 18336368Ssklower cp = clnp_hexp(oosi->oosi_nsap, OVLOSINET_NSAP_LEN, cp); 18436368Ssklower } else if (idi == IDI_RFC986) { 18536368Ssklower struct ovl_rfc986 *o986 = (struct ovl_rfc986 *)isoa; 18636368Ssklower cp = clnp_hexp(&o986->o986_vers, 1, cp); 18736368Ssklower *cp++ = DELIM; 18836368Ssklower #ifdef vax 18949481Sbostic sprintf(cp, "%d.%d.%d.%d.%d", 19036368Ssklower o986->o986_inetaddr[0] & 0xff, 19136368Ssklower o986->o986_inetaddr[1] & 0xff, 19236368Ssklower o986->o986_inetaddr[2] & 0xff, 19336368Ssklower o986->o986_inetaddr[3] & 0xff, 19436368Ssklower o986->o986_upid & 0xff); 19536368Ssklower return(iso_addr_b); 19636368Ssklower #else 19736368Ssklower cp = clnp_hexp(&o986->o986_inetaddr[0], 1, cp); 19836368Ssklower *cp++ = DELIM; 19936368Ssklower cp = clnp_hexp(&o986->o986_inetaddr[1], 1, cp); 20036368Ssklower *cp++ = DELIM; 20136368Ssklower cp = clnp_hexp(&o986->o986_inetaddr[2], 1, cp); 20236368Ssklower *cp++ = DELIM; 20336368Ssklower cp = clnp_hexp(&o986->o986_inetaddr[3], 1, cp); 20436368Ssklower *cp++ = DELIM; 20536368Ssklower cp = clnp_hexp(&o986->o986_upid, 1, cp); 20636368Ssklower #endif vax 20736368Ssklower } 20836368Ssklower 20936368Ssklower } break; 21036368Ssklower 21136368Ssklower default: 21236368Ssklower *cp++ = '?'; 21336368Ssklower break; 21436368Ssklower } 21537469Ssklower #endif notdef 21636368Ssklower *cp = (char)0; 21736368Ssklower 21836368Ssklower return(iso_addr_b); 21936368Ssklower } 22036368Ssklower 22137469Ssklower char * 22237469Ssklower clnp_saddr_isop(s) 22337469Ssklower register struct sockaddr_iso *s; 22436368Ssklower { 22537469Ssklower register char *cp = clnp_iso_addrp(&s->siso_addr); 22636368Ssklower 22737469Ssklower while (*cp) cp++; 22837469Ssklower *cp++ = '('; 22938841Ssklower cp = clnp_hexp(TSEL(s), (int)s->siso_tlen, cp); 23037469Ssklower *cp++ = ')'; 23137469Ssklower *cp++ = 0; 23237469Ssklower return (iso_addr_b); 23336368Ssklower } 23436368Ssklower 23536368Ssklower #endif ARGO_DEBUG 236