upgrade to 4.2; headers in ..; query looks for multiple responses
[unix-history] / usr / src / sbin / routed / trace / trace.c
CommitLineData
7eaf7b1f 1#ifndef lint
603811e3 2static 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
14struct sockaddr_in myaddr = { AF_INET, IPPORT_RESERVED-1 };
603811e3 15char packet[MAXPACKETSIZE];
7eaf7b1f
SL
16
17main(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) {
29usage:
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}