⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print-isoclns.c

📁 TCPDUMP的C语言源代码,是在数据链路层的应用
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * Copyright (c) 1992, 1993, 1994, 1995, 1996 *	The Regents of the University of California.  All rights reserved. * * 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, (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, and (3) all advertising materials mentioning * features or use of this software display the following acknowledgement: * ``This product includes software developed by the University of California, * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of * the University nor the names of its contributors may be used to endorse * or promote products derived from this software without specific prior * written permission. * 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 Matt Thomas, Digital Equipment Corporation * * Extensively modified by Hannes Gredler (hannes@juniper.net) for more * complete IS-IS & CLNP support. */#ifndef lintstatic const char rcsid[] _U_ =    "@(#) $Header: /tcpdump/master/tcpdump/print-isoclns.c,v 1.163 2007-03-02 09:16:19 hannes Exp $ (LBL)";#endif#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <tcpdump-stdinc.h>#include <stdio.h>#include <string.h>#include "interface.h"#include "addrtoname.h"#include "ethertype.h"#include "ether.h"#include "nlpid.h"#include "extract.h"#include "gmpls.h"#include "oui.h"/* * IS-IS is defined in ISO 10589.  Look there for protocol definitions. */#define SYSTEM_ID_LEN	ETHER_ADDR_LEN#define NODE_ID_LEN     SYSTEM_ID_LEN+1#define LSP_ID_LEN      SYSTEM_ID_LEN+2#define ISIS_VERSION	1#define ESIS_VERSION	1#define CLNP_VERSION	1#define ISIS_PDU_TYPE_MASK      0x1F#define ESIS_PDU_TYPE_MASK      0x1F#define CLNP_PDU_TYPE_MASK      0x1F#define CLNP_FLAG_MASK          0xE0#define ISIS_LAN_PRIORITY_MASK  0x7F#define ISIS_PDU_L1_LAN_IIH	15#define ISIS_PDU_L2_LAN_IIH	16#define ISIS_PDU_PTP_IIH	17#define ISIS_PDU_L1_LSP       	18#define ISIS_PDU_L2_LSP       	20#define ISIS_PDU_L1_CSNP  	24#define ISIS_PDU_L2_CSNP  	25#define ISIS_PDU_L1_PSNP        26#define ISIS_PDU_L2_PSNP        27static struct tok isis_pdu_values[] = {    { ISIS_PDU_L1_LAN_IIH,       "L1 Lan IIH"},    { ISIS_PDU_L2_LAN_IIH,       "L2 Lan IIH"},    { ISIS_PDU_PTP_IIH,          "p2p IIH"},    { ISIS_PDU_L1_LSP,           "L1 LSP"},    { ISIS_PDU_L2_LSP,           "L2 LSP"},    { ISIS_PDU_L1_CSNP,          "L1 CSNP"},    { ISIS_PDU_L2_CSNP,          "L2 CSNP"},    { ISIS_PDU_L1_PSNP,          "L1 PSNP"},    { ISIS_PDU_L2_PSNP,          "L2 PSNP"},    { 0, NULL}};/* * A TLV is a tuple of a type, length and a value and is normally used for * encoding information in all sorts of places.  This is an enumeration of * the well known types. * * list taken from rfc3359 plus some memory from veterans ;-) */#define ISIS_TLV_AREA_ADDR           1   /* iso10589 */#define ISIS_TLV_IS_REACH            2   /* iso10589 */#define ISIS_TLV_ESNEIGH             3   /* iso10589 */#define ISIS_TLV_PART_DIS            4   /* iso10589 */#define ISIS_TLV_PREFIX_NEIGH        5   /* iso10589 */#define ISIS_TLV_ISNEIGH             6   /* iso10589 */#define ISIS_TLV_ISNEIGH_VARLEN      7   /* iso10589 */#define ISIS_TLV_PADDING             8   /* iso10589 */#define ISIS_TLV_LSP                 9   /* iso10589 */#define ISIS_TLV_AUTH                10  /* iso10589, rfc3567 */#define ISIS_TLV_CHECKSUM            12  /* rfc3358 */#define ISIS_TLV_CHECKSUM_MINLEN 2#define ISIS_TLV_LSP_BUFFERSIZE      14  /* iso10589 rev2 */#define ISIS_TLV_LSP_BUFFERSIZE_MINLEN 2#define ISIS_TLV_EXT_IS_REACH        22  /* draft-ietf-isis-traffic-05 */#define ISIS_TLV_IS_ALIAS_ID         24  /* draft-ietf-isis-ext-lsp-frags-02 */#define ISIS_TLV_DECNET_PHASE4       42#define ISIS_TLV_LUCENT_PRIVATE      66#define ISIS_TLV_INT_IP_REACH        128 /* rfc1195, rfc2966 */#define ISIS_TLV_PROTOCOLS           129 /* rfc1195 */#define ISIS_TLV_EXT_IP_REACH        130 /* rfc1195, rfc2966 */#define ISIS_TLV_IDRP_INFO           131 /* rfc1195 */#define ISIS_TLV_IDRP_INFO_MINLEN      1#define ISIS_TLV_IPADDR              132 /* rfc1195 */#define ISIS_TLV_IPAUTH              133 /* rfc1195 */#define ISIS_TLV_TE_ROUTER_ID        134 /* draft-ietf-isis-traffic-05 */#define ISIS_TLV_EXTD_IP_REACH       135 /* draft-ietf-isis-traffic-05 */#define ISIS_TLV_HOSTNAME            137 /* rfc2763 */#define ISIS_TLV_SHARED_RISK_GROUP   138 /* draft-ietf-isis-gmpls-extensions */#define ISIS_TLV_NORTEL_PRIVATE1     176#define ISIS_TLV_NORTEL_PRIVATE2     177#define ISIS_TLV_RESTART_SIGNALING   211 /* rfc3847 */#define ISIS_TLV_RESTART_SIGNALING_FLAGLEN 1#define ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN 2#define ISIS_TLV_MT_IS_REACH         222 /* draft-ietf-isis-wg-multi-topology-05 */#define ISIS_TLV_MT_SUPPORTED        229 /* draft-ietf-isis-wg-multi-topology-05 */#define ISIS_TLV_MT_SUPPORTED_MINLEN 2#define ISIS_TLV_IP6ADDR             232 /* draft-ietf-isis-ipv6-02 */#define ISIS_TLV_MT_IP_REACH         235 /* draft-ietf-isis-wg-multi-topology-05 */#define ISIS_TLV_IP6_REACH           236 /* draft-ietf-isis-ipv6-02 */#define ISIS_TLV_MT_IP6_REACH        237 /* draft-ietf-isis-wg-multi-topology-05 */#define ISIS_TLV_PTP_ADJ             240 /* rfc3373 */#define ISIS_TLV_IIH_SEQNR           241 /* draft-shen-isis-iih-sequence-00 */#define ISIS_TLV_IIH_SEQNR_MINLEN 4#define ISIS_TLV_VENDOR_PRIVATE      250 /* draft-ietf-isis-experimental-tlv-01 */#define ISIS_TLV_VENDOR_PRIVATE_MINLEN 3static struct tok isis_tlv_values[] = {    { ISIS_TLV_AREA_ADDR,	   "Area address(es)"},    { ISIS_TLV_IS_REACH,           "IS Reachability"},    { ISIS_TLV_ESNEIGH,            "ES Neighbor(s)"},    { ISIS_TLV_PART_DIS,           "Partition DIS"},    { ISIS_TLV_PREFIX_NEIGH,       "Prefix Neighbors"},    { ISIS_TLV_ISNEIGH,            "IS Neighbor(s)"},    { ISIS_TLV_ISNEIGH_VARLEN,     "IS Neighbor(s) (variable length)"},    { ISIS_TLV_PADDING,            "Padding"},    { ISIS_TLV_LSP,                "LSP entries"},    { ISIS_TLV_AUTH,               "Authentication"},    { ISIS_TLV_CHECKSUM,           "Checksum"},    { ISIS_TLV_LSP_BUFFERSIZE,     "LSP Buffersize"},    { ISIS_TLV_EXT_IS_REACH,       "Extended IS Reachability"},    { ISIS_TLV_IS_ALIAS_ID,        "IS Alias ID"},    { ISIS_TLV_DECNET_PHASE4,      "DECnet Phase IV"},    { ISIS_TLV_LUCENT_PRIVATE,     "Lucent Proprietary"},    { ISIS_TLV_INT_IP_REACH,       "IPv4 Internal Reachability"},    { ISIS_TLV_PROTOCOLS,          "Protocols supported"},    { ISIS_TLV_EXT_IP_REACH,       "IPv4 External Reachability"},    { ISIS_TLV_IDRP_INFO,          "Inter-Domain Information Type"},    { ISIS_TLV_IPADDR,             "IPv4 Interface address(es)"},    { ISIS_TLV_IPAUTH,             "IPv4 authentication (deprecated)"},    { ISIS_TLV_TE_ROUTER_ID,       "Traffic Engineering Router ID"},    { ISIS_TLV_EXTD_IP_REACH,      "Extended IPv4 Reachability"},    { ISIS_TLV_SHARED_RISK_GROUP,  "Shared Risk Link Group"},    { ISIS_TLV_NORTEL_PRIVATE1,    "Nortel Proprietary"},    { ISIS_TLV_NORTEL_PRIVATE2,    "Nortel Proprietary"},    { ISIS_TLV_HOSTNAME,           "Hostname"},    { ISIS_TLV_RESTART_SIGNALING,  "Restart Signaling"},    { ISIS_TLV_MT_IS_REACH,        "Multi Topology IS Reachability"},    { ISIS_TLV_MT_SUPPORTED,       "Multi Topology"},    { ISIS_TLV_IP6ADDR,            "IPv6 Interface address(es)"},    { ISIS_TLV_MT_IP_REACH,        "Multi-Topology IPv4 Reachability"},    { ISIS_TLV_IP6_REACH,          "IPv6 reachability"},    { ISIS_TLV_MT_IP6_REACH,       "Multi-Topology IP6 Reachability"},    { ISIS_TLV_PTP_ADJ,            "Point-to-point Adjacency State"},    { ISIS_TLV_IIH_SEQNR,          "Hello PDU Sequence Number"},    { ISIS_TLV_VENDOR_PRIVATE,     "Vendor Private"},    { 0, NULL }};#define ESIS_OPTION_PROTOCOLS        129#define ESIS_OPTION_QOS_MAINTENANCE  195 /* iso9542 */#define ESIS_OPTION_SECURITY         197 /* iso9542 */#define ESIS_OPTION_ES_CONF_TIME     198 /* iso9542 */#define ESIS_OPTION_PRIORITY         205 /* iso9542 */#define ESIS_OPTION_ADDRESS_MASK     225 /* iso9542 */#define ESIS_OPTION_SNPA_MASK        226 /* iso9542 */static struct tok esis_option_values[] = {    { ESIS_OPTION_PROTOCOLS,       "Protocols supported"},    { ESIS_OPTION_QOS_MAINTENANCE, "QoS Maintenance" },    { ESIS_OPTION_SECURITY,        "Security" },    { ESIS_OPTION_ES_CONF_TIME,    "ES Configuration Time" },    { ESIS_OPTION_PRIORITY,        "Priority" },    { ESIS_OPTION_ADDRESS_MASK,    "Addressk Mask" },    { ESIS_OPTION_SNPA_MASK,       "SNPA Mask" },    { 0, NULL }};#define CLNP_OPTION_DISCARD_REASON   193#define CLNP_OPTION_QOS_MAINTENANCE  195 /* iso8473 */#define CLNP_OPTION_SECURITY         197 /* iso8473 */#define CLNP_OPTION_SOURCE_ROUTING   200 /* iso8473 */#define CLNP_OPTION_ROUTE_RECORDING  203 /* iso8473 */#define CLNP_OPTION_PADDING          204 /* iso8473 */#define CLNP_OPTION_PRIORITY         205 /* iso8473 */static struct tok clnp_option_values[] = {    { CLNP_OPTION_DISCARD_REASON,  "Discard Reason"},    { CLNP_OPTION_PRIORITY,        "Priority"},    { CLNP_OPTION_QOS_MAINTENANCE, "QoS Maintenance"},    { CLNP_OPTION_SECURITY, "Security"},    { CLNP_OPTION_SOURCE_ROUTING, "Source Routing"},    { CLNP_OPTION_ROUTE_RECORDING, "Route Recording"},    { CLNP_OPTION_PADDING, "Padding"},    { 0, NULL }};static struct tok clnp_option_rfd_class_values[] = {    { 0x0, "General"},    { 0x8, "Address"},    { 0x9, "Source Routeing"},    { 0xa, "Lifetime"},    { 0xb, "PDU Discarded"},    { 0xc, "Reassembly"},    { 0, NULL }};static struct tok clnp_option_rfd_general_values[] = {    { 0x0, "Reason not specified"},    { 0x1, "Protocol procedure error"},    { 0x2, "Incorrect checksum"},    { 0x3, "PDU discarded due to congestion"},    { 0x4, "Header syntax error (cannot be parsed)"},    { 0x5, "Segmentation needed but not permitted"},    { 0x6, "Incomplete PDU received"},    { 0x7, "Duplicate option"},    { 0, NULL }};static struct tok clnp_option_rfd_address_values[] = {    { 0x0, "Destination address unreachable"},    { 0x1, "Destination address unknown"},    { 0, NULL }};static struct tok clnp_option_rfd_source_routeing_values[] = {    { 0x0, "Unspecified source routeing error"},    { 0x1, "Syntax error in source routeing field"},    { 0x2, "Unknown address in source routeing field"},    { 0x3, "Path not acceptable"},    { 0, NULL }};static struct tok clnp_option_rfd_lifetime_values[] = {    { 0x0, "Lifetime expired while data unit in transit"},    { 0x1, "Lifetime expired during reassembly"},    { 0, NULL }};static struct tok clnp_option_rfd_pdu_discard_values[] = {    { 0x0, "Unsupported option not specified"},    { 0x1, "Unsupported protocol version"},    { 0x2, "Unsupported security option"},    { 0x3, "Unsupported source routeing option"},    { 0x4, "Unsupported recording of route option"},    { 0, NULL }};static struct tok clnp_option_rfd_reassembly_values[] = {    { 0x0, "Reassembly interference"},    { 0, NULL }};/* array of 16 error-classes */static struct tok *clnp_option_rfd_error_class[] = {    clnp_option_rfd_general_values,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    clnp_option_rfd_address_values,    clnp_option_rfd_source_routeing_values,    clnp_option_rfd_lifetime_values,    clnp_option_rfd_pdu_discard_values,    clnp_option_rfd_reassembly_values,    NULL,    NULL,    NULL};#define CLNP_OPTION_OPTION_QOS_MASK 0x3f#define CLNP_OPTION_SCOPE_MASK      0xc0#define CLNP_OPTION_SCOPE_SA_SPEC   0x40#define CLNP_OPTION_SCOPE_DA_SPEC   0x80#define CLNP_OPTION_SCOPE_GLOBAL    0xc0static struct tok clnp_option_scope_values[] = {    { CLNP_OPTION_SCOPE_SA_SPEC, "Source Address Specific"},    { CLNP_OPTION_SCOPE_DA_SPEC, "Destination Address Specific"},    { CLNP_OPTION_SCOPE_GLOBAL, "Globally unique"},    { 0, NULL }};static struct tok clnp_option_sr_rr_values[] = {    { 0x0, "partial"},    { 0x1, "complete"},    { 0, NULL }};static struct tok clnp_option_sr_rr_string_values[] = {    { CLNP_OPTION_SOURCE_ROUTING, "source routing"},    { CLNP_OPTION_ROUTE_RECORDING, "recording of route in progress"},    { 0, NULL }};static struct tok clnp_option_qos_global_values[] = {    { 0x20, "reserved"},    { 0x10, "sequencing vs. delay"},    { 0x08, "congested"},    { 0x04, "delay vs. cost"},    { 0x02, "error vs. delay"},    { 0x01, "error vs. cost"},    { 0, NULL }};#define ISIS_SUBTLV_EXT_IS_REACH_ADMIN_GROUP           3 /* draft-ietf-isis-traffic-05 */#define ISIS_SUBTLV_EXT_IS_REACH_LINK_LOCAL_REMOTE_ID  4 /* rfc4205 */#define ISIS_SUBTLV_EXT_IS_REACH_LINK_REMOTE_ID        5 /* draft-ietf-isis-traffic-05 */#define ISIS_SUBTLV_EXT_IS_REACH_IPV4_INTF_ADDR        6 /* draft-ietf-isis-traffic-05 */#define ISIS_SUBTLV_EXT_IS_REACH_IPV4_NEIGHBOR_ADDR    8 /* draft-ietf-isis-traffic-05 */#define ISIS_SUBTLV_EXT_IS_REACH_MAX_LINK_BW           9 /* draft-ietf-isis-traffic-05 */#define ISIS_SUBTLV_EXT_IS_REACH_RESERVABLE_BW        10 /* draft-ietf-isis-traffic-05 */#define ISIS_SUBTLV_EXT_IS_REACH_UNRESERVED_BW        11 /* rfc4124 */#define ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS_OLD   12 /* draft-ietf-tewg-diff-te-proto-06 */#define ISIS_SUBTLV_EXT_IS_REACH_TE_METRIC            18 /* draft-ietf-isis-traffic-05 */#define ISIS_SUBTLV_EXT_IS_REACH_LINK_ATTRIBUTE       19 /* draft-ietf-isis-link-attr-01 */#define ISIS_SUBTLV_EXT_IS_REACH_LINK_PROTECTION_TYPE 20 /* rfc4205 */#define ISIS_SUBTLV_EXT_IS_REACH_INTF_SW_CAP_DESCR    21 /* rfc4205 */#define ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS       22 /* rfc4124 */static struct tok isis_ext_is_reach_subtlv_values[] = {    { ISIS_SUBTLV_EXT_IS_REACH_ADMIN_GROUP,            "Administrative groups" },    { ISIS_SUBTLV_EXT_IS_REACH_LINK_LOCAL_REMOTE_ID,   "Link Local/Remote Identifier" },    { ISIS_SUBTLV_EXT_IS_REACH_LINK_REMOTE_ID,         "Link Remote Identifier" },    { ISIS_SUBTLV_EXT_IS_REACH_IPV4_INTF_ADDR,         "IPv4 interface address" },    { ISIS_SUBTLV_EXT_IS_REACH_IPV4_NEIGHBOR_ADDR,     "IPv4 neighbor address" },    { ISIS_SUBTLV_EXT_IS_REACH_MAX_LINK_BW,            "Maximum link bandwidth" },    { ISIS_SUBTLV_EXT_IS_REACH_RESERVABLE_BW,          "Reservable link bandwidth" },    { ISIS_SUBTLV_EXT_IS_REACH_UNRESERVED_BW,          "Unreserved bandwidth" },    { ISIS_SUBTLV_EXT_IS_REACH_TE_METRIC,              "Traffic Engineering Metric" },    { ISIS_SUBTLV_EXT_IS_REACH_LINK_ATTRIBUTE,         "Link Attribute" },    { ISIS_SUBTLV_EXT_IS_REACH_LINK_PROTECTION_TYPE,   "Link Protection Type" },    { ISIS_SUBTLV_EXT_IS_REACH_INTF_SW_CAP_DESCR,      "Interface Switching Capability" },    { ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS_OLD,     "Bandwidth Constraints (old)" },    { ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS,         "Bandwidth Constraints" },    { 250,                                             "Reserved for cisco specific extensions" },    { 251,                                             "Reserved for cisco specific extensions" },    { 252,                                             "Reserved for cisco specific extensions" },    { 253,                                             "Reserved for cisco specific extensions" },    { 254,                                             "Reserved for cisco specific extensions" },    { 255,                                             "Reserved for future expansion" },    { 0, NULL }};#define ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG32          1 /* draft-ietf-isis-admin-tags-01 */#define ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG64          2 /* draft-ietf-isis-admin-tags-01 */#define ISIS_SUBTLV_EXTD_IP_REACH_MGMT_PREFIX_COLOR  117 /* draft-ietf-isis-wg-multi-topology-05 */static struct tok isis_ext_ip_reach_subtlv_values[] = {    { ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG32,           "32-Bit Administrative tag" },    { ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG64,           "64-Bit Administrative tag" },    { ISIS_SUBTLV_EXTD_IP_REACH_MGMT_PREFIX_COLOR,     "Management Prefix Color" },    { 0, NULL }};static struct tok isis_subtlv_link_attribute_values[] = {    { 0x01, "Local Protection Available" },    { 0x02, "Link excluded from local protection path" },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -