xref: /csrg-svn/sbin/routed/trace/trace.c (revision 8340)
17214Ssam #ifndef lint
2*8340Ssam static char sccsid[] = "@(#)trace.c	4.2 10/06/82";
37214Ssam #endif
47214Ssam 
57214Ssam #include <sys/param.h>
67214Ssam #include <sys/protosw.h>
77214Ssam #include <sys/socket.h>
87214Ssam #include <net/in.h>
97214Ssam #include <errno.h>
107214Ssam #include <stdio.h>
11*8340Ssam #include <netdb.h>
127214Ssam #include "rip.h"
137214Ssam 
147214Ssam struct	sockaddr_in myaddr = { AF_INET, IPPORT_RESERVED-1 };
157214Ssam 
167214Ssam main(argc, argv)
177214Ssam 	int argc;
187214Ssam 	char *argv[];
197214Ssam {
207214Ssam 	int size, s;
217214Ssam 	struct sockaddr from;
227214Ssam 	struct sockaddr_in router;
237214Ssam 	char packet[MAXPACKETSIZE];
247214Ssam 	register struct rip *msg = (struct rip *)packet;
25*8340Ssam 	struct hostent *hp;
26*8340Ssam 	struct servent *sp;
277214Ssam 
287214Ssam 	if (argc < 3) {
297214Ssam usage:
307214Ssam 		printf("usage: trace cmd machines,\n");
317214Ssam 		printf("cmd either \"on filename\", or \"off\"\n");
327214Ssam 		exit(1);
337214Ssam 	}
347214Ssam #ifdef vax || pdp11
357214Ssam 	myaddr.sin_port = htons(myaddr.sin_port);
367214Ssam #endif
377214Ssam 	s = socket(SOCK_DGRAM, 0, &myaddr, 0);
387214Ssam 	if (s < 0) {
397214Ssam 		perror("socket");
407214Ssam 		exit(2);
417214Ssam 	}
427214Ssam 	argv++, argc--;
437214Ssam 	msg->rip_cmd = strcmp(*argv, "on") == 0 ?
447214Ssam 		RIPCMD_TRACEON : RIPCMD_TRACEOFF;
457214Ssam 	argv++, argc--;
467214Ssam 	size = sizeof (int);
477214Ssam 	if (msg->rip_cmd == RIPCMD_TRACEON) {
487214Ssam 		strcpy(msg->rip_tracefile, *argv);
497214Ssam 		size += strlen(*argv);
507214Ssam 		argv++, argc--;
517214Ssam 	}
527214Ssam 	if (argc == 0)
537214Ssam 		goto usage;
547214Ssam 	bzero((char *)&router, sizeof (router));
557214Ssam 	router.sin_family = AF_INET;
56*8340Ssam 	sp = getservbyname("router", "udp");
57*8340Ssam 	if (sp == 0) {
58*8340Ssam 		printf("udp/router: service unknown\n");
59*8340Ssam 		exit(1);
60*8340Ssam 	}
61*8340Ssam 	router.sin_port = htons(sp->s_port);
627214Ssam 	while (argc > 0) {
63*8340Ssam 		hp = gethostbyname(*argv);
64*8340Ssam 		if (hp == 0) {
657214Ssam 			printf("%s: unknown\n", *argv);
667214Ssam 			continue;
677214Ssam 		}
68*8340Ssam 		bcopy(hp->h_addr, &router.sin_addr, hp->h_length);
697214Ssam 		if (send(s, &router, packet, size) < 0)
707214Ssam 			perror(*argv);
717214Ssam 		argv++, argc--;
727214Ssam 	}
737214Ssam }
74