/* 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that: (1) source code
 * distributions retain the above copyright notice and this paragraph
 * in its entirety, and (2) distributions including binary code include
 * the above copyright notice and this paragraph in its entirety in
 * the documentation or other materials provided with the distribution.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE.
 *
 * Original code by Hannes Gredler (hannes@juniper.net)
 */

#ifndef lint
static const char rcsid[] _U_ =
    "@(#) $Header: /tcpdump/master/tcpdump/gmpls.c,v 1.7 2006-04-14 07:11:59 hannes Exp $ (LBL)";
#endif

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <tcpdump-stdinc.h>

#include "interface.h"
#include "gmpls.h"

/* rfc3471 */
const struct tok gmpls_link_prot_values[] = {
    { 0x01, "Extra Traffic"},
    { 0x02, "Unprotected"},
    { 0x04, "Shared"},
    { 0x08, "Dedicated 1:1"},
    { 0x10, "Dedicated 1+1"},
    { 0x20, "Enhanced"},
    { 0x40, "Reserved"},
    { 0x80, "Reserved"},
    { 0, NULL }
};

/* rfc3471 */
const struct tok gmpls_switch_cap_values[] = {
    { GMPLS_PSC1, "Packet-Switch Capable-1"},
    { GMPLS_PSC2, "Packet-Switch Capable-2"},
    { GMPLS_PSC3, "Packet-Switch Capable-3"},
    { GMPLS_PSC4, "Packet-Switch Capable-4"},
    { GMPLS_L2SC, "Layer-2 Switch Capable"},
    { GMPLS_TSC, "Time-Division-Multiplex"},
    { GMPLS_LSC, "Lambda-Switch Capable"},
    { GMPLS_FSC, "Fiber-Switch Capable"},
    { 0, NULL }
};

/* rfc4205 */
const struct tok gmpls_switch_cap_tsc_indication_values[] = {
    { 0, "Standard SONET/SDH" },
    { 1, "Arbitrary SONET/SDH" },
    { 0, NULL }
};

/* rfc3471 */
const struct tok gmpls_encoding_values[] = {
    { 1,    "Packet"},
    { 2,    "Ethernet V2/DIX"},
    { 3,    "ANSI/ETSI PDH"},
    { 4,    "Reserved"},
    { 5,    "SDH ITU-T G.707/SONET ANSI T1.105"},
    { 6,    "Reserved"},
    { 7,    "Digital Wrapper"},
    { 8,    "Lambda (photonic)"},
    { 9,    "Fiber"},
    { 10,   "Reserved"},
    { 11,   "FiberChannel"},
    { 0, NULL }
};

