ripcmd.c
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:3k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

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