1*7214Ssam #ifndef lint 2*7214Ssam static char sccsid[] = "@(#)trace.c 4.1 06/17/82"; 3*7214Ssam #endif 4*7214Ssam 5*7214Ssam #include <sys/param.h> 6*7214Ssam #include <sys/protosw.h> 7*7214Ssam #include <sys/socket.h> 8*7214Ssam #include <net/in.h> 9*7214Ssam #include <errno.h> 10*7214Ssam #include <stdio.h> 11*7214Ssam #include "rip.h" 12*7214Ssam 13*7214Ssam struct sockaddr_in myaddr = { AF_INET, IPPORT_RESERVED-1 }; 14*7214Ssam 15*7214Ssam main(argc, argv) 16*7214Ssam int argc; 17*7214Ssam char *argv[]; 18*7214Ssam { 19*7214Ssam int size, s; 20*7214Ssam struct sockaddr from; 21*7214Ssam struct sockaddr_in router; 22*7214Ssam char packet[MAXPACKETSIZE]; 23*7214Ssam register struct rip *msg = (struct rip *)packet; 24*7214Ssam 25*7214Ssam if (argc < 3) { 26*7214Ssam usage: 27*7214Ssam printf("usage: trace cmd machines,\n"); 28*7214Ssam printf("cmd either \"on filename\", or \"off\"\n"); 29*7214Ssam exit(1); 30*7214Ssam } 31*7214Ssam #ifdef vax || pdp11 32*7214Ssam myaddr.sin_port = htons(myaddr.sin_port); 33*7214Ssam #endif 34*7214Ssam s = socket(SOCK_DGRAM, 0, &myaddr, 0); 35*7214Ssam if (s < 0) { 36*7214Ssam perror("socket"); 37*7214Ssam exit(2); 38*7214Ssam } 39*7214Ssam argv++, argc--; 40*7214Ssam msg->rip_cmd = strcmp(*argv, "on") == 0 ? 41*7214Ssam RIPCMD_TRACEON : RIPCMD_TRACEOFF; 42*7214Ssam argv++, argc--; 43*7214Ssam size = sizeof (int); 44*7214Ssam if (msg->rip_cmd == RIPCMD_TRACEON) { 45*7214Ssam strcpy(msg->rip_tracefile, *argv); 46*7214Ssam size += strlen(*argv); 47*7214Ssam argv++, argc--; 48*7214Ssam } 49*7214Ssam if (argc == 0) 50*7214Ssam goto usage; 51*7214Ssam bzero((char *)&router, sizeof (router)); 52*7214Ssam router.sin_family = AF_INET; 53*7214Ssam router.sin_port = htons(IPPORT_ROUTESERVER); 54*7214Ssam while (argc > 0) { 55*7214Ssam router.sin_addr.s_addr = rhost(argv); 56*7214Ssam if (router.sin_addr.s_addr == -1) { 57*7214Ssam printf("%s: unknown\n", *argv); 58*7214Ssam continue; 59*7214Ssam } 60*7214Ssam if (send(s, &router, packet, size) < 0) 61*7214Ssam perror(*argv); 62*7214Ssam argv++, argc--; 63*7214Ssam } 64*7214Ssam } 65