X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/4254cbe7d10a03bb4ab5e1d98cc1c1d25202adee..7c62bd3c1a9503acba49b01de46e218b59befbf5:/print-rsvp.c diff --git a/print-rsvp.c b/print-rsvp.c index b48ad0f7..e1acd14f 100644 --- a/print-rsvp.c +++ b/print-rsvp.c @@ -14,8 +14,8 @@ */ #ifndef lint -static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.20 2003-06-07 22:41:31 hannes Exp $"; +static const char rcsid[] _U_ = + "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.24.2.2 2003-11-16 08:51:42 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -77,6 +77,7 @@ struct rsvp_object_header { #define RSVP_VERSION 1 #define RSVP_EXTRACT_VERSION(x) (((x)&0xf0)>>4) +#define RSVP_EXTRACT_FLAGS(x) ((x)&0x0f) #define RSVP_MSGTYPE_PATH 1 #define RSVP_MSGTYPE_RESV 2 @@ -107,6 +108,11 @@ static const struct tok rsvp_msg_type_values[] = { { 0, NULL} }; +static const struct tok rsvp_header_flag_values[] = { + { 0x01, "Refresh reduction capable" }, /* rfc2961 */ + { 0, NULL} +}; + #define RSVP_OBJ_SESSION 1 /* rfc2205 */ #define RSVP_OBJ_RSVP_HOP 3 /* rfc2205, rfc3473 */ #define RSVP_OBJ_INTEGRITY 4 @@ -231,13 +237,19 @@ static const struct tok rsvp_ctype_values[] = { { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_1, "without label range" }, { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_2, "with ATM label range" }, { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_3, "with FR label range" }, - { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_4, "generalized" }, - { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_1, "1" }, + { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_4, "Generalized Label" }, + { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_1, "Label" }, + { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_2, "Generalized Label" }, { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_3, "Waveband Switching" }, - { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_1, "1" }, + { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_1, "Label" }, + { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_2, "Generalized Label" }, { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_3, "Waveband Switching" }, - { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_1, "1" }, + { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_1, "Label" }, + { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_2, "Generalized Label" }, { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_3, "Waveband Switching" }, + { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_1, "Label" }, + { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_2, "Generalized Label" }, + { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_3, "Waveband Switching" }, { 256*RSVP_OBJ_ERO+RSVP_CTYPE_IPV4, "IPv4" }, { 256*RSVP_OBJ_RRO+RSVP_CTYPE_IPV4, "IPv4" }, { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_IPV4, "IPv4" }, @@ -391,7 +403,7 @@ rsvp_intserv_print(const u_char *tptr) { * | IS hop cnt (32-bit unsigned integer) | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ - printf("\n\t\tIS hop cnt: %u", EXTRACT_32BITS(tptr+4)); + printf("\n\t\tIS hop count: %u", EXTRACT_32BITS(tptr+4)); break; case 6: @@ -527,9 +539,10 @@ rsvp_print(register const u_char *pptr, register u_int len) { tlen=EXTRACT_16BITS(rsvp_com_header->length); - printf("RSVP\n\tv: %u, msg-type: %s, length: %u, ttl: %u, checksum: 0x%04x", + printf("RSVP\n\tv: %u, msg-type: %s, Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x", RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags), tok2str(rsvp_msg_type_values, "unknown, type: %u",rsvp_com_header->msg_type), + bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(rsvp_com_header->version_flags)), tlen, rsvp_com_header->ttl, EXTRACT_16BITS(rsvp_com_header->checksum)); @@ -625,14 +638,14 @@ rsvp_print(register const u_char *pptr, register u_int len) { case RSVP_OBJ_CONFIRM: switch(rsvp_obj_ctype) { case RSVP_CTYPE_IPV4: - printf("\n\t IPv4 ReceiverAddress: %s", + printf("\n\t IPv4 Receiver Address: %s", ipaddr_string(obj_tptr)); obj_tlen-=4; obj_tptr+=4; break; #ifdef INET6 case RSVP_CTYPE_IPV6: - printf("\n\t IPv6 ReceiverAddress: %s", + printf("\n\t IPv6 Receiver Address: %s", ip6addr_string(obj_tptr)); obj_tlen-=16; obj_tptr+=16; @@ -646,14 +659,14 @@ rsvp_print(register const u_char *pptr, register u_int len) { case RSVP_OBJ_NOTIFY_REQ: switch(rsvp_obj_ctype) { case RSVP_CTYPE_IPV4: - printf("\n\t IPv4 Notify Node Address %s", + printf("\n\t IPv4 Notify Node Address: %s", ipaddr_string(obj_tptr)); obj_tlen-=4; obj_tptr+=4; break; #ifdef INET6 case RSVP_CTYPE_IPV6: - printf("\n\t IPv6 Notify Node Address %s", + printf("\n\t IPv6 Notify Node Address: %s", ip6addr_string(obj_tptr)); obj_tlen-=16; obj_tptr+=16; @@ -666,22 +679,29 @@ rsvp_print(register const u_char *pptr, register u_int len) { case RSVP_OBJ_SUGGESTED_LABEL: /* fall through */ case RSVP_OBJ_UPSTREAM_LABEL: /* fall through */ + case RSVP_OBJ_RECOVERY_LABEL: /* fall through */ case RSVP_OBJ_LABEL: switch(rsvp_obj_ctype) { case RSVP_CTYPE_1: while(obj_tlen >= 4 ) { - printf("\n\t Label %u", EXTRACT_32BITS(obj_tptr)); + printf("\n\t Label: %u", EXTRACT_32BITS(obj_tptr)); obj_tlen-=4; obj_tptr+=4; } break; + case RSVP_CTYPE_2: + printf("\n\t Generalized Label: %u", + EXTRACT_32BITS(obj_tptr)); + obj_tlen-=4; + obj_tptr+=4; + break; case RSVP_CTYPE_3: - printf("\n\t Waveband ID %u\n\t Start Label %u, Stop Label %u", + printf("\n\t Waveband ID: %u\n\t Start Label: %u, Stop Label: %u", EXTRACT_32BITS(obj_tptr), EXTRACT_32BITS(obj_tptr+4), EXTRACT_32BITS(obj_tptr+8)); - obj_tlen-=16; - obj_tptr+=16; + obj_tlen-=12; + obj_tptr+=12; break; default: hexdump=TRUE; @@ -738,7 +758,7 @@ rsvp_print(register const u_char *pptr, register u_int len) { switch(rsvp_obj_ctype) { case RSVP_CTYPE_1: while(obj_tlen >= 4 ) { - printf("\n\t L3 Protocol ID %s", + printf("\n\t L3 Protocol ID: %s", tok2str(ethertype_values, "Unknown Protocol (0x%04x)", EXTRACT_16BITS(obj_tptr+2))); @@ -747,26 +767,26 @@ rsvp_print(register const u_char *pptr, register u_int len) { } break; case RSVP_CTYPE_2: - printf("\n\t L3 Protocol ID %s", + printf("\n\t L3 Protocol ID: %s", tok2str(ethertype_values, "Unknown Protocol (0x%04x)", EXTRACT_16BITS(obj_tptr+2))); printf(",%s merge capability",((*(obj_tptr+4))&0x80) ? "no" : "" ); - printf("\n\t Minimum VPI/VCI %u/%u", + printf("\n\t Minimum VPI/VCI: %u/%u", (EXTRACT_16BITS(obj_tptr+4))&0xfff, (EXTRACT_16BITS(obj_tptr+6))&0xfff); - printf("\n\t Maximum VPI/VCI %u/%u", + printf("\n\t Maximum VPI/VCI: %u/%u", (EXTRACT_16BITS(obj_tptr+8))&0xfff, (EXTRACT_16BITS(obj_tptr+10))&0xfff); obj_tlen-=12; obj_tptr+=12; break; case RSVP_CTYPE_3: - printf("\n\t L3 Protocol ID %s", + printf("\n\t L3 Protocol ID: %s", tok2str(ethertype_values, "Unknown Protocol (0x%04x)", EXTRACT_16BITS(obj_tptr+2))); - printf("\n\t Minimum/Maximum DLCI %u/%u, %s%s bit DLCI", + printf("\n\t Minimum/Maximum DLCI: %u/%u, %s%s bit DLCI", (EXTRACT_32BITS(obj_tptr+4))&0x7fffff, (EXTRACT_32BITS(obj_tptr+8))&0x7fffff, (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 0 ) ? "10" : "", @@ -775,17 +795,20 @@ rsvp_print(register const u_char *pptr, register u_int len) { obj_tptr+=12; break; case RSVP_CTYPE_4: - printf("\n\t LSP Encoding Type %s", + printf("\n\t LSP Encoding Type: %s (%u)", tok2str(gmpls_encoding_values, - "Unknown (0x%02x)", - *obj_tptr)); - printf("\n\t Switching Type %s, Payload ID %s", + "Unknown", + *obj_tptr), + *obj_tptr); + printf("\n\t Switching Type: %s (%u), Payload ID: %s (0x%04x)", tok2str(gmpls_switch_cap_values, - "Unknown (0x%02x)", + "Unknown", *(obj_tptr+1)), + *(obj_tptr+1), tok2str(gmpls_payload_values, - "Unknown (0x%04x)", - EXTRACT_16BITS(obj_tptr+2))); + "Unknown", + EXTRACT_16BITS(obj_tptr+2)), + EXTRACT_16BITS(obj_tptr+2)); obj_tlen-=8; obj_tptr+=8; break; @@ -826,7 +849,7 @@ rsvp_print(register const u_char *pptr, register u_int len) { switch(rsvp_obj_ctype) { case RSVP_CTYPE_1: case RSVP_CTYPE_2: - printf("\n\t Source Instance 0x%08x, Destination Instance 0x%08x", + printf("\n\t Source Instance: 0x%08x, Destination Instance: 0x%08x", EXTRACT_32BITS(obj_tptr), EXTRACT_32BITS(obj_tptr+4)); obj_tlen-=8; @@ -840,7 +863,7 @@ rsvp_print(register const u_char *pptr, register u_int len) { case RSVP_OBJ_RESTART_CAPABILITY: switch(rsvp_obj_ctype) { case RSVP_CTYPE_1: - printf("\n\t Restart Time: %ums\n\t Recovery Time: %ums", + printf("\n\t Restart Time: %ums, Recovery Time: %ums", EXTRACT_16BITS(obj_tptr), EXTRACT_16BITS(obj_tptr+4)); break; @@ -877,6 +900,7 @@ rsvp_print(register const u_char *pptr, register u_int len) { EXTRACT_32BITS(obj_tptr+4)); obj_tlen-=8; obj_tptr+=8; + hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */ break; #ifdef INET6 case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */ @@ -886,6 +910,7 @@ rsvp_print(register const u_char *pptr, register u_int len) { EXTRACT_32BITS(obj_tptr+16)); obj_tlen-=20; obj_tptr+=20; + hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */ break; #endif default: @@ -1110,7 +1135,6 @@ rsvp_print(register const u_char *pptr, register u_int len) { case RSVP_OBJ_MESSAGE_ID: case RSVP_OBJ_MESSAGE_ID_ACK: case RSVP_OBJ_MESSAGE_ID_LIST: - case RSVP_OBJ_RECOVERY_LABEL: case RSVP_OBJ_LABEL_SET: case RSVP_OBJ_ACCEPT_LABEL_SET: case RSVP_OBJ_PROTECTION: