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