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