/* * PPPDUMP.C * * 12-89 -- Katie Stevens (dkstevens@ucdavis.edu) * UC Davis, Computing Services * PPP.08 05-90 [ks] improve tracing reports * PPP.09 05-90 [ks] add UPAP packet reporting * PPP.14 08-90 [ks] change UPAP to PAP for consistency with RFC1172 * PPP.15 09-90 [ks] update to KA9Q NOS v900828 * Jan 91 [Bill Simpson] small changes to match rewrite of PPP * Aug 91 [Bill Simpson] fixed some buffer loss */ #include #include "global.h" #include "mbuf.h" #include "iface.h" #include "internet.h" #include "ppp.h" #include "trace.h" #ifdef TURBOC_SWITCH_BUG #pragma option -G- #endif /* dump a PPP packet */ void ppp_dump(fp,bpp,unused) FILE *fp; struct mbuf **bpp; int unused; { struct ppp_hdr hdr; struct mbuf *tbp; fprintf(fp,"PPP: len %3u\t", len_p(*bpp)); /* HDLC address and control fields may be compressed out */ if ((byte_t)(*bpp)->data[0] != HDLC_ALL_ADDR) { fprintf(fp,"(compressed ALL/UI)\t"); } else if ((byte_t)(*bpp)->data[1] != HDLC_UI) { fprintf(fp,"(missing UI!)\t"); } else { /* skip address/control fields */ pull16(bpp); } /* Initialize the expected header */ hdr.addr = HDLC_ALL_ADDR; hdr.control = HDLC_UI; hdr.protocol = PULLCHAR(bpp); /* First byte of PPP protocol field may be compressed out */ if ( hdr.protocol & 0x01 ) { fprintf(fp,"compressed "); } else { hdr.protocol = (hdr.protocol << 8) | PULLCHAR(bpp); /* Second byte of PPP protocol field must be odd */ if ( !(hdr.protocol & 0x01) ) { fprintf(fp, "(not odd!) " ); } } fprintf(fp,"protocol: "); switch(hdr.protocol){ case PPP_IP_PROTOCOL: fprintf(fp,"IP\n"); ip_dump(fp,bpp,1); break; case PPP_IPCP_PROTOCOL: fprintf(fp,"IPCP\n"); break; case PPP_LCP_PROTOCOL: fprintf(fp,"LCP\n"); break; case PPP_PAP_PROTOCOL: fprintf(fp,"PAP\n"); break; case PPP_COMPR_PROTOCOL: fprintf(fp,"VJ Compressed TCP/IP\n"); vjcomp_dump(fp,bpp,0); break; case PPP_UNCOMP_PROTOCOL: fprintf(fp,"VJ Uncompressed TCP/IP\n"); /* Get our own copy so we can mess with the data */ if ( (tbp = copy_p(*bpp, len_p(*bpp))) == NULLBUF) return; fprintf(fp,"\tconnection 0x%02x\n", tbp->data[9]); /* FIX THIS! */ /* Restore the bytes used with Uncompressed TCP */ tbp->data[9] = TCP_PTCL; /* FIX THIS! */ ip_dump(fp,&tbp,1); free_p(tbp); break; default: fprintf(fp,"unknown 0x%04x\n",hdr.protocol); break; } } #ifdef TURBOC_SWITCH_BUG #pragma option -G #endif