12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions retain the above copyright notice and this paragraph
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * in its entirety, and (2) distributions including binary code include
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the above copyright notice and this paragraph in its entirety in
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the documentation or other materials provided with the distribution.
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FOR A PARTICULAR PURPOSE.
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Original code by Hannes Gredler (hannes@juniper.net)
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ =
1853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    "@(#) $Header: /tcpdump/master/tcpdump/print-lspping.c,v 1.20 2008-01-28 14:20:43 hannes Exp $";
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h"
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h>
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h>
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdlib.h>
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h>
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h"
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h"
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h"
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "bgp.h"
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "l2vpn.h"
3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "oui.h"
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LSPPING common header
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |         Version Number        |         Must Be Zero          |
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |  Message Type |   Reply mode  |  Return Code  | Return Subcode|
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                        Sender's Handle                        |
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                        Sequence Number                        |
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                    TimeStamp Sent (seconds)                   |
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                  TimeStamp Sent (microseconds)                |
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                  TimeStamp Received (seconds)                 |
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                TimeStamp Received (microseconds)              |
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                            TLVs ...                           |
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_common_header {
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t version[2];
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t reserved[2];
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t msg_type;
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t reply_mode;
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t return_code;
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t return_subcode;
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t sender_handle[4];
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t seq_number[4];
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ts_sent_sec[4];
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ts_sent_usec[4];
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ts_rcvd_sec[4];
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ts_rcvd_usec[4];
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LSPPING_VERSION            1
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok lspping_msg_type_values[] = {
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 1, "MPLS Echo Request"},
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 2, "MPLS Echo Reply"},
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok lspping_reply_mode_values[] = {
912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 1, "Do not reply"},
922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 2, "Reply via an IPv4/IPv6 UDP packet"},
932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 3, "Reply via an IPv4/IPv6 UDP packet with Router Alert"},
942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 4, "Reply via application level control channel"},
952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok lspping_return_code_values[] = {
992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  0, "No return code or return code contained in the Error Code TLV"},
1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  1, "Malformed echo request received"},
1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  2, "One or more of the TLVs was not understood"},
1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  3, "Replying router is an egress for the FEC at stack depth"},
1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  4, "Replying router has no mapping for the FEC at stack depth"},
1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  5, "Reserved"},
1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  6, "Reserved"},
1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  7, "Reserved"},
1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  8, "Label switched at stack-depth"},
1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    {  9, "Label switched but no MPLS forwarding at stack-depth"},
1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 10, "Mapping for this FEC is not the given label at stack depth"},
1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 11, "No label entry at stack-depth"},
1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 12, "Protocol not associated with interface at FEC stack depth"},
1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LSPPING TLV header
1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |             Type              |            Length             |
1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                             Value                             |
1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_header {
1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t type[2];
1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t length[2];
1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGET_FEC_STACK      1
1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_DOWNSTREAM_MAPPING    2
1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_PAD                   3
13853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LSPPING_TLV_VENDOR_ENTERPRISE     5
13953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LSPPING_TLV_VENDOR_ENTERPRISE_LEN 4
14053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LSPPING_TLV_INTERFACE_LABEL_STACK 7
14153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define	LSPPING_TLV_ERROR_CODE            9
14253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LSPPING_TLV_REPLY_TOS_BYTE        10
1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_BFD_DISCRIMINATOR     15 /* draft-ietf-bfd-mpls-02 */
1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LSPPING_TLV_BFD_DISCRIMINATOR_LEN 4
1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_VENDOR_PRIVATE        0xfc00
1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok lspping_tlv_values[] = {
1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGET_FEC_STACK, "Target FEC Stack" },
1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_DOWNSTREAM_MAPPING, "Downstream Mapping" },
1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_PAD, "Pad" },
1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_ERROR_CODE, "Error Code" },
15253f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { LSPPING_TLV_VENDOR_ENTERPRISE, "Vendor Enterprise Code" },
15353f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { LSPPING_TLV_INTERFACE_LABEL_STACK, "Interface Label Stack" },
15453f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { LSPPING_TLV_REPLY_TOS_BYTE, "Reply TOS Byte" },
1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_BFD_DISCRIMINATOR, "BFD Discriminator" },
15653f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { LSPPING_TLV_VENDOR_PRIVATE, "Vendor Private Code" },
1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV4      1
1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV6      2
1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV4     3
1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV6     4
1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV4    6
1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV6    7
1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_ENDPT   8
1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_VCID_OLD 9
1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_VCID   10
1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV4     11
1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV6     12
1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok lspping_tlvtargetfec_subtlv_values[] = {
1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV4, "LDP IPv4 prefix"},
1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV6, "LDP IPv6 prefix"},
1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV4, "RSVP IPv4 Session Query"},
1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV6, "RSVP IPv6 Session Query"},
1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 5, "Reserved"},
1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV4, "VPN IPv4 prefix"},
1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV6, "VPN IPv6 prefix"},
1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_ENDPT, "L2 VPN endpoint"},
1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_VCID_OLD, "L2 circuit ID (old)"},
1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_VCID, "L2 circuit ID"},
1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV4, "BGP labeled IPv4 prefix"},
1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV6, "BGP labeled IPv6 prefix"},
1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          IPv4 prefix                          |
1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Prefix Length |         Must Be Zero                          |
1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_ldp_ipv4_t {
1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix [4];
1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix_len;
2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          IPv6 prefix                          |
2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          (16 octets)                          |
2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Prefix Length |         Must Be Zero                          |
2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_ldp_ipv6_t {
2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix [16];
2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix_len;
2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                    Sender identifier                          |
2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                         IPv4 prefix                           |
2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Prefix Length |                 Must Be Zero                  |
2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_bgp_ipv4_t {
2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t sender_id [4];
2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix [4];
2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix_len;
2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                    Sender identifier                          |
2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          (16 octets)                          |
2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          IPv6 prefix                          |
2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          (16 octets)                          |
2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Prefix Length |                 Must Be Zero                  |
2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_bgp_ipv6_t {
2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t sender_id [16];
2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix [16];
2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix_len;
2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                 IPv4 tunnel end point address                 |
2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |          Must Be Zero         |     Tunnel ID                 |
2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                       Extended Tunnel ID                      |
2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                   IPv4 tunnel sender address                  |
2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |          Must Be Zero         |            LSP ID             |
2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_rsvp_ipv4_t {
2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tunnel_endpoint [4];
2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t res[2];
2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tunnel_id[2];
2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t extended_tunnel_id[4];
2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tunnel_sender [4];
2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t res2[2];
2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t lsp_id [2];
2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                 IPv6 tunnel end point address                 |
2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |          Must Be Zero         |          Tunnel ID            |
2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                       Extended Tunnel ID                      |
2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                   IPv6 tunnel sender address                  |
2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |          Must Be Zero         |            LSP ID             |
3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_rsvp_ipv6_t {
3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tunnel_endpoint [16];
3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t res[2];
3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tunnel_id[2];
3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t extended_tunnel_id[16];
3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tunnel_sender [16];
3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t res2[2];
3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t lsp_id [2];
3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                      Route Distinguisher                      |
3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          (8 octets)                           |
3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                         IPv4 prefix                           |
3242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Prefix Length |                 Must Be Zero                  |
3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_l3vpn_ipv4_t {
3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t rd [8];
3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix [4];
3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix_len;
3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                      Route Distinguisher                      |
3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          (8 octets)                           |
3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          IPv6 prefix                          |
3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          (16 octets)                          |
3432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                                                               |
3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Prefix Length |                 Must Be Zero                  |
3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_l3vpn_ipv6_t {
3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t rd [8];
3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix [16];
3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t prefix_len;
3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
3562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
3572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                      Route Distinguisher                      |
3602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                          (8 octets)                           |
3612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |         Sender's CE ID        |       Receiver's CE ID        |
3632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |      Encapsulation Type       |         Must Be Zero          |
3652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_l2vpn_endpt_t {
3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t rd [8];
3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t sender_ce_id [2];
3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t receiver_ce_id [2];
3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t encapsulation[2];
3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                      Remote PE Address                        |
3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                             VC ID                             |
3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |      Encapsulation Type       |         Must Be Zero          |
3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_l2vpn_vcid_old_t {
3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t remote_pe_address [4];
3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t vc_id [4];
3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t encapsulation[2];
3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                     Sender's PE Address                       |
3952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                      Remote PE Address                        |
3972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |                             VC ID                             |
3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |      Encapsulation Type       |         Must Be Zero          |
4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_targetfec_subtlv_l2vpn_vcid_t {
4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t sender_pe_address [4];
4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t remote_pe_address [4];
4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t vc_id [4];
4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t encapsulation[2];
4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
4112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0                   1                   2                   3
4122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |               MTU             | Address Type  |  Resvd (SBZ)  |
4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |             Downstream IP Address (4 or 16 octets)            |
4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |         Downstream Interface Address (4 or 16 octets)         |
4192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Hash Key Type | Depth Limit   |        Multipath Length       |
4212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
4232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                     (Multipath Information)                   .
4242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
4252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |               Downstream Label                |    Protocol   |
4272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
4292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
4302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .                                                               .
4312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |               Downstream Label                |    Protocol   |
4332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
4352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_downstream_map_ipv4_t {
4362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t mtu [2];
4372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t address_type;
4382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t res;
4392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t downstream_ip[4];
4402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t downstream_interface[4];
4412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_downstream_map_ipv6_t {
4442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t mtu [2];
4452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t address_type;
4462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t res;
4472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t downstream_ip[16];
4482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t downstream_interface[16];
4492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lspping_tlv_downstream_map_info_t {
4522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t hash_key_type;
4532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t depth_limit;
4542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t multipath_length [2];
4552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LSPPING_AFI_IPV4 1
4582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LSPPING_AFI_UNMB 2
4592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LSPPING_AFI_IPV6 3
4602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok lspping_tlv_downstream_addr_values[] = {
4622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_AFI_IPV4, "IPv4"},
4632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_AFI_IPV6, "IPv6"},
4642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { LSPPING_AFI_UNMB, "Unnumbered"},
4652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    { 0, NULL}
4662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
4672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid
4692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectlspping_print(register const u_char *pptr, register u_int len) {
4702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    const struct lspping_common_header *lspping_com_header;
4722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    const struct lspping_tlv_header *lspping_tlv_header;
4732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    const struct lspping_tlv_header *lspping_subtlv_header;
4742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    const u_char *tptr,*tlv_tptr,*subtlv_tptr;
4752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    int tlen,lspping_tlv_len,lspping_tlv_type,tlv_tlen;
4762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    int tlv_hexdump,subtlv_hexdump;
4772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    int lspping_subtlv_len,lspping_subtlv_type;
4782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    struct timeval timestamp;
4792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
4812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_downstream_map_ipv4_t *lspping_tlv_downstream_map_ipv4;
4822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_downstream_map_ipv6_t *lspping_tlv_downstream_map_ipv6;
4832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_downstream_map_info_t  *lspping_tlv_downstream_map_info;
4842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } tlv_ptr;
4852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
4862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
4872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_ldp_ipv4_t *lspping_tlv_targetfec_subtlv_ldp_ipv4;
4882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_ldp_ipv6_t *lspping_tlv_targetfec_subtlv_ldp_ipv6;
4892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_rsvp_ipv4_t *lspping_tlv_targetfec_subtlv_rsvp_ipv4;
4902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_rsvp_ipv6_t *lspping_tlv_targetfec_subtlv_rsvp_ipv6;
4912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv4_t *lspping_tlv_targetfec_subtlv_l3vpn_ipv4;
4922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv6_t *lspping_tlv_targetfec_subtlv_l3vpn_ipv6;
4932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_l2vpn_endpt_t *lspping_tlv_targetfec_subtlv_l2vpn_endpt;
4942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_l2vpn_vcid_old_t *lspping_tlv_targetfec_subtlv_l2vpn_vcid_old;
4952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_l2vpn_vcid_t *lspping_tlv_targetfec_subtlv_l2vpn_vcid;
4962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_bgp_ipv4_t *lspping_tlv_targetfec_subtlv_bgp_ipv4;
4972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        const struct lspping_tlv_targetfec_subtlv_bgp_ipv6_t *lspping_tlv_targetfec_subtlv_bgp_ipv6;
4982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } subtlv_ptr;
4992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    tptr=pptr;
5012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    lspping_com_header = (const struct lspping_common_header *)pptr;
5022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    TCHECK(*lspping_com_header);
5032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /*
5052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project     * Sanity checking of the header.
5062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project     */
5072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (EXTRACT_16BITS(&lspping_com_header->version[0]) != LSPPING_VERSION) {
5082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	printf("LSP-PING version %u packet not supported",
5092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               EXTRACT_16BITS(&lspping_com_header->version[0]));
5102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	return;
5112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
5122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /* in non-verbose mode just lets print the basic Message Type*/
5142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (vflag < 1) {
5152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("LSP-PINGv%u, %s, seq %u, length: %u",
5162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               EXTRACT_16BITS(&lspping_com_header->version[0]),
5172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               tok2str(lspping_msg_type_values, "unknown (%u)",lspping_com_header->msg_type),
5182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               EXTRACT_32BITS(lspping_com_header->seq_number),
5192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               len);
5202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        return;
5212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
5222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /* ok they seem to want to know everything - lets fully decode it */
5242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    tlen=len;
5262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\tLSP-PINGv%u, msg-type: %s (%u), length: %u\n\t  reply-mode: %s (%u)",
5282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           EXTRACT_16BITS(&lspping_com_header->version[0]),
5292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           tok2str(lspping_msg_type_values, "unknown",lspping_com_header->msg_type),
5302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           lspping_com_header->msg_type,
5312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           len,
5322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           tok2str(lspping_reply_mode_values, "unknown",lspping_com_header->reply_mode),
5332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           lspping_com_header->reply_mode);
5342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /*
5362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project     *  the following return codes require that the subcode is attached
5372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project     *  at the end of the translated token output
5382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project     */
5392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if (lspping_com_header->return_code == 3 ||
5402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_com_header->return_code == 4 ||
5412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_com_header->return_code == 8 ||
5422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_com_header->return_code == 10 ||
5432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_com_header->return_code == 11 ||
5442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_com_header->return_code == 12 )
5452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("\n\t  Return Code: %s %u (%u)\n\t  Return Subcode: (%u)",
5462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               tok2str(lspping_return_code_values, "unknown",lspping_com_header->return_code),
5472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               lspping_com_header->return_subcode,
5482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               lspping_com_header->return_code,
5492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               lspping_com_header->return_subcode);
5502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    else
5512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("\n\t  Return Code: %s (%u)\n\t  Return Subcode: (%u)",
5522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               tok2str(lspping_return_code_values, "unknown",lspping_com_header->return_code),
5532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               lspping_com_header->return_code,
5542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               lspping_com_header->return_subcode);
5552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\t  Sender Handle: 0x%08x, Sequence: %u",
5572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           EXTRACT_32BITS(lspping_com_header->sender_handle),
5582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project           EXTRACT_32BITS(lspping_com_header->seq_number));
5592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    timestamp.tv_sec=EXTRACT_32BITS(lspping_com_header->ts_sent_sec);
5612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    timestamp.tv_usec=EXTRACT_32BITS(lspping_com_header->ts_sent_usec);
5622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\t  Sender Timestamp: ");
5632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    ts_print(&timestamp);
5642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    timestamp.tv_sec=EXTRACT_32BITS(lspping_com_header->ts_rcvd_sec);
5662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    timestamp.tv_usec=EXTRACT_32BITS(lspping_com_header->ts_rcvd_usec);
5672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("Receiver Timestamp: ");
5682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    if ((timestamp.tv_sec != 0) && (timestamp.tv_usec != 0))
5692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        ts_print(&timestamp);
5702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    else
5712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("no timestamp");
5722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    tptr+=sizeof(const struct lspping_common_header);
5742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    tlen-=sizeof(const struct lspping_common_header);
5752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    while(tlen>(int)sizeof(struct lspping_tlv_header)) {
57753f17a9db278d33517d9888dd77848f554522a38JP Abgrall
5782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* did we capture enough for fully decoding the tlv header ? */
5792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (!TTEST2(*tptr, sizeof(struct lspping_tlv_header)))
5802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            goto trunc;
5812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_tlv_header = (const struct lspping_tlv_header *)tptr;
5832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_tlv_type=EXTRACT_16BITS(lspping_tlv_header->type);
5842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        lspping_tlv_len=EXTRACT_16BITS(lspping_tlv_header->length);
5852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
58653f17a9db278d33517d9888dd77848f554522a38JP Abgrall        /* some little sanity checking */
58753f17a9db278d33517d9888dd77848f554522a38JP Abgrall        if (lspping_tlv_type == 0 || lspping_tlv_len == 0)
5882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            return;
5892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
59053f17a9db278d33517d9888dd77848f554522a38JP Abgrall        if(lspping_tlv_len < 4) {
5912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t  ERROR: TLV %u bogus size %u",lspping_tlv_type,lspping_tlv_len);
5922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            return;
5932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
5942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
5952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        printf("\n\t  %s TLV (%u), length: %u",
5962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               tok2str(lspping_tlv_values,
5972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       "Unknown",
5982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       lspping_tlv_type),
5992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               lspping_tlv_type,
6002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project               lspping_tlv_len);
6012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        tlv_tptr=tptr+sizeof(struct lspping_tlv_header);
6032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        tlv_tlen=lspping_tlv_len; /* header not included -> no adjustment */
6042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* did we capture enough for fully decoding the tlv ? */
6062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (!TTEST2(*tptr, lspping_tlv_len))
6072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            goto trunc;
6082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        tlv_hexdump=FALSE;
6092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        switch(lspping_tlv_type) {
6112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case LSPPING_TLV_TARGET_FEC_STACK:
6122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            while(tlv_tlen>(int)sizeof(struct lspping_tlv_header)) {
6132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                /* did we capture enough for fully decoding the subtlv header ? */
6152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (!TTEST2(*tptr, sizeof(struct lspping_tlv_header)))
6162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    goto trunc;
6172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                subtlv_hexdump=FALSE;
6182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                lspping_subtlv_header = (const struct lspping_tlv_header *)tlv_tptr;
6202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                lspping_subtlv_type=EXTRACT_16BITS(lspping_subtlv_header->type);
6212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                lspping_subtlv_len=EXTRACT_16BITS(lspping_subtlv_header->length);
6222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                subtlv_tptr=tlv_tptr+sizeof(struct lspping_tlv_header);
6232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (lspping_subtlv_len == 0)
6252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
6262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("\n\t    %s subTLV (%u), length: %u",
6282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       tok2str(lspping_tlvtargetfec_subtlv_values,
6292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               "Unknown",
6302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               lspping_subtlv_type),
6312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       lspping_subtlv_type,
6322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       lspping_subtlv_len);
6332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                switch(lspping_subtlv_type) {
6352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV4:
6372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv4 = \
6382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_ldp_ipv4_t *)subtlv_tptr;
6392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      %s/%u",
6402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv4->prefix),
6412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv4->prefix_len);
6422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
6432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
6452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV6:
6462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv6 = \
6472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_ldp_ipv6_t *)subtlv_tptr;
6482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      %s/%u",
6492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ip6addr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv6->prefix),
6502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv6->prefix_len);
6512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
6522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
6532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV4:
6552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv4 = \
6562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_bgp_ipv4_t *)subtlv_tptr;
6572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      %s/%u, sender-id %s",
6582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv4->prefix),
6592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv4->prefix_len,
6602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv4->sender_id));
6612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
6622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
6642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV6:
6652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv6 = \
6662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_bgp_ipv6_t *)subtlv_tptr;
6672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      %s/%u, sender-id %s",
6682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ip6addr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv6->prefix),
6692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv6->prefix_len,
6702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ip6addr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv6->sender_id));
6712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
6722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
6732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV4:
6752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4 = \
6762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_rsvp_ipv4_t *)subtlv_tptr;
6772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      tunnel end-point %s, tunnel sender %s, lsp-id 0x%04x" \
6782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           "\n\t      tunnel-id 0x%04x, extended tunnel-id %s",
6792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->tunnel_endpoint),
6802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->tunnel_sender),
6812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->lsp_id),
6822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->tunnel_id),
6832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->extended_tunnel_id));
6842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
6852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
6862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
6872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV6:
6882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6 = \
6892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_rsvp_ipv6_t *)subtlv_tptr;
6902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      tunnel end-point %s, tunnel sender %s, lsp-id 0x%04x" \
6912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           "\n\t      tunnel-id 0x%04x, extended tunnel-id %s",
6922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ip6addr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->tunnel_endpoint),
6932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ip6addr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->tunnel_sender),
6942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->lsp_id),
6952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->tunnel_id),
6962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ip6addr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->extended_tunnel_id));
6972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
6982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
6992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV4:
7012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4 = \
7022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv4_t *)subtlv_tptr;
7032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      RD: %s, %s/%u",
7042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           bgp_vpn_rd_print(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4->rd),
7052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4->prefix),
7062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4->prefix_len);
7072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
7082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
7102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV6:
7112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6 = \
7122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv6_t *)subtlv_tptr;
7132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      RD: %s, %s/%u",
7142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           bgp_vpn_rd_print(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6->rd),
7152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ip6addr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6->prefix),
7162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6->prefix_len);
7172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
7182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
7192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_ENDPT:
7212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt = \
7222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_l2vpn_endpt_t *)subtlv_tptr;
7232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      RD: %s, Sender CE-ID: %u, Receiver CE-ID: %u" \
7242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           "\n\t      Encapsulation Type: %s (%u)",
7252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           bgp_vpn_rd_print(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->rd),
7262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->sender_ce_id),
7272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->receiver_ce_id),
7282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(l2vpn_encaps_values,
7292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   "unknown",
7302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->encapsulation)),
7312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->encapsulation));
7322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
7342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    /* the old L2VPN VCID subTLV does not have support for the sender field */
7362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_VCID_OLD:
7372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old = \
7382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_l2vpn_vcid_old_t *)subtlv_tptr;
7392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      Remote PE: %s" \
7402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           "\n\t      VC-ID: 0x%08x, Encapsulation Type: %s (%u)",
7412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->remote_pe_address),
7422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_32BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->vc_id),
7432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(l2vpn_encaps_values,
7442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   "unknown",
7452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->encapsulation)),
7462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->encapsulation));
7472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
7492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                case LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_VCID:
7512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid = \
7522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                        (const struct lspping_tlv_targetfec_subtlv_l2vpn_vcid_t *)subtlv_tptr;
7532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    printf("\n\t      Sender PE: %s, Remote PE: %s" \
7542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           "\n\t      VC-ID: 0x%08x, Encapsulation Type: %s (%u)",
7552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->sender_pe_address),
7562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           ipaddr_string(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->remote_pe_address),
7572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_32BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->vc_id),
7582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tok2str(l2vpn_encaps_values,
7592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   "unknown",
7602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                   EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->encapsulation)),
7612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           EXTRACT_16BITS(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->encapsulation));
7622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
7642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                default:
7662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
7672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    break;
7682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                }
7692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                /* do we want to see an additionally subtlv hexdump ? */
7702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                if (vflag > 1 || subtlv_hexdump==TRUE)
7712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    print_unknown_data(tlv_tptr+sizeof(struct lspping_tlv_header), \
7722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                       "\n\t      ",
7732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                                       lspping_subtlv_len);
7742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tptr+=lspping_subtlv_len;
7762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tlen-=lspping_subtlv_len+sizeof(struct lspping_tlv_header);
7772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
7782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
7792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case LSPPING_TLV_DOWNSTREAM_MAPPING:
7812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            /* that strange thing with the downstream map TLV is that until now
7822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             * we do not know if its IPv4 or IPv6 , after we found the adress-type
7832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             * lets recast the tlv_tptr and move on */
7842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tlv_ptr.lspping_tlv_downstream_map_ipv4= \
7862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                (const struct lspping_tlv_downstream_map_ipv4_t *)tlv_tptr;
7872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tlv_ptr.lspping_tlv_downstream_map_ipv6= \
7882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                (const struct lspping_tlv_downstream_map_ipv6_t *)tlv_tptr;
7892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t    MTU: %u, Address-Type: %s (%u)",
7902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   EXTRACT_16BITS(tlv_ptr.lspping_tlv_downstream_map_ipv4->mtu),
7912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   tok2str(lspping_tlv_downstream_addr_values,
7922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           "unknown",
7932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                           tlv_ptr.lspping_tlv_downstream_map_ipv4->address_type),
7942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                   tlv_ptr.lspping_tlv_downstream_map_ipv4->address_type);
7952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            switch(tlv_ptr.lspping_tlv_downstream_map_ipv4->address_type) {
7972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
7982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case LSPPING_AFI_IPV4:
7992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("\n\t    Downstream IP: %s" \
8002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       "\n\t    Downstream Interface IP: %s",
8012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(tlv_ptr.lspping_tlv_downstream_map_ipv4->downstream_ip),
8022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(tlv_ptr.lspping_tlv_downstream_map_ipv4->downstream_interface));
8032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_ipv4_t);
8042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_ipv4_t);
8052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
8072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             case LSPPING_AFI_IPV6:
8082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("\n\t    Downstream IP: %s" \
8092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       "\n\t    Downstream Interface IP: %s",
8102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(tlv_ptr.lspping_tlv_downstream_map_ipv6->downstream_ip),
8112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ip6addr_string(tlv_ptr.lspping_tlv_downstream_map_ipv6->downstream_interface));
8122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_ipv6_t);
8132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_ipv6_t);
8142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
8162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            case LSPPING_AFI_UNMB:
8172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                printf("\n\t    Downstream IP: %s" \
8182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       "\n\t    Downstream Interface Index: 0x%08x",
8192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       ipaddr_string(tlv_ptr.lspping_tlv_downstream_map_ipv4->downstream_ip),
8202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                       EXTRACT_32BITS(tlv_ptr.lspping_tlv_downstream_map_ipv4->downstream_interface));
8212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_ipv4_t);
8222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_ipv4_t);
8232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            default:
8262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                /* should not happen ! - no error message - tok2str() has barked already */
8272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                break;
8282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            }
8292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tlv_ptr.lspping_tlv_downstream_map_info= \
8312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                (const struct lspping_tlv_downstream_map_info_t *)tlv_tptr;
8322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            /* FIXME add hash-key type, depth limit, multipath processing */
8342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_info_t);
8372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_info_t);
8382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            /* FIXME print downstream labels */
8402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tlv_hexdump=TRUE; /* dump the TLV until code complete */
8432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
8452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case LSPPING_TLV_BFD_DISCRIMINATOR:
8472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            tptr += sizeof(struct lspping_tlv_header);
8482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            if (!TTEST2(*tptr, LSPPING_TLV_BFD_DISCRIMINATOR_LEN))
8492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                goto trunc;
8502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            printf("\n\t    BFD Discriminator 0x%08x", EXTRACT_32BITS(tptr));
8512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
85253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
85353f17a9db278d33517d9888dd77848f554522a38JP Abgrall        case  LSPPING_TLV_VENDOR_ENTERPRISE:
85453f17a9db278d33517d9888dd77848f554522a38JP Abgrall        {
85553f17a9db278d33517d9888dd77848f554522a38JP Abgrall            u_int32_t vendor_id;
85653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
85753f17a9db278d33517d9888dd77848f554522a38JP Abgrall            if (!TTEST2(*tptr, LSPPING_TLV_VENDOR_ENTERPRISE_LEN))
85853f17a9db278d33517d9888dd77848f554522a38JP Abgrall                goto trunc;
85953f17a9db278d33517d9888dd77848f554522a38JP Abgrall            vendor_id = EXTRACT_32BITS(tlv_tptr);
86053f17a9db278d33517d9888dd77848f554522a38JP Abgrall            printf("\n\t    Vendor: %s (0x%04x)",
86153f17a9db278d33517d9888dd77848f554522a38JP Abgrall                   tok2str(smi_values, "Unknown", vendor_id),
86253f17a9db278d33517d9888dd77848f554522a38JP Abgrall                   vendor_id);
86353f17a9db278d33517d9888dd77848f554522a38JP Abgrall        }
86453f17a9db278d33517d9888dd77848f554522a38JP Abgrall            break;
86553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
8662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            /*
8672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             *  FIXME those are the defined TLVs that lack a decoder
8682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             *  you are welcome to contribute code ;-)
8692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             */
8702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case LSPPING_TLV_PAD:
8712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case LSPPING_TLV_ERROR_CODE:
8722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        case LSPPING_TLV_VENDOR_PRIVATE:
8732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
8742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        default:
8752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            if (vflag <= 1)
8762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                print_unknown_data(tlv_tptr,"\n\t    ",tlv_tlen);
8772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            break;
8782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        }
8792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* do we want to see an additionally tlv hexdump ? */
8802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        if (vflag > 1 || tlv_hexdump==TRUE)
88153f17a9db278d33517d9888dd77848f554522a38JP Abgrall            print_unknown_data(tptr+sizeof(struct lspping_tlv_header),"\n\t    ",
8822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                               lspping_tlv_len);
8832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
88453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
88553f17a9db278d33517d9888dd77848f554522a38JP Abgrall        /* All TLVs are aligned to four octet boundary */
88653f17a9db278d33517d9888dd77848f554522a38JP Abgrall        if (lspping_tlv_len % 4) {
88753f17a9db278d33517d9888dd77848f554522a38JP Abgrall            lspping_tlv_len += (4 - lspping_tlv_len % 4);
88853f17a9db278d33517d9888dd77848f554522a38JP Abgrall        }
88953f17a9db278d33517d9888dd77848f554522a38JP Abgrall
8902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        tptr+=lspping_tlv_len+sizeof(struct lspping_tlv_header);
8912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        tlen-=lspping_tlv_len+sizeof(struct lspping_tlv_header);
8922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    }
8932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    return;
8942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc:
8952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    printf("\n\t\t packet exceeded snapshot");
8962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}
897