?? print-bgp.c
字號:
/* * Copyright (C) 1999 WIDE Project. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project 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 BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * Extensively modified by Hannes Gredler (hannes@juniper.net) for more * complete BGP support. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#ifndef lintstatic const char rcsid[] _U_ = "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.117.2.1 2007-12-08 10:08:07 hannes Exp $";#endif#include <tcpdump-stdinc.h>#include <stdio.h>#include <string.h>#include "interface.h"#include "decode_prefix.h"#include "addrtoname.h"#include "extract.h"#include "bgp.h"#include "af.h"#include "l2vpn.h"struct bgp { u_int8_t bgp_marker[16]; u_int16_t bgp_len; u_int8_t bgp_type;};#define BGP_SIZE 19 /* unaligned */#define BGP_OPEN 1#define BGP_UPDATE 2#define BGP_NOTIFICATION 3#define BGP_KEEPALIVE 4#define BGP_ROUTE_REFRESH 5static struct tok bgp_msg_values[] = { { BGP_OPEN, "Open"}, { BGP_UPDATE, "Update"}, { BGP_NOTIFICATION, "Notification"}, { BGP_KEEPALIVE, "Keepalive"}, { BGP_ROUTE_REFRESH, "Route Refresh"}, { 0, NULL}};struct bgp_open { u_int8_t bgpo_marker[16]; u_int16_t bgpo_len; u_int8_t bgpo_type; u_int8_t bgpo_version; u_int16_t bgpo_myas; u_int16_t bgpo_holdtime; u_int32_t bgpo_id; u_int8_t bgpo_optlen; /* options should follow */};#define BGP_OPEN_SIZE 29 /* unaligned */struct bgp_opt { u_int8_t bgpopt_type; u_int8_t bgpopt_len; /* variable length */};#define BGP_OPT_SIZE 2 /* some compilers may pad to 4 bytes */#define BGP_UPDATE_MINSIZE 23struct bgp_notification { u_int8_t bgpn_marker[16]; u_int16_t bgpn_len; u_int8_t bgpn_type; u_int8_t bgpn_major; u_int8_t bgpn_minor;};#define BGP_NOTIFICATION_SIZE 21 /* unaligned */struct bgp_route_refresh { u_int8_t bgp_marker[16]; u_int16_t len; u_int8_t type; u_int8_t afi[2]; /* the compiler messes this structure up */ u_int8_t res; /* when doing misaligned sequences of int8 and int16 */ u_int8_t safi; /* afi should be int16 - so we have to access it using */}; /* EXTRACT_16BITS(&bgp_route_refresh->afi) (sigh) */ #define BGP_ROUTE_REFRESH_SIZE 23struct bgp_attr { u_int8_t bgpa_flags; u_int8_t bgpa_type; union { u_int8_t len; u_int16_t elen; } bgpa_len;#define bgp_attr_len(p) \ (((p)->bgpa_flags & 0x10) ? \ EXTRACT_16BITS(&(p)->bgpa_len.elen) : (p)->bgpa_len.len)#define bgp_attr_off(p) \ (((p)->bgpa_flags & 0x10) ? 4 : 3)};#define BGPTYPE_ORIGIN 1#define BGPTYPE_AS_PATH 2#define BGPTYPE_NEXT_HOP 3#define BGPTYPE_MULTI_EXIT_DISC 4#define BGPTYPE_LOCAL_PREF 5#define BGPTYPE_ATOMIC_AGGREGATE 6#define BGPTYPE_AGGREGATOR 7#define BGPTYPE_COMMUNITIES 8 /* RFC1997 */#define BGPTYPE_ORIGINATOR_ID 9 /* RFC1998 */#define BGPTYPE_CLUSTER_LIST 10 /* RFC1998 */#define BGPTYPE_DPA 11 /* draft-ietf-idr-bgp-dpa */#define BGPTYPE_ADVERTISERS 12 /* RFC1863 */#define BGPTYPE_RCID_PATH 13 /* RFC1863 */#define BGPTYPE_MP_REACH_NLRI 14 /* RFC2283 */#define BGPTYPE_MP_UNREACH_NLRI 15 /* RFC2283 */#define BGPTYPE_EXTD_COMMUNITIES 16 /* draft-ietf-idr-bgp-ext-communities */#define BGPTYPE_AS4_PATH 17 /* RFC4893 */#define BGPTYPE_AGGREGATOR4 18 /* RFC4893 */#define BGPTYPE_PMSI_TUNNEL 22 /* draft-ietf-l3vpn-2547bis-mcast-bgp-02.txt */#define BGPTYPE_ATTR_SET 128 /* draft-marques-ppvpn-ibgp */#define BGP_MP_NLRI_MINSIZE 3 /* End of RIB Marker detection */static struct tok bgp_attr_values[] = { { BGPTYPE_ORIGIN, "Origin"}, { BGPTYPE_AS_PATH, "AS Path"}, { BGPTYPE_AS4_PATH, "AS4 Path"}, { BGPTYPE_NEXT_HOP, "Next Hop"}, { BGPTYPE_MULTI_EXIT_DISC, "Multi Exit Discriminator"}, { BGPTYPE_LOCAL_PREF, "Local Preference"}, { BGPTYPE_ATOMIC_AGGREGATE, "Atomic Aggregate"}, { BGPTYPE_AGGREGATOR, "Aggregator"}, { BGPTYPE_AGGREGATOR4, "Aggregator4"}, { BGPTYPE_COMMUNITIES, "Community"}, { BGPTYPE_ORIGINATOR_ID, "Originator ID"}, { BGPTYPE_CLUSTER_LIST, "Cluster List"}, { BGPTYPE_DPA, "DPA"}, { BGPTYPE_ADVERTISERS, "Advertisers"}, { BGPTYPE_RCID_PATH, "RCID Path / Cluster ID"}, { BGPTYPE_MP_REACH_NLRI, "Multi-Protocol Reach NLRI"}, { BGPTYPE_MP_UNREACH_NLRI, "Multi-Protocol Unreach NLRI"}, { BGPTYPE_EXTD_COMMUNITIES, "Extended Community"}, { BGPTYPE_PMSI_TUNNEL, "PMSI Tunnel"}, { BGPTYPE_ATTR_SET, "Attribute Set"}, { 255, "Reserved for development"}, { 0, NULL}};#define BGP_AS_SET 1#define BGP_AS_SEQUENCE 2#define BGP_CONFED_AS_SEQUENCE 3 /* draft-ietf-idr-rfc3065bis-01 */#define BGP_CONFED_AS_SET 4 /* draft-ietf-idr-rfc3065bis-01 */#define BGP_AS_SEG_TYPE_MIN BGP_AS_SET#define BGP_AS_SEG_TYPE_MAX BGP_CONFED_AS_SETstatic struct tok bgp_as_path_segment_open_values[] = { { BGP_AS_SEQUENCE, ""}, { BGP_AS_SET, "{ "}, { BGP_CONFED_AS_SEQUENCE, "( "}, { BGP_CONFED_AS_SET, "({ "}, { 0, NULL}};static struct tok bgp_as_path_segment_close_values[] = { { BGP_AS_SEQUENCE, ""}, { BGP_AS_SET, "}"}, { BGP_CONFED_AS_SEQUENCE, ")"}, { BGP_CONFED_AS_SET, "})"}, { 0, NULL}};#define BGP_OPT_AUTH 1#define BGP_OPT_CAP 2static struct tok bgp_opt_values[] = { { BGP_OPT_AUTH, "Authentication Information"}, { BGP_OPT_CAP, "Capabilities Advertisement"}, { 0, NULL}};#define BGP_CAPCODE_MP 1#define BGP_CAPCODE_RR 2#define BGP_CAPCODE_ORF 3 /* XXX */#define BGP_CAPCODE_RESTART 64 /* draft-ietf-idr-restart-05 */#define BGP_CAPCODE_AS_NEW 65 /* XXX */#define BGP_CAPCODE_DYN_CAP 67 /* XXX */#define BGP_CAPCODE_RR_CISCO 128static struct tok bgp_capcode_values[] = { { BGP_CAPCODE_MP, "Multiprotocol Extensions"}, { BGP_CAPCODE_RR, "Route Refresh"}, { BGP_CAPCODE_ORF, "Cooperative Route Filtering"}, { BGP_CAPCODE_RESTART, "Graceful Restart"}, { BGP_CAPCODE_AS_NEW, "32-Bit AS Number"}, { BGP_CAPCODE_DYN_CAP, "Dynamic Capability"}, { BGP_CAPCODE_RR_CISCO, "Route Refresh (Cisco)"}, { 0, NULL}};#define BGP_NOTIFY_MAJOR_MSG 1#define BGP_NOTIFY_MAJOR_OPEN 2#define BGP_NOTIFY_MAJOR_UPDATE 3#define BGP_NOTIFY_MAJOR_HOLDTIME 4#define BGP_NOTIFY_MAJOR_FSM 5#define BGP_NOTIFY_MAJOR_CEASE 6#define BGP_NOTIFY_MAJOR_CAP 7static struct tok bgp_notify_major_values[] = { { BGP_NOTIFY_MAJOR_MSG, "Message Header Error"}, { BGP_NOTIFY_MAJOR_OPEN, "OPEN Message Error"}, { BGP_NOTIFY_MAJOR_UPDATE, "UPDATE Message Error"}, { BGP_NOTIFY_MAJOR_HOLDTIME,"Hold Timer Expired"}, { BGP_NOTIFY_MAJOR_FSM, "Finite State Machine Error"}, { BGP_NOTIFY_MAJOR_CEASE, "Cease"}, { BGP_NOTIFY_MAJOR_CAP, "Capability Message Error"}, { 0, NULL}};/* draft-ietf-idr-cease-subcode-02 */#define BGP_NOTIFY_MINOR_CEASE_MAXPRFX 1static struct tok bgp_notify_minor_cease_values[] = { { BGP_NOTIFY_MINOR_CEASE_MAXPRFX, "Maximum Number of Prefixes Reached"}, { 2, "Administratively Shutdown"}, { 3, "Peer Unconfigured"}, { 4, "Administratively Reset"}, { 5, "Connection Rejected"}, { 6, "Other Configuration Change"}, { 7, "Connection Collision Resolution"}, { 0, NULL}};static struct tok bgp_notify_minor_msg_values[] = { { 1, "Connection Not Synchronized"}, { 2, "Bad Message Length"}, { 3, "Bad Message Type"}, { 0, NULL}};static struct tok bgp_notify_minor_open_values[] = { { 1, "Unsupported Version Number"}, { 2, "Bad Peer AS"}, { 3, "Bad BGP Identifier"}, { 4, "Unsupported Optional Parameter"}, { 5, "Authentication Failure"}, { 6, "Unacceptable Hold Time"}, { 7, "Capability Message Error"}, { 0, NULL}};static struct tok bgp_notify_minor_update_values[] = { { 1, "Malformed Attribute List"}, { 2, "Unrecognized Well-known Attribute"}, { 3, "Missing Well-known Attribute"}, { 4, "Attribute Flags Error"}, { 5, "Attribute Length Error"}, { 6, "Invalid ORIGIN Attribute"}, { 7, "AS Routing Loop"}, { 8, "Invalid NEXT_HOP Attribute"}, { 9, "Optional Attribute Error"}, { 10, "Invalid Network Field"}, { 11, "Malformed AS_PATH"}, { 0, NULL}};static struct tok bgp_notify_minor_cap_values[] = { { 1, "Invalid Action Value" }, { 2, "Invalid Capability Length" }, { 3, "Malformed Capability Value" }, { 4, "Unsupported Capability Code" }, { 0, NULL }};static struct tok bgp_origin_values[] = { { 0, "IGP"}, { 1, "EGP"}, { 2, "Incomplete"}, { 0, NULL}};#define BGP_PMSI_TUNNEL_RSVP_P2MP 1#define BGP_PMSI_TUNNEL_LDP_P2MP 2#define BGP_PMSI_TUNNEL_PIM_SSM 3#define BGP_PMSI_TUNNEL_PIM_SM 4#define BGP_PMSI_TUNNEL_PIM_BIDIR 5#define BGP_PMSI_TUNNEL_INGRESS 6#define BGP_PMSI_TUNNEL_LDP_MP2MP 7static struct tok bgp_pmsi_tunnel_values[] = { { BGP_PMSI_TUNNEL_RSVP_P2MP, "RSVP-TE P2MP LSP"}, { BGP_PMSI_TUNNEL_LDP_P2MP, "LDP P2MP LSP"}, { BGP_PMSI_TUNNEL_PIM_SSM, "PIM-SSM Tree"}, { BGP_PMSI_TUNNEL_PIM_SM, "PIM-SM Tree"}, { BGP_PMSI_TUNNEL_PIM_BIDIR, "PIM-Bidir Tree"}, { BGP_PMSI_TUNNEL_INGRESS, "Ingress Replication"}, { BGP_PMSI_TUNNEL_LDP_MP2MP, "LDP MP2MP LSP"}, { 0, NULL}};static struct tok bgp_pmsi_flag_values[] = { { 0x01, "Leaf Information required"}, { 0, NULL}};/* Subsequent address family identifier, RFC2283 section 7 */#define SAFNUM_RES 0#define SAFNUM_UNICAST 1#define SAFNUM_MULTICAST 2#define SAFNUM_UNIMULTICAST 3/* labeled BGP RFC3107 */#define SAFNUM_LABUNICAST 4/* draft-ietf-l3vpn-2547bis-mcast-bgp-02.txt */#define SAFNUM_MULTICAST_VPN 5#define SAFNUM_TUNNEL 64 /* XXX */#define SAFNUM_VPLS 65 /* XXX */#define SAFNUM_MDT 66 /* XXX *//* Section 4.3.4 of draft-rosen-rfc2547bis-03.txt */#define SAFNUM_VPNUNICAST 128#define SAFNUM_VPNMULTICAST 129#define SAFNUM_VPNUNIMULTICAST 130/* draft-marques-ppvpn-rt-constrain-01.txt */#define SAFNUM_RT_ROUTING_INFO 132#define BGP_VPN_RD_LEN 8static struct tok bgp_safi_values[] = {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -