xref: /csrg-svn/sbin/routed/trace/trace.c (revision 7214)
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