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

TCP/IP协议栈

开发平台:

Visual C++

  1. /* RIP packet tracing
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #include "global.h"
  5. #include "mbuf.h"
  6. #include "netuser.h"
  7. #include "timer.h"
  8. #include "rip.h"
  9. #include "trace.h"
  10. void
  11. rip_dump(fp,bpp)
  12. FILE *fp;
  13. struct mbuf **bpp;
  14. {
  15. struct rip_route entry;
  16. int i;
  17. int cmd,version;
  18. uint16 len;
  19. fprintf(fp,"RIP: ");
  20. cmd = PULLCHAR(bpp);
  21. version = PULLCHAR(bpp);
  22. switch(cmd){
  23. case RIPCMD_REQUEST:
  24. fprintf(fp,"REQUEST");
  25. break;
  26. case RIPCMD_RESPONSE:
  27. fprintf(fp,"RESPONSE");
  28. break;
  29. default:
  30. fprintf(fp," cmd %u",cmd);
  31. break;
  32. }
  33. pull16(bpp); /* remove one word of padding */
  34. len = len_p(*bpp);
  35. fprintf(fp," vers %u entries %u:n",version,len / RIPROUTE);
  36. i = 0;
  37. while(len >= RIPROUTE){
  38. /* Pull an entry off the packet */
  39. pullentry(&entry,bpp);
  40. len -= RIPROUTE;
  41. if(entry.addr_fam != RIP_IPFAM) {
  42. /* Skip non-IP addresses */
  43. continue;
  44. }
  45. fprintf(fp,"%-16s%-3u ",inet_ntoa(entry.target),entry.metric);
  46. if((++i % 3) == 0){
  47. putc('n',fp);
  48. }
  49. }
  50. if((i % 3) != 0)
  51. putc('n',fp);
  52. }