/* rfc3471 */
const struct tok gmpls_payload_values[] = {
    {  0,   "Unknown"},
    {  1,   "Reserved"},
    {  2,   "Reserved"},
    {  3,   "Reserved"},
    {  4,   "Reserved"},
    {  5,   "Asynchronous mapping of E4"},
    {  6,   "Asynchronous mapping of DS3/T3"},
    {  7,   "Asynchronous mapping of E3"},
    {  8,   "Bit synchronous mapping of E3"},
    {  9,   "Byte synchronous mapping of E3"},
    { 10,   "Asynchronous mapping of DS2/T2"},
    { 11,   "Bit synchronous mapping of DS2/T2"},
    { 12,   "Reserved"},
    { 13,   "Asynchronous mapping of E1"},
    { 14,   "Byte synchronous mapping of E1"},
    { 15,   "Byte synchronous mapping of 31 * DS0"},
    { 16,   "Asynchronous mapping of DS1/T1"},
    { 17,   "Bit synchronous mapping of DS1/T1"},
    { 18,   "Byte synchronous mapping of DS1/T1"},
    { 19,   "VC-11 in VC-12"},
    { 20,   "Reserved"},
    { 21,   "Reserved"},
    { 22,   "DS1 SF Asynchronous"},
    { 23,   "DS1 ESF Asynchronous"},
    { 24,   "DS3 M23 Asynchronous"},
    { 25,   "DS3 C-Bit Parity Asynchronous"},
    { 26,   "VT/LOVC"},
    { 27,   "STS SPE/HOVC"},
    { 28,   "POS - No Scrambling, 16 bit CRC"},
    { 29,   "POS - No Scrambling, 32 bit CRC"},
    { 30,   "POS - Scrambling, 16 bit CRC"},
    { 31,   "POS - Scrambling, 32 bit CRC"},
    { 32,   "ATM mapping"},
    { 33,   "Ethernet PHY"},
    { 34,   "SONET/SDH"},
    { 35,   "Reserved (SONET deprecated)"},
    { 36,   "Digital Wrapper"},
    { 37,   "Lambda"},
    { 38,   "ANSI/ETSI PDH"},
    { 39,   "Reserved"},
    { 40,   "Link Access Protocol SDH (X.85 and X.86)"},
    { 41,   "FDDI"},
    { 42,   "DQDB (ETSI ETS 300 216)"},
    { 43,   "FiberChannel-3 (Services)"},
    { 44,   "HDLC"},
    { 45,   "Ethernet V2/DIX (only)"},
    { 46,   "Ethernet 802.3 (only)"},
/* draft-ietf-ccamp-gmpls-g709-04.txt */
    { 47,   "G.709 ODUj"},
    { 48,   "G.709 OTUk(v)"},
    { 49,   "CBR/CBRa"},
    { 50,   "CBRb"},
    { 51,   "BSOT"},
    { 52,   "BSNT"},
    { 53,   "IP/PPP (GFP)"},
    { 54,   "Ethernet MAC (framed GFP)"},
    { 55,   "Ethernet PHY (transparent GFP)"},
    { 56,   "ESCON"},
    { 57,   "FICON"},
    { 58,   "Fiber Channel"},
    { 0, NULL }
};

/* 
 * Link Type values used by LMP Service Discovery (specifically, the Client 
 * Port Service Attributes Object). See UNI 1.0 section 9.4.2 for details.
 */
const struct tok lmp_sd_service_config_cpsa_link_type_values[] = {
    { 5, "SDH ITU-T G.707"},
    { 6, "SONET ANSI T1.105"},
    { 0, NULL}
};

/* 
 * Signal Type values for SDH links used by LMP Service Discovery (specifically, 
 * the Client Port Service Attributes Object). See UNI 1.0 section 9.4.2 for 
 * details.
 */
const struct tok lmp_sd_service_config_cpsa_signal_type_sdh_values[] = {
    { 5,  "VC-3"},
    { 6,  "VC-4"},
    { 7,  "STM-0"},
    { 8,  "STM-1"},
    { 9,  "STM-4"},
    { 10, "STM-16"},
    { 11, "STM-64"},
    { 12, "STM-256"},
    { 0, NULL}
};

/* 
 * Signal Type values for SONET links used by LMP Service Discovery (specifically, 
 * the Client Port Service Attributes Object). See UNI 1.0 section 9.4.2 for 
 * details.
 */
const struct tok lmp_sd_service_config_cpsa_signal_type_sonet_values[] = {
    { 5,  "STS-1 SPE"},
    { 6,  "STS-3c SPE"},
    { 7,  "STS-1"},
    { 8,  "STM-3"},
    { 9,  "STM-12"},
    { 10, "STM-48"},
    { 11, "STM-192"},
    { 12, "STM-768"},
    { 0, NULL}
};

#define DIFFSERV_BC_MODEL_RDM           0   /* draft-ietf-tewg-diff-te-proto-07 */
#define DIFFSERV_BC_MODEL_MAM           1   /* draft-ietf-tewg-diff-te-proto-07 */ 
#define DIFFSERV_BC_MODEL_EXTD_MAM      254 /* experimental */

const struct tok diffserv_te_bc_values[] = {
    {  DIFFSERV_BC_MODEL_RDM, "Russian dolls"},
    {  DIFFSERV_BC_MODEL_MAM, "Maximum allocation"},
    {  DIFFSERV_BC_MODEL_EXTD_MAM, "Maximum allocation with E-LSP support"},
    { 0, NULL }
};
