Deleted Added
full compact
21c21
< * $FreeBSD: head/contrib/tcpdump/print-atm.c 172686 2007-10-16 02:31:48Z mlaier $
---
> * $FreeBSD: head/contrib/tcpdump/print-atm.c 190207 2009-03-21 18:30:25Z rpaulo $
25c25
< "@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.38.2.6 2006/01/25 13:27:24 hannes Exp $ (LBL)";
---
> "@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.48.2.1 2007-10-22 19:39:12 guy Exp $ (LBL)";
47a48,52
> #define OAM_CRC10_MASK 0x3ff
> #define OAM_PAYLOAD_LEN 48
> #define OAM_FUNCTION_SPECIFIC_LEN 45 /* this excludes crc10 and cell-type/function-type */
> #define OAM_CELLTYPE_FUNCTYPE_LEN 1
>
49,50c54,55
< { OAMF4SC, "OAM F4 (segment)" },
< { OAMF4EC, "OAM F4 (end)" },
---
> { VCI_OAMF4SC, "OAM F4 (segment)" },
> { VCI_OAMF4EC, "OAM F4 (end)" },
53a59,74
> struct tok atm_pty_values[] = {
> { 0x0, "user data, uncongested, SDU 0" },
> { 0x1, "user data, uncongested, SDU 1" },
> { 0x2, "user data, congested, SDU 0" },
> { 0x3, "user data, congested, SDU 1" },
> { 0x4, "VCC OAM F5 flow segment" },
> { 0x5, "VCC OAM F5 flow end-to-end" },
> { 0x6, "Traffic Control and resource Mgmt" },
> { 0, NULL }
> };
>
> #define OAM_CELLTYPE_FM 0x1
> #define OAM_CELLTYPE_PM 0x2
> #define OAM_CELLTYPE_AD 0x8
> #define OAM_CELLTYPE_SM 0xf
>
55,58c76,79
< { 0x1, "Fault Management" },
< { 0x2, "Performance Management" },
< { 0x8, "activate/deactivate" },
< { 0xf, "System Management" },
---
> { OAM_CELLTYPE_FM, "Fault Management" },
> { OAM_CELLTYPE_PM, "Performance Management" },
> { OAM_CELLTYPE_AD, "activate/deactivate" },
> { OAM_CELLTYPE_SM, "System Management" },
61a83,87
> #define OAM_FM_FUNCTYPE_AIS 0x0
> #define OAM_FM_FUNCTYPE_RDI 0x1
> #define OAM_FM_FUNCTYPE_CONTCHECK 0x4
> #define OAM_FM_FUNCTYPE_LOOPBACK 0x8
>
63,66c89,92
< { 0x0, "AIS" },
< { 0x1, "RDI" },
< { 0x4, "Continuity Check" },
< { 0x8, "Loopback" },
---
> { OAM_FM_FUNCTYPE_AIS, "AIS" },
> { OAM_FM_FUNCTYPE_RDI, "RDI" },
> { OAM_FM_FUNCTYPE_CONTCHECK, "Continuity Check" },
> { OAM_FM_FUNCTYPE_LOOPBACK, "Loopback" },
82a109,116
> #define OAM_FM_LOOPBACK_INDICATOR_MASK 0x1
>
> struct tok oam_fm_loopback_indicator_values[] = {
> { 0x0, "Reply" },
> { 0x1, "Request" },
> { 0, NULL }
> };
>
266c300
< case PPC:
---
> case VCI_PPC:
270c304
< case BCC:
---
> case VCI_BCC:
274,275c308,309
< case OAMF4SC: /* fall through */
< case OAMF4EC:
---
> case VCI_OAMF4SC: /* fall through */
> case VCI_OAMF4EC:
279c313
< case METAC:
---
> case VCI_METAC:
283c317
< case ILMIC:
---
> case VCI_ILMIC:
305a340,353
> struct oam_fm_loopback_t {
> u_int8_t loopback_indicator;
> u_int8_t correlation_tag[4];
> u_int8_t loopback_id[12];
> u_int8_t source_id[12];
> u_int8_t unused[16];
> };
>
> struct oam_fm_ais_rdi_t {
> u_int8_t failure_type;
> u_int8_t failure_location[16];
> u_int8_t unused[28];
> };
>
310c358,359
< u_int16_t cell_type, func_type,vpi,vci,payload,clp;
---
> u_int16_t vpi, vci, cksum, cksum_shouldbe, idx;
> u_int8_t cell_type, func_type, payload, clp;
311a361,366
> union {
> const struct oam_fm_loopback_t *oam_fm_loopback;
> const struct oam_fm_ais_rdi_t *oam_fm_ais_rdi;
> } oam_ptr;
>
>
313,314c368,369
< cell_type = ((*(p+4+hec))>>4) & 0x0f;
< func_type = *(p+4+hec) & 0x0f;
---
> cell_type = ((*(p+ATM_HDR_LEN_NOHEC+hec))>>4) & 0x0f;
> func_type = (*(p+ATM_HDR_LEN_NOHEC+hec)) & 0x0f;
321c376
< printf("%s, vpi %u, vci %u, payload %u, clp %u, ",
---
> printf("%s, vpi %u, vci %u, payload [ %s ], clp %u, length %u",
323c378,380
< vpi, vci, payload, clp);
---
> vpi, vci,
> tok2str(atm_pty_values, "Unknown", payload),
> clp, length);
325c382,386
< printf("cell-type %s (%u)",
---
> if (!vflag) {
> return 1;
> }
>
> printf("\n\tcell-type %s (%u)",
333c394
< bittok2str(oam_functype_values[cell_type],"none",func_type),
---
> tok2str(oam_functype_values[cell_type],"none",func_type),
336c397,449
< printf(", length %u",length);
---
> p += ATM_HDR_LEN_NOHEC + hec;
>
> switch (cell_type << 4 | func_type) {
> case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_LOOPBACK):
> oam_ptr.oam_fm_loopback = (const struct oam_fm_loopback_t *)(p + OAM_CELLTYPE_FUNCTYPE_LEN);
> printf("\n\tLoopback-Indicator %s, Correlation-Tag 0x%08x",
> tok2str(oam_fm_loopback_indicator_values,
> "Unknown",
> oam_ptr.oam_fm_loopback->loopback_indicator & OAM_FM_LOOPBACK_INDICATOR_MASK),
> EXTRACT_32BITS(&oam_ptr.oam_fm_loopback->correlation_tag));
> printf("\n\tLocation-ID ");
> for (idx = 0; idx < sizeof(oam_ptr.oam_fm_loopback->loopback_id); idx++) {
> if (idx % 2) {
> printf("%04x ", EXTRACT_16BITS(&oam_ptr.oam_fm_loopback->loopback_id[idx]));
> }
> }
> printf("\n\tSource-ID ");
> for (idx = 0; idx < sizeof(oam_ptr.oam_fm_loopback->source_id); idx++) {
> if (idx % 2) {
> printf("%04x ", EXTRACT_16BITS(&oam_ptr.oam_fm_loopback->source_id[idx]));
> }
> }
> break;
>
> case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_AIS):
> case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_RDI):
> oam_ptr.oam_fm_ais_rdi = (const struct oam_fm_ais_rdi_t *)(p + OAM_CELLTYPE_FUNCTYPE_LEN);
> printf("\n\tFailure-type 0x%02x", oam_ptr.oam_fm_ais_rdi->failure_type);
> printf("\n\tLocation-ID ");
> for (idx = 0; idx < sizeof(oam_ptr.oam_fm_ais_rdi->failure_location); idx++) {
> if (idx % 2) {
> printf("%04x ", EXTRACT_16BITS(&oam_ptr.oam_fm_ais_rdi->failure_location[idx]));
> }
> }
> break;
>
> case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_CONTCHECK):
> /* FIXME */
> break;
>
> default:
> break;
> }
>
> /* crc10 checksum verification */
> cksum = EXTRACT_16BITS(p + OAM_CELLTYPE_FUNCTYPE_LEN + OAM_FUNCTION_SPECIFIC_LEN)
> & OAM_CRC10_MASK;
> cksum_shouldbe = verify_crc10_cksum(0, p, OAM_PAYLOAD_LEN);
>
> printf("\n\tcksum 0x%03x (%scorrect)",
> cksum,
> cksum_shouldbe == 0 ? "" : "in");
>