diff options
Diffstat (limited to 'contrib/tcpdump/print-atm.c')
-rw-r--r-- | contrib/tcpdump/print-atm.c | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/contrib/tcpdump/print-atm.c b/contrib/tcpdump/print-atm.c index b14a580..d664d6e 100644 --- a/contrib/tcpdump/print-atm.c +++ b/contrib/tcpdump/print-atm.c @@ -20,7 +20,7 @@ */ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.38.2.3 2005/07/07 01:24:34 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.38.2.6 2006/01/25 13:27:24 hannes Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -43,6 +43,12 @@ static const char rcsid[] _U_ = #include "ether.h" +struct tok oam_f_values[] = { + { OAMF4SC, "OAM F4 (segment)" }, + { OAMF4EC, "OAM F4 (end)" }, + { 0, NULL } +}; + struct tok oam_celltype_values[] = { { 0x1, "Fault Management" }, { 0x2, "Performance Management" }, @@ -136,6 +142,14 @@ atm_if_print(const struct pcap_pkthdr *h, const u_char *p) return (caplen); } + /* Cisco Style NLPID ? */ + if (*p == LLC_UI) { + if (eflag) + printf("CNLPID "); + isoclns_print(p+1, length-1, caplen-1); + return hdrlen; + } + /* * Extract the presumed LLC header into a variable, for quick * testing. @@ -290,9 +304,10 @@ atm_print(u_int vpi, u_int vci, u_int traftype, const u_char *p, u_int length, int oam_print (const u_char *p, u_int length, u_int hec) { - u_int16_t cell_header, cell_type, func_type,vpi,vci,payload,clp; + u_int32_t cell_header; + u_int16_t cell_type, func_type,vpi,vci,payload,clp; - cell_header = EXTRACT_32BITS(p); + cell_header = EXTRACT_32BITS(p+hec); cell_type = ((*(p+4+hec))>>4) & 0x0f; func_type = *(p+4+hec) & 0x0f; @@ -301,20 +316,9 @@ oam_print (const u_char *p, u_int length, u_int hec) { payload = (cell_header>>1)&0x7; clp = cell_header&0x1; - switch (vci) { - case OAMF4SC: - printf("OAM F4 (segment), "); - break; - case OAMF4EC: - printf("OAM F4 (end), "); - break; - default: - printf("OAM F5, "); - break; - } - - if (eflag) - printf("vpi %u, vci %u, payload %u, clp %u, ",vpi,vci,payload,clp); + printf("%s, vpi %u, vci %u, payload %u, clp %u, ", + tok2str(oam_f_values, "OAM F5", vci), + vpi, vci, payload, clp); printf("cell-type %s (%u)", tok2str(oam_celltype_values, "unknown", cell_type), |