xref: /csrg-svn/sys/tests/netiso/Tesis.c (revision 49346)
1*49346Ssklower /*
2*49346Ssklower  * Copyright (c) 1988, 1990 Regents of the University of California.
3*49346Ssklower  * All rights reserved.
4*49346Ssklower  *
5*49346Ssklower  * %sccs.include.redist.c%
6*49346Ssklower  */
7*49346Ssklower /* Modifications
8*49346Ssklower  * Copyright (c) 1990 Robert Hagens
9*49346Ssklower  */
10*49346Ssklower #ifndef lint
11*49346Ssklower static char sccsid[] = "@(#)Tesis.c	1.1 (Berkeley) 05/07/91";
12*49346Ssklower #endif /* not lint */
13*49346Ssklower 
14*49346Ssklower /*
15*49346Ssklower  * This is a test program to listen to esis packets.
16*49346Ssklower  */
17*49346Ssklower #include <sys/param.h>
18*49346Ssklower #include <sys/uio.h>
19*49346Ssklower #include <sys/socket.h>
20*49346Ssklower #include <sys/ioctl.h>
21*49346Ssklower #include <net/route.h>
22*49346Ssklower #include <net/if.h>
23*49346Ssklower #define  TCPT_NTIMERS 4
24*49346Ssklower #include <netiso/iso.h>
25*49346Ssklower #include <netiso/tp_param.h>
26*49346Ssklower #include <netiso/tp_user.h>
27*49346Ssklower 
28*49346Ssklower #include <stdio.h>
29*49346Ssklower #include <errno.h>
30*49346Ssklower #include <ctype.h>
31*49346Ssklower #include <netdb.h>
32*49346Ssklower 
33*49346Ssklower 
34*49346Ssklower #define dbprintf if(verbose)printf
35*49346Ssklower #define try(a,b,c) {x = (a b); dbprintf("%s%s returns %d\n",c,"a",x);\
36*49346Ssklower 		if(x<0) {perror("a"); myexit(0);}}
37*49346Ssklower 
38*49346Ssklower 
39*49346Ssklower struct  ifreq ifr;
40*49346Ssklower short port = 3000;
41*49346Ssklower struct  sockaddr_iso faddr, laddr = { sizeof(laddr), AF_ISO };
42*49346Ssklower struct  sockaddr_iso *siso = &laddr;
43*49346Ssklower char **xenvp;
44*49346Ssklower 
45*49346Ssklower long size, count = 10, forkp, confp, echop, mynamep, verbose = 1, playtag = 0;
46*49346Ssklower long records, intercept = 0, isode_mode;
47*49346Ssklower 
48*49346Ssklower char buf[2048];
49*49346Ssklower char your_it[] = "You're it!";
50*49346Ssklower 
51*49346Ssklower char *Servername;
52*49346Ssklower 
53*49346Ssklower main(argc, argv, envp)
54*49346Ssklower int argc;
55*49346Ssklower char *argv[];
56*49346Ssklower char *envp[];
57*49346Ssklower {
58*49346Ssklower 	tisink();
59*49346Ssklower }
60*49346Ssklower #define BIG 2048
61*49346Ssklower #define MIDLIN 512
62*49346Ssklower char readbuf[BIG];
63*49346Ssklower struct iovec iov[1] = {
64*49346Ssklower 	readbuf,
65*49346Ssklower 	sizeof readbuf,
66*49346Ssklower };
67*49346Ssklower char name[MIDLIN];
68*49346Ssklower union {
69*49346Ssklower     struct {
70*49346Ssklower 	    struct cmsghdr	cmhdr;
71*49346Ssklower 	    char		cmdata[128 - sizeof(struct cmsghdr)];
72*49346Ssklower     } cm;
73*49346Ssklower     char data[128];
74*49346Ssklower } cbuf;
75*49346Ssklower #define control cbuf.data
76*49346Ssklower struct msghdr msghdr = {
77*49346Ssklower 	name, sizeof(name),
78*49346Ssklower 	iov, sizeof(iov)/sizeof(iov[1]),
79*49346Ssklower 	control, sizeof control,
80*49346Ssklower 	0 /* flags */
81*49346Ssklower };
82*49346Ssklower 
83*49346Ssklower tisink()
84*49346Ssklower {
85*49346Ssklower 	int x, s, pid, on = 1, loop = 0, n, fromlen, flags = 0;
86*49346Ssklower 	extern int errno;
87*49346Ssklower 
88*49346Ssklower 	try(socket, (AF_ISO, SOCK_DGRAM, ISOPROTO_ESIS),"");
89*49346Ssklower 	s = x;
90*49346Ssklower 
91*49346Ssklower 	for(;;) {
92*49346Ssklower 		fromlen = sizeof(name);
93*49346Ssklower 		try(recvfrom, (s, readbuf, sizeof(readbuf), flags,
94*49346Ssklower 			name, &fromlen), "");
95*49346Ssklower 		n = x;
96*49346Ssklower 		dumpit("connection from:", name, fromlen);
97*49346Ssklower 		dumpit("packet is:", readbuf, n);
98*49346Ssklower 	}
99*49346Ssklower }
100*49346Ssklower answerback(flags, n, ns)
101*49346Ssklower {
102*49346Ssklower 	msghdr.msg_controllen = 0;
103*49346Ssklower 	msghdr.msg_iovlen = 1;
104*49346Ssklower 	iov->iov_len = n;
105*49346Ssklower 	n = sendmsg(ns, &msghdr, flags);
106*49346Ssklower 	dbprintf("echoed %d\n", n);
107*49346Ssklower 	return n;
108*49346Ssklower }
109*49346Ssklower 
110*49346Ssklower dumpit(what, where, n)
111*49346Ssklower char *what; unsigned short *where; int n;
112*49346Ssklower {
113*49346Ssklower 	unsigned short *s = where;
114*49346Ssklower 	unsigned short *z = where + (n+1)/2;
115*49346Ssklower 	int count = 0;
116*49346Ssklower 	printf(what);
117*49346Ssklower 	while(s < z) {
118*49346Ssklower 		count++;
119*49346Ssklower 		printf("%x ",*s++);
120*49346Ssklower 		if ((count & 15) == 0)
121*49346Ssklower 			putchar('\n');
122*49346Ssklower 	}
123*49346Ssklower 	if (count & 15)
124*49346Ssklower 		putchar('\n');
125*49346Ssklower 	fflush(stdout);
126*49346Ssklower }
127*49346Ssklower myexit(n)
128*49346Ssklower {
129*49346Ssklower 	fflush(stderr);
130*49346Ssklower 	printf("got %d records\n", records);
131*49346Ssklower 	fflush(stdout);
132*49346Ssklower 	exit(n);
133*49346Ssklower }
134