1*49352Sbostic /*-
2*49352Sbostic * Copyright (c) 1988, 1990 The Regents of the University of California.
349346Ssklower * All rights reserved.
449346Ssklower *
549346Ssklower * %sccs.include.redist.c%
649346Ssklower */
7*49352Sbostic
8*49352Sbostic #ifndef lint
9*49352Sbostic char copyright[] =
10*49352Sbostic "@(#) Copyright (c) 1988, 1990 The Regents of the University of California.\n\
11*49352Sbostic All rights reserved.\n";
12*49352Sbostic #endif /* not lint */
13*49352Sbostic
14*49352Sbostic #ifndef lint
15*49352Sbostic static char sccsid[] = "@(#)Tesis.c 7.1 (Berkeley) 05/07/91";
16*49352Sbostic #endif /* not lint */
17*49352Sbostic
1849346Ssklower /* Modifications
1949346Ssklower * Copyright (c) 1990 Robert Hagens
2049346Ssklower */
2149346Ssklower
2249346Ssklower /*
2349346Ssklower * This is a test program to listen to esis packets.
2449346Ssklower */
2549346Ssklower #include <sys/param.h>
2649346Ssklower #include <sys/uio.h>
2749346Ssklower #include <sys/socket.h>
2849346Ssklower #include <sys/ioctl.h>
2949346Ssklower #include <net/route.h>
3049346Ssklower #include <net/if.h>
3149346Ssklower #define TCPT_NTIMERS 4
3249346Ssklower #include <netiso/iso.h>
3349346Ssklower #include <netiso/tp_param.h>
3449346Ssklower #include <netiso/tp_user.h>
3549346Ssklower
3649346Ssklower #include <stdio.h>
3749346Ssklower #include <errno.h>
3849346Ssklower #include <ctype.h>
3949346Ssklower #include <netdb.h>
4049346Ssklower
4149346Ssklower
4249346Ssklower #define dbprintf if(verbose)printf
4349346Ssklower #define try(a,b,c) {x = (a b); dbprintf("%s%s returns %d\n",c,"a",x);\
4449346Ssklower if(x<0) {perror("a"); myexit(0);}}
4549346Ssklower
4649346Ssklower
4749346Ssklower struct ifreq ifr;
4849346Ssklower short port = 3000;
4949346Ssklower struct sockaddr_iso faddr, laddr = { sizeof(laddr), AF_ISO };
5049346Ssklower struct sockaddr_iso *siso = &laddr;
5149346Ssklower char **xenvp;
5249346Ssklower
5349346Ssklower long size, count = 10, forkp, confp, echop, mynamep, verbose = 1, playtag = 0;
5449346Ssklower long records, intercept = 0, isode_mode;
5549346Ssklower
5649346Ssklower char buf[2048];
5749346Ssklower char your_it[] = "You're it!";
5849346Ssklower
5949346Ssklower char *Servername;
6049346Ssklower
main(argc,argv,envp)6149346Ssklower main(argc, argv, envp)
6249346Ssklower int argc;
6349346Ssklower char *argv[];
6449346Ssklower char *envp[];
6549346Ssklower {
6649346Ssklower tisink();
6749346Ssklower }
6849346Ssklower #define BIG 2048
6949346Ssklower #define MIDLIN 512
7049346Ssklower char readbuf[BIG];
7149346Ssklower struct iovec iov[1] = {
7249346Ssklower readbuf,
7349346Ssklower sizeof readbuf,
7449346Ssklower };
7549346Ssklower char name[MIDLIN];
7649346Ssklower union {
7749346Ssklower struct {
7849346Ssklower struct cmsghdr cmhdr;
7949346Ssklower char cmdata[128 - sizeof(struct cmsghdr)];
8049346Ssklower } cm;
8149346Ssklower char data[128];
8249346Ssklower } cbuf;
8349346Ssklower #define control cbuf.data
8449346Ssklower struct msghdr msghdr = {
8549346Ssklower name, sizeof(name),
8649346Ssklower iov, sizeof(iov)/sizeof(iov[1]),
8749346Ssklower control, sizeof control,
8849346Ssklower 0 /* flags */
8949346Ssklower };
9049346Ssklower
tisink()9149346Ssklower tisink()
9249346Ssklower {
9349346Ssklower int x, s, pid, on = 1, loop = 0, n, fromlen, flags = 0;
9449346Ssklower extern int errno;
9549346Ssklower
9649346Ssklower try(socket, (AF_ISO, SOCK_DGRAM, ISOPROTO_ESIS),"");
9749346Ssklower s = x;
9849346Ssklower
9949346Ssklower for(;;) {
10049346Ssklower fromlen = sizeof(name);
10149346Ssklower try(recvfrom, (s, readbuf, sizeof(readbuf), flags,
10249346Ssklower name, &fromlen), "");
10349346Ssklower n = x;
10449346Ssklower dumpit("connection from:", name, fromlen);
10549346Ssklower dumpit("packet is:", readbuf, n);
10649346Ssklower }
10749346Ssklower }
answerback(flags,n,ns)10849346Ssklower answerback(flags, n, ns)
10949346Ssklower {
11049346Ssklower msghdr.msg_controllen = 0;
11149346Ssklower msghdr.msg_iovlen = 1;
11249346Ssklower iov->iov_len = n;
11349346Ssklower n = sendmsg(ns, &msghdr, flags);
11449346Ssklower dbprintf("echoed %d\n", n);
11549346Ssklower return n;
11649346Ssklower }
11749346Ssklower
dumpit(what,where,n)11849346Ssklower dumpit(what, where, n)
11949346Ssklower char *what; unsigned short *where; int n;
12049346Ssklower {
12149346Ssklower unsigned short *s = where;
12249346Ssklower unsigned short *z = where + (n+1)/2;
12349346Ssklower int count = 0;
12449346Ssklower printf(what);
12549346Ssklower while(s < z) {
12649346Ssklower count++;
12749346Ssklower printf("%x ",*s++);
12849346Ssklower if ((count & 15) == 0)
12949346Ssklower putchar('\n');
13049346Ssklower }
13149346Ssklower if (count & 15)
13249346Ssklower putchar('\n');
13349346Ssklower fflush(stdout);
13449346Ssklower }
myexit(n)13549346Ssklower myexit(n)
13649346Ssklower {
13749346Ssklower fflush(stderr);
13849346Ssklower printf("got %d records\n", records);
13949346Ssklower fflush(stdout);
14049346Ssklower exit(n);
14149346Ssklower }
142