149267Sbostic /*-
2*63222Sbostic * Copyright (c) 1991, 1993
3*63222Sbostic * The Regents of the University of California. All rights reserved.
449267Sbostic *
549267Sbostic * %sccs.include.redist.c%
649267Sbostic *
7*63222Sbostic * @(#)clnp_debug.c 8.1 (Berkeley) 06/10/93
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
3956533Sbostic #include <sys/param.h>
4056533Sbostic #include <sys/mbuf.h>
4156533Sbostic #include <sys/domain.h>
4256533Sbostic #include <sys/protosw.h>
4356533Sbostic #include <sys/socket.h>
4456533Sbostic #include <sys/socketvar.h>
4556533Sbostic #include <sys/errno.h>
4636368Ssklower
4756533Sbostic #include <net/if.h>
4856533Sbostic #include <net/route.h>
4936368Ssklower
5056533Sbostic #include <netiso/iso.h>
5156533Sbostic #include <netiso/clnp.h>
5256533Sbostic #include <netiso/clnp_stat.h>
5356533Sbostic #include <netiso/argo_debug.h>
5436368Ssklower
5536368Ssklower #ifdef ARGO_DEBUG
5636368Ssklower
5736368Ssklower #ifdef TESTDEBUG
5836368Ssklower #ifdef notdef
5936368Ssklower struct addr_37 u_37 = {
6036368Ssklower {0x00, 0x02, 0x00, 0x10, 0x20, 0x30, 0x35},
6136368Ssklower {0x01, 0x02, 0x03, 0x04, 0x50, 0x60, 0x70, 0x80, 0x90}
6236368Ssklower };
6336368Ssklower struct addr_osinet u_osinet = {
6436368Ssklower {0x00, 0x04},
6536368Ssklower {0x00, 0x02, 0x00, 0x01, 0x23, 0x42, 0x78, 0x20, 0x01, 0x05, 0x00}
6636368Ssklower };
6760359Sbostic #endif /* notdef */
6836368Ssklower struct addr_rfc986 u_rfc986 = {
6936368Ssklower {0x00, 0x06},
7036368Ssklower {0x01, 0xc0, 0x0c, 0x0c, 0xab, 0x11}
7136368Ssklower };
7236368Ssklower struct addr_rfc986 u_bad = {
7336368Ssklower {0x00, 0x01},
7436368Ssklower {0x01, 0xc0, 0x0c, 0x0c, 0xab, 0x11}
7536368Ssklower };
7636368Ssklower #include <stdio.h>
main()7736368Ssklower main()
7836368Ssklower {
7936368Ssklower struct iso_addr a;
8036368Ssklower
8136368Ssklower a.isoa_afi = AFI_37;
8236368Ssklower a.isoa_u.addr_37 = u_37;
8336368Ssklower a.isoa_len = 17;
8436368Ssklower printf("type 37: %s\n", clnp_iso_addrp(&a));
8536368Ssklower
8636368Ssklower a.isoa_afi = AFI_OSINET;
8736368Ssklower a.isoa_u.addr_osinet = u_osinet;
8836368Ssklower a.isoa_len = 14;
8936368Ssklower printf("type osinet: %s\n", clnp_iso_addrp(&a));
9036368Ssklower
9136368Ssklower a.isoa_afi = AFI_RFC986;
9236368Ssklower a.isoa_u.addr_rfc986 = u_rfc986;
9336368Ssklower a.isoa_len = 9;
9436368Ssklower printf("type rfc986: %s\n", clnp_iso_addrp(&a));
9536368Ssklower
9636368Ssklower a.isoa_afi = 12;
9736368Ssklower a.isoa_u.addr_rfc986 = u_rfc986;
9836368Ssklower a.isoa_len = 9;
9936368Ssklower printf("type bad afi: %s\n", clnp_iso_addrp(&a));
10036368Ssklower
10136368Ssklower a.isoa_afi = AFI_RFC986;
10236368Ssklower a.isoa_u.addr_rfc986 = u_bad;
10336368Ssklower a.isoa_len = 9;
10436368Ssklower printf("type bad idi: %s\n", clnp_iso_addrp(&a));
10536368Ssklower }
10660359Sbostic #endif /* TESTDEBUG */
10736368Ssklower
10836368Ssklower unsigned int clnp_debug;
10936368Ssklower static char letters[] = "0123456789abcdef";
11036368Ssklower
11136368Ssklower /*
11236368Ssklower * Print buffer in hex, return addr of where we left off.
11336368Ssklower * Do not null terminate.
11436368Ssklower */
11536368Ssklower char *
clnp_hexp(src,len,where)11636368Ssklower clnp_hexp(src, len, where)
11736368Ssklower char *src; /* src of data to print */
11852487Ssklower int len; /* lengthof src */
11936368Ssklower char *where; /* where to put data */
12036368Ssklower {
12136368Ssklower int i;
12236368Ssklower
12336368Ssklower for (i=0; i<len; i++) {
12452487Ssklower register int j = ((u_char *)src)[i];
12552487Ssklower *where++ = letters[j >> 4];
12652487Ssklower *where++ = letters[j & 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 *
clnp_iso_addrp(isoa)13836368Ssklower clnp_iso_addrp(isoa)
13936368Ssklower struct iso_addr *isoa;
14036368Ssklower {
14136368Ssklower char *cp;
14236368Ssklower
14336368Ssklower /* print length */
14449481Sbostic 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
18849481Sbostic 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);
20560359Sbostic #endif /* vax */
20636368Ssklower }
20736368Ssklower
20836368Ssklower } break;
20936368Ssklower
21036368Ssklower default:
21136368Ssklower *cp++ = '?';
21236368Ssklower break;
21336368Ssklower }
21460359Sbostic #endif /* notdef */
21536368Ssklower *cp = (char)0;
21636368Ssklower
21736368Ssklower return(iso_addr_b);
21836368Ssklower }
21936368Ssklower
22037469Ssklower char *
clnp_saddr_isop(s)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
23460359Sbostic #endif /* ARGO_DEBUG */
235