*/
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.37 2004-10-18 16:26:20 hannes Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.38.2.4 2005-11-10 00:43:52 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
struct tok oam_fm_functype_values[] = {
{ 0x0, "AIS" },
{ 0x1, "RDI" },
+ { 0x4, "Continuity Check" },
{ 0x8, "Loopback" },
{ 0, NULL }
};
+struct tok oam_pm_functype_values[] = {
+ { 0x0, "Forward Monitoring" },
+ { 0x1, "Backward Reporting" },
+ { 0x2, "Monitoring and Reporting" },
+ { 0, NULL }
+};
+
+struct tok oam_ad_functype_values[] = {
+ { 0x0, "Performance Monitoring" },
+ { 0x1, "Continuity Check" },
+ { 0, NULL }
+};
+
static const struct tok *oam_functype_values[16] = {
NULL,
- oam_fm_functype_values,
- NULL,
- NULL,
+ oam_fm_functype_values, /* 1 */
+ oam_pm_functype_values, /* 2 */
NULL,
NULL,
NULL,
NULL,
NULL,
+ oam_ad_functype_values, /* 8 */
NULL,
NULL,
NULL,
printf("(LLC %s) ",
etherproto_string(htons(extracted_ethertype)));
}
- if (!xflag && !qflag)
+ if (!suppress_default_print)
default_print(p, caplen);
}
}
case OAMF4SC: /* fall through */
case OAMF4EC:
- oam_print(p, length);
+ oam_print(p, length, ATM_OAM_HEC);
return;
case METAC:
}
int
-oam_print (const u_char *p, u_int length) {
+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_type = ((*(p+4))>>4) & 0x0f;
- func_type = *(p) & 0x0f;
+ cell_type = ((*(p+4+hec))>>4) & 0x0f;
+ func_type = *(p+4+hec) & 0x0f;
vpi = (cell_header>>20)&0xff;
vci = (cell_header>>4)&0xffff;
switch (vci) {
case OAMF4SC:
printf("OAM F4 (segment), ");
- break;
+ break;
case OAMF4EC:
printf("OAM F4 (end), ");
break;