X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/9bdbb51f4122817ca8bdba9fb9917969809ff451..ad7a38341c19e71e3595c17368ac18f08b71482d:/print-slow.c diff --git a/print-slow.c b/print-slow.c index 9da02ffa..b4ba2ab9 100644 --- a/print-slow.c +++ b/print-slow.c @@ -20,7 +20,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-slow.c,v 1.7 2006-08-19 06:59:17 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-slow.c,v 1.8 2006-10-12 05:44:33 hannes Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -67,7 +67,7 @@ static const struct tok slow_oam_flag_values[] = { { 0x0020, "Remote Evaluating" }, { 0x0040, "Remote Stable" }, { 0, NULL} -}; +}; #define SLOW_OAM_CODE_INFO 0x00 #define SLOW_OAM_CODE_EVENT_NOTIF 0x01 @@ -178,6 +178,10 @@ struct slow_oam_variableresponse_t { u_int8_t length; }; +struct slow_oam_loopbackctrl_t { + u_int8_t command; +}; + static const struct tok slow_oam_loopbackctrl_cmd_values[] = { { 0x01, "Enable OAM Remote Loopback" }, { 0x02, "Disable OAM Remote Loopback" }, @@ -216,7 +220,7 @@ struct lacp_tlv_actor_partner_info_t { u_int8_t port[2]; u_int8_t state; u_int8_t pad[3]; -}; +}; static const struct tok lacp_tlv_actor_partner_info_state_values[] = { { 0x01, "Activity"}, @@ -233,18 +237,18 @@ static const struct tok lacp_tlv_actor_partner_info_state_values[] = { struct lacp_tlv_collector_info_t { u_int8_t max_delay[2]; u_int8_t pad[12]; -}; +}; struct marker_tlv_marker_info_t { u_int8_t req_port[2]; u_int8_t req_sys[ETHER_ADDR_LEN]; u_int8_t req_trans_id[4]; u_int8_t pad[2]; -}; +}; struct lacp_marker_tlv_terminator_t { u_int8_t pad[50]; -}; +}; void slow_marker_lacp_print(register const u_char *, register u_int); void slow_oam_print(register const u_char *, register u_int); @@ -303,7 +307,7 @@ slow_print(register const u_char *pptr, register u_int len) { /* unrecognized subtype */ if (print_version == -1) { - print_unknown_data(pptr, "\n\t", len); + print_unknown_data(gndo,pptr, "\n\t", len); return; } @@ -345,7 +349,7 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) { const struct lacp_tlv_collector_info_t *lacp_tlv_collector_info; const struct marker_tlv_marker_info_t *marker_tlv_marker_info; } tlv_ptr; - + while(tlen>0) { /* did we capture enough for fully decoding the tlv header ? */ TCHECK2(*tptr, sizeof(struct tlv_header_t)); @@ -364,7 +368,7 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) { tlv_header->type != LACP_TLV_TERMINATOR && tlv_header->type != MARKER_TLV_TERMINATOR) { printf("\n\t-----trailing data-----"); - print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)),"\n\t ",tlen); + print_unknown_data(gndo,tptr+sizeof(struct tlv_header_t),"\n\t ",tlen); return; } @@ -432,12 +436,12 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) { default: if (vflag <= 1) - print_unknown_data(tlv_tptr,"\n\t ",tlv_tlen); + print_unknown_data(gndo,tlv_tptr,"\n\t ",tlv_tlen); break; } /* do we want to see an additional hexdump ? */ if (vflag > 1) { - print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)),"\n\t ", + print_unknown_data(gndo,tptr+sizeof(struct tlv_header_t),"\n\t ", tlv_len-sizeof(struct tlv_header_t)); } @@ -473,8 +477,9 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { const struct slow_oam_link_event_t *slow_oam_link_event; const struct slow_oam_variablerequest_t *slow_oam_variablerequest; const struct slow_oam_variableresponse_t *slow_oam_variableresponse; + const struct slow_oam_loopbackctrl_t *slow_oam_loopbackctrl; } tlv; - + ptr.slow_oam_common_header = (struct slow_oam_common_header_t *)tptr; tptr += sizeof(struct slow_oam_common_header_t); tlen -= sizeof(struct slow_oam_common_header_t); @@ -502,11 +507,11 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { printf("\n\t ERROR: illegal length - should be 0"); } return; - + case SLOW_OAM_INFO_TYPE_LOCAL: /* identical format - fall through */ case SLOW_OAM_INFO_TYPE_REMOTE: tlv.slow_oam_info = (const struct slow_oam_info_t *)tptr; - + if (tlv.slow_oam_info->info_length != sizeof(struct slow_oam_info_t)) { printf("\n\t ERROR: illegal length - should be %lu", @@ -534,11 +539,11 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { EXTRACT_24BITS(&tlv.slow_oam_info->oui), EXTRACT_32BITS(&tlv.slow_oam_info->vendor_private)); break; - + case SLOW_OAM_INFO_TYPE_ORG_SPECIFIC: hexdump = TRUE; break; - + default: hexdump = TRUE; break; @@ -551,7 +556,7 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { /* do we also want to see a hex dump ? */ if (vflag > 1 || hexdump==TRUE) { - print_unknown_data(tptr,"\n\t ", + print_unknown_data(gndo,tptr,"\n\t ", ptr.slow_oam_tlv_header->length); } @@ -576,13 +581,13 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { printf("\n\t ERROR: illegal length - should be 0"); } return; - + case SLOW_OAM_LINK_EVENT_ERR_SYM_PER: /* identical format - fall through */ case SLOW_OAM_LINK_EVENT_ERR_FRM: case SLOW_OAM_LINK_EVENT_ERR_FRM_PER: case SLOW_OAM_LINK_EVENT_ERR_FRM_SUMM: tlv.slow_oam_link_event = (const struct slow_oam_link_event_t *)tptr; - + if (tlv.slow_oam_link_event->event_length != sizeof(struct slow_oam_link_event_t)) { printf("\n\t ERROR: illegal length - should be %lu", @@ -602,11 +607,11 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { EXTRACT_64BITS(&tlv.slow_oam_link_event->errors_running_total), EXTRACT_32BITS(&tlv.slow_oam_link_event->event_running_total)); break; - + case SLOW_OAM_LINK_EVENT_ORG_SPECIFIC: hexdump = TRUE; break; - + default: hexdump = TRUE; break; @@ -619,7 +624,7 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { /* do we also want to see a hex dump ? */ if (vflag > 1 || hexdump==TRUE) { - print_unknown_data(tptr,"\n\t ", + print_unknown_data(gndo,tptr,"\n\t ", ptr.slow_oam_tlv_header->length); } @@ -628,17 +633,27 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) { } break; + case SLOW_OAM_CODE_LOOPBACK_CTRL: + tlv.slow_oam_loopbackctrl = (const struct slow_oam_loopbackctrl_t *)tptr; + printf("\n\t Command %s (%u)", + tok2str(slow_oam_loopbackctrl_cmd_values, + "Unknown", + tlv.slow_oam_loopbackctrl->command), + tlv.slow_oam_loopbackctrl->command); + tptr ++; + tlen --; + break; + /* * FIXME those are the defined codes that lack a decoder * you are welcome to contribute code ;-) */ case SLOW_OAM_CODE_VAR_REQUEST: case SLOW_OAM_CODE_VAR_RESPONSE: - case SLOW_OAM_CODE_LOOPBACK_CTRL: case SLOW_OAM_CODE_PRIVATE: default: if (vflag <= 1) { - print_unknown_data(tptr,"\n\t ", tlen); + print_unknown_data(gndo,tptr,"\n\t ", tlen); } break; }