print-rsvp.c (127668) | print-rsvp.c (146773) |
---|---|
1/* 2 * Redistribution and use in source and binary forms, with or without 3 * modification, are permitted provided that: (1) source code 4 * distributions retain the above copyright notice and this paragraph 5 * in its entirety, and (2) distributions including binary code include 6 * the above copyright notice and this paragraph in its entirety in 7 * the documentation or other materials provided with the distribution. 8 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND 9 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT 10 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 11 * FOR A PARTICULAR PURPOSE. 12 * 13 * Original code by Hannes Gredler (hannes@juniper.net) 14 */ 15 16#ifndef lint 17static const char rcsid[] _U_ = | 1/* 2 * Redistribution and use in source and binary forms, with or without 3 * modification, are permitted provided that: (1) source code 4 * distributions retain the above copyright notice and this paragraph 5 * in its entirety, and (2) distributions including binary code include 6 * the above copyright notice and this paragraph in its entirety in 7 * the documentation or other materials provided with the distribution. 8 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND 9 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT 10 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 11 * FOR A PARTICULAR PURPOSE. 12 * 13 * Original code by Hannes Gredler (hannes@juniper.net) 14 */ 15 16#ifndef lint 17static const char rcsid[] _U_ = |
18 "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.24.2.3 2004/03/24 04:01:08 guy Exp $"; | 18 "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.33 2005/01/13 07:08:54 hannes Exp $"; |
19#endif 20 21#ifdef HAVE_CONFIG_H 22#include "config.h" 23#endif 24 25#include <tcpdump-stdinc.h> 26 --- 108 unchanged lines hidden (view full) --- 135#define RSVP_OBJ_MESSAGE_ID 23 136#define RSVP_OBJ_MESSAGE_ID_ACK 24 137#define RSVP_OBJ_MESSAGE_ID_LIST 25 138#define RSVP_OBJ_RECOVERY_LABEL 34 /* rfc3473 */ 139#define RSVP_OBJ_UPSTREAM_LABEL 35 /* rfc3473 */ 140#define RSVP_OBJ_LABEL_SET 36 /* rfc3473 */ 141#define RSVP_OBJ_PROTECTION 37 /* rfc3473 */ 142#define RSVP_OBJ_DETOUR 63 /* draft-ietf-mpls-rsvp-lsp-fastreroute-01 */ | 19#endif 20 21#ifdef HAVE_CONFIG_H 22#include "config.h" 23#endif 24 25#include <tcpdump-stdinc.h> 26 --- 108 unchanged lines hidden (view full) --- 135#define RSVP_OBJ_MESSAGE_ID 23 136#define RSVP_OBJ_MESSAGE_ID_ACK 24 137#define RSVP_OBJ_MESSAGE_ID_LIST 25 138#define RSVP_OBJ_RECOVERY_LABEL 34 /* rfc3473 */ 139#define RSVP_OBJ_UPSTREAM_LABEL 35 /* rfc3473 */ 140#define RSVP_OBJ_LABEL_SET 36 /* rfc3473 */ 141#define RSVP_OBJ_PROTECTION 37 /* rfc3473 */ 142#define RSVP_OBJ_DETOUR 63 /* draft-ietf-mpls-rsvp-lsp-fastreroute-01 */ |
143#define RSVP_OBJ_CLASSTYPE 125 /* draft-ietf-tewg-diff-te-proto-07 */ |
|
143#define RSVP_OBJ_SUGGESTED_LABEL 129 /* rfc3473 */ 144#define RSVP_OBJ_ACCEPT_LABEL_SET 130 /* rfc3473 */ 145#define RSVP_OBJ_RESTART_CAPABILITY 131 /* rfc3473 */ 146#define RSVP_OBJ_NOTIFY_REQ 195 /* rfc3473 */ 147#define RSVP_OBJ_ADMIN_STATUS 196 /* rfc3473 */ 148#define RSVP_OBJ_PROPERTIES 204 /* juniper proprietary */ 149#define RSVP_OBJ_FASTREROUTE 205 /* draft-ietf-mpls-rsvp-lsp-fastreroute-01 */ 150#define RSVP_OBJ_SESSION_ATTRIBUTE 207 /* rfc3209 */ --- 23 unchanged lines hidden (view full) --- 174 { RSVP_OBJ_MESSAGE_ID, "Message ID" }, 175 { RSVP_OBJ_MESSAGE_ID_ACK, "Message ID Ack" }, 176 { RSVP_OBJ_MESSAGE_ID_LIST, "Message ID List" }, 177 { RSVP_OBJ_RECOVERY_LABEL, "Recovery Label" }, 178 { RSVP_OBJ_UPSTREAM_LABEL, "Upstream Label" }, 179 { RSVP_OBJ_LABEL_SET, "Label Set" }, 180 { RSVP_OBJ_ACCEPT_LABEL_SET, "Acceptable Label Set" }, 181 { RSVP_OBJ_DETOUR, "Detour" }, | 144#define RSVP_OBJ_SUGGESTED_LABEL 129 /* rfc3473 */ 145#define RSVP_OBJ_ACCEPT_LABEL_SET 130 /* rfc3473 */ 146#define RSVP_OBJ_RESTART_CAPABILITY 131 /* rfc3473 */ 147#define RSVP_OBJ_NOTIFY_REQ 195 /* rfc3473 */ 148#define RSVP_OBJ_ADMIN_STATUS 196 /* rfc3473 */ 149#define RSVP_OBJ_PROPERTIES 204 /* juniper proprietary */ 150#define RSVP_OBJ_FASTREROUTE 205 /* draft-ietf-mpls-rsvp-lsp-fastreroute-01 */ 151#define RSVP_OBJ_SESSION_ATTRIBUTE 207 /* rfc3209 */ --- 23 unchanged lines hidden (view full) --- 175 { RSVP_OBJ_MESSAGE_ID, "Message ID" }, 176 { RSVP_OBJ_MESSAGE_ID_ACK, "Message ID Ack" }, 177 { RSVP_OBJ_MESSAGE_ID_LIST, "Message ID List" }, 178 { RSVP_OBJ_RECOVERY_LABEL, "Recovery Label" }, 179 { RSVP_OBJ_UPSTREAM_LABEL, "Upstream Label" }, 180 { RSVP_OBJ_LABEL_SET, "Label Set" }, 181 { RSVP_OBJ_ACCEPT_LABEL_SET, "Acceptable Label Set" }, 182 { RSVP_OBJ_DETOUR, "Detour" }, |
183 { RSVP_OBJ_CLASSTYPE, "Class Type" }, |
|
182 { RSVP_OBJ_SUGGESTED_LABEL, "Suggested Label" }, 183 { RSVP_OBJ_PROPERTIES, "Properties" }, 184 { RSVP_OBJ_FASTREROUTE, "Fast Re-Route" }, 185 { RSVP_OBJ_SESSION_ATTRIBUTE, "Session Attribute" }, 186 { RSVP_OBJ_CALL_ID, "Call-ID" }, 187 { RSVP_OBJ_CALL_OPS, "Call Capability" }, 188 { RSVP_OBJ_RESTART_CAPABILITY, "Restart Capability" }, 189 { RSVP_OBJ_NOTIFY_REQ, "Notify Request" }, --- 36 unchanged lines hidden (view full) --- 226 { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_3, "IPv6 Flow-label" }, 227 { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 228 { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV4, "IPv4" }, 229 { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV6, "IPv6" }, 230 { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 231 { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV4, "IPv4" }, 232 { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV6, "IPv6" }, 233 { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, | 184 { RSVP_OBJ_SUGGESTED_LABEL, "Suggested Label" }, 185 { RSVP_OBJ_PROPERTIES, "Properties" }, 186 { RSVP_OBJ_FASTREROUTE, "Fast Re-Route" }, 187 { RSVP_OBJ_SESSION_ATTRIBUTE, "Session Attribute" }, 188 { RSVP_OBJ_CALL_ID, "Call-ID" }, 189 { RSVP_OBJ_CALL_OPS, "Call Capability" }, 190 { RSVP_OBJ_RESTART_CAPABILITY, "Restart Capability" }, 191 { RSVP_OBJ_NOTIFY_REQ, "Notify Request" }, --- 36 unchanged lines hidden (view full) --- 228 { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_3, "IPv6 Flow-label" }, 229 { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 230 { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV4, "IPv4" }, 231 { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV6, "IPv6" }, 232 { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 233 { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV4, "IPv4" }, 234 { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV6, "IPv6" }, 235 { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, |
236 { 256*RSVP_OBJ_MESSAGE_ID+RSVP_CTYPE_1, "1" }, 237 { 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_1, "1" }, 238 { 256*RSVP_OBJ_MESSAGE_ID_LIST+RSVP_CTYPE_1, "1" }, |
|
234 { 256*RSVP_OBJ_STYLE+RSVP_CTYPE_1, "1" }, 235 { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_1, "Hello Request" }, 236 { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_2, "Hello Ack" }, 237 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_1, "without label range" }, 238 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_2, "with ATM label range" }, 239 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_3, "with FR label range" }, 240 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_4, "Generalized Label" }, 241 { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_1, "Label" }, --- 14 unchanged lines hidden (view full) --- 256 { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_IPV6, "IPv6" }, 257 { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_3, "IPv4 plus opt. TLVs" }, 258 { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_4, "IPv6 plus opt. TLVs" }, 259 { 256*RSVP_OBJ_RESTART_CAPABILITY+RSVP_CTYPE_1, "IPv4" }, 260 { 256*RSVP_OBJ_SESSION_ATTRIBUTE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 261 { 256*RSVP_OBJ_FASTREROUTE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 262 { 256*RSVP_OBJ_DETOUR+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 263 { 256*RSVP_OBJ_PROPERTIES+RSVP_CTYPE_1, "1" }, | 239 { 256*RSVP_OBJ_STYLE+RSVP_CTYPE_1, "1" }, 240 { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_1, "Hello Request" }, 241 { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_2, "Hello Ack" }, 242 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_1, "without label range" }, 243 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_2, "with ATM label range" }, 244 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_3, "with FR label range" }, 245 { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_4, "Generalized Label" }, 246 { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_1, "Label" }, --- 14 unchanged lines hidden (view full) --- 261 { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_IPV6, "IPv6" }, 262 { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_3, "IPv4 plus opt. TLVs" }, 263 { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_4, "IPv6 plus opt. TLVs" }, 264 { 256*RSVP_OBJ_RESTART_CAPABILITY+RSVP_CTYPE_1, "IPv4" }, 265 { 256*RSVP_OBJ_SESSION_ATTRIBUTE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 266 { 256*RSVP_OBJ_FASTREROUTE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 267 { 256*RSVP_OBJ_DETOUR+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, 268 { 256*RSVP_OBJ_PROPERTIES+RSVP_CTYPE_1, "1" }, |
269 { 256*RSVP_OBJ_CLASSTYPE+RSVP_CTYPE_1, "1" }, |
|
264 { 0, NULL} 265}; 266 267#define RSVP_OBJ_XRO_MASK_SUBOBJ(x) ((x)&0x7f) 268#define RSVP_OBJ_XRO_MASK_LOOSE(x) ((x)&0x80) 269 270#define RSVP_OBJ_XRO_RES 0 271#define RSVP_OBJ_XRO_IPV4 1 --- 65 unchanged lines hidden (view full) --- 337 { 0x04, "Metric 2" }, 338 { 0x08, "CCC Status" }, 339 { 0x10, "Path Type" }, 340 { 0, NULL} 341}; 342 343#define RSVP_OBJ_ERROR_SPEC_CODE_ROUTING 24 344#define RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY 25 | 270 { 0, NULL} 271}; 272 273#define RSVP_OBJ_XRO_MASK_SUBOBJ(x) ((x)&0x7f) 274#define RSVP_OBJ_XRO_MASK_LOOSE(x) ((x)&0x80) 275 276#define RSVP_OBJ_XRO_RES 0 277#define RSVP_OBJ_XRO_IPV4 1 --- 65 unchanged lines hidden (view full) --- 343 { 0x04, "Metric 2" }, 344 { 0x08, "CCC Status" }, 345 { 0x10, "Path Type" }, 346 { 0, NULL} 347}; 348 349#define RSVP_OBJ_ERROR_SPEC_CODE_ROUTING 24 350#define RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY 25 |
351#define RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE 125 |
|
345 346static struct tok rsvp_obj_error_code_values[] = { 347 { RSVP_OBJ_ERROR_SPEC_CODE_ROUTING, "Routing Problem" }, 348 { RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY, "Notify Error" }, | 352 353static struct tok rsvp_obj_error_code_values[] = { 354 { RSVP_OBJ_ERROR_SPEC_CODE_ROUTING, "Routing Problem" }, 355 { RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY, "Notify Error" }, |
356 { RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE, "Diffserv TE Error" }, |
|
349 { 0, NULL} 350}; 351 352static struct tok rsvp_obj_error_code_routing_values[] = { 353 { 1, "Bad EXPLICIT_ROUTE object" }, 354 { 2, "Bad strict node" }, 355 { 3, "Bad loose node" }, 356 { 4, "Bad initial subobject" }, 357 { 5, "No route available toward destination" }, 358 { 6, "Unacceptable label value" }, 359 { 7, "RRO indicated routing loops" }, 360 { 8, "non-RSVP-capable router in the path" }, 361 { 9, "MPLS label allocation failure" }, 362 { 10, "Unsupported L3PID" }, 363 { 0, NULL} 364}; 365 | 357 { 0, NULL} 358}; 359 360static struct tok rsvp_obj_error_code_routing_values[] = { 361 { 1, "Bad EXPLICIT_ROUTE object" }, 362 { 2, "Bad strict node" }, 363 { 3, "Bad loose node" }, 364 { 4, "Bad initial subobject" }, 365 { 5, "No route available toward destination" }, 366 { 6, "Unacceptable label value" }, 367 { 7, "RRO indicated routing loops" }, 368 { 8, "non-RSVP-capable router in the path" }, 369 { 9, "MPLS label allocation failure" }, 370 { 10, "Unsupported L3PID" }, 371 { 0, NULL} 372}; 373 |
374static struct tok rsvp_obj_error_code_diffserv_te_values[] = { 375 { 1, "Unexpected CLASSTYPE object" }, 376 { 2, "Unsupported Class-Type" }, 377 { 3, "Invalid Class-Type value" }, 378 { 4, "Class-Type and setup priority do not form a configured TE-Class" }, 379 { 5, "Class-Type and holding priority do not form a configured TE-Class" }, 380 { 6, "Inconsistency between signaled PSC and signaled Class-Type" }, 381 { 7, "Inconsistency between signaled PHBs and signaled Class-Type" }, 382 { 0, NULL} 383}; 384 |
|
366#define FALSE 0 367#define TRUE 1 368 369 370static int rsvp_intserv_print(const u_char *, u_short); 371 372/* 373 * this is a dissector for all the intserv defined --- 137 unchanged lines hidden (view full) --- 511 512 default: 513 if (vflag <= 1) 514 print_unknown_data(tptr+4,"\n\t\t",parameter_length); 515 } 516 return (parameter_length+4); /* header length 4 bytes */ 517} 518 | 385#define FALSE 0 386#define TRUE 1 387 388 389static int rsvp_intserv_print(const u_char *, u_short); 390 391/* 392 * this is a dissector for all the intserv defined --- 137 unchanged lines hidden (view full) --- 530 531 default: 532 if (vflag <= 1) 533 print_unknown_data(tptr+4,"\n\t\t",parameter_length); 534 } 535 return (parameter_length+4); /* header length 4 bytes */ 536} 537 |
519void 520rsvp_print(register const u_char *pptr, register u_int len) { | 538static int 539rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { |
521 | 540 |
522 const struct rsvp_common_header *rsvp_com_header; | |
523 const struct rsvp_object_header *rsvp_obj_header; | 541 const struct rsvp_object_header *rsvp_obj_header; |
524 const u_char *tptr,*obj_tptr; 525 u_short tlen,rsvp_obj_len,rsvp_obj_ctype,obj_tlen,intserv_serv_tlen; 526 int hexdump,processed,padbytes,error_code,error_value; | 542 const u_char *obj_tptr; 543 u_short rsvp_obj_len,rsvp_obj_ctype,obj_tlen,intserv_serv_tlen; 544 int hexdump,processed,padbytes,error_code,error_value,i; |
527 union { 528 float f; 529 u_int32_t i; 530 } bw; 531 u_int8_t namelen; | 545 union { 546 float f; 547 u_int32_t i; 548 } bw; 549 u_int8_t namelen; |
532 u_int i; | |
533 | 550 |
534 tptr=pptr; 535 rsvp_com_header = (const struct rsvp_common_header *)pptr; 536 TCHECK(*rsvp_com_header); 537 538 /* 539 * Sanity checking of the header. 540 */ 541 if (RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags) != RSVP_VERSION) { 542 printf("RSVP version %u packet not supported", 543 RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags)); 544 return; 545 } 546 547 /* in non-verbose mode just lets print the basic Message Type*/ 548 if (vflag < 1) { 549 printf("RSVP %s Message, length: %u", 550 tok2str(rsvp_msg_type_values, "unknown (%u)",rsvp_com_header->msg_type), 551 len); 552 return; 553 } 554 555 /* ok they seem to want to know everything - lets fully decode it */ 556 557 tlen=EXTRACT_16BITS(rsvp_com_header->length); 558 559 printf("RSVP\n\tv: %u, msg-type: %s, Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x", 560 RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags), 561 tok2str(rsvp_msg_type_values, "unknown, type: %u",rsvp_com_header->msg_type), 562 bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(rsvp_com_header->version_flags)), 563 tlen, 564 rsvp_com_header->ttl, 565 EXTRACT_16BITS(rsvp_com_header->checksum)); 566 567 if (tlen < sizeof(const struct rsvp_common_header)) 568 return; 569 tptr+=sizeof(const struct rsvp_common_header); 570 tlen-=sizeof(const struct rsvp_common_header); 571 | |
572 while(tlen>0) { 573 /* did we capture enough for fully decoding the object header ? */ 574 if (!TTEST2(*tptr, sizeof(struct rsvp_object_header))) 575 goto trunc; 576 577 rsvp_obj_header = (const struct rsvp_object_header *)tptr; 578 rsvp_obj_len=EXTRACT_16BITS(rsvp_obj_header->length); 579 rsvp_obj_ctype=rsvp_obj_header->ctype; 580 | 551 while(tlen>0) { 552 /* did we capture enough for fully decoding the object header ? */ 553 if (!TTEST2(*tptr, sizeof(struct rsvp_object_header))) 554 goto trunc; 555 556 rsvp_obj_header = (const struct rsvp_object_header *)tptr; 557 rsvp_obj_len=EXTRACT_16BITS(rsvp_obj_header->length); 558 rsvp_obj_ctype=rsvp_obj_header->ctype; 559 |
581 if(rsvp_obj_len % 4 || rsvp_obj_len < sizeof(struct rsvp_object_header)) 582 return; | 560 if(rsvp_obj_len % 4 || rsvp_obj_len < sizeof(struct rsvp_object_header)) { 561 printf("ERROR: object header too short %u < %lu", rsvp_obj_len, 562 (unsigned long)sizeof(const struct rsvp_object_header)); 563 return -1; 564 } |
583 | 565 |
584 printf("\n\t %s Object (%u) Flags: [%s", | 566 printf("%s%s Object (%u) Flags: [%s", 567 ident, |
585 tok2str(rsvp_obj_values, 586 "Unknown", 587 rsvp_obj_header->class_num), 588 rsvp_obj_header->class_num, 589 ((rsvp_obj_header->class_num)&0x80) ? "ignore" : "reject"); 590 591 if (rsvp_obj_header->class_num > 128) 592 printf(" %s", 593 ((rsvp_obj_header->class_num)&0x40) ? "and forward" : "silently"); 594 595 printf(" if unknown], Class-Type: %s (%u), length: %u", 596 tok2str(rsvp_ctype_values, 597 "Unknown", 598 ((rsvp_obj_header->class_num)<<8)+rsvp_obj_ctype), 599 rsvp_obj_ctype, 600 rsvp_obj_len); | 568 tok2str(rsvp_obj_values, 569 "Unknown", 570 rsvp_obj_header->class_num), 571 rsvp_obj_header->class_num, 572 ((rsvp_obj_header->class_num)&0x80) ? "ignore" : "reject"); 573 574 if (rsvp_obj_header->class_num > 128) 575 printf(" %s", 576 ((rsvp_obj_header->class_num)&0x40) ? "and forward" : "silently"); 577 578 printf(" if unknown], Class-Type: %s (%u), length: %u", 579 tok2str(rsvp_ctype_values, 580 "Unknown", 581 ((rsvp_obj_header->class_num)<<8)+rsvp_obj_ctype), 582 rsvp_obj_ctype, 583 rsvp_obj_len); |
601 | 584 |
602 obj_tptr=tptr+sizeof(struct rsvp_object_header); 603 obj_tlen=rsvp_obj_len-sizeof(struct rsvp_object_header); 604 605 /* did we capture enough for fully decoding the object ? */ 606 if (!TTEST2(*tptr, rsvp_obj_len)) | 585 obj_tptr=tptr+sizeof(struct rsvp_object_header); 586 obj_tlen=rsvp_obj_len-sizeof(struct rsvp_object_header); 587 588 /* did we capture enough for fully decoding the object ? */ 589 if (!TTEST2(*tptr, rsvp_obj_len)) |
607 goto trunc; | 590 return -1; |
608 hexdump=FALSE; 609 610 switch(rsvp_obj_header->class_num) { 611 case RSVP_OBJ_SESSION: 612 switch(rsvp_obj_ctype) { 613 case RSVP_CTYPE_IPV4: 614 if (obj_tlen < 8) | 591 hexdump=FALSE; 592 593 switch(rsvp_obj_header->class_num) { 594 case RSVP_OBJ_SESSION: 595 switch(rsvp_obj_ctype) { 596 case RSVP_CTYPE_IPV4: 597 if (obj_tlen < 8) |
615 return; 616 printf("\n\t IPv4 DestAddress: %s, Protocol ID: 0x%02x", | 598 return -1; 599 printf("%s IPv4 DestAddress: %s, Protocol ID: 0x%02x", 600 ident, |
617 ipaddr_string(obj_tptr), 618 *(obj_tptr+4)); | 601 ipaddr_string(obj_tptr), 602 *(obj_tptr+4)); |
619 printf("\n\t Flags: [0x%02x], DestPort %u", | 603 printf("%s Flags: [0x%02x], DestPort %u", 604 ident, |
620 *(obj_tptr+5), 621 EXTRACT_16BITS(obj_tptr+6)); 622 obj_tlen-=8; 623 obj_tptr+=8; 624 break; 625#ifdef INET6 626 case RSVP_CTYPE_IPV6: 627 if (obj_tlen < 20) | 605 *(obj_tptr+5), 606 EXTRACT_16BITS(obj_tptr+6)); 607 obj_tlen-=8; 608 obj_tptr+=8; 609 break; 610#ifdef INET6 611 case RSVP_CTYPE_IPV6: 612 if (obj_tlen < 20) |
628 return; 629 printf("\n\t IPv6 DestAddress: %s, Protocol ID: 0x%02x", | 613 return -1; 614 printf("%s IPv6 DestAddress: %s, Protocol ID: 0x%02x", 615 ident, |
630 ip6addr_string(obj_tptr), 631 *(obj_tptr+16)); | 616 ip6addr_string(obj_tptr), 617 *(obj_tptr+16)); |
632 printf("\n\t Flags: [0x%02x], DestPort %u", | 618 printf("%s Flags: [0x%02x], DestPort %u", 619 ident, |
633 *(obj_tptr+17), 634 EXTRACT_16BITS(obj_tptr+18)); 635 obj_tlen-=20; 636 obj_tptr+=20; 637 break; 638 639 case RSVP_CTYPE_TUNNEL_IPV6: 640 if (obj_tlen < 36) | 620 *(obj_tptr+17), 621 EXTRACT_16BITS(obj_tptr+18)); 622 obj_tlen-=20; 623 obj_tptr+=20; 624 break; 625 626 case RSVP_CTYPE_TUNNEL_IPV6: 627 if (obj_tlen < 36) |
641 return; 642 printf("\n\t IPv6 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s", | 628 return -1; 629 printf("%s IPv6 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s", 630 ident, |
643 ip6addr_string(obj_tptr), 644 EXTRACT_16BITS(obj_tptr+18), 645 ip6addr_string(obj_tptr+20)); 646 obj_tlen-=36; 647 obj_tptr+=36; 648 break; 649#endif 650 case RSVP_CTYPE_TUNNEL_IPV4: 651 if (obj_tlen < 12) | 631 ip6addr_string(obj_tptr), 632 EXTRACT_16BITS(obj_tptr+18), 633 ip6addr_string(obj_tptr+20)); 634 obj_tlen-=36; 635 obj_tptr+=36; 636 break; 637#endif 638 case RSVP_CTYPE_TUNNEL_IPV4: 639 if (obj_tlen < 12) |
652 return; 653 printf("\n\t IPv4 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s", | 640 return -1; 641 printf("%s IPv4 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s", 642 ident, |
654 ipaddr_string(obj_tptr), 655 EXTRACT_16BITS(obj_tptr+6), 656 ipaddr_string(obj_tptr+8)); 657 obj_tlen-=12; 658 obj_tptr+=12; 659 break; 660 default: 661 hexdump=TRUE; 662 } 663 break; 664 665 case RSVP_OBJ_CONFIRM: 666 switch(rsvp_obj_ctype) { 667 case RSVP_CTYPE_IPV4: 668 if (obj_tlen < 4) | 643 ipaddr_string(obj_tptr), 644 EXTRACT_16BITS(obj_tptr+6), 645 ipaddr_string(obj_tptr+8)); 646 obj_tlen-=12; 647 obj_tptr+=12; 648 break; 649 default: 650 hexdump=TRUE; 651 } 652 break; 653 654 case RSVP_OBJ_CONFIRM: 655 switch(rsvp_obj_ctype) { 656 case RSVP_CTYPE_IPV4: 657 if (obj_tlen < 4) |
669 return; 670 printf("\n\t IPv4 Receiver Address: %s", | 658 return -1; 659 printf("%s IPv4 Receiver Address: %s", 660 ident, |
671 ipaddr_string(obj_tptr)); 672 obj_tlen-=4; 673 obj_tptr+=4; 674 break; 675#ifdef INET6 676 case RSVP_CTYPE_IPV6: 677 if (obj_tlen < 16) | 661 ipaddr_string(obj_tptr)); 662 obj_tlen-=4; 663 obj_tptr+=4; 664 break; 665#ifdef INET6 666 case RSVP_CTYPE_IPV6: 667 if (obj_tlen < 16) |
678 return; 679 printf("\n\t IPv6 Receiver Address: %s", | 668 return -1; 669 printf("%s IPv6 Receiver Address: %s", 670 ident, |
680 ip6addr_string(obj_tptr)); 681 obj_tlen-=16; 682 obj_tptr+=16; 683 break; 684#endif 685 default: 686 hexdump=TRUE; 687 } 688 break; 689 690 case RSVP_OBJ_NOTIFY_REQ: 691 switch(rsvp_obj_ctype) { 692 case RSVP_CTYPE_IPV4: 693 if (obj_tlen < 4) | 671 ip6addr_string(obj_tptr)); 672 obj_tlen-=16; 673 obj_tptr+=16; 674 break; 675#endif 676 default: 677 hexdump=TRUE; 678 } 679 break; 680 681 case RSVP_OBJ_NOTIFY_REQ: 682 switch(rsvp_obj_ctype) { 683 case RSVP_CTYPE_IPV4: 684 if (obj_tlen < 4) |
694 return; 695 printf("\n\t IPv4 Notify Node Address: %s", | 685 return -1; 686 printf("%s IPv4 Notify Node Address: %s", 687 ident, |
696 ipaddr_string(obj_tptr)); 697 obj_tlen-=4; 698 obj_tptr+=4; 699 break; 700#ifdef INET6 701 case RSVP_CTYPE_IPV6: 702 if (obj_tlen < 16) | 688 ipaddr_string(obj_tptr)); 689 obj_tlen-=4; 690 obj_tptr+=4; 691 break; 692#ifdef INET6 693 case RSVP_CTYPE_IPV6: 694 if (obj_tlen < 16) |
703 return; 704 printf("\n\t IPv6 Notify Node Address: %s", | 695 return-1; 696 printf("%s IPv6 Notify Node Address: %s", 697 ident, |
705 ip6addr_string(obj_tptr)); 706 obj_tlen-=16; 707 obj_tptr+=16; 708 break; 709#endif 710 default: 711 hexdump=TRUE; 712 } 713 break; 714 715 case RSVP_OBJ_SUGGESTED_LABEL: /* fall through */ 716 case RSVP_OBJ_UPSTREAM_LABEL: /* fall through */ 717 case RSVP_OBJ_RECOVERY_LABEL: /* fall through */ 718 case RSVP_OBJ_LABEL: 719 switch(rsvp_obj_ctype) { 720 case RSVP_CTYPE_1: 721 while(obj_tlen >= 4 ) { | 698 ip6addr_string(obj_tptr)); 699 obj_tlen-=16; 700 obj_tptr+=16; 701 break; 702#endif 703 default: 704 hexdump=TRUE; 705 } 706 break; 707 708 case RSVP_OBJ_SUGGESTED_LABEL: /* fall through */ 709 case RSVP_OBJ_UPSTREAM_LABEL: /* fall through */ 710 case RSVP_OBJ_RECOVERY_LABEL: /* fall through */ 711 case RSVP_OBJ_LABEL: 712 switch(rsvp_obj_ctype) { 713 case RSVP_CTYPE_1: 714 while(obj_tlen >= 4 ) { |
722 printf("\n\t Label: %u", EXTRACT_32BITS(obj_tptr)); | 715 printf("%s Label: %u", ident, EXTRACT_32BITS(obj_tptr)); |
723 obj_tlen-=4; 724 obj_tptr+=4; 725 } 726 break; 727 case RSVP_CTYPE_2: 728 if (obj_tlen < 4) | 716 obj_tlen-=4; 717 obj_tptr+=4; 718 } 719 break; 720 case RSVP_CTYPE_2: 721 if (obj_tlen < 4) |
729 return; 730 printf("\n\t Generalized Label: %u", | 722 return-1; 723 printf("%s Generalized Label: %u", 724 ident, |
731 EXTRACT_32BITS(obj_tptr)); 732 obj_tlen-=4; 733 obj_tptr+=4; 734 break; 735 case RSVP_CTYPE_3: 736 if (obj_tlen < 12) | 725 EXTRACT_32BITS(obj_tptr)); 726 obj_tlen-=4; 727 obj_tptr+=4; 728 break; 729 case RSVP_CTYPE_3: 730 if (obj_tlen < 12) |
737 return; 738 printf("\n\t Waveband ID: %u\n\t Start Label: %u, Stop Label: %u", | 731 return-1; 732 printf("%s Waveband ID: %u%s Start Label: %u, Stop Label: %u", 733 ident, |
739 EXTRACT_32BITS(obj_tptr), | 734 EXTRACT_32BITS(obj_tptr), |
735 ident, |
|
740 EXTRACT_32BITS(obj_tptr+4), 741 EXTRACT_32BITS(obj_tptr+8)); 742 obj_tlen-=12; 743 obj_tptr+=12; 744 break; 745 default: 746 hexdump=TRUE; 747 } 748 break; 749 750 case RSVP_OBJ_STYLE: 751 switch(rsvp_obj_ctype) { 752 case RSVP_CTYPE_1: 753 if (obj_tlen < 4) | 736 EXTRACT_32BITS(obj_tptr+4), 737 EXTRACT_32BITS(obj_tptr+8)); 738 obj_tlen-=12; 739 obj_tptr+=12; 740 break; 741 default: 742 hexdump=TRUE; 743 } 744 break; 745 746 case RSVP_OBJ_STYLE: 747 switch(rsvp_obj_ctype) { 748 case RSVP_CTYPE_1: 749 if (obj_tlen < 4) |
754 return; 755 printf("\n\t Reservation Style: %s, Flags: [0x%02x]", | 750 return-1; 751 printf("%s Reservation Style: %s, Flags: [0x%02x]", 752 ident, |
756 tok2str(rsvp_resstyle_values, 757 "Unknown", 758 EXTRACT_24BITS(obj_tptr+1)), 759 *(obj_tptr)); 760 obj_tlen-=4; 761 obj_tptr+=4; 762 break; 763 default: 764 hexdump=TRUE; 765 } 766 break; 767 768 case RSVP_OBJ_SENDER_TEMPLATE: 769 switch(rsvp_obj_ctype) { 770 case RSVP_CTYPE_IPV4: 771 if (obj_tlen < 8) | 753 tok2str(rsvp_resstyle_values, 754 "Unknown", 755 EXTRACT_24BITS(obj_tptr+1)), 756 *(obj_tptr)); 757 obj_tlen-=4; 758 obj_tptr+=4; 759 break; 760 default: 761 hexdump=TRUE; 762 } 763 break; 764 765 case RSVP_OBJ_SENDER_TEMPLATE: 766 switch(rsvp_obj_ctype) { 767 case RSVP_CTYPE_IPV4: 768 if (obj_tlen < 8) |
772 return; 773 printf("\n\t Source Address: %s, Source Port: %u", | 769 return-1; 770 printf("%s Source Address: %s, Source Port: %u", 771 ident, |
774 ipaddr_string(obj_tptr), 775 EXTRACT_16BITS(obj_tptr+6)); 776 obj_tlen-=8; 777 obj_tptr+=8; 778 break; 779#ifdef INET6 780 case RSVP_CTYPE_IPV6: 781 if (obj_tlen < 20) | 772 ipaddr_string(obj_tptr), 773 EXTRACT_16BITS(obj_tptr+6)); 774 obj_tlen-=8; 775 obj_tptr+=8; 776 break; 777#ifdef INET6 778 case RSVP_CTYPE_IPV6: 779 if (obj_tlen < 20) |
782 return; 783 printf("\n\t Source Address: %s, Source Port: %u", | 780 return-1; 781 printf("%s Source Address: %s, Source Port: %u", 782 ident, |
784 ip6addr_string(obj_tptr), 785 EXTRACT_16BITS(obj_tptr+18)); 786 obj_tlen-=20; 787 obj_tptr+=20; 788 break; 789#endif 790 case RSVP_CTYPE_TUNNEL_IPV4: 791 if (obj_tlen < 8) | 783 ip6addr_string(obj_tptr), 784 EXTRACT_16BITS(obj_tptr+18)); 785 obj_tlen-=20; 786 obj_tptr+=20; 787 break; 788#endif 789 case RSVP_CTYPE_TUNNEL_IPV4: 790 if (obj_tlen < 8) |
792 return; 793 printf("\n\t IPv4 Tunnel Sender Address: %s, LSP-ID: 0x%04x", | 791 return-1; 792 printf("%s IPv4 Tunnel Sender Address: %s, LSP-ID: 0x%04x", 793 ident, |
794 ipaddr_string(obj_tptr), 795 EXTRACT_16BITS(obj_tptr+6)); 796 obj_tlen-=8; 797 obj_tptr+=8; 798 break; 799 default: 800 hexdump=TRUE; 801 } 802 break; 803 804 case RSVP_OBJ_LABEL_REQ: 805 switch(rsvp_obj_ctype) { 806 case RSVP_CTYPE_1: 807 while(obj_tlen >= 4 ) { | 794 ipaddr_string(obj_tptr), 795 EXTRACT_16BITS(obj_tptr+6)); 796 obj_tlen-=8; 797 obj_tptr+=8; 798 break; 799 default: 800 hexdump=TRUE; 801 } 802 break; 803 804 case RSVP_OBJ_LABEL_REQ: 805 switch(rsvp_obj_ctype) { 806 case RSVP_CTYPE_1: 807 while(obj_tlen >= 4 ) { |
808 printf("\n\t L3 Protocol ID: %s", | 808 printf("%s L3 Protocol ID: %s", 809 ident, |
809 tok2str(ethertype_values, 810 "Unknown Protocol (0x%04x)", 811 EXTRACT_16BITS(obj_tptr+2))); 812 obj_tlen-=4; 813 obj_tptr+=4; 814 } 815 break; 816 case RSVP_CTYPE_2: 817 if (obj_tlen < 12) | 810 tok2str(ethertype_values, 811 "Unknown Protocol (0x%04x)", 812 EXTRACT_16BITS(obj_tptr+2))); 813 obj_tlen-=4; 814 obj_tptr+=4; 815 } 816 break; 817 case RSVP_CTYPE_2: 818 if (obj_tlen < 12) |
818 return; 819 printf("\n\t L3 Protocol ID: %s", | 819 return-1; 820 printf("%s L3 Protocol ID: %s", 821 ident, |
820 tok2str(ethertype_values, 821 "Unknown Protocol (0x%04x)", 822 EXTRACT_16BITS(obj_tptr+2))); 823 printf(",%s merge capability",((*(obj_tptr+4))&0x80) ? "no" : "" ); | 822 tok2str(ethertype_values, 823 "Unknown Protocol (0x%04x)", 824 EXTRACT_16BITS(obj_tptr+2))); 825 printf(",%s merge capability",((*(obj_tptr+4))&0x80) ? "no" : "" ); |
824 printf("\n\t Minimum VPI/VCI: %u/%u", | 826 printf("%s Minimum VPI/VCI: %u/%u", 827 ident, |
825 (EXTRACT_16BITS(obj_tptr+4))&0xfff, 826 (EXTRACT_16BITS(obj_tptr+6))&0xfff); | 828 (EXTRACT_16BITS(obj_tptr+4))&0xfff, 829 (EXTRACT_16BITS(obj_tptr+6))&0xfff); |
827 printf("\n\t Maximum VPI/VCI: %u/%u", | 830 printf("%s Maximum VPI/VCI: %u/%u", 831 ident, |
828 (EXTRACT_16BITS(obj_tptr+8))&0xfff, 829 (EXTRACT_16BITS(obj_tptr+10))&0xfff); 830 obj_tlen-=12; 831 obj_tptr+=12; 832 break; 833 case RSVP_CTYPE_3: 834 if (obj_tlen < 12) | 832 (EXTRACT_16BITS(obj_tptr+8))&0xfff, 833 (EXTRACT_16BITS(obj_tptr+10))&0xfff); 834 obj_tlen-=12; 835 obj_tptr+=12; 836 break; 837 case RSVP_CTYPE_3: 838 if (obj_tlen < 12) |
835 return; 836 printf("\n\t L3 Protocol ID: %s", | 839 return-1; 840 printf("%s L3 Protocol ID: %s", 841 ident, |
837 tok2str(ethertype_values, 838 "Unknown Protocol (0x%04x)", 839 EXTRACT_16BITS(obj_tptr+2))); | 842 tok2str(ethertype_values, 843 "Unknown Protocol (0x%04x)", 844 EXTRACT_16BITS(obj_tptr+2))); |
840 printf("\n\t Minimum/Maximum DLCI: %u/%u, %s%s bit DLCI", | 845 printf("%s Minimum/Maximum DLCI: %u/%u, %s%s bit DLCI", 846 ident, |
841 (EXTRACT_32BITS(obj_tptr+4))&0x7fffff, 842 (EXTRACT_32BITS(obj_tptr+8))&0x7fffff, 843 (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 0 ) ? "10" : "", 844 (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 2 ) ? "23" : ""); 845 obj_tlen-=12; 846 obj_tptr+=12; 847 break; 848 case RSVP_CTYPE_4: 849 if (obj_tlen < 8) | 847 (EXTRACT_32BITS(obj_tptr+4))&0x7fffff, 848 (EXTRACT_32BITS(obj_tptr+8))&0x7fffff, 849 (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 0 ) ? "10" : "", 850 (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 2 ) ? "23" : ""); 851 obj_tlen-=12; 852 obj_tptr+=12; 853 break; 854 case RSVP_CTYPE_4: 855 if (obj_tlen < 8) |
850 return; 851 printf("\n\t LSP Encoding Type: %s (%u)", | 856 return-1; 857 printf("%s LSP Encoding Type: %s (%u)", 858 ident, |
852 tok2str(gmpls_encoding_values, 853 "Unknown", 854 *obj_tptr), 855 *obj_tptr); | 859 tok2str(gmpls_encoding_values, 860 "Unknown", 861 *obj_tptr), 862 *obj_tptr); |
856 printf("\n\t Switching Type: %s (%u), Payload ID: %s (0x%04x)", | 863 printf("%s Switching Type: %s (%u), Payload ID: %s (0x%04x)", 864 ident, |
857 tok2str(gmpls_switch_cap_values, 858 "Unknown", 859 *(obj_tptr+1)), 860 *(obj_tptr+1), 861 tok2str(gmpls_payload_values, 862 "Unknown", 863 EXTRACT_16BITS(obj_tptr+2)), 864 EXTRACT_16BITS(obj_tptr+2)); --- 5 unchanged lines hidden (view full) --- 870 } 871 break; 872 873 case RSVP_OBJ_RRO: 874 case RSVP_OBJ_ERO: 875 switch(rsvp_obj_ctype) { 876 case RSVP_CTYPE_IPV4: 877 while(obj_tlen >= 4 ) { | 865 tok2str(gmpls_switch_cap_values, 866 "Unknown", 867 *(obj_tptr+1)), 868 *(obj_tptr+1), 869 tok2str(gmpls_payload_values, 870 "Unknown", 871 EXTRACT_16BITS(obj_tptr+2)), 872 EXTRACT_16BITS(obj_tptr+2)); --- 5 unchanged lines hidden (view full) --- 878 } 879 break; 880 881 case RSVP_OBJ_RRO: 882 case RSVP_OBJ_ERO: 883 switch(rsvp_obj_ctype) { 884 case RSVP_CTYPE_IPV4: 885 while(obj_tlen >= 4 ) { |
878 printf("\n\t Subobject Type: %s", | 886 printf("%s Subobject Type: %s", 887 ident, |
879 tok2str(rsvp_obj_xro_values, 880 "Unknown %u", 881 RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr))); 882 switch(RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)) { 883 case RSVP_OBJ_XRO_IPV4: 884 printf(", %s, %s/%u, Flags: [%s]", 885 RSVP_OBJ_XRO_MASK_LOOSE(*obj_tptr) ? "Loose" : "Strict", 886 ipaddr_string(obj_tptr+2), --- 11 unchanged lines hidden (view full) --- 898 } 899 break; 900 901 case RSVP_OBJ_HELLO: 902 switch(rsvp_obj_ctype) { 903 case RSVP_CTYPE_1: 904 case RSVP_CTYPE_2: 905 if (obj_tlen < 8) | 888 tok2str(rsvp_obj_xro_values, 889 "Unknown %u", 890 RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr))); 891 switch(RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)) { 892 case RSVP_OBJ_XRO_IPV4: 893 printf(", %s, %s/%u, Flags: [%s]", 894 RSVP_OBJ_XRO_MASK_LOOSE(*obj_tptr) ? "Loose" : "Strict", 895 ipaddr_string(obj_tptr+2), --- 11 unchanged lines hidden (view full) --- 907 } 908 break; 909 910 case RSVP_OBJ_HELLO: 911 switch(rsvp_obj_ctype) { 912 case RSVP_CTYPE_1: 913 case RSVP_CTYPE_2: 914 if (obj_tlen < 8) |
906 return; 907 printf("\n\t Source Instance: 0x%08x, Destination Instance: 0x%08x", | 915 return-1; 916 printf("%s Source Instance: 0x%08x, Destination Instance: 0x%08x", 917 ident, |
908 EXTRACT_32BITS(obj_tptr), 909 EXTRACT_32BITS(obj_tptr+4)); 910 obj_tlen-=8; 911 obj_tptr+=8; 912 break; 913 default: 914 hexdump=TRUE; 915 } 916 break; 917 918 case RSVP_OBJ_RESTART_CAPABILITY: 919 switch(rsvp_obj_ctype) { 920 case RSVP_CTYPE_1: 921 if (obj_tlen < 8) | 918 EXTRACT_32BITS(obj_tptr), 919 EXTRACT_32BITS(obj_tptr+4)); 920 obj_tlen-=8; 921 obj_tptr+=8; 922 break; 923 default: 924 hexdump=TRUE; 925 } 926 break; 927 928 case RSVP_OBJ_RESTART_CAPABILITY: 929 switch(rsvp_obj_ctype) { 930 case RSVP_CTYPE_1: 931 if (obj_tlen < 8) |
922 return; 923 printf("\n\t Restart Time: %ums, Recovery Time: %ums", 924 EXTRACT_16BITS(obj_tptr), 925 EXTRACT_16BITS(obj_tptr+4)); | 932 return-1; 933 printf("%s Restart Time: %ums, Recovery Time: %ums", 934 ident, 935 EXTRACT_32BITS(obj_tptr), 936 EXTRACT_32BITS(obj_tptr+4)); |
926 obj_tlen-=8; 927 obj_tptr+=8; 928 break; 929 default: 930 hexdump=TRUE; 931 } 932 break; 933 934 case RSVP_OBJ_SESSION_ATTRIBUTE: 935 switch(rsvp_obj_ctype) { 936 case RSVP_CTYPE_TUNNEL_IPV4: 937 if (obj_tlen < 4) | 937 obj_tlen-=8; 938 obj_tptr+=8; 939 break; 940 default: 941 hexdump=TRUE; 942 } 943 break; 944 945 case RSVP_OBJ_SESSION_ATTRIBUTE: 946 switch(rsvp_obj_ctype) { 947 case RSVP_CTYPE_TUNNEL_IPV4: 948 if (obj_tlen < 4) |
938 return; | 949 return-1; |
939 namelen = *(obj_tptr+3); 940 if (obj_tlen < 4+namelen) | 950 namelen = *(obj_tptr+3); 951 if (obj_tlen < 4+namelen) |
941 return; 942 printf("\n\t Session Name: "); | 952 return-1; 953 printf("%s Session Name: ", ident); |
943 for (i = 0; i < namelen; i++) 944 safeputchar(*(obj_tptr+4+i)); | 954 for (i = 0; i < namelen; i++) 955 safeputchar(*(obj_tptr+4+i)); |
945 printf("\n\t Setup Priority: %u, Holding Priority: %u, Flags: [%s]", | 956 printf("%s Setup Priority: %u, Holding Priority: %u, Flags: [%s]", 957 ident, |
946 (int)*obj_tptr, 947 (int)*(obj_tptr+1), 948 tok2str(rsvp_session_attribute_flag_values, 949 "none", 950 *(obj_tptr+2))); 951 952 obj_tlen-=4+*(obj_tptr+3); 953 obj_tptr+=4+*(obj_tptr+3); 954 break; 955 default: 956 hexdump=TRUE; 957 } 958 break; 959 960 case RSVP_OBJ_RSVP_HOP: 961 switch(rsvp_obj_ctype) { 962 case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */ 963 case RSVP_CTYPE_IPV4: 964 if (obj_tlen < 8) | 958 (int)*obj_tptr, 959 (int)*(obj_tptr+1), 960 tok2str(rsvp_session_attribute_flag_values, 961 "none", 962 *(obj_tptr+2))); 963 964 obj_tlen-=4+*(obj_tptr+3); 965 obj_tptr+=4+*(obj_tptr+3); 966 break; 967 default: 968 hexdump=TRUE; 969 } 970 break; 971 972 case RSVP_OBJ_RSVP_HOP: 973 switch(rsvp_obj_ctype) { 974 case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */ 975 case RSVP_CTYPE_IPV4: 976 if (obj_tlen < 8) |
965 return; 966 printf("\n\t Previous/Next Interface: %s, Logical Interface Handle: 0x%08x", | 977 return-1; 978 printf("%s Previous/Next Interface: %s, Logical Interface Handle: 0x%08x", 979 ident, |
967 ipaddr_string(obj_tptr), 968 EXTRACT_32BITS(obj_tptr+4)); 969 obj_tlen-=8; 970 obj_tptr+=8; 971 hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */ 972 break; 973#ifdef INET6 974 case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */ 975 case RSVP_CTYPE_IPV6: 976 if (obj_tlen < 20) | 980 ipaddr_string(obj_tptr), 981 EXTRACT_32BITS(obj_tptr+4)); 982 obj_tlen-=8; 983 obj_tptr+=8; 984 hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */ 985 break; 986#ifdef INET6 987 case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */ 988 case RSVP_CTYPE_IPV6: 989 if (obj_tlen < 20) |
977 return; 978 printf("\n\t Previous/Next Interface: %s, Logical Interface Handle: 0x%08x", | 990 return-1; 991 printf("%s Previous/Next Interface: %s, Logical Interface Handle: 0x%08x", 992 ident, |
979 ip6addr_string(obj_tptr), 980 EXTRACT_32BITS(obj_tptr+16)); 981 obj_tlen-=20; 982 obj_tptr+=20; 983 hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */ 984 break; 985#endif 986 default: 987 hexdump=TRUE; 988 } 989 break; 990 991 case RSVP_OBJ_TIME_VALUES: 992 switch(rsvp_obj_ctype) { 993 case RSVP_CTYPE_1: 994 if (obj_tlen < 4) | 993 ip6addr_string(obj_tptr), 994 EXTRACT_32BITS(obj_tptr+16)); 995 obj_tlen-=20; 996 obj_tptr+=20; 997 hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */ 998 break; 999#endif 1000 default: 1001 hexdump=TRUE; 1002 } 1003 break; 1004 1005 case RSVP_OBJ_TIME_VALUES: 1006 switch(rsvp_obj_ctype) { 1007 case RSVP_CTYPE_1: 1008 if (obj_tlen < 4) |
995 return; 996 printf("\n\t Refresh Period: %ums", | 1009 return-1; 1010 printf("%s Refresh Period: %ums", 1011 ident, |
997 EXTRACT_32BITS(obj_tptr)); 998 obj_tlen-=4; 999 obj_tptr+=4; 1000 break; 1001 default: 1002 hexdump=TRUE; 1003 } 1004 break; 1005 1006 /* those three objects do share the same semantics */ 1007 case RSVP_OBJ_SENDER_TSPEC: 1008 case RSVP_OBJ_ADSPEC: 1009 case RSVP_OBJ_FLOWSPEC: 1010 switch(rsvp_obj_ctype) { 1011 case RSVP_CTYPE_2: 1012 if (obj_tlen < 4) | 1012 EXTRACT_32BITS(obj_tptr)); 1013 obj_tlen-=4; 1014 obj_tptr+=4; 1015 break; 1016 default: 1017 hexdump=TRUE; 1018 } 1019 break; 1020 1021 /* those three objects do share the same semantics */ 1022 case RSVP_OBJ_SENDER_TSPEC: 1023 case RSVP_OBJ_ADSPEC: 1024 case RSVP_OBJ_FLOWSPEC: 1025 switch(rsvp_obj_ctype) { 1026 case RSVP_CTYPE_2: 1027 if (obj_tlen < 4) |
1013 return; 1014 printf("\n\t Msg-Version: %u, length: %u", | 1028 return-1; 1029 printf("%s Msg-Version: %u, length: %u", 1030 ident, |
1015 (*obj_tptr & 0xf0) >> 4, 1016 EXTRACT_16BITS(obj_tptr+2)<<2); 1017 obj_tptr+=4; /* get to the start of the service header */ 1018 obj_tlen-=4; 1019 1020 while (obj_tlen >= 4) { 1021 intserv_serv_tlen=EXTRACT_16BITS(obj_tptr+2)<<2; | 1031 (*obj_tptr & 0xf0) >> 4, 1032 EXTRACT_16BITS(obj_tptr+2)<<2); 1033 obj_tptr+=4; /* get to the start of the service header */ 1034 obj_tlen-=4; 1035 1036 while (obj_tlen >= 4) { 1037 intserv_serv_tlen=EXTRACT_16BITS(obj_tptr+2)<<2; |
1022 printf("\n\t Service Type: %s (%u), break bit %s set, Service length: %u", | 1038 printf("%s Service Type: %s (%u), break bit %s set, Service length: %u", 1039 ident, |
1023 tok2str(rsvp_intserv_service_type_values,"unknown",*(obj_tptr)), 1024 *(obj_tptr), 1025 (*(obj_tptr+1)&0x80) ? "" : "not", 1026 intserv_serv_tlen); 1027 1028 obj_tptr+=4; /* get to the start of the parameter list */ 1029 obj_tlen-=4; 1030 --- 11 unchanged lines hidden (view full) --- 1042 hexdump=TRUE; 1043 } 1044 break; 1045 1046 case RSVP_OBJ_FILTERSPEC: 1047 switch(rsvp_obj_ctype) { 1048 case RSVP_CTYPE_IPV4: 1049 if (obj_tlen < 8) | 1040 tok2str(rsvp_intserv_service_type_values,"unknown",*(obj_tptr)), 1041 *(obj_tptr), 1042 (*(obj_tptr+1)&0x80) ? "" : "not", 1043 intserv_serv_tlen); 1044 1045 obj_tptr+=4; /* get to the start of the parameter list */ 1046 obj_tlen-=4; 1047 --- 11 unchanged lines hidden (view full) --- 1059 hexdump=TRUE; 1060 } 1061 break; 1062 1063 case RSVP_OBJ_FILTERSPEC: 1064 switch(rsvp_obj_ctype) { 1065 case RSVP_CTYPE_IPV4: 1066 if (obj_tlen < 8) |
1050 return; 1051 printf("\n\t Source Address: %s, Source Port: %u", | 1067 return-1; 1068 printf("%s Source Address: %s, Source Port: %u", 1069 ident, |
1052 ipaddr_string(obj_tptr), 1053 EXTRACT_16BITS(obj_tptr+6)); 1054 obj_tlen-=8; 1055 obj_tptr+=8; 1056 break; 1057#ifdef INET6 1058 case RSVP_CTYPE_IPV6: 1059 if (obj_tlen < 20) | 1070 ipaddr_string(obj_tptr), 1071 EXTRACT_16BITS(obj_tptr+6)); 1072 obj_tlen-=8; 1073 obj_tptr+=8; 1074 break; 1075#ifdef INET6 1076 case RSVP_CTYPE_IPV6: 1077 if (obj_tlen < 20) |
1060 return; 1061 printf("\n\t Source Address: %s, Source Port: %u", | 1078 return-1; 1079 printf("%s Source Address: %s, Source Port: %u", 1080 ident, |
1062 ip6addr_string(obj_tptr), 1063 EXTRACT_16BITS(obj_tptr+18)); 1064 obj_tlen-=20; 1065 obj_tptr+=20; 1066 break; 1067 case RSVP_CTYPE_3: 1068 if (obj_tlen < 20) | 1081 ip6addr_string(obj_tptr), 1082 EXTRACT_16BITS(obj_tptr+18)); 1083 obj_tlen-=20; 1084 obj_tptr+=20; 1085 break; 1086 case RSVP_CTYPE_3: 1087 if (obj_tlen < 20) |
1069 return; 1070 printf("\n\t Source Address: %s, Flow Label: %u", | 1088 return-1; 1089 printf("%s Source Address: %s, Flow Label: %u", 1090 ident, |
1071 ip6addr_string(obj_tptr), 1072 EXTRACT_24BITS(obj_tptr+17)); 1073 obj_tlen-=20; 1074 obj_tptr+=20; 1075 break; 1076 case RSVP_CTYPE_TUNNEL_IPV6: 1077 if (obj_tlen < 20) | 1091 ip6addr_string(obj_tptr), 1092 EXTRACT_24BITS(obj_tptr+17)); 1093 obj_tlen-=20; 1094 obj_tptr+=20; 1095 break; 1096 case RSVP_CTYPE_TUNNEL_IPV6: 1097 if (obj_tlen < 20) |
1078 return; 1079 printf("\n\t Source Address: %s, LSP-ID: 0x%04x", | 1098 return-1; 1099 printf("%s Source Address: %s, LSP-ID: 0x%04x", 1100 ident, |
1080 ipaddr_string(obj_tptr), 1081 EXTRACT_16BITS(obj_tptr+18)); 1082 obj_tlen-=20; 1083 obj_tptr+=20; 1084 break; 1085#endif 1086 case RSVP_CTYPE_TUNNEL_IPV4: 1087 if (obj_tlen < 8) | 1101 ipaddr_string(obj_tptr), 1102 EXTRACT_16BITS(obj_tptr+18)); 1103 obj_tlen-=20; 1104 obj_tptr+=20; 1105 break; 1106#endif 1107 case RSVP_CTYPE_TUNNEL_IPV4: 1108 if (obj_tlen < 8) |
1088 return; 1089 printf("\n\t Source Address: %s, LSP-ID: 0x%04x", | 1109 return-1; 1110 printf("%s Source Address: %s, LSP-ID: 0x%04x", 1111 ident, |
1090 ipaddr_string(obj_tptr), 1091 EXTRACT_16BITS(obj_tptr+6)); 1092 obj_tlen-=8; 1093 obj_tptr+=8; 1094 break; 1095 default: 1096 hexdump=TRUE; 1097 } 1098 break; 1099 1100 case RSVP_OBJ_FASTREROUTE: 1101 switch(rsvp_obj_ctype) { 1102 case RSVP_CTYPE_TUNNEL_IPV4: 1103 if (obj_tlen < 16) | 1112 ipaddr_string(obj_tptr), 1113 EXTRACT_16BITS(obj_tptr+6)); 1114 obj_tlen-=8; 1115 obj_tptr+=8; 1116 break; 1117 default: 1118 hexdump=TRUE; 1119 } 1120 break; 1121 1122 case RSVP_OBJ_FASTREROUTE: 1123 switch(rsvp_obj_ctype) { 1124 case RSVP_CTYPE_TUNNEL_IPV4: 1125 if (obj_tlen < 16) |
1104 return; | 1126 return-1; |
1105 bw.i = EXTRACT_32BITS(obj_tptr+4); | 1127 bw.i = EXTRACT_32BITS(obj_tptr+4); |
1106 printf("\n\t Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps", | 1128 printf("%s Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps", 1129 ident, |
1107 (int)*obj_tptr, 1108 (int)*(obj_tptr+1), 1109 (int)*(obj_tptr+2), 1110 bw.f*8/1000000); | 1130 (int)*obj_tptr, 1131 (int)*(obj_tptr+1), 1132 (int)*(obj_tptr+2), 1133 bw.f*8/1000000); |
1111 printf("\n\t Include Colors: 0x%08x, Exclude Colors: 0x%08x", | 1134 printf("%s Include Colors: 0x%08x, Exclude Colors: 0x%08x", 1135 ident, |
1112 EXTRACT_32BITS(obj_tptr+8), 1113 EXTRACT_32BITS(obj_tptr+12)); 1114 obj_tlen-=16; 1115 obj_tptr+=16; 1116 break; 1117 default: 1118 hexdump=TRUE; 1119 } 1120 break; 1121 1122 case RSVP_OBJ_DETOUR: 1123 switch(rsvp_obj_ctype) { 1124 case RSVP_CTYPE_TUNNEL_IPV4: 1125 while(obj_tlen >= 8) { | 1136 EXTRACT_32BITS(obj_tptr+8), 1137 EXTRACT_32BITS(obj_tptr+12)); 1138 obj_tlen-=16; 1139 obj_tptr+=16; 1140 break; 1141 default: 1142 hexdump=TRUE; 1143 } 1144 break; 1145 1146 case RSVP_OBJ_DETOUR: 1147 switch(rsvp_obj_ctype) { 1148 case RSVP_CTYPE_TUNNEL_IPV4: 1149 while(obj_tlen >= 8) { |
1126 printf("\n\t PLR-ID: %s, Avoid-Node-ID: %s", | 1150 printf("%s PLR-ID: %s, Avoid-Node-ID: %s", 1151 ident, |
1127 ipaddr_string(obj_tptr), 1128 ipaddr_string(obj_tptr+4)); 1129 obj_tlen-=8; 1130 obj_tptr+=8; 1131 } 1132 break; 1133 default: 1134 hexdump=TRUE; 1135 } 1136 break; 1137 | 1152 ipaddr_string(obj_tptr), 1153 ipaddr_string(obj_tptr+4)); 1154 obj_tlen-=8; 1155 obj_tptr+=8; 1156 } 1157 break; 1158 default: 1159 hexdump=TRUE; 1160 } 1161 break; 1162 |
1163 case RSVP_OBJ_CLASSTYPE: 1164 switch(rsvp_obj_ctype) { 1165 case RSVP_CTYPE_1: 1166 printf("%s Class Type: %u", 1167 ident, 1168 EXTRACT_32BITS(obj_tptr)&0x7); 1169 obj_tlen-=4; 1170 obj_tptr+=4; 1171 break; 1172 default: 1173 hexdump=TRUE; 1174 } 1175 break; 1176 |
|
1138 case RSVP_OBJ_ERROR_SPEC: 1139 switch(rsvp_obj_ctype) { 1140 case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */ 1141 case RSVP_CTYPE_IPV4: 1142 if (obj_tlen < 8) | 1177 case RSVP_OBJ_ERROR_SPEC: 1178 switch(rsvp_obj_ctype) { 1179 case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */ 1180 case RSVP_CTYPE_IPV4: 1181 if (obj_tlen < 8) |
1143 return; | 1182 return-1; |
1144 error_code=*(obj_tptr+5); 1145 error_value=EXTRACT_16BITS(obj_tptr+6); | 1183 error_code=*(obj_tptr+5); 1184 error_value=EXTRACT_16BITS(obj_tptr+6); |
1146 printf("\n\t Error Node Adress: %s, Flags: [0x%02x]\n\t Error Code: %s (%u)", | 1185 printf("%s Error Node Address: %s, Flags: [0x%02x]%s Error Code: %s (%u)", 1186 ident, |
1147 ipaddr_string(obj_tptr), 1148 *(obj_tptr+4), | 1187 ipaddr_string(obj_tptr), 1188 *(obj_tptr+4), |
1189 ident, |
|
1149 tok2str(rsvp_obj_error_code_values,"unknown",error_code), 1150 error_code); 1151 switch (error_code) { 1152 case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING: 1153 printf(", Error Value: %s (%u)", 1154 tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value), 1155 error_value); 1156 break; | 1190 tok2str(rsvp_obj_error_code_values,"unknown",error_code), 1191 error_code); 1192 switch (error_code) { 1193 case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING: 1194 printf(", Error Value: %s (%u)", 1195 tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value), 1196 error_value); 1197 break; |
1198 case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE: 1199 printf(", Error Value: %s (%u)", 1200 tok2str(rsvp_obj_error_code_diffserv_te_values,"unknown",error_value), 1201 error_value); 1202 break; |
|
1157 default: 1158 printf(", Unknown Error Value (%u)", error_value); 1159 break; 1160 } 1161 obj_tlen-=8; 1162 obj_tptr+=8; 1163 break; 1164#ifdef INET6 1165 case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */ 1166 case RSVP_CTYPE_IPV6: 1167 if (obj_tlen < 20) | 1203 default: 1204 printf(", Unknown Error Value (%u)", error_value); 1205 break; 1206 } 1207 obj_tlen-=8; 1208 obj_tptr+=8; 1209 break; 1210#ifdef INET6 1211 case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */ 1212 case RSVP_CTYPE_IPV6: 1213 if (obj_tlen < 20) |
1168 return; | 1214 return-1; |
1169 error_code=*(obj_tptr+17); 1170 error_value=EXTRACT_16BITS(obj_tptr+18); | 1215 error_code=*(obj_tptr+17); 1216 error_value=EXTRACT_16BITS(obj_tptr+18); |
1171 printf("\n\t Error Node Adress: %s, Flags: [0x%02x]\n\t Error Code: %s (%u)", | 1217 printf("%s Error Node Address: %s, Flags: [0x%02x]%s Error Code: %s (%u)", 1218 ident, |
1172 ip6addr_string(obj_tptr), 1173 *(obj_tptr+16), | 1219 ip6addr_string(obj_tptr), 1220 *(obj_tptr+16), |
1221 ident, |
|
1174 tok2str(rsvp_obj_error_code_values,"unknown",error_code), 1175 error_code); 1176 1177 switch (error_code) { 1178 case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING: 1179 printf(", Error Value: %s (%u)", 1180 tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value), 1181 error_value); --- 9 unchanged lines hidden (view full) --- 1191 hexdump=TRUE; 1192 } 1193 break; 1194 1195 case RSVP_OBJ_PROPERTIES: 1196 switch(rsvp_obj_ctype) { 1197 case RSVP_CTYPE_1: 1198 if (obj_tlen < 4) | 1222 tok2str(rsvp_obj_error_code_values,"unknown",error_code), 1223 error_code); 1224 1225 switch (error_code) { 1226 case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING: 1227 printf(", Error Value: %s (%u)", 1228 tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value), 1229 error_value); --- 9 unchanged lines hidden (view full) --- 1239 hexdump=TRUE; 1240 } 1241 break; 1242 1243 case RSVP_OBJ_PROPERTIES: 1244 switch(rsvp_obj_ctype) { 1245 case RSVP_CTYPE_1: 1246 if (obj_tlen < 4) |
1199 return; | 1247 return-1; |
1200 padbytes = EXTRACT_16BITS(obj_tptr+2); | 1248 padbytes = EXTRACT_16BITS(obj_tptr+2); |
1201 printf("\n\t TLV count: %u, padding bytes: %u", | 1249 printf("%s TLV count: %u, padding bytes: %u", 1250 ident, |
1202 EXTRACT_16BITS(obj_tptr), 1203 padbytes); 1204 obj_tlen-=4; 1205 obj_tptr+=4; 1206 /* loop through as long there is anything longer than the TLV header (2) */ 1207 while(obj_tlen >= 2 + padbytes) { | 1251 EXTRACT_16BITS(obj_tptr), 1252 padbytes); 1253 obj_tlen-=4; 1254 obj_tptr+=4; 1255 /* loop through as long there is anything longer than the TLV header (2) */ 1256 while(obj_tlen >= 2 + padbytes) { |
1208 printf("\n\t %s TLV (0x%02x), length: %u", /* length includes header */ | 1257 printf("%s %s TLV (0x%02x), length: %u", /* length includes header */ 1258 ident, |
1209 tok2str(rsvp_obj_prop_tlv_values,"unknown",*obj_tptr), 1210 *obj_tptr, 1211 *(obj_tptr+1)); 1212 if (obj_tlen < *(obj_tptr+1)) | 1259 tok2str(rsvp_obj_prop_tlv_values,"unknown",*obj_tptr), 1260 *obj_tptr, 1261 *(obj_tptr+1)); 1262 if (obj_tlen < *(obj_tptr+1)) |
1213 return; | 1263 return-1; |
1214 print_unknown_data(obj_tptr+2,"\n\t\t",*(obj_tptr+1)-2); 1215 obj_tlen-=*(obj_tptr+1); 1216 obj_tptr+=*(obj_tptr+1); 1217 } 1218 break; 1219 default: 1220 hexdump=TRUE; 1221 } 1222 break; 1223 | 1264 print_unknown_data(obj_tptr+2,"\n\t\t",*(obj_tptr+1)-2); 1265 obj_tlen-=*(obj_tptr+1); 1266 obj_tptr+=*(obj_tptr+1); 1267 } 1268 break; 1269 default: 1270 hexdump=TRUE; 1271 } 1272 break; 1273 |
1274 case RSVP_OBJ_MESSAGE_ID: /* fall through */ 1275 case RSVP_OBJ_MESSAGE_ID_ACK: /* fall through */ 1276 case RSVP_OBJ_MESSAGE_ID_LIST: 1277 switch(rsvp_obj_ctype) { 1278 case RSVP_CTYPE_1: 1279 if (obj_tlen < 8) 1280 return-1; 1281 printf("%s Flags [0x%02x], epoch: %u", 1282 ident, 1283 *obj_tptr, 1284 EXTRACT_24BITS(obj_tptr+1)); 1285 obj_tlen-=4; 1286 obj_tptr+=4; 1287 /* loop through as long there are no messages left */ 1288 while(obj_tlen >= 4) { 1289 printf("%s Message-ID 0x%08x (%u)", 1290 ident, 1291 EXTRACT_32BITS(obj_tptr), 1292 EXTRACT_32BITS(obj_tptr)); 1293 obj_tlen-=4; 1294 obj_tptr+=4; 1295 } 1296 break; 1297 default: 1298 hexdump=TRUE; 1299 } 1300 break; 1301 |
|
1224 /* 1225 * FIXME those are the defined objects that lack a decoder 1226 * you are welcome to contribute code ;-) 1227 */ 1228 1229 case RSVP_OBJ_INTEGRITY: 1230 case RSVP_OBJ_SCOPE: 1231 case RSVP_OBJ_POLICY_DATA: | 1302 /* 1303 * FIXME those are the defined objects that lack a decoder 1304 * you are welcome to contribute code ;-) 1305 */ 1306 1307 case RSVP_OBJ_INTEGRITY: 1308 case RSVP_OBJ_SCOPE: 1309 case RSVP_OBJ_POLICY_DATA: |
1232 case RSVP_OBJ_MESSAGE_ID: 1233 case RSVP_OBJ_MESSAGE_ID_ACK: 1234 case RSVP_OBJ_MESSAGE_ID_LIST: | |
1235 case RSVP_OBJ_LABEL_SET: 1236 case RSVP_OBJ_ACCEPT_LABEL_SET: 1237 case RSVP_OBJ_PROTECTION: 1238 default: 1239 if (vflag <= 1) | 1310 case RSVP_OBJ_LABEL_SET: 1311 case RSVP_OBJ_ACCEPT_LABEL_SET: 1312 case RSVP_OBJ_PROTECTION: 1313 default: 1314 if (vflag <= 1) |
1240 print_unknown_data(obj_tptr,"\n\t ",obj_tlen); | 1315 print_unknown_data(obj_tptr,"\n\t ",obj_tlen); /* FIXME indentation */ |
1241 break; 1242 } | 1316 break; 1317 } |
1243 /* do we want to see an additionally hexdump ? */ | 1318 /* do we also want to see a hex dump ? */ |
1244 if (vflag > 1 || hexdump==TRUE) | 1319 if (vflag > 1 || hexdump==TRUE) |
1245 print_unknown_data(tptr+sizeof(sizeof(struct rsvp_object_header)),"\n\t ", | 1320 print_unknown_data(tptr+sizeof(sizeof(struct rsvp_object_header)),"\n\t ", /* FIXME indentation */ |
1246 rsvp_obj_len-sizeof(struct rsvp_object_header)); 1247 1248 tptr+=rsvp_obj_len; 1249 tlen-=rsvp_obj_len; 1250 } | 1321 rsvp_obj_len-sizeof(struct rsvp_object_header)); 1322 1323 tptr+=rsvp_obj_len; 1324 tlen-=rsvp_obj_len; 1325 } |
1326 return 0; 1327trunc: 1328 printf("\n\t\t packet exceeded snapshot"); 1329 return -1; 1330} 1331 1332 1333void 1334rsvp_print(register const u_char *pptr, register u_int len) { 1335 1336 const struct rsvp_common_header *rsvp_com_header; 1337 const u_char *tptr,*subtptr; 1338 u_short tlen,subtlen; 1339 1340 tptr=pptr; 1341 1342 rsvp_com_header = (const struct rsvp_common_header *)pptr; 1343 TCHECK(*rsvp_com_header); 1344 1345 /* 1346 * Sanity checking of the header. 1347 */ 1348 if (RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags) != RSVP_VERSION) { 1349 printf("ERROR: RSVP version %u packet not supported", 1350 RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags)); 1351 return; 1352 } 1353 1354 /* in non-verbose mode just lets print the basic Message Type*/ 1355 if (vflag < 1) { 1356 printf("RSVPv%u %s Message, length: %u", 1357 RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags), 1358 tok2str(rsvp_msg_type_values, "unknown (%u)",rsvp_com_header->msg_type), 1359 len); 1360 return; 1361 } 1362 1363 /* ok they seem to want to know everything - lets fully decode it */ 1364 1365 tlen=EXTRACT_16BITS(rsvp_com_header->length); 1366 1367 printf("\n\tRSVPv%u %s Message (%u), Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x", 1368 RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags), 1369 tok2str(rsvp_msg_type_values, "unknown, type: %u",rsvp_com_header->msg_type), 1370 rsvp_com_header->msg_type, 1371 bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(rsvp_com_header->version_flags)), 1372 tlen, 1373 rsvp_com_header->ttl, 1374 EXTRACT_16BITS(rsvp_com_header->checksum)); 1375 1376 if (tlen < sizeof(const struct rsvp_common_header)) { 1377 printf("ERROR: common header too short %u < %lu", tlen, 1378 (unsigned long)sizeof(const struct rsvp_common_header)); 1379 return; 1380 } 1381 1382 tptr+=sizeof(const struct rsvp_common_header); 1383 tlen-=sizeof(const struct rsvp_common_header); 1384 1385 switch(rsvp_com_header->msg_type) { 1386 1387 case RSVP_MSGTYPE_AGGREGATE: 1388 while(tlen > 0) { 1389 subtptr=tptr; 1390 rsvp_com_header = (const struct rsvp_common_header *)subtptr; 1391 TCHECK(*rsvp_com_header); 1392 1393 /* 1394 * Sanity checking of the header. 1395 */ 1396 if (RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags) != RSVP_VERSION) { 1397 printf("ERROR: RSVP version %u packet not supported", 1398 RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags)); 1399 return; 1400 } 1401 subtlen=EXTRACT_16BITS(rsvp_com_header->length); 1402 1403 printf("\n\t RSVPv%u %s Message (%u), Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x", 1404 RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags), 1405 tok2str(rsvp_msg_type_values, "unknown, type: %u",rsvp_com_header->msg_type), 1406 rsvp_com_header->msg_type, 1407 bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(rsvp_com_header->version_flags)), 1408 subtlen, 1409 rsvp_com_header->ttl, 1410 EXTRACT_16BITS(rsvp_com_header->checksum)); 1411 1412 if (subtlen < sizeof(const struct rsvp_common_header)) { 1413 printf("ERROR: common header too short %u < %lu", subtlen, 1414 (unsigned long)sizeof(const struct rsvp_common_header)); 1415 return; 1416 } 1417 1418 subtptr+=sizeof(const struct rsvp_common_header); 1419 subtlen-=sizeof(const struct rsvp_common_header); 1420 1421 if (rsvp_obj_print(subtptr,"\n\t ", subtlen) == -1) 1422 return; 1423 1424 tptr+=subtlen+sizeof(const struct rsvp_common_header); 1425 tlen-=subtlen+sizeof(const struct rsvp_common_header); 1426 } 1427 1428 break; 1429 1430 case RSVP_MSGTYPE_PATH: 1431 case RSVP_MSGTYPE_RESV: 1432 case RSVP_MSGTYPE_PATHERR: 1433 case RSVP_MSGTYPE_RESVERR: 1434 case RSVP_MSGTYPE_PATHTEAR: 1435 case RSVP_MSGTYPE_RESVTEAR: 1436 case RSVP_MSGTYPE_RESVCONF: 1437 case RSVP_MSGTYPE_HELLO_OLD: 1438 case RSVP_MSGTYPE_HELLO: 1439 case RSVP_MSGTYPE_ACK: 1440 case RSVP_MSGTYPE_SREFRESH: 1441 if (rsvp_obj_print(tptr,"\n\t ", tlen) == -1) 1442 return; 1443 break; 1444 1445 default: 1446 print_unknown_data(tptr,"\n\t ",tlen); 1447 break; 1448 } 1449 |
|
1251 return; 1252trunc: 1253 printf("\n\t\t packet exceeded snapshot"); 1254} | 1450 return; 1451trunc: 1452 printf("\n\t\t packet exceeded snapshot"); 1453} |