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

TCP/IP协议栈

开发平台:

Visual C++

  1. /*
  2.  * PPPDUMP.C
  3.  *
  4.  * 12-89 -- Katie Stevens (dkstevens@ucdavis.edu)
  5.  *    UC Davis, Computing Services
  6.  * PPP.08 05-90 [ks] improve tracing reports
  7.  * PPP.09  05-90 [ks] add UPAP packet reporting
  8.  * PPP.14 08-90 [ks] change UPAP to PAP for consistency with RFC1172
  9.  * PPP.15 09-90 [ks] update to KA9Q NOS v900828
  10.  * Jan 91 [Bill Simpson] small changes to match rewrite of PPP
  11.  * Aug 91 [Bill Simpson] fixed some buffer loss
  12.  */
  13. #include <stdio.h>
  14. #include "global.h"
  15. #include "mbuf.h"
  16. #include "iface.h"
  17. #include "internet.h"
  18. #include "ppp.h"
  19. #include "trace.h"
  20. #ifdef TURBOC_SWITCH_BUG
  21. #pragma option -G-
  22. #endif
  23. /* dump a PPP packet */
  24. void
  25. ppp_dump(fp,bpp,unused)
  26. FILE *fp;
  27. struct mbuf **bpp;
  28. int unused;
  29. {
  30. struct ppp_hdr hdr;
  31. struct mbuf *tbp;
  32. fprintf(fp,"PPP: len %3ut", len_p(*bpp));
  33. /* HDLC address and control fields may be compressed out */
  34. if ((byte_t)(*bpp)->data[0] != HDLC_ALL_ADDR) {
  35. fprintf(fp,"(compressed ALL/UI)t");
  36. } else if ((byte_t)(*bpp)->data[1] != HDLC_UI) {
  37. fprintf(fp,"(missing UI!)t");
  38. } else {
  39. /* skip address/control fields */
  40. pull16(bpp);
  41. }
  42. /* Initialize the expected header */
  43. hdr.addr = HDLC_ALL_ADDR;
  44. hdr.control = HDLC_UI;
  45. hdr.protocol = PULLCHAR(bpp);
  46. /* First byte of PPP protocol field may be compressed out */
  47. if ( hdr.protocol & 0x01 ) {
  48. fprintf(fp,"compressed ");
  49. } else {
  50. hdr.protocol = (hdr.protocol << 8) | PULLCHAR(bpp);
  51. /* Second byte of PPP protocol field must be odd */
  52. if ( !(hdr.protocol & 0x01) ) {
  53. fprintf(fp, "(not odd!) " );
  54. }
  55. }
  56. fprintf(fp,"protocol: ");
  57. switch(hdr.protocol){
  58. case PPP_IP_PROTOCOL:
  59. fprintf(fp,"IPn");
  60. ip_dump(fp,bpp,1);
  61. break;
  62. case PPP_IPCP_PROTOCOL:
  63. fprintf(fp,"IPCPn");
  64. break;
  65. case PPP_LCP_PROTOCOL:
  66. fprintf(fp,"LCPn");
  67. break;
  68. case PPP_PAP_PROTOCOL:
  69. fprintf(fp,"PAPn");
  70. break;
  71. case PPP_COMPR_PROTOCOL:
  72. fprintf(fp,"VJ Compressed TCP/IPn");
  73. vjcomp_dump(fp,bpp,0);
  74. break;
  75. case PPP_UNCOMP_PROTOCOL:
  76. fprintf(fp,"VJ Uncompressed TCP/IPn");
  77. /* Get our own copy so we can mess with the data */
  78. if ( (tbp = copy_p(*bpp, len_p(*bpp))) == NULL)
  79. return;
  80. fprintf(fp,"tconnection 0x%02xn",
  81. tbp->data[9]); /* FIX THIS! */
  82. /* Restore the bytes used with Uncompressed TCP */
  83. tbp->data[9] = TCP_PTCL; /* FIX THIS! */
  84. ip_dump(fp,&tbp,1);
  85. free_p(&tbp);
  86. break;
  87. default:
  88. fprintf(fp,"unknown 0x%04xn",hdr.protocol);
  89. break;
  90. }
  91. }
  92. #ifdef TURBOC_SWITCH_BUG
  93. #pragma option -G
  94. #endif