xref: /csrg-svn/sys/netiso/clnp_debug.c (revision 49481)
149267Sbostic /*-
249267Sbostic  * Copyright (c) 1991 The Regents of the University of California.
349267Sbostic  * All rights reserved.
449267Sbostic  *
549267Sbostic  * %sccs.include.redist.c%
649267Sbostic  *
7*49481Sbostic  *	@(#)clnp_debug.c	7.6 (Berkeley) 05/08/91
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 */
11936368Ssklower int		len;		/* lengthof src */
12036368Ssklower char	*where;		/* where to put data */
12136368Ssklower {
12236368Ssklower 	int i;
12336368Ssklower 
12436368Ssklower 	for (i=0; i<len; i++) {
12536368Ssklower 		*where++ = letters[src[i] >> 4];
12636368Ssklower 		*where++ = letters[src[i] & 0x0f];
12736368Ssklower 	}
12836368Ssklower 	return where;
12936368Ssklower }
13036368Ssklower 
13136368Ssklower /*
13236368Ssklower  *	Return a ptr to a human readable form of an iso addr
13336368Ssklower  */
13436368Ssklower static char iso_addr_b[50];
13536368Ssklower #define	DELIM	'.';
13636368Ssklower 
13736368Ssklower char *
13836368Ssklower clnp_iso_addrp(isoa)
13936368Ssklower struct iso_addr *isoa;
14036368Ssklower {
14136368Ssklower 	char	*cp;
14236368Ssklower 
14336368Ssklower 	/* print length */
144*49481Sbostic 	sprintf(iso_addr_b, "[%d] ", isoa->isoa_len);
14536368Ssklower 
14636368Ssklower 	/* set cp to end of what we have */
14736368Ssklower 	cp = iso_addr_b;
14836368Ssklower 	while (*cp)
14936368Ssklower 		cp++;
15036368Ssklower 
15136368Ssklower 	/* print afi */
15237469Ssklower 	cp = clnp_hexp(isoa->isoa_genaddr, (int)isoa->isoa_len, cp);
15337469Ssklower #ifdef notdef
15436368Ssklower 	*cp++ = DELIM;
15536368Ssklower 
15636368Ssklower 	/* print type specific part */
15736368Ssklower 	switch(isoa->isoa_afi) {
15836368Ssklower 		case AFI_37:
15936368Ssklower 			cp = clnp_hexp(isoa->t37_idi, ADDR37_IDI_LEN, cp);
16036368Ssklower 			*cp++ = DELIM;
16136368Ssklower 			cp = clnp_hexp(isoa->t37_dsp, ADDR37_DSP_LEN, cp);
16236368Ssklower 			break;
16336368Ssklower 
16436368Ssklower /* 		case AFI_OSINET:*/
16536368Ssklower 		case AFI_RFC986: {
16636368Ssklower 			u_short	idi;
16736368Ssklower 
16836368Ssklower 			/* osinet and rfc986 have idi in the same place */
16936368Ssklower 			/* print idi */
17036368Ssklower 			cp = clnp_hexp(isoa->rfc986_idi, ADDROSINET_IDI_LEN, cp);
17136368Ssklower 			*cp++ = DELIM;
17236368Ssklower 			CTOH(isoa->rfc986_idi[0], isoa->rfc986_idi[1], idi);
17336368Ssklower 
17436368Ssklower 			if (idi == IDI_OSINET) {
17536368Ssklower 				struct ovl_osinet *oosi = (struct ovl_osinet *)isoa;
17636368Ssklower 				cp = clnp_hexp(oosi->oosi_orgid, OVLOSINET_ORGID_LEN, cp);
17736368Ssklower 				*cp++ = DELIM;
17836368Ssklower 				cp = clnp_hexp(oosi->oosi_snetid, OVLOSINET_SNETID_LEN, cp);
17936368Ssklower 				*cp++ = DELIM;
18036368Ssklower 				cp = clnp_hexp(oosi->oosi_snpa, OVLOSINET_SNPA_LEN, cp);
18136368Ssklower 				*cp++ = DELIM;
18236368Ssklower 				cp = clnp_hexp(oosi->oosi_nsap, OVLOSINET_NSAP_LEN, cp);
18336368Ssklower 			} else if (idi == IDI_RFC986) {
18436368Ssklower 				struct ovl_rfc986 *o986 = (struct ovl_rfc986 *)isoa;
18536368Ssklower 				cp = clnp_hexp(&o986->o986_vers, 1, cp);
18636368Ssklower 				*cp++ = DELIM;
18736368Ssklower #ifdef  vax
188*49481Sbostic 				sprintf(cp, "%d.%d.%d.%d.%d",
18936368Ssklower 				o986->o986_inetaddr[0] & 0xff,
19036368Ssklower 				o986->o986_inetaddr[1] & 0xff,
19136368Ssklower 				o986->o986_inetaddr[2] & 0xff,
19236368Ssklower 				o986->o986_inetaddr[3] & 0xff,
19336368Ssklower 				o986->o986_upid & 0xff);
19436368Ssklower 				return(iso_addr_b);
19536368Ssklower #else
19636368Ssklower 				cp = clnp_hexp(&o986->o986_inetaddr[0], 1, cp);
19736368Ssklower 				*cp++ = DELIM;
19836368Ssklower 				cp = clnp_hexp(&o986->o986_inetaddr[1], 1, cp);
19936368Ssklower 				*cp++ = DELIM;
20036368Ssklower 				cp = clnp_hexp(&o986->o986_inetaddr[2], 1, cp);
20136368Ssklower 				*cp++ = DELIM;
20236368Ssklower 				cp = clnp_hexp(&o986->o986_inetaddr[3], 1, cp);
20336368Ssklower 				*cp++ = DELIM;
20436368Ssklower 				cp = clnp_hexp(&o986->o986_upid, 1, cp);
20536368Ssklower #endif vax
20636368Ssklower 			}
20736368Ssklower 
20836368Ssklower 		} break;
20936368Ssklower 
21036368Ssklower 		default:
21136368Ssklower 			*cp++ = '?';
21236368Ssklower 			break;
21336368Ssklower 	}
21437469Ssklower #endif notdef
21536368Ssklower 	*cp = (char)0;
21636368Ssklower 
21736368Ssklower 	return(iso_addr_b);
21836368Ssklower }
21936368Ssklower 
22037469Ssklower char *
22137469Ssklower clnp_saddr_isop(s)
22237469Ssklower register struct sockaddr_iso *s;
22336368Ssklower {
22437469Ssklower 	register char	*cp = clnp_iso_addrp(&s->siso_addr);
22536368Ssklower 
22637469Ssklower 	while (*cp) cp++;
22737469Ssklower 	*cp++ = '(';
22838841Ssklower 	cp = clnp_hexp(TSEL(s), (int)s->siso_tlen, cp);
22937469Ssklower 	*cp++ = ')';
23037469Ssklower 	*cp++ = 0;
23137469Ssklower 	return (iso_addr_b);
23236368Ssklower }
23336368Ssklower 
234*49481Sbostic #include "subr_prf.sprintf"
23536368Ssklower #endif	ARGO_DEBUG
236