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 * and Steinar Haug (sthaug@nethelp.no) 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "@(#) $Header: /tcpdump/master/tcpdump/print-ldp.c,v 1.8.2.10 2007/02/26 13:31:33 hannes Exp $"; 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdlib.h> 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "decode_prefix.h" 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h" 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "af.h" 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "l2vpn.h" 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ldp common header 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 1 2 3 442949f58a438f6fd85f66a8b7ed4708042cde4b37The 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 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Version | PDU Length | 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | LDP Identifier | 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ldp_common_header { 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t version[2]; 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t pdu_length[2]; 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t lsr_id[4]; 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t label_space[2]; 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_VERSION 1 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ldp message header 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 1 2 3 682949f58a438f6fd85f66a8b7ed4708042cde4b37The 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 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |U| Message Type | Message Length | 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Message ID | 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * + + 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Mandatory Parameters | 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * + + 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * + + 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Optional Parameters | 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * + + 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ldp_msg_header { 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t type[2]; 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t length[2]; 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t id[4]; 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MASK_MSG_TYPE(x) ((x)&0x7fff) 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MASK_U_BIT(x) ((x)&0x8000) 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_NOTIF 0x0001 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_HELLO 0x0100 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_INIT 0x0200 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_KEEPALIVE 0x0201 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_ADDRESS 0x0300 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_ADDRESS_WITHDRAW 0x0301 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_LABEL_MAPPING 0x0400 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_LABEL_REQUEST 0x0401 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_LABEL_WITHDRAW 0x0402 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_LABEL_RELEASE 0x0403 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MSG_LABEL_ABORT_REQUEST 0x0404 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_VENDOR_PRIVATE_MIN 0x3e00 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_VENDOR_PRIVATE_MAX 0x3eff 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_EXPERIMENTAL_MIN 0x3f00 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_EXPERIMENTAL_MAX 0x3fff 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok ldp_msg_values[] = { 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_NOTIF, "Notification" }, 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_HELLO, "Hello" }, 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_INIT, "Initialization" }, 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_KEEPALIVE, "Keepalive" }, 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_ADDRESS, "Address" }, 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_ADDRESS_WITHDRAW, "Address Withdraw" }, 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_LABEL_MAPPING, "Label Mapping" }, 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_LABEL_REQUEST, "Label Request" }, 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_LABEL_WITHDRAW, "Label Withdraw" }, 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_LABEL_RELEASE, "Label Release" }, 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_MSG_LABEL_ABORT_REQUEST, "Label Abort Request" }, 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL} 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MASK_TLV_TYPE(x) ((x)&0x3fff) 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_MASK_F_BIT(x) ((x)&0x4000) 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_FEC 0x0100 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_ADDRESS_LIST 0x0101 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_HOP_COUNT 0x0103 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_PATH_VECTOR 0x0104 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_GENERIC_LABEL 0x0200 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_ATM_LABEL 0x0201 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_FR_LABEL 0x0202 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_STATUS 0x0300 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_EXTD_STATUS 0x0301 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_RETURNED_PDU 0x0302 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_RETURNED_MSG 0x0303 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_COMMON_HELLO 0x0400 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_IPV4_TRANSPORT_ADDR 0x0401 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_CONFIG_SEQ_NUMBER 0x0402 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_IPV6_TRANSPORT_ADDR 0x0403 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_COMMON_SESSION 0x0500 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_ATM_SESSION_PARM 0x0501 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_FR_SESSION_PARM 0x0502 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_FT_SESSION 0x0503 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_TLV_LABEL_REQUEST_MSG_ID 0x0600 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok ldp_tlv_values[] = { 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_FEC, "FEC" }, 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_ADDRESS_LIST, "Address List" }, 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_HOP_COUNT, "Hop Count" }, 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_PATH_VECTOR, "Path Vector" }, 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_GENERIC_LABEL, "Generic Label" }, 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_ATM_LABEL, "ATM Label" }, 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_FR_LABEL, "Frame-Relay Label" }, 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_STATUS, "Status" }, 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_EXTD_STATUS, "Extended Status" }, 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_RETURNED_PDU, "Returned PDU" }, 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_RETURNED_MSG, "Returned Message" }, 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_COMMON_HELLO, "Common Hello Parameters" }, 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_IPV4_TRANSPORT_ADDR, "IPv4 Transport Address" }, 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_CONFIG_SEQ_NUMBER, "Configuration Sequence Number" }, 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_IPV6_TRANSPORT_ADDR, "IPv6 Transport Address" }, 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_COMMON_SESSION, "Common Session Parameters" }, 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_ATM_SESSION_PARM, "ATM Session Parameters" }, 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_FR_SESSION_PARM, "Frame-Relay Session Parameters" }, 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_FT_SESSION, "Fault-Tolerant Session Parameters" }, 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_TLV_LABEL_REQUEST_MSG_ID, "Label Request Message ID" }, 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL} 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_FEC_WILDCARD 0x01 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_FEC_PREFIX 0x02 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_FEC_HOSTADDRESS 0x03 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* From draft-martini-l2circuit-trans-mpls-13.txt */ 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_FEC_MARTINI_VC 0x80 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok ldp_fec_values[] = { 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_FEC_WILDCARD, "Wildcard" }, 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_FEC_PREFIX, "Prefix" }, 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_FEC_HOSTADDRESS, "Host address" }, 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_FEC_MARTINI_VC, "Martini VC" }, 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL} 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_FEC_MARTINI_IFPARM_MTU 0x01 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_FEC_MARTINI_IFPARM_DESC 0x03 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LDP_FEC_MARTINI_IFPARM_VCCV 0x0c 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok ldp_fec_martini_ifparm_values[] = { 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_FEC_MARTINI_IFPARM_MTU, "MTU" }, 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_FEC_MARTINI_IFPARM_DESC, "Description" }, 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { LDP_FEC_MARTINI_IFPARM_VCCV, "VCCV" }, 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL} 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* draft-ietf-pwe3-vccv-04.txt */ 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok ldp_fec_martini_ifparm_vccv_cc_values[] = { 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01, "PWE3 control word" }, 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x02, "MPLS Router Alert Label" }, 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x04, "MPLS inner label TTL = 1" }, 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL} 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* draft-ietf-pwe3-vccv-04.txt */ 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok ldp_fec_martini_ifparm_vccv_cv_values[] = { 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01, "ICMP Ping" }, 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x02, "LSP Ping" }, 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x04, "BFD" }, 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL} 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define AFNUM_LEN 2 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint ldp_msg_print(register const u_char *); 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint ldp_tlv_print(register const u_char *); 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ldp tlv header 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 1 2 3 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The 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 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * |U|F| Type | Length | 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Value | 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ~ ~ 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | | 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectldp_tlv_print(register const u_char *tptr) { 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct ldp_tlv_header { 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t type[2]; 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t length[2]; 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct ldp_tlv_header *ldp_tlv_header; 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short tlv_type,tlv_len,tlv_tlen,af,ft_flags; 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_char fec_type; 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int ui,vc_info_len, vc_info_tlv_type, vc_info_tlv_len,idx; 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[100]; 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ldp_tlv_header = (const struct ldp_tlv_header *)tptr; 2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_len=EXTRACT_16BITS(ldp_tlv_header->length); 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_tlen=tlv_len; 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_type=LDP_MASK_TLV_TYPE(EXTRACT_16BITS(ldp_tlv_header->type)); 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* FIXME vendor private / experimental check */ 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t %s TLV (0x%04x), length: %u, Flags: [%s and %s forward if unknown]", 2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(ldp_tlv_values, 2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Unknown", 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_type), 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_type, 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_len, 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project LDP_MASK_U_BIT(EXTRACT_16BITS(&ldp_tlv_header->type)) ? "continue processing" : "ignore", 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project LDP_MASK_F_BIT(EXTRACT_16BITS(&ldp_tlv_header->type)) ? "do" : "don't"); 2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=sizeof(struct ldp_tlv_header); 2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch(tlv_type) { 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_COMMON_HELLO: 2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Hold Time: %us, Flags: [%s Hello%s]", 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(tptr), 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (EXTRACT_16BITS(tptr+2)&0x8000) ? "Targeted" : "Link", 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (EXTRACT_16BITS(tptr+2)&0x4000) ? ", Request for targeted Hellos" : ""); 2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_IPV4_TRANSPORT_ADDR: 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t IPv4 Transport Address: %s", ipaddr_string(tptr)); 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_IPV6_TRANSPORT_ADDR: 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t IPv6 Transport Address: %s", ip6addr_string(tptr)); 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_CONFIG_SEQ_NUMBER: 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Sequence Number: %u", EXTRACT_32BITS(tptr)); 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_ADDRESS_LIST: 2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project af = EXTRACT_16BITS(tptr); 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=AFNUM_LEN; 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_tlen -= AFNUM_LEN; 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Address Family: "); 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (af == AFNUM_INET) { 2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("IPv4, addresses:"); 3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while(tlv_tlen >= sizeof(struct in_addr)) { 3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s",ipaddr_string(tptr)); 3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_tlen-=sizeof(struct in_addr); 3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=sizeof(struct in_addr); 3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (af == AFNUM_INET6) { 3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("IPv6, addresses:"); 3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while(tlv_tlen >= sizeof(struct in6_addr)) { 3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s",ip6addr_string(tptr)); 3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlv_tlen-=sizeof(struct in6_addr); 3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=sizeof(struct in6_addr); 3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_COMMON_SESSION: 3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Version: %u, Keepalive: %us, Flags: [Downstream %s, Loop Detection %s]", 3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(tptr), EXTRACT_16BITS(tptr+2), 3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (EXTRACT_16BITS(tptr+6)&0x8000) ? "On Demand" : "Unsolicited", 3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (EXTRACT_16BITS(tptr+6)&0x4000) ? "Enabled" : "Disabled" 3232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ); 3242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_FEC: 3272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fec_type = *tptr; 3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t %s FEC (0x%02x)", 3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(ldp_fec_values, "Unknown", fec_type), 3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fec_type); 3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=1; 3332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch(fec_type) { 3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_FEC_WILDCARD: 3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_FEC_PREFIX: 3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project af = EXTRACT_16BITS(tptr); 3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=2; 3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (af == AFNUM_INET) { 3412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i=decode_prefix4(tptr,buf,sizeof(buf)); 3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(": IPv4 prefix %s",buf); 3432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (af == AFNUM_INET6) { 3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i=decode_prefix6(tptr,buf,sizeof(buf)); 3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(": IPv6 prefix %s",buf); 3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_FEC_HOSTADDRESS: 3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_FEC_MARTINI_VC: 3542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!TTEST2(*tptr, 11)) 3552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 3562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vc_info_len = *(tptr+2); 3572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(": %s, %scontrol word, group-ID %u, VC-ID %u, VC-info-length: %u", 3592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(l2vpn_encaps_values, "Unknown", EXTRACT_16BITS(tptr)&0x7fff), 3602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(tptr)&0x8000 ? "" : "no ", 3612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(tptr+3), 3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(tptr+7), 3632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vc_info_len); 3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vc_info_len == 0) /* infinite loop protection */ 3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=11; 3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!TTEST2(*tptr, vc_info_len)) 3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (vc_info_len > 2) { 3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vc_info_tlv_type = *tptr; 3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vc_info_tlv_len = *(tptr+1); 3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vc_info_tlv_len < 2) 3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vc_info_len < vc_info_tlv_len) 3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t\tInterface Parameter: %s (0x%02x), len %u", 3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(ldp_fec_martini_ifparm_values,"Unknown",vc_info_tlv_type), 3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vc_info_tlv_type, 3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vc_info_tlv_len); 3842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch(vc_info_tlv_type) { 3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_FEC_MARTINI_IFPARM_MTU: 3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(": %u",EXTRACT_16BITS(tptr+2)); 3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_FEC_MARTINI_IFPARM_DESC: 3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(": "); 3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (idx = 2; idx < vc_info_tlv_len; idx++) 3932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project safeputchar(*(tptr+idx)); 3942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_FEC_MARTINI_IFPARM_VCCV: 3972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t\t Control Channels (0x%02x) = [%s]", 3982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *(tptr+2), 3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bittok2str(ldp_fec_martini_ifparm_vccv_cc_values,"none",*(tptr+2))); 4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t\t CV Types (0x%02x) = [%s]", 4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *(tptr+3), 4022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bittok2str(ldp_fec_martini_ifparm_vccv_cv_values,"none",*(tptr+3))); 4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data(tptr+2,"\n\t\t ",vc_info_tlv_len-2); 4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vc_info_len -= vc_info_tlv_len; 4112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr += vc_info_tlv_len; 4122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_GENERIC_LABEL: 4192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Label: %u", EXTRACT_32BITS(tptr) & 0xfffff); 4202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_STATUS: 4232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ui = EXTRACT_32BITS(tptr); 4242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=4; 4252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Status: 0x%02x, Flags: [%s and %s forward]", 4262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ui&0x3fffffff, 4272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ui&0x80000000 ? "Fatal error" : "Advisory Notification", 4282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ui&0x40000000 ? "do" : "don't"); 4292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ui = EXTRACT_32BITS(tptr); 4302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=4; 4312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ui) 4322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(", causing Message ID: 0x%08x", ui); 4332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_FT_SESSION: 4362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ft_flags = EXTRACT_16BITS(tptr); 4372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Flags: [%sReconnect, %sSave State, %sAll-Label Protection, %s Checkpoint, %sRe-Learn State]", 4382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ft_flags&0x8000 ? "" : "No ", 4392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ft_flags&0x8 ? "" : "Don't ", 4402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ft_flags&0x4 ? "" : "No ", 4412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ft_flags&0x2 ? "Sequence Numbered Label" : "All Labels", 4422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ft_flags&0x1 ? "" : "Don't "); 4432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=4; 4442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ui = EXTRACT_32BITS(tptr); 4452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ui) 4462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(", Reconnect Timeout: %ums", ui); 4472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr+=4; 4482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ui = EXTRACT_32BITS(tptr); 4492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ui) 4502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(", Recovery Time: %ums", ui); 4512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 4552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FIXME those are the defined TLVs that lack a decoder 4562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * you are welcome to contribute code ;-) 4572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 4582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_HOP_COUNT: 4602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_PATH_VECTOR: 4612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_ATM_LABEL: 4622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_FR_LABEL: 4632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_EXTD_STATUS: 4642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_RETURNED_PDU: 4652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_RETURNED_MSG: 4662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_ATM_SESSION_PARM: 4672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_FR_SESSION_PARM: 4682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_TLV_LABEL_REQUEST_MSG_ID: 4692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 4712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag <= 1) 4722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data(tptr,"\n\t ",tlv_tlen); 4732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(tlv_len+4); /* Type & Length fields not included */ 4762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 4782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t\t packet exceeded snapshot"); 4792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 4802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 4832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectldp_print(register const u_char *pptr, register u_int len) { 4842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int processed; 4862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (len > (sizeof(struct ldp_common_header) + sizeof(struct ldp_msg_header))) { 4872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project processed = ldp_msg_print(pptr); 4882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (processed == 0) 4892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len -= processed; 4912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pptr += processed; 4922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint 4972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectldp_msg_print(register const u_char *pptr) { 4982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct ldp_common_header *ldp_com_header; 5002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct ldp_msg_header *ldp_msg_header; 5012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *tptr,*msg_tptr; 5022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short tlen; 5032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short pdu_len,msg_len,msg_type,msg_tlen; 5042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int hexdump,processed; 5052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr=pptr; 5072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ldp_com_header = (const struct ldp_common_header *)pptr; 5082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(*ldp_com_header); 5092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 5112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Sanity checking of the header. 5122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 5132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (EXTRACT_16BITS(&ldp_com_header->version) != LDP_VERSION) { 5142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%sLDP version %u packet not supported", 5152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (vflag < 1) ? "" : "\n\t", 5162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(&ldp_com_header->version)); 5172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 5182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* print the LSR-ID, label-space & length */ 5212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pdu_len = EXTRACT_16BITS(&ldp_com_header->pdu_length); 5222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%sLDP, Label-Space-ID: %s:%u, pdu-length: %u", 5232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (vflag < 1) ? "" : "\n\t", 5242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ipaddr_string(&ldp_com_header->lsr_id), 5252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(&ldp_com_header->label_space), 5262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pdu_len); 5272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* bail out if non-verbose */ 5292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 1) 5302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 5312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* ok they seem to want to know everything - lets fully decode it */ 5332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlen=pdu_len; 5342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr += sizeof(const struct ldp_common_header); 5362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlen -= sizeof(const struct ldp_common_header)-4; /* Type & Length fields not included */ 5372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while(tlen>0) { 5392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* did we capture enough for fully decoding the msg header ? */ 5402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!TTEST2(*tptr, sizeof(struct ldp_msg_header))) 5412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 5422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ldp_msg_header = (const struct ldp_msg_header *)tptr; 5442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_len=EXTRACT_16BITS(ldp_msg_header->length); 5452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_type=LDP_MASK_MSG_TYPE(EXTRACT_16BITS(ldp_msg_header->type)); 5462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* FIXME vendor private / experimental check */ 5482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t %s Message (0x%04x), length: %u, Message ID: 0x%08x, Flags: [%s if unknown]", 5492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(ldp_msg_values, 5502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Unknown", 5512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_type), 5522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_type, 5532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_len, 5542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(&ldp_msg_header->id), 5552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project LDP_MASK_U_BIT(EXTRACT_16BITS(&ldp_msg_header->type)) ? "continue processing" : "ignore"); 5562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (msg_len == 0) /* infinite loop protection */ 5582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 5592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_tptr=tptr+sizeof(struct ldp_msg_header); 5612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_tlen=msg_len-sizeof(struct ldp_msg_header)+4; /* Type & Length fields not included */ 5622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* did we capture enough for fully decoding the message ? */ 5642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!TTEST2(*tptr, msg_len)) 5652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 5662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project hexdump=FALSE; 5672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch(msg_type) { 5692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_NOTIF: 5712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_HELLO: 5722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_INIT: 5732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_KEEPALIVE: 5742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_ADDRESS: 5752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_LABEL_MAPPING: 5762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_ADDRESS_WITHDRAW: 5772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_LABEL_WITHDRAW: 5782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while(msg_tlen >= 4) { 5792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project processed = ldp_tlv_print(msg_tptr); 5802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (processed == 0) 5812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_tlen-=processed; 5832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_tptr+=processed; 5842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 5882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FIXME those are the defined messages that lack a decoder 5892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * you are welcome to contribute code ;-) 5902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 5912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_LABEL_REQUEST: 5932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_LABEL_RELEASE: 5942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case LDP_MSG_LABEL_ABORT_REQUEST: 5952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 5972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag <= 1) 5982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data(msg_tptr,"\n\t ",msg_tlen); 5992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 6002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* do we want to see an additionally hexdump ? */ 6022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 1 || hexdump==TRUE) 6032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data(tptr+sizeof(sizeof(struct ldp_msg_header)),"\n\t ", 6042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project msg_len); 6052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tptr += msg_len+4; 6072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tlen -= msg_len+4; 6082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return pdu_len+4; 6102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 6112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t\t packet exceeded snapshot"); 6122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 6132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 615