1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: char copyright[] =
9: "@(#) Copyright (c) 1983 Regents of the University of California.\n\
10: All rights reserved.\n";
11: #endif not lint
12:
13: #ifndef lint
14: static char sccsid[] = "@(#)trace.c 5.3 (Berkeley) 2/12/86";
15: #endif not lint
16:
17: #include <sys/param.h>
18: #include <sys/protosw.h>
19: #include <sys/socket.h>
20: #include <netinet/in.h>
21: #include <arpa/inet.h>
22: #include <errno.h>
23: #include <stdio.h>
24: #include <netdb.h>
25: #include <protocols/routed.h>
26:
27: struct sockaddr_in myaddr = { AF_INET, IPPORT_RESERVED-1 };
28: char packet[MAXPACKETSIZE];
29:
30: main(argc, argv)
31: int argc;
32: char *argv[];
33: {
34: int size, s;
35: struct sockaddr from;
36: struct sockaddr_in router;
37: register struct rip *msg = (struct rip *)packet;
38: struct hostent *hp;
39: struct servent *sp;
40:
41: if (argc < 3) {
42: usage:
43: printf("usage: trace cmd machines,\n");
44: printf("cmd either \"on filename\", or \"off\"\n");
45: exit(1);
46: }
47: s = socket(AF_INET, SOCK_DGRAM, 0);
48: if (s < 0) {
49: perror("socket");
50: exit(2);
51: }
52: #ifdef vax || pdp11
53: myaddr.sin_port = htons(myaddr.sin_port);
54: #endif
55: if (bind(s, &myaddr, sizeof(myaddr)) < 0) {
56: perror("bind");
57: exit(2);
58: }
59:
60: argv++, argc--;
61: msg->rip_cmd = strcmp(*argv, "on") == 0 ?
62: RIPCMD_TRACEON : RIPCMD_TRACEOFF;
63: msg->rip_vers = RIPVERSION;
64: argv++, argc--;
65: size = sizeof (int);
66: if (msg->rip_cmd == RIPCMD_TRACEON) {
67: strcpy(msg->rip_tracefile, *argv);
68: size += strlen(*argv);
69: argv++, argc--;
70: }
71: if (argc == 0)
72: goto usage;
73: bzero((char *)&router, sizeof (router));
74: router.sin_family = AF_INET;
75: sp = getservbyname("router", "udp");
76: if (sp == 0) {
77: printf("udp/router: service unknown\n");
78: exit(1);
79: }
80: router.sin_port = sp->s_port;
81: while (argc > 0) {
82: router.sin_family = AF_INET;
83: router.sin_addr.s_addr = inet_addr(*argv);
84: if (router.sin_addr.s_addr == -1) {
85: hp = gethostbyname(*argv);
86: if (hp == 0) {
87: printf("%s: unknown\n", *argv);
88: exit(1);
89: }
90: bcopy(hp->h_addr, &router.sin_addr, hp->h_length);
91: }
92: if (sendto(s, packet, size, 0, &router, sizeof(router)) < 0)
93: perror(*argv);
94: argv++, argc--;
95: }
96: }
Defined functions
main
defined in line
30;
never used
Defined variables