Commit | Line | Data |
---|---|---|
7eaf7b1f | 1 | #ifndef lint |
603811e3 | 2 | static char sccsid[] = "@(#)trace.c 4.3 %G%"; |
7eaf7b1f SL |
3 | #endif |
4 | ||
5 | #include <sys/param.h> | |
6 | #include <sys/protosw.h> | |
7 | #include <sys/socket.h> | |
603811e3 | 8 | #include <netinet/in.h> |
7eaf7b1f SL |
9 | #include <errno.h> |
10 | #include <stdio.h> | |
f64bc556 | 11 | #include <netdb.h> |
603811e3 | 12 | #include "../protocol.h" |
7eaf7b1f SL |
13 | |
14 | struct sockaddr_in myaddr = { AF_INET, IPPORT_RESERVED-1 }; | |
603811e3 | 15 | char packet[MAXPACKETSIZE]; |
7eaf7b1f SL |
16 | |
17 | main(argc, argv) | |
18 | int argc; | |
19 | char *argv[]; | |
20 | { | |
21 | int size, s; | |
22 | struct sockaddr from; | |
23 | struct sockaddr_in router; | |
7eaf7b1f | 24 | register struct rip *msg = (struct rip *)packet; |
f64bc556 SL |
25 | struct hostent *hp; |
26 | struct servent *sp; | |
7eaf7b1f SL |
27 | |
28 | if (argc < 3) { | |
29 | usage: | |
30 | printf("usage: trace cmd machines,\n"); | |
31 | printf("cmd either \"on filename\", or \"off\"\n"); | |
32 | exit(1); | |
33 | } | |
603811e3 MK |
34 | s = socket(AF_INET, SOCK_DGRAM, 0); |
35 | if (s < 0) { | |
36 | perror("socket"); | |
37 | exit(2); | |
38 | } | |
7eaf7b1f SL |
39 | #ifdef vax || pdp11 |
40 | myaddr.sin_port = htons(myaddr.sin_port); | |
41 | #endif | |
603811e3 MK |
42 | if (bind(s, &myaddr, sizeof(myaddr)) < 0) { |
43 | perror("bind"); | |
7eaf7b1f SL |
44 | exit(2); |
45 | } | |
603811e3 | 46 | |
7eaf7b1f SL |
47 | argv++, argc--; |
48 | msg->rip_cmd = strcmp(*argv, "on") == 0 ? | |
49 | RIPCMD_TRACEON : RIPCMD_TRACEOFF; | |
603811e3 | 50 | msg->rip_vers = RIPVERSION; |
7eaf7b1f SL |
51 | argv++, argc--; |
52 | size = sizeof (int); | |
53 | if (msg->rip_cmd == RIPCMD_TRACEON) { | |
54 | strcpy(msg->rip_tracefile, *argv); | |
55 | size += strlen(*argv); | |
56 | argv++, argc--; | |
57 | } | |
58 | if (argc == 0) | |
59 | goto usage; | |
60 | bzero((char *)&router, sizeof (router)); | |
61 | router.sin_family = AF_INET; | |
f64bc556 SL |
62 | sp = getservbyname("router", "udp"); |
63 | if (sp == 0) { | |
64 | printf("udp/router: service unknown\n"); | |
65 | exit(1); | |
66 | } | |
603811e3 | 67 | router.sin_port = sp->s_port; |
7eaf7b1f | 68 | while (argc > 0) { |
f64bc556 SL |
69 | hp = gethostbyname(*argv); |
70 | if (hp == 0) { | |
7eaf7b1f SL |
71 | printf("%s: unknown\n", *argv); |
72 | continue; | |
73 | } | |
f64bc556 | 74 | bcopy(hp->h_addr, &router.sin_addr, hp->h_length); |
603811e3 | 75 | if (sendto(s, packet, size, 0, &router, sizeof(router)) < 0) |
7eaf7b1f SL |
76 | perror(*argv); |
77 | argv++, argc--; | |
78 | } | |
79 | } |