12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1998-2007 The TCPDUMP project
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions retain the above copyright notice and this paragraph
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * in its entirety, and (2) distributions including binary code include
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the above copyright notice and this paragraph in its entirety in
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the documentation or other materials provided with the distribution.
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FOR A PARTICULAR PURPOSE.
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Original code by Hannes Gredler (hannes@juniper.net)
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ =
2053f17a9db278d33517d9888dd77848f554522a38JP Abgrall    "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.50 2008-08-16 11:36:20 hannes Exp $";
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h"
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h>
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h>
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdlib.h>
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h>
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h"
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h"
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h"
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ethertype.h"
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "gmpls.h"
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "af.h"
3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "signature.h"
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * RFC 2205 common header
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *               0             1              2             3
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        +-------------+-------------+-------------+-------------+
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        | Vers | Flags|  Msg Type   |       RSVP Checksum       |
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        +-------------+-------------+-------------+-------------+
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        |  Send_TTL   | (Reserved)  |        RSVP Length        |
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        +-------------+-------------+-------------+-------------+
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rsvp_common_header {
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t version_flags;
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t msg_type;
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t checksum[2];
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ttl;
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t reserved;
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t length[2];
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * RFC2205 object header
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *               0             1              2             3
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        +-------------+-------------+-------------+-------------+
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        |       Length (bytes)      |  Class-Num  |   C-Type    |
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        +-------------+-------------+-------------+-------------+
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        |                                                       |
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        //                  (Object contents)                   //
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        |                                                       |
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *        +-------------+-------------+-------------+-------------+
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rsvp_object_header {
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t length[2];
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t class_num;
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ctype;
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_VERSION            1
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_EXTRACT_FLAGS(x)   ((x)&0x0f)
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_PATH       1
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_RESV       2
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_PATHERR    3
892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_RESVERR    4
902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_PATHTEAR   5
912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_RESVTEAR   6
922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_RESVCONF   7
932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_MSGTYPE_AGGREGATE  12
942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_MSGTYPE_ACK        13
952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_MSGTYPE_HELLO_OLD  14      /* ancient Hellos */
962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_MSGTYPE_SREFRESH   15
972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_MSGTYPE_HELLO      20
982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_msg_type_values[] = {
1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_PATH,	"Path" },
1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_RESV,	"Resv" },
1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_PATHERR,	"PathErr" },
1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_RESVERR,	"ResvErr" },
1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_PATHTEAR,	"PathTear" },
1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_RESVTEAR,	"ResvTear" },
1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_RESVCONF,	"ResvConf" },
1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_AGGREGATE,	"Aggregate" },
1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_ACK,	        "Acknowledgement" },
1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_HELLO_OLD,	"Hello (Old)" },
1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_SREFRESH,	"Refresh" },
1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_MSGTYPE_HELLO,	"Hello" },
1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_header_flag_values[] = {
1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x01,	              "Refresh reduction capable" }, /* rfc2961 */
1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_SESSION            1   /* rfc2205 */
1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_RSVP_HOP           3   /* rfc2205, rfc3473 */
1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_INTEGRITY          4   /* rfc2747 */
1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_TIME_VALUES        5   /* rfc2205 */
1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_ERROR_SPEC         6
1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_SCOPE              7
1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_STYLE              8   /* rfc2205 */
1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_FLOWSPEC           9   /* rfc2215 */
1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_FILTERSPEC         10  /* rfc2215 */
1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_SENDER_TEMPLATE    11
1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_SENDER_TSPEC       12  /* rfc2215 */
1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_ADSPEC             13  /* rfc2215 */
1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_POLICY_DATA        14
1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_CONFIRM            15  /* rfc2205 */
1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_LABEL              16  /* rfc3209 */
1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_LABEL_REQ          19  /* rfc3209 */
1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_ERO                20  /* rfc3209 */
1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_RRO                21  /* rfc3209 */
1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_HELLO              22  /* rfc3209 */
1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_MESSAGE_ID         23  /* rfc2961 */
1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_MESSAGE_ID_ACK     24  /* rfc2961 */
1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_MESSAGE_ID_LIST    25  /* rfc2961 */
1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_RECOVERY_LABEL     34  /* rfc3473 */
1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_UPSTREAM_LABEL     35  /* rfc3473 */
1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_LABEL_SET          36  /* rfc3473 */
1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_PROTECTION         37  /* rfc3473 */
14653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define RSVP_OBJ_S2L                50  /* rfc4875 */
1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_DETOUR             63  /* draft-ietf-mpls-rsvp-lsp-fastreroute-07 */
1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_CLASSTYPE          66  /* rfc4124 */
1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_CLASSTYPE_OLD      125 /* draft-ietf-tewg-diff-te-proto-07 */
1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_SUGGESTED_LABEL    129 /* rfc3473 */
1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_ACCEPT_LABEL_SET   130 /* rfc3473 */
1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_RESTART_CAPABILITY 131 /* rfc3473 */
1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_NOTIFY_REQ         195 /* rfc3473 */
1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_ADMIN_STATUS       196 /* rfc3473 */
1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_PROPERTIES         204 /* juniper proprietary */
1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_FASTREROUTE        205 /* draft-ietf-mpls-rsvp-lsp-fastreroute-07 */
1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_SESSION_ATTRIBUTE  207 /* rfc3209 */
1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_GENERALIZED_UNI    229 /* OIF RSVP extensions UNI 1.0 Signaling, Rel. 2 */
1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_CALL_ID            230 /* rfc3474 */
1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_CALL_OPS           236 /* rfc3474 */
1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_obj_values[] = {
1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_SESSION,            "Session" },
1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_RSVP_HOP,           "RSVP Hop" },
1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_INTEGRITY,          "Integrity" },
1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_TIME_VALUES,        "Time Values" },
1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ERROR_SPEC,         "Error Spec" },
1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_SCOPE,              "Scope" },
1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_STYLE,              "Style" },
1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_FLOWSPEC,           "Flowspec" },
1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_FILTERSPEC,         "FilterSpec" },
1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_SENDER_TEMPLATE,    "Sender Template" },
1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_SENDER_TSPEC,       "Sender TSpec" },
1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ADSPEC,             "Adspec" },
1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_POLICY_DATA,        "Policy Data" },
1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_CONFIRM,            "Confirm" },
1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_LABEL,              "Label" },
1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_LABEL_REQ,          "Label Request" },
1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ERO,                "ERO" },
1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_RRO,                "RRO" },
1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_HELLO,              "Hello" },
1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_MESSAGE_ID,         "Message ID" },
1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_MESSAGE_ID_ACK,     "Message ID Ack" },
1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_MESSAGE_ID_LIST,    "Message ID List" },
1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_RECOVERY_LABEL,     "Recovery Label" },
1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_UPSTREAM_LABEL,     "Upstream Label" },
1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_LABEL_SET,          "Label Set" },
1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ACCEPT_LABEL_SET,   "Acceptable Label Set" },
1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_DETOUR,             "Detour" },
1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_CLASSTYPE,          "Class Type" },
1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_CLASSTYPE_OLD,      "Class Type (old)" },
1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_SUGGESTED_LABEL,    "Suggested Label" },
1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_PROPERTIES,         "Properties" },
1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_FASTREROUTE,        "Fast Re-Route" },
1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_SESSION_ATTRIBUTE,  "Session Attribute" },
1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_GENERALIZED_UNI,    "Generalized UNI" },
1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_CALL_ID,            "Call-ID" },
1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_CALL_OPS,           "Call Capability" },
1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_RESTART_CAPABILITY, "Restart Capability" },
2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_NOTIFY_REQ,         "Notify Request" },
2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_PROTECTION,         "Protection" },
2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ADMIN_STATUS,       "Administrative Status" },
20353f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { RSVP_OBJ_S2L,                "Sub-LSP to LSP" },
2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_CTYPE_IPV4        1
2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_CTYPE_IPV6        2
2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_CTYPE_TUNNEL_IPV4 7
2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_CTYPE_TUNNEL_IPV6 8
2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_CTYPE_UNI_IPV4    11 /* OIF RSVP extensions UNI 1.0 Signaling Rel. 2 */
2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_CTYPE_1           1
2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_CTYPE_2           2
2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_CTYPE_3           3
2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_CTYPE_4           4
21653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define RSVP_CTYPE_12         12
21753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define RSVP_CTYPE_13         13
21853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define RSVP_CTYPE_14         14
2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the ctypes are not globally unique so for
2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * translating it to strings we build a table based
2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * on objects offsetted by the ctype
2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_ctype_values[] = {
2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_IPV4,	             "IPv4" },
2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_IPV6,	             "IPv6" },
2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_3,	             "IPv4 plus opt. TLVs" },
2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_4,	             "IPv6 plus opt. TLVs" },
2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_NOTIFY_REQ+RSVP_CTYPE_IPV4,	             "IPv4" },
2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_NOTIFY_REQ+RSVP_CTYPE_IPV6,	             "IPv6" },
2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_CONFIRM+RSVP_CTYPE_IPV4,	             "IPv4" },
2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_CONFIRM+RSVP_CTYPE_IPV6,	             "IPv6" },
2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_TIME_VALUES+RSVP_CTYPE_1,	             "1" },
2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FLOWSPEC+RSVP_CTYPE_1,	             "obsolete" },
2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FLOWSPEC+RSVP_CTYPE_2,	             "IntServ" },
2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SENDER_TSPEC+RSVP_CTYPE_2,	             "IntServ" },
2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_ADSPEC+RSVP_CTYPE_2,	                     "IntServ" },
2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_IPV4,	             "IPv4" },
2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_IPV6,	             "IPv6" },
2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_3,	             "IPv6 Flow-label" },
2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_TUNNEL_IPV4,	     "Tunnel IPv4" },
24453f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_12,                 "IPv4 P2MP LSP Tunnel" },
24553f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_13,                 "IPv6 P2MP LSP Tunnel" },
2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV4,	             "IPv4" },
2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV6,	             "IPv6" },
2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_TUNNEL_IPV4,           "Tunnel IPv4" },
2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_UNI_IPV4,              "UNI IPv4" },
25053f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_13,                    "IPv4 P2MP LSP Tunnel" },
25153f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_14,                    "IPv6 P2MP LSP Tunnel" },
2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV4,          "IPv4" },
2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV6,          "IPv6" },
2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_TUNNEL_IPV4,   "Tunnel IPv4" },
25553f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_12,            "IPv4 P2MP LSP Tunnel" },
25653f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_13,            "IPv6 P2MP LSP Tunnel" },
2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_MESSAGE_ID+RSVP_CTYPE_1,                  "1" },
2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_1,              "Message id ack" },
2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_2,              "Message id nack" },
2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_MESSAGE_ID_LIST+RSVP_CTYPE_1,             "1" },
2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_STYLE+RSVP_CTYPE_1,                       "1" },
2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_1,                       "Hello Request" },
2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_2,                       "Hello Ack" },
2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_1,	             "without label range" },
2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_2,	             "with ATM label range" },
2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_3,                   "with FR label range" },
2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_4,                   "Generalized Label" },
2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_1,                       "Label" },
2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_2,                       "Generalized Label" },
2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_3,                       "Waveband Switching" },
2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_1,             "Label" },
2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_2,             "Generalized Label" },
2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_3,             "Waveband Switching" },
2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_1,              "Label" },
2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_2,              "Generalized Label" },
2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_3,              "Waveband Switching" },
2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_1,              "Label" },
2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_2,              "Generalized Label" },
2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_3,              "Waveband Switching" },
2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_ERO+RSVP_CTYPE_IPV4,                      "IPv4" },
2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RRO+RSVP_CTYPE_IPV4,                      "IPv4" },
2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_IPV4,               "IPv4" },
2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_IPV6,               "IPv6" },
2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_3,                  "IPv4 plus opt. TLVs" },
2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_4,                  "IPv6 plus opt. TLVs" },
2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_RESTART_CAPABILITY+RSVP_CTYPE_1,          "IPv4" },
2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_SESSION_ATTRIBUTE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FASTREROUTE+RSVP_CTYPE_TUNNEL_IPV4,       "Tunnel IPv4" }, /* old style*/
2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_FASTREROUTE+RSVP_CTYPE_1,                 "1" }, /* new style */
2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_DETOUR+RSVP_CTYPE_TUNNEL_IPV4,            "Tunnel IPv4" },
2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_PROPERTIES+RSVP_CTYPE_1,                  "1" },
2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_ADMIN_STATUS+RSVP_CTYPE_1,                "1" },
2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_CLASSTYPE+RSVP_CTYPE_1,                   "1" },
2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_CLASSTYPE_OLD+RSVP_CTYPE_1,               "1" },
2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_LABEL_SET+RSVP_CTYPE_1,                   "1" },
2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 256*RSVP_OBJ_GENERALIZED_UNI+RSVP_CTYPE_1,             "1" },
29753f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_S2L+RSVP_CTYPE_IPV4,                      "IPv4 sub-LSP" },
29853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 256*RSVP_OBJ_S2L+RSVP_CTYPE_IPV6,                      "IPv6 sub-LSP" },
2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rsvp_obj_integrity_t {
3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t flags;
3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t res;
3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t key_id[6];
3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t sequence[8];
3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t digest[16];
3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_obj_integrity_flag_values[] = {
3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x80, "Handshake" },
3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rsvp_obj_frr_t {
3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t setup_prio;
3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t hold_prio;
3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t hop_limit;
3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t flags;
3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t bandwidth[4];
3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t include_any[4];
3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t exclude_any[4];
3232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t include_all[4];
3242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_XRO_MASK_SUBOBJ(x)   ((x)&0x7f)
3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_XRO_MASK_LOOSE(x)    ((x)&0x80)
3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_XRO_RES       0
3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_XRO_IPV4      1
3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_XRO_IPV6      2
33353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	RSVP_OBJ_XRO_LABEL     3
3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_XRO_ASN       32
3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RSVP_OBJ_XRO_MPLS      64
3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_obj_xro_values[] = {
3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_XRO_RES,	      "Reserved" },
3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_XRO_IPV4,      "IPv4 prefix" },
3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_XRO_IPV6,      "IPv6 prefix" },
34153f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { RSVP_OBJ_XRO_LABEL,     "Label" },
3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_XRO_ASN,       "Autonomous system number" },
3432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_XRO_MPLS,      "MPLS label switched path termination" },
3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* draft-ietf-mpls-rsvp-lsp-fastreroute-07.txt */
3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_obj_rro_flag_values[] = {
3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x01,	              "Local protection available" },
3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x02,                   "Local protection in use" },
3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x04,                   "Bandwidth protection" },
3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x08,                   "Node protection" },
3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
3542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
35653f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* RFC3209 */
35753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rsvp_obj_rro_label_flag_values[] = {
35853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0x01,                   "Global" },
35953f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0, NULL}
36053f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
36153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_resstyle_values[] = {
3632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 17,	              "Wildcard Filter" },
3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 10,                     "Fixed Filter" },
3652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 18,                     "Shared Explicit" },
3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_INTSERV_GUARANTEED_SERV 2
3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_INTSERV_CONTROLLED_LOAD 5
3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_intserv_service_type_values[] = {
3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 1,                                "Default/Global Information" },
3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_INTSERV_GUARANTEED_SERV, "Guaranteed Service" },
3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_INTSERV_CONTROLLED_LOAD,	"Controlled Load" },
3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_intserv_parameter_id_values[] = {
3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 4,                     "IS hop cnt" },
3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 6,                     "Path b/w estimate" },
3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 8,                     "Minimum path latency" },
3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 10,                    "Composed MTU" },
3842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 127,                   "Token Bucket TSpec" },
3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 130,                   "Guaranteed Service RSpec" },
3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 133,                   "End-to-end composed value for C" },
3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 134,                   "End-to-end composed value for D" },
3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 135,                   "Since-last-reshaping point composed C" },
3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 136,                   "Since-last-reshaping point composed D" },
3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
39353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rsvp_session_attribute_flag_values[] = {
39453f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0x01,	              "Local Protection" },
39553f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0x02,                   "Label Recording" },
39653f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0x04,                   "SE Style" },
39753f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0x08,                   "Bandwidth protection" }, /* RFC4090 */
39853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0x10,                   "Node protection" },      /* RFC4090 */
3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
40253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rsvp_obj_prop_tlv_values[] = {
4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x01,                   "Cos" },
4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x02,                   "Metric 1" },
4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x04,                   "Metric 2" },
4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x08,                   "CCC Status" },
4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x10,                   "Path Type" },
4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_ERROR_SPEC_CODE_ROUTING 24
4122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY  25
4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE 28
4142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE_OLD 125
4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
41653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rsvp_obj_error_code_values[] = {
4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ERROR_SPEC_CODE_ROUTING, "Routing Problem" },
4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY,  "Notify Error" },
4192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE, "Diffserv TE Error" },
4202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE_OLD, "Diffserv TE Error (Old)" },
4212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
42453f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rsvp_obj_error_code_routing_values[] = {
4252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 1,                      "Bad EXPLICIT_ROUTE object" },
4262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 2,                      "Bad strict node" },
4272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 3,                      "Bad loose node" },
4282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 4,                      "Bad initial subobject" },
4292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 5,                      "No route available toward destination" },
4302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 6,                      "Unacceptable label value" },
4312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 7,                      "RRO indicated routing loops" },
4322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 8,                      "non-RSVP-capable router in the path" },
4332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 9,                      "MPLS label allocation failure" },
4342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 10,                     "Unsupported L3PID" },
4352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
43853f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rsvp_obj_error_code_diffserv_te_values[] = {
4392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 1,                      "Unexpected CT object" },
4402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 2,                      "Unsupported CT" },
4412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 3,                      "Invalid CT value" },
4422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 4,                      "CT/setup priority do not form a configured TE-Class" },
4432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 5,                      "CT/holding priority do not form a configured TE-Class" },
4442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 6,                      "CT/setup priority and CT/holding priority do not form a configured TE-Class" },
4452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 7,                      "Inconsistency between signaled PSC and signaled CT" },
4462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 8,                      "Inconsistency between signaled PHBs and signaled CT" },
4472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project   { 0, NULL}
4482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* rfc3473 / rfc 3471 */
4512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_obj_admin_status_flag_values[] = {
4522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x80000000, "Reflect" },
4532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x00000004, "Testing" },
4542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x00000002, "Admin-down" },
4552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0x00000001, "Delete-in-progress" },
4562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* label set actions - rfc3471 */
4602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LABEL_SET_INCLUSIVE_LIST  0
4612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LABEL_SET_EXCLUSIVE_LIST  1
4622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LABEL_SET_INCLUSIVE_RANGE 2
4632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LABEL_SET_EXCLUSIVE_RANGE 3
4642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_obj_label_set_action_values[] = {
4662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LABEL_SET_INCLUSIVE_LIST, "Inclusive list" },
4672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LABEL_SET_EXCLUSIVE_LIST, "Exclusive list" },
4682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LABEL_SET_INCLUSIVE_RANGE, "Inclusive range" },
4692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LABEL_SET_EXCLUSIVE_RANGE, "Exclusive range" },
4702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* OIF RSVP extensions UNI 1.0 Signaling, release 2 */
4742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS	    1
4752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS 2
4762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_GEN_UNI_SUBOBJ_DIVERSITY		    3
4772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL            4
4782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL           5
4792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rsvp_obj_generalized_uni_values[] = {
4812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS, "Source TNA address" },
4822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS, "Destination TNA address" },
4832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_GEN_UNI_SUBOBJ_DIVERSITY, "Diversity" },
4842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL, "Egress label" },
4852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL, "Service level" },
4862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int rsvp_intserv_print(const u_char *, u_short);
4902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
4922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this is a dissector for all the intserv defined
4932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * specs as defined per rfc2215
4942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * it is called from various rsvp objects;
4952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * returns the amount of bytes being processed
4962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
4972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int
4982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrsvp_intserv_print(const u_char *tptr, u_short obj_tlen) {
4992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    int parameter_id,parameter_length;
5012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
5022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	float f;
5032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int32_t i;
5042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } bw;
5052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (obj_tlen < 4)
5072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        return 0;
5082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    parameter_id = *(tptr);
5092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    parameter_length = EXTRACT_16BITS(tptr+2)<<2; /* convert wordcount to bytecount */
5102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\t      Parameter ID: %s (%u), length: %u, Flags: [0x%02x]",
5122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           tok2str(rsvp_intserv_parameter_id_values,"unknown",parameter_id),
5132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           parameter_id,
5142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           parameter_length,
5152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           *(tptr+1));
5162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (obj_tlen < parameter_length+4)
5182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        return 0;
5192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    switch(parameter_id) { /* parameter_id */
5202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 4:
5222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project       /*
5232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |    4 (e)      |    (f)        |           1 (g)               |
5252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |        IS hop cnt (32-bit unsigned integer)                   |
5272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        */
5292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (parameter_length == 4)
5302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tIS hop count: %u", EXTRACT_32BITS(tptr+4));
5312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
5322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 6:
5342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project       /*
5352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |    6 (h)      |    (i)        |           1 (j)               |
5372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Path b/w estimate  (32-bit IEEE floating point number)       |
5392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        */
5412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (parameter_length == 4) {
5422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            bw.i = EXTRACT_32BITS(tptr+4);
5432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tPath b/w estimate: %.10g Mbps", bw.f/125000);
5442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
5452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
5462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 8:
5482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project       /*
5492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |     8 (k)     |    (l)        |           1 (m)               |
5512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |        Minimum path latency (32-bit integer)                  |
5532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        */
5552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (parameter_length == 4) {
5562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tMinimum path latency: ");
5572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            if (EXTRACT_32BITS(tptr+4) == 0xffffffff)
5582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("don't care");
5592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            else
5602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%u", EXTRACT_32BITS(tptr+4));
5612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
5622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
5632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 10:
5652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project       /*
5672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |     10 (n)    |      (o)      |           1 (p)               |
5692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |      Composed MTU (32-bit unsigned integer)                   |
5712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        */
5732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (parameter_length == 4)
5742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tComposed MTU: %u bytes", EXTRACT_32BITS(tptr+4));
5752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
5762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 127:
5772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project       /*
5782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |   127 (e)     |    0 (f)      |             5 (g)             |
5802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Token Bucket Rate [r] (32-bit IEEE floating point number)    |
5822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Token Bucket Size [b] (32-bit IEEE floating point number)    |
5842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Peak Data Rate [p] (32-bit IEEE floating point number)       |
5862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Minimum Policed Unit [m] (32-bit integer)                    |
5882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Maximum Packet Size [M]  (32-bit integer)                    |
5902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        */
5922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (parameter_length == 20) {
5942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            bw.i = EXTRACT_32BITS(tptr+4);
5952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tToken Bucket Rate: %.10g Mbps", bw.f/125000);
5962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            bw.i = EXTRACT_32BITS(tptr+8);
5972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tToken Bucket Size: %.10g bytes", bw.f);
5982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            bw.i = EXTRACT_32BITS(tptr+12);
5992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tPeak Data Rate: %.10g Mbps", bw.f/125000);
6002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tMinimum Policed Unit: %u bytes", EXTRACT_32BITS(tptr+16));
6012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tMaximum Packet Size: %u bytes", EXTRACT_32BITS(tptr+20));
6022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
6032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
6042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 130:
6062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project       /*
6072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |     130 (h)   |    0 (i)      |            2 (j)              |
6092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Rate [R]  (32-bit IEEE floating point number)                |
6112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * |  Slack Term [S]  (32-bit integer)                             |
6132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        */
6152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (parameter_length == 8) {
6172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            bw.i = EXTRACT_32BITS(tptr+4);
6182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tRate: %.10g Mbps", bw.f/125000);
6192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tSlack Term: %u", EXTRACT_32BITS(tptr+8));
6202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
6212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
6222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 133:
6242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 134:
6252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 135:
6262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case 136:
6272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (parameter_length == 4)
6282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t\tValue: %u", EXTRACT_32BITS(tptr+4));
6292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
6302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    default:
6322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (vflag <= 1)
6332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            print_unknown_data(tptr+4,"\n\t\t",parameter_length);
6342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
6352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    return (parameter_length+4); /* header length 4 bytes */
6362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}
6372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int
63953f17a9db278d33517d9888dd77848f554522a38JP Abgrallrsvp_obj_print (const u_char *pptr
64053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_LIBCRYPTO
64153f17a9db278d33517d9888dd77848f554522a38JP Abgrall_U_
64253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
64353f17a9db278d33517d9888dd77848f554522a38JP Abgrall, u_int plen
64453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_LIBCRYPTO
64553f17a9db278d33517d9888dd77848f554522a38JP Abgrall_U_
64653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
64753f17a9db278d33517d9888dd77848f554522a38JP Abgrall, const u_char *tptr,
64853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                const char *ident, u_int tlen) {
6492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    const struct rsvp_object_header *rsvp_obj_header;
6512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    const u_char *obj_tptr;
6522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
6532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct rsvp_obj_integrity_t *rsvp_obj_integrity;
6542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct rsvp_obj_frr_t *rsvp_obj_frr;
6552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } obj_ptr;
6562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_short rsvp_obj_len,rsvp_obj_ctype,obj_tlen,intserv_serv_tlen;
65853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    int hexdump,processed,padbytes,error_code,error_value,i,sigcheck;
6592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
6602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	float f;
6612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int32_t i;
6622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } bw;
6632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t namelen;
6642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int action, subchannel;
6662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    while(tlen>=sizeof(struct rsvp_object_header)) {
6682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* did we capture enough for fully decoding the object header ? */
6692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (!TTEST2(*tptr, sizeof(struct rsvp_object_header)))
6702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            goto trunc;
6712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        rsvp_obj_header = (const struct rsvp_object_header *)tptr;
6732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        rsvp_obj_len=EXTRACT_16BITS(rsvp_obj_header->length);
6742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        rsvp_obj_ctype=rsvp_obj_header->ctype;
6752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if(rsvp_obj_len % 4) {
6772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("%sERROR: object header size %u not a multiple of 4", ident, rsvp_obj_len);
6782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            return -1;
6792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
6802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if(rsvp_obj_len < sizeof(struct rsvp_object_header)) {
6812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("%sERROR: object header too short %u < %lu", ident, rsvp_obj_len,
6822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   (unsigned long)sizeof(const struct rsvp_object_header));
6832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            return -1;
6842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
6852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("%s%s Object (%u) Flags: [%s",
6872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               ident,
6882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               tok2str(rsvp_obj_values,
6892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       "Unknown",
6902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       rsvp_obj_header->class_num),
6912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               rsvp_obj_header->class_num,
6922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               ((rsvp_obj_header->class_num)&0x80) ? "ignore" : "reject");
6932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (rsvp_obj_header->class_num > 128)
6952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf(" %s",
6962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   ((rsvp_obj_header->class_num)&0x40) ? "and forward" : "silently");
6972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf(" if unknown], Class-Type: %s (%u), length: %u",
6992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               tok2str(rsvp_ctype_values,
7002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       "Unknown",
7012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ((rsvp_obj_header->class_num)<<8)+rsvp_obj_ctype),
7022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               rsvp_obj_ctype,
7032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               rsvp_obj_len);
7042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if(tlen < rsvp_obj_len) {
7062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("%sERROR: object goes past end of objects TLV", ident);
7072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            return -1;
7082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
7092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        obj_tptr=tptr+sizeof(struct rsvp_object_header);
7112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        obj_tlen=rsvp_obj_len-sizeof(struct rsvp_object_header);
7122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* did we capture enough for fully decoding the object ? */
7142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (!TTEST2(*tptr, rsvp_obj_len))
7152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            return -1;
7162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        hexdump=FALSE;
7172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        switch(rsvp_obj_header->class_num) {
7192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_SESSION:
7202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
7212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
7222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
7232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return -1;
7242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv4 DestAddress: %s, Protocol ID: 0x%02x",
7252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
7262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
7272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *(obj_tptr+sizeof(struct in_addr)));
7282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Flags: [0x%02x], DestPort %u",
7292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
7302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *(obj_tptr+5),
7312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+6));
7322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
7332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
7342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
7352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
7362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV6:
7372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 20)
7382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return -1;
7392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv6 DestAddress: %s, Protocol ID: 0x%02x",
7402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
7412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr),
7422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *(obj_tptr+sizeof(struct in6_addr)));
7432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Flags: [0x%02x], DestPort %u",
7442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
7452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *(obj_tptr+sizeof(struct in6_addr)+1),
7462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+sizeof(struct in6_addr)+2));
7472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=20;
7482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=20;
7492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
7502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV6:
7522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 36)
7532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return -1;
7542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv6 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
7552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
7562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr),
7572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+18),
7582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr+20));
7592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=36;
7602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=36;
7612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
76253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
76353f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_14: /* IPv6 p2mp LSP Tunnel */
76453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 26)
76553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return -1;
76653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  IPv6 P2MP LSP ID: 0x%08x, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
76753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
76853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_32BITS(obj_tptr),
76953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+6),
77053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ip6addr_string(obj_tptr+8));
77153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=26;
77253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=26;
77353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
7742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
77553f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_13: /* IPv4 p2mp LSP Tunnel */
77653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 12)
77753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return -1;
77853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  IPv4 P2MP LSP ID: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
77953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
78053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ipaddr_string(obj_tptr),
78153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+6),
78253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ipaddr_string(obj_tptr+8));
78353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=12;
78453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=12;
78553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
7862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV4:
7872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_UNI_IPV4:
7882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 12)
7892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return -1;
7902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv4 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
7912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
7922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
7932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+6),
7942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr+8));
7952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=12;
7962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=12;
7972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
7982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
7992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
8002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
8012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
8022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_CONFIRM:
8042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
8052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
8062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < sizeof(struct in_addr))
8072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return -1;
8082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv4 Receiver Address: %s",
8092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
8102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr));
8112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=sizeof(struct in_addr);
8122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=sizeof(struct in_addr);
8132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
8152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV6:
8162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < sizeof(struct in6_addr))
8172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return -1;
8182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv6 Receiver Address: %s",
8192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
8202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr));
8212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=sizeof(struct in6_addr);
8222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=sizeof(struct in6_addr);
8232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
8252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
8262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
8272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
8282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
8292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_NOTIFY_REQ:
8312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
8322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
8332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < sizeof(struct in_addr))
8342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return -1;
8352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv4 Notify Node Address: %s",
8362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
8372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr));
8382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=sizeof(struct in_addr);
8392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=sizeof(struct in_addr);
8402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
8422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV6:
8432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < sizeof(struct in6_addr))
8442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
8452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv6 Notify Node Address: %s",
8462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
8472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr));
8482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=sizeof(struct in6_addr);
8492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=sizeof(struct in6_addr);
8502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
8522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
8532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
8542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
8552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
8562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_SUGGESTED_LABEL: /* fall through */
8582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_UPSTREAM_LABEL:  /* fall through */
8592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_RECOVERY_LABEL:  /* fall through */
8602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_LABEL:
8612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
8622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
8632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while(obj_tlen >= 4 ) {
8642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s  Label: %u", ident, EXTRACT_32BITS(obj_tptr));
8652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=4;
8662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=4;
8672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
8682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_2:
8702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
8712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
8722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Generalized Label: %u",
8732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
8742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr));
8752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
8762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
8772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_3:
8792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 12)
8802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
8812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Waveband ID: %u%s  Start Label: %u, Stop Label: %u",
8822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
8832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr),
8842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
8852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr+4),
8862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr+8));
8872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=12;
8882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=12;
8892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
8912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
8922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
8932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
8942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_STYLE:
8962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
8972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
8982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
8992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
9002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Reservation Style: %s, Flags: [0x%02x]",
9012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
9022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(rsvp_resstyle_values,
9032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               "Unknown",
9042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               EXTRACT_24BITS(obj_tptr+1)),
9052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *(obj_tptr));
9062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
9072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
9082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
9092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
9102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
9112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
9122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
9132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
9142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_SENDER_TEMPLATE:
9152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
9162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
9172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
9182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
9192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Address: %s, Source Port: %u",
9202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
9212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
9222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+6));
9232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
9242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
9252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
9262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
9272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV6:
9282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 20)
9292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
9302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Address: %s, Source Port: %u",
9312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
9322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr),
9332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+18));
9342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=20;
9352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=20;
9362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
93753f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_13: /* IPv6 p2mp LSP tunnel */
93853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 40)
93953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return-1;
94053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  IPv6 Tunnel Sender Address: %s, LSP ID: 0x%04x"
94153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       "%s  Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
94253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
94353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ip6addr_string(obj_tptr),
94453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+18),
94553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
94653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ip6addr_string(obj_tptr+20),
94753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+38));
94853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=40;
94953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=40;
95053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
9512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
9522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV4:
9532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
9542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
9552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  IPv4 Tunnel Sender Address: %s, LSP-ID: 0x%04x",
9562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
9572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
9582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+6));
9592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
9602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
9612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
96253f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_12: /* IPv4 p2mp LSP tunnel */
96353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 16)
96453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return-1;
96553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  IPv4 Tunnel Sender Address: %s, LSP ID: 0x%04x"
96653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       "%s  Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
96753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
96853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ipaddr_string(obj_tptr),
96953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+6),
97053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
97153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ipaddr_string(obj_tptr+8),
97253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+12));
97353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=16;
97453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=16;
97553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
9762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
9772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
9782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
9792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
9802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
9812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_LABEL_REQ:
9822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
9832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
9842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while(obj_tlen >= 4 ) {
9852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s  L3 Protocol ID: %s",
9862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ident,
9872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(ethertype_values,
9882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   "Unknown Protocol (0x%04x)",
9892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   EXTRACT_16BITS(obj_tptr+2)));
9902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=4;
9912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=4;
9922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
9932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
9942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_2:
9952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 12)
9962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
9972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  L3 Protocol ID: %s",
9982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
9992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(ethertype_values,
10002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               "Unknown Protocol (0x%04x)",
10012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               EXTRACT_16BITS(obj_tptr+2)));
10022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf(",%s merge capability",((*(obj_tptr+4))&0x80) ? "no" : "" );
10032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Minimum VPI/VCI: %u/%u",
10042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
10052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (EXTRACT_16BITS(obj_tptr+4))&0xfff,
10062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (EXTRACT_16BITS(obj_tptr+6))&0xfff);
10072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Maximum VPI/VCI: %u/%u",
10082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
10092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (EXTRACT_16BITS(obj_tptr+8))&0xfff,
10102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (EXTRACT_16BITS(obj_tptr+10))&0xfff);
10112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=12;
10122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=12;
10132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
10142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_3:
10152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 12)
10162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
10172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  L3 Protocol ID: %s",
10182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
10192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(ethertype_values,
10202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               "Unknown Protocol (0x%04x)",
10212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               EXTRACT_16BITS(obj_tptr+2)));
10222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Minimum/Maximum DLCI: %u/%u, %s%s bit DLCI",
10232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
10242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (EXTRACT_32BITS(obj_tptr+4))&0x7fffff,
10252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (EXTRACT_32BITS(obj_tptr+8))&0x7fffff,
10262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 0 ) ? "10" : "",
10272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (((EXTRACT_16BITS(obj_tptr+4)>>7)&3) == 2 ) ? "23" : "");
10282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=12;
10292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=12;
10302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
10312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_4:
10322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
10332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
10342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  LSP Encoding Type: %s (%u)",
10352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
10362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(gmpls_encoding_values,
10372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               "Unknown",
10382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               *obj_tptr),
10392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		       *obj_tptr);
10402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Switching Type: %s (%u), Payload ID: %s (0x%04x)",
10412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
10422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(gmpls_switch_cap_values,
10432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               "Unknown",
10442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               *(obj_tptr+1)),
10452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		       *(obj_tptr+1),
10462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(gmpls_payload_values,
10472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               "Unknown",
10482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               EXTRACT_16BITS(obj_tptr+2)),
10492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		       EXTRACT_16BITS(obj_tptr+2));
10502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
10512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
10522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
10532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
10542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
10552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
10562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
10572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
10582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_RRO:
10592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_ERO:
10602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
10612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
10622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while(obj_tlen >= 4 ) {
10632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s  Subobject Type: %s, length %u",
10642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ident,
10652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(rsvp_obj_xro_values,
10662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   "Unknown %u",
10672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)),
10682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           *(obj_tptr+1));
10692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
10702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    if (*(obj_tptr+1) == 0) { /* prevent infinite loops */
10712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        printf("%s  ERROR: zero length ERO subtype",ident);
10722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        break;
10732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    }
10742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
10752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    switch(RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)) {
10762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    case RSVP_OBJ_XRO_IPV4:
10772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        printf(", %s, %s/%u, Flags: [%s]",
10782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               RSVP_OBJ_XRO_MASK_LOOSE(*obj_tptr) ? "Loose" : "Strict",
10792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               ipaddr_string(obj_tptr+2),
10802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               *(obj_tptr+6),
10812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               bittok2str(rsvp_obj_rro_flag_values,
10822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   "none",
10832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   *(obj_tptr+7))); /* rfc3209 says that this field is rsvd. */
108453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    break;
108553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    case RSVP_OBJ_XRO_LABEL:
108653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                        printf(", Flags: [%s] (%#x), Class-Type: %s (%u), %u",
108753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                               bittok2str(rsvp_obj_rro_label_flag_values,
108853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                                   "none",
108953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                                   *(obj_tptr+2)),
109053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                               *(obj_tptr+2),
109153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                               tok2str(rsvp_ctype_values,
109253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                                       "Unknown",
109353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                                       *(obj_tptr+3) + 256*RSVP_OBJ_RRO),
109453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                               *(obj_tptr+3),
109553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                               EXTRACT_32BITS(obj_tptr+4));
10962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    }
10972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=*(obj_tptr+1);
10982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=*(obj_tptr+1);
10992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
11002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
11012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
11022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
11032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
11042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
11052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_HELLO:
11072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
11082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
11092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_2:
11102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
11112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
11122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Instance: 0x%08x, Destination Instance: 0x%08x",
11132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
11142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr),
11152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr+4));
11162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
11172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
11182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
11192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
11202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
11212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
11222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
11232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_RESTART_CAPABILITY:
11252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
11262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
11272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
11282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
11292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Restart  Time: %ums, Recovery Time: %ums",
11302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
11312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr),
11322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr+4));
11332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
11342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
11352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
11362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
11372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
11382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
11392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
11402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_SESSION_ATTRIBUTE:
11422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
11432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV4:
11442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
11452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
11462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                namelen = *(obj_tptr+3);
11472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4+namelen)
11482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
11492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Session Name: ", ident);
11502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                for (i = 0; i < namelen; i++)
11512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    safeputchar(*(obj_tptr+4+i));
115253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  Setup Priority: %u, Holding Priority: %u, Flags: [%s] (%#x)",
11532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
11542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)*obj_tptr,
11552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)*(obj_tptr+1),
115653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       bittok2str(rsvp_session_attribute_flag_values,
11572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                  "none",
115853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                                  *(obj_tptr+2)),
115953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       *(obj_tptr+2));
11602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4+*(obj_tptr+3);
11612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4+*(obj_tptr+3);
11622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
11632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
11642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
11652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
11662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
11672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	case RSVP_OBJ_GENERALIZED_UNI:
11692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
11702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		int subobj_type,af,subobj_len,total_subobj_len;
11712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
11732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
11752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
11762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		/* read variable length subobjects */
11782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		total_subobj_len = obj_tlen;
11792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while(total_subobj_len > 0) {
11802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subobj_len  = EXTRACT_16BITS(obj_tptr);
11812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subobj_type = (EXTRACT_16BITS(obj_tptr+2))>>8;
11822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    af = (EXTRACT_16BITS(obj_tptr+2))&0x00FF;
11832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s  Subobject Type: %s (%u), AF: %s (%u), length: %u",
11852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ident,
11862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(rsvp_obj_generalized_uni_values, "Unknown", subobj_type),
11872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subobj_type,
11882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(af_values, "Unknown", af), af,
11892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subobj_len);
11902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    switch(subobj_type) {
11922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    case RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS:
11932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    case RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS:
11942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
11952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        switch(af) {
11962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        case AFNUM_INET:
11972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            if (subobj_len < 8)
11982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                return -1;
11992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            printf("%s    UNI IPv4 TNA address: %s",
12002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   ident, ipaddr_string(obj_tptr+4));
12012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            break;
12022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
12032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        case AFNUM_INET6:
12042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            if (subobj_len < 20)
12052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                return -1;
12062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            printf("%s    UNI IPv6 TNA address: %s",
12072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   ident, ip6addr_string(obj_tptr+4));
12082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            break;
12092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
12102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        case AFNUM_NSAP:
12112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            if (subobj_len) {
12122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                /* unless we have a TLV parser lets just hexdump */
12132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                hexdump=TRUE;
12142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            }
12152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            break;
12162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        }
12172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        break;
12182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    case RSVP_GEN_UNI_SUBOBJ_DIVERSITY:
12202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        if (subobj_len) {
12212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            /* unless we have a TLV parser lets just hexdump */
12222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            hexdump=TRUE;
12232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        }
12242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        break;
12252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    case RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL:
12272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        if (subobj_len < 16) {
12282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            return -1;
12292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        }
12302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        printf("%s    U-bit: %x, Label type: %u, Logical port id: %u, Label: %u",
12322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               ident,
12332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               ((EXTRACT_32BITS(obj_tptr+4))>>31),
12342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               ((EXTRACT_32BITS(obj_tptr+4))&0xFF),
12352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               EXTRACT_32BITS(obj_tptr+8),
12362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               EXTRACT_32BITS(obj_tptr+12));
12372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        break;
12382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    case RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL:
12402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        if (subobj_len < 8) {
12412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            return -1;
12422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        }
12432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        printf("%s    Service level: %u",
12452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               ident, (EXTRACT_32BITS(obj_tptr+4))>>24);
12462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        break;
12472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    default:
12492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        hexdump=TRUE;
12502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        break;
12512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    }
12522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    total_subobj_len-=subobj_len;
12532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=subobj_len;
12542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen+=subobj_len;
12552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		}
12562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (total_subobj_len) {
12582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    /* unless we have a TLV parser lets just hexdump */
12592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    hexdump=TRUE;
12602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
12612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
12622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
12642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
12652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
12662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
12672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
12682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_RSVP_HOP:
12692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
12702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */
12712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
12722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
12732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
12742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Previous/Next Interface: %s, Logical Interface Handle: 0x%08x",
12752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
12762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
12772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr+4));
12782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
12792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
12802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen)
12812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */
12822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
12832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
12842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */
12852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV6:
12862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 20)
12872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
12882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Previous/Next Interface: %s, Logical Interface Handle: 0x%08x",
12892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
12902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr),
12912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr+16));
12922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=20;
12932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=20;
12942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */
12952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
12962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
12972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
12982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
12992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
13002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
13012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
13022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_TIME_VALUES:
13032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
13042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
13052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
13062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
13072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Refresh Period: %ums",
13082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
13092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr));
13102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
13112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
13122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
13132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
13142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
13152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
13162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
13172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
13182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* those three objects do share the same semantics */
13192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_SENDER_TSPEC:
13202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_ADSPEC:
13212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_FLOWSPEC:
13222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
13232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_2:
13242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
13252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
13262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Msg-Version: %u, length: %u",
13272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
13282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (*obj_tptr & 0xf0) >> 4,
13292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+2)<<2);
13302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4; /* get to the start of the service header */
13312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
13322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
13332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while (obj_tlen >= 4) {
13342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    intserv_serv_tlen=EXTRACT_16BITS(obj_tptr+2)<<2;
13352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s  Service Type: %s (%u), break bit %s set, Service length: %u",
13362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ident,
13372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(rsvp_intserv_service_type_values,"unknown",*(obj_tptr)),
13382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           *(obj_tptr),
13392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           (*(obj_tptr+1)&0x80) ? "" : "not",
13402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           intserv_serv_tlen);
13412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
13422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=4; /* get to the start of the parameter list */
13432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=4;
13442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
13452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    while (intserv_serv_tlen>=4) {
13462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        processed = rsvp_intserv_print(obj_tptr, obj_tlen);
13472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        if (processed == 0)
13482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                            break;
13492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        obj_tlen-=processed;
13502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        intserv_serv_tlen-=processed;
13512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        obj_tptr+=processed;
13522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    }
13532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
13542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
13552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
13562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
13572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
13582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
13592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
13602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_FILTERSPEC:
13612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
13622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
13632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
13642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
13652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Address: %s, Source Port: %u",
13662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
13672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
13682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+6));
13692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
13702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
13712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
13722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
13732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV6:
13742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 20)
13752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
13762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Address: %s, Source Port: %u",
13772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
13782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr),
13792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+18));
13802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=20;
13812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=20;
13822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
13832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_3:
13842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 20)
13852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
13862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Address: %s, Flow Label: %u",
13872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
13882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr),
13892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_24BITS(obj_tptr+17));
13902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=20;
13912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=20;
13922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
13932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV6:
13942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 20)
13952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
13962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Address: %s, LSP-ID: 0x%04x",
13972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
13982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
13992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+18));
14002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=20;
14012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=20;
14022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
140353f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_13: /* IPv6 p2mp LSP tunnel */
140453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 40)
140553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return-1;
140653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  IPv6 Tunnel Sender Address: %s, LSP ID: 0x%04x"
140753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       "%s  Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
140853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
140953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ip6addr_string(obj_tptr),
141053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+18),
141153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
141253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ip6addr_string(obj_tptr+20),
141353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+38));
141453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=40;
141553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=40;
141653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
14172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
14182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV4:
14192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
14202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
14212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Source Address: %s, LSP-ID: 0x%04x",
14222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
14232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
14242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr+6));
14252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
14262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
14272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
142853f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_12: /* IPv4 p2mp LSP tunnel */
142953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 16)
143053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return-1;
143153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  IPv4 Tunnel Sender Address: %s, LSP ID: 0x%04x"
143253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       "%s  Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
143353f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
143453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ipaddr_string(obj_tptr),
143553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+6),
143653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident,
143753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ipaddr_string(obj_tptr+8),
143853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       EXTRACT_16BITS(obj_tptr+12));
143953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=16;
144053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=16;
144153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
14422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
14432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
14442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
14452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
14462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
14472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_FASTREROUTE:
14482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            /* the differences between c-type 1 and 7 are minor */
14492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            obj_ptr.rsvp_obj_frr = (const struct rsvp_obj_frr_t *)obj_tptr;
14502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            bw.i = EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->bandwidth);
14512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
14522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
14532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1: /* new style */
14542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < sizeof(struct rsvp_obj_frr_t))
14552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
14562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",
14572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
14582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)obj_ptr.rsvp_obj_frr->setup_prio,
14592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)obj_ptr.rsvp_obj_frr->hold_prio,
14602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)obj_ptr.rsvp_obj_frr->hop_limit,
14612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        bw.f*8/1000000);
14622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Include-any: 0x%08x, Exclude-any: 0x%08x, Include-all: 0x%08x",
14632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
14642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->include_any),
14652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->exclude_any),
14662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->include_all));
14672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=sizeof(struct rsvp_obj_frr_t);
14682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=sizeof(struct rsvp_obj_frr_t);
14692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
14702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
14712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV4: /* old style */
14722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 16)
14732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
14742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",
14752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
14762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)obj_ptr.rsvp_obj_frr->setup_prio,
14772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)obj_ptr.rsvp_obj_frr->hold_prio,
14782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (int)obj_ptr.rsvp_obj_frr->hop_limit,
14792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        bw.f*8/1000000);
14802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Include Colors: 0x%08x, Exclude Colors: 0x%08x",
14812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
14822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->include_any),
14832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->exclude_any));
14842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=16;
14852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=16;
14862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
14872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
14882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
14892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
14902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
14912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
14922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
14932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_DETOUR:
14942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
14952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_TUNNEL_IPV4:
14962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while(obj_tlen >= 8) {
14972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s  PLR-ID: %s, Avoid-Node-ID: %s",
14982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ident,
14992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(obj_tptr),
15002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(obj_tptr+4));
15012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=8;
15022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=8;
15032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
15042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
15052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
15062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
15072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
15082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
15092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
15102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_CLASSTYPE:
15112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_CLASSTYPE_OLD: /* fall through */
15122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
15132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
15142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  CT: %u",
15152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
15162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_tptr)&0x7);
15172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
15182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
15192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
15202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
15212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
15222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
15232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
15242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
15252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_ERROR_SPEC:
15262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
15272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */
15282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV4:
15292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
15302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
15312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                error_code=*(obj_tptr+5);
15322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                error_value=EXTRACT_16BITS(obj_tptr+6);
15332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Error Node Address: %s, Flags: [0x%02x]%s  Error Code: %s (%u)",
15342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
15352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(obj_tptr),
15362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *(obj_tptr+4),
15372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
15382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(rsvp_obj_error_code_values,"unknown",error_code),
15392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       error_code);
15402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                switch (error_code) {
15412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING:
15422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf(", Error Value: %s (%u)",
15432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value),
15442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           error_value);
15452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
15462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE: /* fall through */
15472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE_OLD:
15482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf(", Error Value: %s (%u)",
15492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(rsvp_obj_error_code_diffserv_te_values,"unknown",error_value),
15502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           error_value);
15512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
15522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                default:
15532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf(", Unknown Error Value (%u)", error_value);
15542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
15552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
15562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=8;
15572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=8;
15582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
15592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
15602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */
15612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_IPV6:
15622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 20)
15632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
15642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                error_code=*(obj_tptr+17);
15652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                error_value=EXTRACT_16BITS(obj_tptr+18);
15662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Error Node Address: %s, Flags: [0x%02x]%s  Error Code: %s (%u)",
15672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
15682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(obj_tptr),
15692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *(obj_tptr+16),
15702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
15712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(rsvp_obj_error_code_values,"unknown",error_code),
15722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       error_code);
15732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
15742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                switch (error_code) {
15752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING:
15762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf(", Error Value: %s (%u)",
15772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value),
15782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			   error_value);
15792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
15802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                default:
15812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
15822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
15832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=20;
15842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=20;
15852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
15862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
15872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
15882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
15892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
15902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
15912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
15922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_PROPERTIES:
15932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
15942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
15952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
15962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
15972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                padbytes = EXTRACT_16BITS(obj_tptr+2);
15982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  TLV count: %u, padding bytes: %u",
15992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
16002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_tptr),
16012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       padbytes);
16022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
16032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
16042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                /* loop through as long there is anything longer than the TLV header (2) */
16052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while(obj_tlen >= 2 + padbytes) {
16062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s    %s TLV (0x%02x), length: %u", /* length includes header */
16072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ident,
16082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(rsvp_obj_prop_tlv_values,"unknown",*obj_tptr),
16092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           *obj_tptr,
16102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           *(obj_tptr+1));
16112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    if (obj_tlen < *(obj_tptr+1))
16122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        return-1;
16132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    if (*(obj_tptr+1) < 2)
16142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        return -1;
16152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    print_unknown_data(obj_tptr+2,"\n\t\t",*(obj_tptr+1)-2);
16162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=*(obj_tptr+1);
16172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=*(obj_tptr+1);
16182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
16192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
16202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
16212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
16222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
16232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
16242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
16252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_MESSAGE_ID:     /* fall through */
16262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_MESSAGE_ID_ACK: /* fall through */
16272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_MESSAGE_ID_LIST:
16282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
16292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
16302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_2:
16312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 8)
16322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
16332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Flags [0x%02x], epoch: %u",
16342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
16352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       *obj_tptr,
16362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_24BITS(obj_tptr+1));
16372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
16382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
16392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                /* loop through as long there are no messages left */
16402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                while(obj_tlen >= 4) {
16412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("%s    Message-ID 0x%08x (%u)",
16422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ident,
16432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_32BITS(obj_tptr),
16442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_32BITS(obj_tptr));
16452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=4;
16462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=4;
16472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
16482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
16492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
16502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
16512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
16522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
16532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
16542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_INTEGRITY:
16552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
16562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
16572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < sizeof(struct rsvp_obj_integrity_t))
16582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
16592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_ptr.rsvp_obj_integrity = (const struct rsvp_obj_integrity_t *)obj_tptr;
16602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Key-ID 0x%04x%08x, Sequence 0x%08x%08x, Flags [%s]",
16612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
16622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_16BITS(obj_ptr.rsvp_obj_integrity->key_id),
16632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->key_id+2),
16642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->sequence),
16652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->sequence+4),
16662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       bittok2str(rsvp_obj_integrity_flag_values,
16672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                  "none",
16682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                  obj_ptr.rsvp_obj_integrity->flags));
166953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  MD5-sum 0x%08x%08x%08x%08x ",
16702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ident,
16712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest),
16722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest+4),
16732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest+8),
16742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(obj_ptr.rsvp_obj_integrity->digest+12));
167553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
167653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_LIBCRYPTO
167753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                sigcheck = signature_verify(pptr, plen, (unsigned char *)obj_ptr.\
167853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                                             rsvp_obj_integrity->digest);
167953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else
168053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                sigcheck = CANT_CHECK_SIGNATURE;
168153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
168253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf(" (%s)", tok2str(signature_check_values, "Unknown", sigcheck));
168353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
16842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen+=sizeof(struct rsvp_obj_integrity_t);
16852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=sizeof(struct rsvp_obj_integrity_t);
16862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
16872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
16882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
16892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
16902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
16912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
16922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_ADMIN_STATUS:
16932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
16942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
16952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
16962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
16972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Flags [%s]", ident,
16982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       bittok2str(rsvp_obj_admin_status_flag_values, "none",
16992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                  EXTRACT_32BITS(obj_tptr)));
17002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tlen-=4;
17012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                obj_tptr+=4;
17022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
17032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
17042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
17052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
17062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
17072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_LABEL_SET:
17092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(rsvp_obj_ctype) {
17102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case RSVP_CTYPE_1:
17112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (obj_tlen < 4)
17122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    return-1;
17132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                action = (EXTRACT_16BITS(obj_tptr)>>8);
17142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("%s  Action: %s (%u), Label type: %u", ident,
17162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(rsvp_obj_label_set_action_values, "Unknown", action),
17172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       action, ((EXTRACT_32BITS(obj_tptr) & 0x7F)));
17182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                switch (action) {
17202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LABEL_SET_INCLUSIVE_RANGE:
17212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LABEL_SET_EXCLUSIVE_RANGE: /* fall through */
17222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		    /* only a couple of subchannels are expected */
17242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		    if (obj_tlen < 12)
17252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			return -1;
17262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		    printf("%s  Start range: %u, End range: %u", ident,
17272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_32BITS(obj_tptr+4),
17282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_32BITS(obj_tptr+8));
17292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		    obj_tlen-=12;
17302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		    obj_tptr+=12;
17312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
17322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                default:
17342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tlen-=4;
17352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    obj_tptr+=4;
17362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subchannel = 1;
17372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    while(obj_tlen >= 4 ) {
17382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        printf("%s  Subchannel #%u: %u", ident, subchannel,
17392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               EXTRACT_32BITS(obj_tptr));
17402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        obj_tptr+=4;
17412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        obj_tlen-=4;
17422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        subchannel++;
17432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    }
17442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
17452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
17462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
174753f17a9db278d33517d9888dd77848f554522a38JP Abgrall            default:
174853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                hexdump=TRUE;
174953f17a9db278d33517d9888dd77848f554522a38JP Abgrall            }
17502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
175153f17a9db278d33517d9888dd77848f554522a38JP Abgrall        case RSVP_OBJ_S2L:
175253f17a9db278d33517d9888dd77848f554522a38JP Abgrall            switch (rsvp_obj_ctype) {
175353f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_IPV4:
175453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 4)
175553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return-1;
175653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  Sub-LSP destination address: %s",
175753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident, ipaddr_string(obj_tptr));
175853f17a9db278d33517d9888dd77848f554522a38JP Abgrall
175953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=4;
176053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=4;
176153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
176253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef INET6
176353f17a9db278d33517d9888dd77848f554522a38JP Abgrall            case RSVP_CTYPE_IPV6:
176453f17a9db278d33517d9888dd77848f554522a38JP Abgrall                if (obj_tlen < 16)
176553f17a9db278d33517d9888dd77848f554522a38JP Abgrall                    return-1;
176653f17a9db278d33517d9888dd77848f554522a38JP Abgrall                printf("%s  Sub-LSP destination address: %s",
176753f17a9db278d33517d9888dd77848f554522a38JP Abgrall                       ident, ip6addr_string(obj_tptr));
176853f17a9db278d33517d9888dd77848f554522a38JP Abgrall
176953f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tlen-=16;
177053f17a9db278d33517d9888dd77848f554522a38JP Abgrall                obj_tptr+=16;
177153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                break;
177253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
17732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
17742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                hexdump=TRUE;
17752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
17762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /*
17782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project         *  FIXME those are the defined objects that lack a decoder
17792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project         *  you are welcome to contribute code ;-)
17802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project         */
17812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_SCOPE:
17832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_POLICY_DATA:
17842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_ACCEPT_LABEL_SET:
17852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case RSVP_OBJ_PROTECTION:
17862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        default:
17872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            if (vflag <= 1)
17882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                print_unknown_data(obj_tptr,"\n\t    ",obj_tlen); /* FIXME indentation */
17892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
17902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
17912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* do we also want to see a hex dump ? */
17922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (vflag > 1 || hexdump==TRUE)
179353f17a9db278d33517d9888dd77848f554522a38JP Abgrall            print_unknown_data(tptr+sizeof(struct rsvp_object_header),"\n\t    ", /* FIXME indentation */
17942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               rsvp_obj_len-sizeof(struct rsvp_object_header));
17952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
17962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        tptr+=rsvp_obj_len;
17972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        tlen-=rsvp_obj_len;
17982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
17992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    return 0;
18002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc:
18012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\t\t packet exceeded snapshot");
18022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    return -1;
18032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}
18042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid
18072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrsvp_print(register const u_char *pptr, register u_int len) {
18082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
180953f17a9db278d33517d9888dd77848f554522a38JP Abgrall    struct rsvp_common_header *rsvp_com_header;
18102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    const u_char *tptr,*subtptr;
181153f17a9db278d33517d9888dd77848f554522a38JP Abgrall    u_short plen, tlen, subtlen;
18122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    tptr=pptr;
18142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
181553f17a9db278d33517d9888dd77848f554522a38JP Abgrall    rsvp_com_header = (struct rsvp_common_header *)pptr;
18162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    TCHECK(*rsvp_com_header);
18172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /*
18192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project     * Sanity checking of the header.
18202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project     */
18212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags) != RSVP_VERSION) {
18222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	printf("ERROR: RSVP version %u packet not supported",
18232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags));
18242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	return;
18252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
18262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /* in non-verbose mode just lets print the basic Message Type*/
18282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (vflag < 1) {
18292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("RSVPv%u %s Message, length: %u",
18302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags),
18312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               tok2str(rsvp_msg_type_values, "unknown (%u)",rsvp_com_header->msg_type),
18322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               len);
18332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        return;
18342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
18352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /* ok they seem to want to know everything - lets fully decode it */
18372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
183853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    plen = tlen = EXTRACT_16BITS(rsvp_com_header->length);
18392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\tRSVPv%u %s Message (%u), Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x",
18412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags),
18422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           tok2str(rsvp_msg_type_values, "unknown, type: %u",rsvp_com_header->msg_type),
18432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           rsvp_com_header->msg_type,
18442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(rsvp_com_header->version_flags)),
18452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           tlen,
18462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           rsvp_com_header->ttl,
18472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           EXTRACT_16BITS(rsvp_com_header->checksum));
18482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
184953f17a9db278d33517d9888dd77848f554522a38JP Abgrall    /*
185053f17a9db278d33517d9888dd77848f554522a38JP Abgrall     * Clear checksum prior to signature verification.
185153f17a9db278d33517d9888dd77848f554522a38JP Abgrall     */
185253f17a9db278d33517d9888dd77848f554522a38JP Abgrall    rsvp_com_header->checksum[0] = 0;
185353f17a9db278d33517d9888dd77848f554522a38JP Abgrall    rsvp_com_header->checksum[1] = 0;
185453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
18552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (tlen < sizeof(const struct rsvp_common_header)) {
18562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("ERROR: common header too short %u < %lu", tlen,
18572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               (unsigned long)sizeof(const struct rsvp_common_header));
18582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        return;
18592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
18602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    tptr+=sizeof(const struct rsvp_common_header);
18622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    tlen-=sizeof(const struct rsvp_common_header);
18632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    switch(rsvp_com_header->msg_type) {
18652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_AGGREGATE:
18672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        while(tlen > 0) {
18682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            subtptr=tptr;
186953f17a9db278d33517d9888dd77848f554522a38JP Abgrall            rsvp_com_header = (struct rsvp_common_header *)subtptr;
18702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            TCHECK(*rsvp_com_header);
18712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            /*
18732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             * Sanity checking of the header.
18742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             */
18752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            if (RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags) != RSVP_VERSION) {
18762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("ERROR: RSVP version %u packet not supported",
18772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags));
18782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                return;
18792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
18802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            subtlen=EXTRACT_16BITS(rsvp_com_header->length);
18812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t  RSVPv%u %s Message (%u), Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x",
18832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   RSVP_EXTRACT_VERSION(rsvp_com_header->version_flags),
18842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   tok2str(rsvp_msg_type_values, "unknown, type: %u",rsvp_com_header->msg_type),
18852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   rsvp_com_header->msg_type,
18862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(rsvp_com_header->version_flags)),
18872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   subtlen,
18882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   rsvp_com_header->ttl,
18892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   EXTRACT_16BITS(rsvp_com_header->checksum));
189053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
189153f17a9db278d33517d9888dd77848f554522a38JP Abgrall            /*
189253f17a9db278d33517d9888dd77848f554522a38JP Abgrall             * Clear checksum prior to signature verification.
189353f17a9db278d33517d9888dd77848f554522a38JP Abgrall             */
189453f17a9db278d33517d9888dd77848f554522a38JP Abgrall            rsvp_com_header->checksum[0] = 0;
189553f17a9db278d33517d9888dd77848f554522a38JP Abgrall            rsvp_com_header->checksum[1] = 0;
18962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
18972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            if (subtlen < sizeof(const struct rsvp_common_header)) {
18982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("ERROR: common header too short %u < %lu", subtlen,
18992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       (unsigned long)sizeof(const struct rsvp_common_header));
19002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                return;
19012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
19022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
19032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            if (tlen < subtlen) {
19042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("ERROR: common header too large %u > %u", subtlen,
19052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tlen);
19062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                return;
19072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
19082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
19092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            subtptr+=sizeof(const struct rsvp_common_header);
19102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            subtlen-=sizeof(const struct rsvp_common_header);
19112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
191253f17a9db278d33517d9888dd77848f554522a38JP Abgrall            if (rsvp_obj_print(pptr, plen, subtptr,"\n\t    ", subtlen) == -1)
19132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                return;
19142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
19152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tptr+=subtlen+sizeof(const struct rsvp_common_header);
19162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tlen-=subtlen+sizeof(const struct rsvp_common_header);
19172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
19182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
19192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
19202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
19212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_PATH:
19222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_RESV:
19232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_PATHERR:
19242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_RESVERR:
19252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_PATHTEAR:
19262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_RESVTEAR:
19272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_RESVCONF:
19282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_HELLO_OLD:
19292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_HELLO:
19302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_ACK:
19312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case RSVP_MSGTYPE_SREFRESH:
193253f17a9db278d33517d9888dd77848f554522a38JP Abgrall        if (rsvp_obj_print(pptr, plen, tptr,"\n\t  ", tlen) == -1)
19332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            return;
19342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
19352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
19362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    default:
19372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        print_unknown_data(tptr,"\n\t    ",tlen);
19382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        break;
19392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
19402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
19412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    return;
19422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc:
19432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\t\t packet exceeded snapshot");
19442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}
1945