home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR3 / KA9Q212.ZIP / RIPCMD.C < prev    next >
C/C++ Source or Header  |  1993-07-16  |  3KB  |  175 lines

  1. /* RIP-related user commands
  2.  *   Al Broscious, N3FCT
  3.  *   Phil Karn, KA9Q
  4.  */
  5.  
  6. /****************************************************************************
  7. *    $Id: ripcmd.c 1.2 93/07/16 11:49:43 ROOT_DOS Exp $
  8. *    17 May 93    1.2        GT    Fix warnings.                                    *
  9. ****************************************************************************/
  10.  
  11. #include <stdio.h>
  12. #include "global.h"
  13. #include "mbuf.h"
  14. #include "netuser.h"
  15. #include "internet.h"
  16. #include "cmdparse.h"
  17. #include "timer.h"
  18. #include "iface.h"
  19. #include "udp.h"
  20. #include "rip.h"
  21. #include "commands.h"
  22.  
  23. struct cmds Ripcmds[] = {
  24.     { "accept",    dodroprefuse,    0,    2,
  25.         "rip accept <gateway> " },
  26.     { "add",        doripadd,    0,    3,
  27.         "rip add <dest> <interval> [<flags>]" },
  28.     { "drop",        doripdrop,    0,    2,
  29.         "rip drop <dest>" },
  30.     { "merge",    doripmerge,    0,    0,    NULLCHAR },
  31.     { "refuse",    doaddrefuse,    0,    2,
  32.         "rip refuse <gateway>" },    
  33.     { "request",    doripreq,    0,    2,    NULLCHAR },
  34.     { "status",    doripstat,    0,    0,    NULLCHAR },
  35.     { "trace",    doriptrace,    0,    0,    NULLCHAR },
  36.     { NULLCHAR },
  37. };
  38.  
  39. int
  40. dorip(argc,argv,p)
  41. int argc;
  42. char *argv[];
  43. void *p;
  44. {
  45.     return subcmd(Ripcmds,argc,argv,p);
  46. }
  47.  
  48. /* Add an entry to the RIP output list */
  49. int
  50. doripadd(argc,argv,p)
  51. int argc;
  52. char *argv[];
  53. void *p;
  54. {
  55.     char flags = 0;
  56.  
  57.     if(argc > 3)
  58.         flags = atoi(argv[3]);
  59.  
  60.     return rip_add(resolve(argv[1]),atol(argv[2]),flags);
  61. }
  62.  
  63. /* Add an entry to the RIP refuse list */
  64. int
  65. doaddrefuse(argc,argv,p)
  66. int argc;
  67. char *argv[];
  68. void *p;
  69. {
  70.     return riprefadd(resolve(argv[1]));
  71. }
  72.  
  73. /* Drop an entry from the RIP output list */
  74. int
  75. doripdrop(argc,argv,p)
  76. int argc;
  77. char *argv[];
  78. void *p;
  79. {
  80.     return rip_drop(resolve(argv[1]));
  81. }
  82.  
  83. /* Drop an entry from the RIP refuse list */
  84. int
  85. dodroprefuse(argc,argv,p)
  86. int argc;
  87. char *argv[];
  88. void *p;
  89. {
  90.     return riprefdrop(resolve(argv[1]));
  91. }
  92.  
  93. /* Initialize the RIP listener */
  94. int
  95. doripinit(argc,argv,p)
  96. int argc;
  97. char *argv[];
  98. void *p;
  99. {
  100.     return rip_init();
  101. }
  102. int
  103. doripstop(argc,argv,p)
  104. int argc;
  105. char *argv[];
  106. void *p;
  107. {
  108.     del_udp(Rip_cb);
  109.     Rip_cb = NULLUDP;
  110.     return 0;
  111. }
  112. int
  113. doripreq(argc,argv,p)
  114. int argc;
  115. char *argv[];
  116. void *p;
  117. {
  118.     int16 replyport;
  119.  
  120.     if(argc > 2)
  121.         replyport = atoi(argv[2]);
  122.     else
  123.         replyport = RIP_PORT;
  124.     return ripreq(resolve(argv[1]),replyport);
  125. }
  126. /* Dump RIP statistics */
  127. int
  128. doripstat(argc,argv,p)
  129. int argc;
  130. char *argv[];
  131. void *p;
  132. {
  133.     struct rip_list *rl;
  134.     struct rip_refuse *rfl;
  135.  
  136.     tprintf("RIP: sent %lu rcvd %lu reqst %lu resp %lu unk %lu refused %lu\n",
  137.      Rip_stat.output, Rip_stat.rcvd, Rip_stat.request, Rip_stat.response,
  138.      Rip_stat.unknown,Rip_stat.refusals);
  139.     if(Rip_list != NULLRL){
  140.         tprintf("Active RIP output interfaces:\n");
  141.         tprintf("Dest Addr       Interval Split\n");
  142.         for(rl=Rip_list; rl != NULLRL; rl = rl->next){
  143.             if(tprintf("%-16s%-9lu%-6u\n",
  144.              inet_ntoa(rl->dest),rl->interval,
  145.              !!(rl->flags&RIP_SPLIT)) == EOF)
  146.                 break;
  147.         }
  148.     }
  149.     if(Rip_refuse != NULLREF){
  150.         tprintf("Refusing announcements from gateways:\n");
  151.         for(rfl=Rip_refuse; rfl != NULLREF;rfl = rfl->next){
  152.             if(tprintf("%s\n",inet_ntoa(rfl->target)) == EOF)
  153.                 break;
  154.         }
  155.     }
  156.     return 0;
  157. }
  158.  
  159. int
  160. doriptrace(argc,argv,p)
  161. int argc;
  162. char *argv[];
  163. void *p;
  164. {
  165.     return setshort(&Rip_trace,"RIP tracing",argc,argv);
  166. }
  167. int
  168. doripmerge(argc,argv,p)
  169. int argc;
  170. char *argv[];
  171. void *p;
  172. {
  173.     return setbool(&Rip_merge,"RIP merging",argc,argv);
  174. }
  175.