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