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