X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/fa81716b75fb3c6edd182219ca41fd46d37599ec..1ee09c1510704191a14df4eb914dba3d5dc9ab58:/print-rsvp.c diff --git a/print-rsvp.c b/print-rsvp.c index aa642951..fe7d1bda 100644 --- a/print-rsvp.c +++ b/print-rsvp.c @@ -15,7 +15,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.31 2004-09-16 06:34:01 hannes Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.35 2005-04-25 19:28:30 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -348,10 +348,12 @@ static struct tok rsvp_obj_prop_tlv_values[] = { #define RSVP_OBJ_ERROR_SPEC_CODE_ROUTING 24 #define RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY 25 +#define RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE 125 static struct tok rsvp_obj_error_code_values[] = { { RSVP_OBJ_ERROR_SPEC_CODE_ROUTING, "Routing Problem" }, { RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY, "Notify Error" }, + { RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE, "Diffserv TE Error" }, { 0, NULL} }; @@ -369,6 +371,17 @@ static struct tok rsvp_obj_error_code_routing_values[] = { { 0, NULL} }; +static struct tok rsvp_obj_error_code_diffserv_te_values[] = { + { 1, "Unexpected CLASSTYPE object" }, + { 2, "Unsupported Class-Type" }, + { 3, "Invalid Class-Type value" }, + { 4, "Class-Type and setup priority do not form a configured TE-Class" }, + { 5, "Class-Type and holding priority do not form a configured TE-Class" }, + { 6, "Inconsistency between signaled PSC and signaled Class-Type" }, + { 7, "Inconsistency between signaled PHBs and signaled Class-Type" }, + { 0, NULL} +}; + #define FALSE 0 #define TRUE 1 @@ -545,7 +558,7 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { rsvp_obj_ctype=rsvp_obj_header->ctype; if(rsvp_obj_len % 4 || rsvp_obj_len < sizeof(struct rsvp_object_header)) { - printf("ERROR: object header too short %u < %lu", rsvp_obj_len, + printf("%sERROR: object header too short %u < %lu", ident, rsvp_obj_len, (unsigned long)sizeof(const struct rsvp_object_header)); return -1; } @@ -870,11 +883,18 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { switch(rsvp_obj_ctype) { case RSVP_CTYPE_IPV4: while(obj_tlen >= 4 ) { - printf("%s Subobject Type: %s", + printf("%s Subobject Type: %s, length %u", ident, tok2str(rsvp_obj_xro_values, "Unknown %u", - RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr))); + RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)), + *(obj_tptr+1)); + + if (*(obj_tptr+1) == 0) { /* prevent infinite loops */ + printf("%s ERROR: zero length ERO subtype",ident); + break; + } + switch(RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)) { case RSVP_OBJ_XRO_IPV4: printf(", %s, %s/%u, Flags: [%s]", @@ -919,8 +939,8 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { return-1; printf("%s Restart Time: %ums, Recovery Time: %ums", ident, - EXTRACT_16BITS(obj_tptr), - EXTRACT_16BITS(obj_tptr+4)); + EXTRACT_32BITS(obj_tptr), + EXTRACT_32BITS(obj_tptr+4)); obj_tlen-=8; obj_tptr+=8; break; @@ -1182,6 +1202,11 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value), error_value); break; + case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE: + printf(", Error Value: %s (%u)", + tok2str(rsvp_obj_error_code_diffserv_te_values,"unknown",error_value), + error_value); + break; default: printf(", Unknown Error Value (%u)", error_value); break;