Network
Inter-Domain Routing Working Group                                     S. Hares                         J. Haas
Internet Draft                                             NextHop
                                                           J. Haas
                                                          S. Hares
                                                           NextHop
                                                      W. Tackabury
                                              Gold Wire Technology

                                                November 21, 2001

                     Definitions of Managed Objects
       for the Fourth Version of Border Gateway Protocol (BGP-4),
                             Second Version
                    <draft-ietf-idr-bgp4-mibv2-00.txt>
                   <draft-ietf-idr-bgp4-mibv2-01.txt>

Status of this Memo

   This document is an Internet-Draft and is in full conformance with
   all provisions of Section 10 of RFC2026.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-Drafts. Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-
   Drafts Internet-Drafts as reference material mate-
   rial or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

Copyright Notice

   Copyright (C) The Internet Society (2001).  All Rights Reserved.

1.

Abstract

   This memo defines a portion of the Management Information Base (MIB)
   for use with network management protocols in TCP/IP-
   based TCP/IP-based internets.
   In particular, this MIB defines objects that facilitate the
   management of the Border Gateway Protocol Version 4 (BGP4).

   Distribution of this memo is unlimited.

2.

1.  Introduction

   This memo defines a portion of the Management Information Base (MIB)
   for use with network management protocols in the Internet community.
   In particular, it describes managed objects used for managing the
   Border Gateway Protocol Version 4.

   The SNMP Management Framework presently consists of five major components: compo-
   nents:

     o    An overall architecture, described in RFC 2571 [1].

     o    Mechanisms for describing and naming objects and events for
          the purpose of management. The first version of this Structure
          of Management Information (SMI) is called SMIv1 and described
          in STD 16, RFC 1155 [2], STD 16, RFC 1212 [3] and RFC 1215
          [4]. The second version, called SMIv2, is described in STD 58,
          RFC 2578 [5], RFC 2579 [6] and RFC 2580 [7].

     o    Message protocols for transferring management information. The
          first version of the SNMP message protocol is called SNMPv1
          and described in STD 15, RFC 1157 [8]. A second version of the
          SNMP message protocol, which is not an Internet standards
          track protocol, is called SNMPv2c and described in RFC 1901
          [9] and RFC 1906 [10]. The third version of the message protocol proto-
          col is called SNMPv3 and described in RFC 1906 [10], RFC 2572
          [11] and RFC 2574 [12].

     o    Protocol operations for accessing management information. The
          first set of protocol operations and associated PDU formats is
          described in STD 15, RFC 1157 [8]. A second set of protocol
          operations and associated PDU formats is described in RFC 1905
          [13].

     o    A set of fundamental applications described in RFC 2573 [14]
          and the view-based access control mechanism described in RFC
          2575 [15].

   A more detailed introduction to the current SNMP Management Framework
   can be found in RFC 2570 [18].

   Managed objects are accessed via a virtual information store, termed
   the Management Information Base or MIB. Objects in the MIB are
   defined using the mechanisms defined in the SMI.

3.

2.  Objectives

   This MIB Module is meant to broadly update and replace a prior MIB
   Module defined in RFC 1657 [12].  Additionally, there is another
   effort underway to address very specific limited objectives in
   updating updat-
   ing points in the RFC 1657 object definition and managed object
   attributes [13].  The MIB Module described herein is intended to
   fully serve the functions and scope of RFC 1657 and these RFC 1657
   updates.

2.1.  Protocol Extensions

   Additionally, however, there are a number of ways in which the BGP
   Protocol has been enhanced through its ability for added capabilities,
   where capabili-
   ties. Implementations of those capabilities have not been able to
   have any management capabilities present in RFC 1657-compliant MIB
   module agents, since the capabilities themselves postdated the adoption adop-
   tion of RFC 1657.  For several significant capabilities capabilities, in the form
   of BGP Communities [17], Autonomous System Confederation [16] , BGP
   Multiprotocol Extensions [18], and Route Reflection [19], the MIB
   Module defines herein objects defined in this document exposes object types to manage those
   extended capabilities and their operation.

   One of these extensions in particular (the multiprotocol extensions)
   requires a thorough redefinition of MIB objects table row indices from the
   RFC 1657
   state, so as to allow state.  This allows transport-independent address exposure indices
   consistent with the Address Family Identifier (AFI) and Subsequent
   Address Family Identifier (SAFI) mechanisms of that extension.

2.2.  Mechanisms for MIB Extensibility

   Moreover, the requirement for the incremental update of support for
   capabilities such as these begs the issue of placing modular
   extensibility extensi-
   bility for protocol extensions within the framework of the MIB
   itself.  Going forward, it would be very desirable to have attributes
   of the MIB structure, and administrative procedures, to allow the
   incremental update of the MIB scope to cover any such new protocol
   extensions, without requiring a reissue of the entire MIB.  In this
   sense, we seek to structure the MIB much like the underlying BGP4
   itself, allowing capability-by-capability update.

2.3.  BGP Configuration

   Finally, the definition and adoption of Version 3 of the SNMP has
   occurred since the adoption of the RFC 1657 MIB.  As a result, the
   ability to deploy secure configuration of managed elements via SNMP
   in a standardized way has become a reality for managed networks.  In
   this MIB definition effort, we seek to expose a more thorough
   capacity capac-
   ity for configuration of BGP4 and its capabilities than was present
   in RFC 1657 or than was common practice at the time of its adoption.

4.

3.  MIB Organization

   The MIB is broken down into several top level sections.  This
   sectionalization sec-
   tionalization is important to create an organization for
   extensibility:

   * extensibil-
   ity.

   In general, a top level section of the MIB module will identify some
   number of "core" scalar and tabular objects rooted off of it.  If
   there is sufficient depth within a subsection of one of these top-
   level sections, the "core" subdivision off of the top level section
   may provide multiple levels to the OBJECT IDENTIFIER scope necessary
   to define its management data.

   Once this core section is defined, however, each top-level section
   has an explicit provision for an 'extensions' section OBJECT IDENTI-
   FIER.  The intent of the extensions section is to be containment for
   discrete per-extension sections.  By 'extension' here, we refer to
   protocol mechanisms, capabilities, and exchanges which are not
   defined in the base Border Gateway Protocol definition, or is not
   configuration for protocol operations of similarly 'core' status.
   Currently, we propose keying the identification within the per-exten-
   sion section in one of two ways.

   Where the extension is keyed to a defined capability which has an
   associated BGP capability number assiged by IANA (for example, multi-
   protocol BGP extensions), the per extension section will be that
   defined IANA capability number.  Where the extension has management
   information suitable for a MIB extension but does not correspond to
   an exchanged protocol capability (for example, BGP Route Reflection),
   the extension section shall have its final OBJECT IDENTIFIER fragment
   correspond to the RFC number which first uniquely defined the exten-
   sion (i.e., not requiring renumbering at the time a defining RFC for
   a protocol mechanism is outdated by a later RFC).

3.1.  bgpBaseScalars

   The bgpBaseScalars section (and corresponding OBJECT IDENTIFIER) is
   used to delineate objects object types used for basic management and
	 monitoring monitor-
   ing of the protocol implementation.   These are core parameters for
   the local configuration.

   * The bgpPeerData  While notifications are designed to be
   extensible into any other section is per-peer object definitions. in the MIB module, the currently
   defined traps are located here, in a subsection 'bgpBaseNotifica-
   tions'.  This is rooted at index level zero (0) here, owing to con-
   ventions established in [4].

   Support for multiple concurrently supported versions of BGP is
   exposed through the entries of the bgpVersionTable.  Similarly, sup-
   port for multiple capabilities and authentication mechanisms, as
   identified by their assigned numbers, are reported in the bgpSupport-
   edCapabilitiesTable and bgpSupportedAuthTable respectively.

   In the MIB document, there are currently basic scalar extension mech-
   anisms to allow the agent to report membership of a local BGP Confed-
   eration [21] or Route Reflection Cluster ID [24].  These are consis-
   tent with the non-capability based extension section indexing guide-
   lines as presented above.

3.2.  bgpPeerData

   The bgpPeerData section is per-peer object type definitions. The
     predominant pre-
   dominant table in that section (bgpPeerTable) describes the session,
   negotiation state, and authentication state on a per peer basis.  A
   second table (bgpPrefixCountersTable) exposes information about individual indi-
   vidual route prefixes received over each peer session.

  * bgpCapabilitiesData  A separate
   subsection and its subordinate table (bgpPeerErrorsTable) reports
   information about the last error encountered on a given peering ses-
   sion.

   Further subsections report authentication state with the peer and
   elapsed time it has taken to advance the peering session into various
   states defined in the protocol FSM.

   The bgpPeerConfiguredTimersTable reports and allows dynamic reset of
   key timers on the peer session.  These currently allow reset of hold
   time and keepalive timer, for compatibility wity the same capabili-
   ties in RFC 1657 [17]. For these resettable timers, their end-to-end
   negotiated current values are reflected in the bgpPeerNegotiated-
   TimersTable.

3.2.1.  bgpPeerCapabilities

   bgpPeerCapabilitiesData has objects and tables to describe BGP
    capabilities capa-
   bilities locally supported, and those reported and negotiated over
   each peer session.

  * bgpPathAttributesData contains objects describing destination
    networks   For tables supporting each of these capability
   sets, capability code and paths data value are provided.  Attention must be
   given to those networks, the fact that multiple instances of a given capability can
   be transmitted between BGP speakers.

3.2.2.  bgpPeerCounters

   The bgpCountersTable and bgpPrefixCountersTable report protocol
   exhanges/FSM transitions, and discrete number of NLRIs exchanged per
   peering session, respectively.  This is independent of the peer
    from actual
   exhanged path attributes, which are tabularized later in the information MIB mod-
   ule.

3.2.3.  Peering Data Extensions

   Route reflector status on each network was received.

   Each section is further given an OBJECT IDENTIFIER allowing a section
   of containment for the per-capability extensions of per-peer basis (whether the scope peer is a
   client or nonClient of  the
   section.

4.1  Preliminary State of Work

   The MIB herein local BGP router's reflected route propa-
   gation), and peer confederation membership is the first, very rough, step reported in the refinement non capa-
   bility extensions of the managed object definition this effort seeks to define.  It peering data section.

3.3.  BGP Routing Information Base Data

   An important table for providing index information for other tables
   in the MIB module is the bgpNlriTable.  This discriminates on a given
   network prefix (by AFI/SAFI), and the peer which advertised the pre-
   fix (since it can be heard of from multiple spakers).  The bgpPathAt-
   trIndex column which identifies each row in this table is used as an
   index for other per-attribute tables through the remainder of the MIB
   module.

   The bgpPathAttrTable provides discrete BGP NLRI attributes which were
   recieved with the advertisement of the prefix by its advertising
   peer.  Specific information about the autonomous system path (AS
   Path) advertised with the NLRI, on a per AS value, is to be found in
   the bgpAsPathTable.

   Finally, where attributes which were unable to be reported in the
   bgpPathAttrTable, the AS Path table, or any defined per-NLRI tables
   in the agent were recieved with the prefix, those attributes are
   reported via the bgpPathAttrUnknownTable.  Short of advertised
   attribute type, no semantic breakdown of the unknown attribute data
   is provided.  That data is only available as a raw OCTET STRING in
   the bgpPathAttrUnknownValue column of this table.

3.3.1.  Routing Information Base Extensions

   There are two extension sections and five subordinate tables to the
   bgp4PathAttrTable and RIB data OBJECT IDENTIFIER-delimited MIB module
   section. The bgpPathAttrRouteReflectionExts and its contained bgp-
   PathAttrOriginatorIdTable report on the originating route reflector.
   The bgpPathAttrClusterTable specifically reports on the reflection
   route a NLRI has traversed to get to the local BGP routing process.

   The bgpPathAttrCommunityExts section deals with extended and non-
   exteded communities for network routes.  The bgpPathAttrCommTable
   bgpPathAttrExtCommTable  contained herein report community membership
   (if any) on a per network-prefix basis.

3.4.  Consideration On Table Indexing

   There are certain efficiency concerns for row index management for
   management applications which are useful to take into consideration,
   given the nature of some of the tables implied in the preceding sec-
   tion.

   In the first place, it is valuable to exploit the direct relationship
   of entries in, for example, the bgpPrefixCountersTable as they relate
   to the entry in the bgpPeerTable to which they are related.  More
   compelling is the case of the one-to-many relationship between a row
   entry in the bgpPeerTable and the bgp4PathAttrTable, the latter of
   which maintains per-row entries for potentially many NLRIs as
   received from a peer in a BGP UPDATE message.  From the point of view
   of normalizing these relationships, it would be useful to have a
   direct reference to the "governing" bgpPeerTable row entry for the
   peer which is a "dependency" for the subordinate table row entry for
   other peer data.

   Second, the nature of protocol-independent addressing makes the
   indexing of these entries indirectly even more compelling.  Even
   accounting for the addressing requirements of IPv6 and the provision
   of AFI and SAFI qualifiers, the logical addressing of a row in the
   bgp4PathAttrClusterTable (for example) would extend out some 50 bytes
   if there was no direct index linkage to the "governing" bgp4PathAt-
   trTable, and bgpPeerTable entries.

   For this reason, the tables are structured in such a way that, where
   there is such a linkage to a "dependent" table (where, for example,
   the bgpPrefixCountersTable "depends on" the bgpPeerTable), a table
   will contain a per-row numeric index (e.g., bgpPeerIndex), which the
   "dependent" table will use as one of its own row index values.  These
   indices are manufactured by the agent, and are otherwise opaque to
   the management application (or, for that matter, even to the
   organization of the "dependent" table[s]).

4.  Definitions

    BGP4-V2-MIB DEFINITIONS ::= BEGIN

        IMPORTS
            MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
            Integer32, Counter32, Gauge32, mib-2,
            Unsigned32
                FROM SNMPv2-SMI
            InetAddressType, InetAddress
                FROM INET-ADDRESS-MIB
            TEXTUAL-CONVENTION, TruthValue, DisplayString, RowStatus
                FROM SNMPv2-TC
            MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
                FROM SNMPv2-CONF;

        bgp MODULE-IDENTITY
            LAST-UPDATED "200111200000Z"
            ORGANIZATION "IETF IDR Working Group"
            CONTACT-INFO "E-mail:  idr@merit.net

                          Jeff Haas  (Editor)
                          517 W. William Street
                          Ann Arbor, MI 48103-4943
                          Tel: +1 734 973-2200
                          Fax: +1 734 615-3241
                          E-mail: jhaas@nexthop.com"

            DESCRIPTION
                "This MIB module defines management objects for
                the Border Gateway Protocol, Version 4."
            ::= { mib-2 XXX }

        BgpIdentifier ::= TEXTUAL-CONVENTION
            DISPLAY-HINT "1d:"
            -- jmh - is this right?
            STATUS     current
            DESCRIPTION
                "The representation of a BGP Identifier."
            SYNTAX OCTET STRING(SIZE (4))

        BgpSafi ::= TEXTUAL-CONVENTION
            DISPLAY-HINT "d"
            STATUS current
            DESCRIPTION
                "The representation of a BGP Safi"
            SYNTAX Unsigned32(0..255)

        BgpAutonomousSystemNumber ::= TEXTUAL-CONVENTION
            -- JMH - how is Cisco et al. representing the 4byte
            -- versions?
            DISPLAY-HINT "d"
            STATUS current
            DESCRIPTION
                "An autonomous System Number.  If bgpAsSize is
                two-octet, the range is 0..65535.  If it is
                four-octet, it is the full range of Unsigned32."
            SYNTAX Unsigned32

        bgpBaseScalars
        OBJECT IDENTIFIER ::= { bgp 1 }

        bgpBaseNotifications
        OBJECT IDENTIFIER ::= { bgpBaseScalars 0 }

        bgpEstablished NOTIFICATION-TYPE
            OBJECTS {
                bgpPeerLocalAddrType,
                bgpPeerLocalAddr,
                bgpPeerRemoteAddrType,
                bgpPeerRemoteAddr,
                bgpPeerLastError,
                bgpPeerState
             }
            STATUS  current
            DESCRIPTION
                "The BGP Established event is generated when
                 the BGP FSM enters the ESTABLISHED state."
            ::= { bgpBaseNotifications 1 }

        bgpBackwardTransition NOTIFICATION-TYPE
            OBJECTS {
                bgpPeerLocalAddrType,
                bgpPeerLocalAddr,
                bgpPeerRemoteAddrType,
                bgpPeerRemoteAddr,
                bgpPeerLastError,
                bgpPeerState
            }
            STATUS  current
            DESCRIPTION
                "The BGPBackwardTransition Event is generated
                when the BGP FSM moves from a higher numbered
                state to a lower numbered state."
            ::= { bgpBaseNotifications 2 }

        bgpVersion
        OBJECT IDENTIFIER ::= { bgpBaseScalars 1 }

          --
        -- BGP Supported Version Table
        --

        bgpVersionTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpVersionEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Table of supported BGP versions."
            ::= { bgpVersion 1 }

        bgpVersionEntry OBJECT-TYPE
            SYNTAX     BgpVersionEntry
            MAX-ACCESS not-accessible
            STATUS     current
        DESCRIPTION
                "Entry containing data on a given supported version of
                    the Border Gateway Protocol and the level of support
                    provided.  It is expected that any agent implementation
                    supporting this MIB module will report support for
                    Version 4 of the Border Gateway Protocol at the very
                    minimum."
         INDEX { bgpVersionIndex }
           ::= { bgpVersionTable 1 }

        BgpVersionEntry ::= SEQUENCE {
                bgpVersionIndex
                    Unsigned32,
                bgpVersionSupported
                    TruthValue
                }

        bgpVersionIndex OBJECT-TYPE
            SYNTAX     Unsigned32(0..255)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The version number of the BGP Protocol."
            ::= { bgpVersionEntry 1 }
        bgpVersionSupported OBJECT-TYPE
            SYNTAX     TruthValue
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "This value is TRUE if the version of the BGP protocol
                 identified in 'bgpVersionIndex' is supported."
            ::= { bgpVersionEntry 2 }

        bgpSupportedAuthentication
        OBJECT IDENTIFIER ::= { bgpBaseScalars 2 }

        --
        -- Supported authentication mechanisms
        --

        bgpSupportedAuthTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpSupportedAuthEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "The supported BGP authentication mechanisms."
            ::= { bgpSupportedAuthentication 1 }

        bgpSupportedAuthEntry OBJECT-TYPE
            SYNTAX     BgpSupportedAuthEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Entry containing information whether a given BGP
                 authentication mechanism is supported by this
                 implementation."
            INDEX { bgpSupportedAuthCode }
            ::= { bgpSupportedAuthTable 1 }

        BgpSupportedAuthEntry ::= SEQUENCE {
                bgpSupportedAuthCode
                    Unsigned32,
                bgpSupportedAuthValue
                    TruthValue
                }

        bgpSupportedAuthCode OBJECT-TYPE
            SYNTAX     Unsigned32(0..255)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The BGP authentication code."
            ::= { bgpSupportedAuthEntry 1 }

        bgpSupportedAuthValue OBJECT-TYPE
            SYNTAX     TruthValue
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "This value is TRUE if a given authentication method
                 is supported by the local implementation."
            ::= { bgpSupportedAuthEntry 2 }

        bgpSupportedCapabilities
        OBJECT IDENTIFIER ::= { bgpBaseScalars 3 }

        --
        -- Supported BGP Capabilities
        --

        bgpCapabilitySupportAvailable OBJECT-TYPE
            SYNTAX     TruthValue
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "This variable determines whether BGP-4
                 capabilities are supported in this
                 implementation.  This variable may be set to
                 false to disable capability support."
            ::= { bgpSupportedCapabilities 1 }

        bgpSupportedCapabilitiesTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpSupportedCapabilityEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Table of supported BGP-4 capabilities."
            ::= { bgpSupportedCapabilities 2 }

        bgpSupportedCapabilitiesEntry OBJECT-TYPE
            SYNTAX     BgpSupportedCapabilityEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Information about supported capabilities indexed
                 by capability number."
            INDEX {
                bgpSupportedCapabilityIndex
        }
            ::= { bgpSupportedCapabilitiesTable 1 }

        BgpSupportedCapabilityEntry ::= SEQUENCE {
                bgpSupportedCapabilityIndex
                    Unsigned32,
                bgpSupportedCapability
                    TruthValue
                }

        bgpSupportedCapabilityIndex OBJECT-TYPE
            SYNTAX     Unsigned32 (0..255)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "Index of supported capability.  The index directly
                 corresponds with the BGP-4 Capability Advertisement
                 Capability Code."
            ::= { bgpSupportedCapabilitiesEntry 1 }

        bgpSupportedCapability OBJECT-TYPE
            SYNTAX     TruthValue
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "This value is True if this capability is supported,
                 False otherwise."
            ::= { bgpSupportedCapabilitiesEntry 2 }

        bgpAsSize OBJECT-TYPE
            SYNTAX     INTEGER {
                twoOctet(1),
                fourOctet(2)
            }
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The size of the AS value in this implementation.

                 The semantics of this are determined as per the
                 as-4bytes draft."
            REFERENCE
                "draft-ietf-idr-as4bytes-04"
            ::= { bgpBaseScalars 4 }

        bgpLocalAs OBJECT-TYPE
            SYNTAX     BgpAutonomousSystemNumber
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The local autonomous system number.

                 If the bgpAsSize is twoOctet, then the range is
                 constrained to be 0-65535."
            ::= { bgpBaseScalars 5 }

        bgpLocalIdentifier OBJECT-TYPE
            SYNTAX     BgpIdentifier
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The BGP Identifier of the local system.

                 Current practice is trending away from this value being
                 treated as an IP address and more as a generic
                 identifier."
            ::= { bgpBaseScalars 6 }

        --
        -- Base Scalar Extensions
        --

        bgpBaseScalarExtensions     OBJECT IDENTIFIER ::=
            { bgpBaseScalars 7 }

        bgpBaseScalarNonCapExts OBJECT IDENTIFIER ::=
            { bgpBaseScalarExtensions 1 }

        bgpBaseScalarCapExts OBJECT IDENTIFIER ::=
            { bgpBaseScalarExtensions 2 }

        --
        -- Base Scalar AS Confederation Extensions
        --

        bgpBaseScalarASConfederationExts OBJECT IDENTIFIER ::=
             { bgpBaseScalarNonCapExts 1965 }

        bgpConfederationId OBJECT-TYPE
            SYNTAX     BgpAutonomousSystemNumber
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The local Confederation Identification Number.

                A value of zero (0) indicates the absence of this
                value."
            REFERENCE
                "RFC 3065 - Autonomous System Confederations for BGP"
            ::= { bgpBaseScalarASConfederationExts 1 }

          --
        -- Base Scalar Route Reflection Extensions
        --

        bgpBaseScalarRouteReflectionExts OBJECT IDENTIFIER ::=
            { bgpBaseScalarNonCapExts 1966 }

        bgpClusterId OBJECT-TYPE
            SYNTAX      BgpIdentifier
            MAX-ACCESS  read-write
            STATUS      current
            DESCRIPTION
                "The configured Cluster-ID of the local router.

                A value of 0.0.0.0 indicates the absence of this
                value."
            REFERENCE
                "RFC 2796 - BGP Route Reflection"
            ::= { bgpBaseScalarRouteReflectionExts 1 }

        bgpPeer
        OBJECT IDENTIFIER ::= { bgp 2 }

        bgpPeerData
        OBJECT IDENTIFIER ::= { bgpPeer 1 }

        --
        -- BGP Peer Data
        --

        bgpPeerTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpPeerEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "BGP peer table.

                This table contains, one entry per BGP peer,
                and information about the connections with BGP
                peers."
            ::= { bgpPeerData 1 }

        bgpPeerEntry OBJECT-TYPE
            SYNTAX     BgpPeerEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Entry containing information about the connection with
                a BGP peer."
            INDEX {
                -- JMH We should only need one AddrType?
                bgpPeerLocalAddrType,
                bgpPeerLocalAddr,
                bgpPeerRemoteAddrType,
                bgpPeerRemoteAddr
            }
            ::= { bgpPeerTable 1 }

        BgpPeerEntry ::= SEQUENCE {
                bgpPeerIdentifier
                    BgpIdentifier,
                bgpPeerState
                    INTEGER,
                bgpPeerAdminStatus
                    INTEGER,
                bgpPeerConfiguredVersion
                    Unsigned32,
                bgpPeerNegotiatedVersion
                    Unsigned32,
                bgpPeerLocalAddrType
                    InetAddressType,
                bgpPeerLocalAddr
                    InetAddress,
                bgpPeerLocalPort
                    Integer32,
                bgpPeerLocalAs
                    BgpAutonomousSystemNumber,
                bgpPeerRemoteAddrType
                    InetAddressType,
                bgpPeerRemoteAddr
                    InetAddress,
                bgpPeerRemotePort
                    Integer32,
                bgpPeerRemoteAs
                    BgpAutonomousSystemNumber,
                bgpPeerIndex
                    Unsigned32,
                bgpPeerRowEntryStatus
                    RowStatus
                }

        bgpPeerIdentifier OBJECT-TYPE
            SYNTAX     BgpIdentifier
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The BGP Identifier of this entry's BGP peer.

                 This entry should be 0.0.0.0 unless the bgpPeerState is being
   offered
                 in the openconfirm or the established state."
            ::= { bgpPeerEntry 1 }

        bgpPeerState OBJECT-TYPE
            SYNTAX     INTEGER {
                idle(1),
                connect(2),
                active(3),
                opensent(4),
                openconfirm(5),
                established(6)
            }
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The BGP peer's FSM state."
            ::= { bgpPeerEntry 2 }

        -- JMH
        -- The work here is done by a transition.
        -- This implies that we stay in a state even though
        -- automatic start/stop events imply strobing something
        -- even when the state machine is running.
        bgpPeerAdminStatus OBJECT-TYPE
            SYNTAX     INTEGER {
                stop(1),
                start(2)
            }
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The desired state of the BGP connection.

                 A transition from 'stop' to 'start' will cause the community at this moment BGP
                 Start Event to get a read as be generated.

                 A transition from 'start' to 'stop' will cause the
   general directions and ideas being pursued.  Reviewers are urged not BGP
                 Stop Event to focus too much on certain details, or the inevitable roughness
   of their specification.  Attention be generated.

                 This parameter can be used to restart BGP peer
                 connections.  Care should be used in providing write
                 access to those details is promised
   with the next revision or two of this internet-draft.

5. Definitions

    BGP4-V2-MIB DEFINITIONS object without adequate authentication."
            ::= BEGIN

        IMPORTS
            MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
            IpAddress, Integer32, Counter32, Gauge32, mib-2,
        experimental, { bgpPeerEntry 3 }

        -- JMH
        -- Added this
        bgpPeerConfiguredVersion OBJECT-TYPE
            SYNTAX     Unsigned32
                FROM SNMPv2-SMI
        InetAddressType, InetAddress
        FROM INET-ADDRESS-MIB
        TEXTUAL-CONVENTION, TruthValue
            FROM SNMPv2-TC
            MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
                FROM SNMPv2-CONF;

        bgp MODULE-IDENTITY
            LAST-UPDATED "200107060000Z"
            ORGANIZATION "IETF IDR Working Group"
            CONTACT-INFO "E-mail:  idr@merit.net

                          Jeff Haas  (Editor)
                          517 W. William Street
                          Ann Arbor, MI 48103-4943
                          Tel: +1 734 973-2200
                          Fax: +1 734 615-3241
                          E-mail: jhaas@nexthop.com" (1..255)
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
           "This MIB module defines management objects for
                "The configured version to originally start with this
                 peer.  The BGP speaker may permit negotiation to a
                 lower version number of the Border Gateway Protocol, Version 4." protocol."
            ::= { mib-2 ??? bgpPeerEntry 4 }

    BgpIdentifier ::= TEXTUAL-CONVENTION
        DISPLAY-HINT "1d:"
        -- jmh - is this right?

        bgpPeerNegotiatedVersion OBJECT-TYPE
            SYNTAX     Unsigned32 (1..255)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The representation negotiated version of a BGP Identifier." running between the two
                 peers."
            ::= { bgpPeerEntry 5 }

        bgpPeerLocalAddrType OBJECT-TYPE
            SYNTAX OCTET STRING(SIZE (4))

    BgpSafi     InetAddressType
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The address family of the local end of the peering
                 session."
            ::= { bgpPeerEntry 6 }
        bgpPeerLocalAddr OBJECT-TYPE
            SYNTAX     InetAddress (SIZE (20))
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The address of the local end of the peering session."
            ::= TEXTUAL-CONVENTION
        DISPLAY-HINT "d" { bgpPeerEntry 7 }

        bgpPeerLocalPort OBJECT-TYPE
            SYNTAX     Integer32 (-1 | 0..65535)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The representation local port for the transport connection between the BGP
                 peers.  In the case of a BGP Safi" transport for which the notion of
                 'port' is irrelevant, an instance value of -1 should be returned
                 by the agent for this object."
            ::= { bgpPeerEntry 8 }

        bgpPeerLocalAs OBJECT-TYPE
            SYNTAX Integer32(0..255)     BgpAutonomousSystemNumber ::= TEXTUAL-CONVENTION
        DISPLAY-HINT "d"
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
        "An autonomous System Number.  If bgpAsSize
                "Some implementations of BGP can represent themselves
                 as multiple ASs.  This is
         two-octet, the range is 0..65535.  If it is
         four-octet, it AS that this peering
                 session is representing itself as to the full range of Unsigned32."
        SYNTAX Unsigned32

     bgpBaseScalars          OBJECT IDENTIFIER remote peer."
            ::= { bgp 1 bgpPeerEntry 9 }

    -- notifications and derivations from

        bgpPeerRemoteAddrType OBJECT-TYPE
            SYNTAX     InetAddressType
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The address family of the SNMPv1 'trap' in general
    -- must be rooted at suboid 0

    bgpBaseTraps        OBJECT IDENTIFIER remote end of the peering
                 session."
            ::= { bgpBaseScalars 0 bgpPeerEntry 10 }

        bgpEstablished NOTIFICATION-TYPE
            OBJECTS

        bgpPeerRemoteAddr OBJECT-TYPE
            SYNTAX     InetAddress (SIZE (20))
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The address of the remote end of the peering session."
            ::= {
        bgpPeerRemoteAddrType,
        bgpPeerRemoteAddr,
        bgpPeerLastError,
                bgpPeerState bgpPeerEntry 11 }

        bgpPeerRemotePort OBJECT-TYPE
            SYNTAX     Integer32 (-1 | 0..65535)
            MAX-ACCESS      read-write
            STATUS     current
            DESCRIPTION
                "The remote port for the TCP connection between
                 the BGP Established event peers.  In the case of a transport for
                 which the notion of 'port' is generated when irrelevant, an
                 instance value of -1 should be returned
                 by the BGP FSM enters agent for this object.

                 -- JMH - this text needs updating
                 Note that the ESTABLISHED state."
            ::= { bgpBaseTraps 1 }

        bgpBackwardTransition NOTIFICATION-TYPE
            OBJECTS objects bgpPeerLocalAddr,
                 bgpPeerLocalPort, bgpPeerRemoteAddr and
                 bgpPeerRemotePort provide the appropriate reference to
                 the standard MIB TCP connection table. or even the ipv6
                 tcp MIB as in rfc2452."
            ::= {
        bgpPeerRemoteAddrType,
        bgpPeerRemoteAddr,
                bgpPeerLastError,
                bgpPeerState bgpPeerEntry 12 }

        bgpPeerRemoteAs OBJECT-TYPE
            SYNTAX     BgpAutonomousSystemNumber
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                "The BGPBackwardTransition Event is generated
                 when the BGP FSM moves from a higher numbered
                 state to a lower numbered state." remote autonomous system number."
            ::= { bgpBaseTraps 2 bgpPeerEntry 13 }

--
--
--
		bgpVersion

        bgpPeerIndex OBJECT-TYPE
            SYNTAX     OCTET STRING (SIZE (1..32))      Unsigned32
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
                    "Vector of supported BGP protocol version
                    numbers.  Each
                "This value is a unique index for the peer negotiates entry in the version
                    from this vector.  Versions are identified
                    via
                 bgpPeerTable.  It is assigned by the string agent at the point
                 of creation of bits contained within this
                    object.  The first octet contains bits 0 to
                    7, the second octet contains bits 8 bgpPeerTable row entry.  While its
                 value is guaranteed to 15,
                    and so on, with the most significant bit
                    referring be unique at any time, it is
                 otherwise opaque to the lowest bit number in the
                    octet (e.g., management application with
                 respect to its value or the MSB contiguity of bgpPeerIndex
                 row instance values across rows of the first octet
                    refers bgpPeerTable.  It
                 is used to bit 0).  If a bit, i, provide an index structure for other tables
                 whose data is present logically per-peer."
-- +++wayne (from Tom Nadeau): need text describing fate sharing of index, if
-- peering session comes up, peer disconnects, and set, then this or other peer

-- connects again.  Will this grow monotonically? (I think that's the version (i+1) of the BGP
                    is supported." question)
             ::= { bgpBaseScalars 1 bgpPeerEntry 14 }

--
--
--

    bgpAsSize

        bgpPeerRowEntryStatus OBJECT-TYPE
            SYNTAX     INTEGER {
            twoOctet(1),
            fourOctet(2)
        }      RowStatus
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
        "The size
                "This object type reflects the status of the AS value in row within the
                agent.  Note that this implementation.
        The semantics is independent of the bgpPeerAdminStatus
                which reflects the underlying peering session itself.  An instance
                of this row is returned by the agent to reflect the validity of the
                current state of this row.  The valid RowStatus enumeration values
                for this are determined as per 'active', 'notInService', and 'notReady'."
-- +++wayne need better definition of the
        as-4bytes draft." three states, better analysis of
-- whether this should be read-write, and what, if any, the interaction of setting
-- bgpPeerAdminStatus to 'stop'.  At some point, the entry should age out of the
-- agent, and this needs to track that (in addition to its creation from
-- bgpPeerCfgTable row data).
             ::= { bgpBaseScalars bgpPeerEntry 15 }

        bgpPeerErrors
        OBJECT IDENTIFIER ::= { bgpPeer 2 }

--
--
--

        bgpLocalAs

        bgpPeerErrorsTable OBJECT-TYPE
            SYNTAX     Unsigned32     SEQUENCE OF BgpPeerErrorsEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
                    "The local autonomous system number.
            If
                "On a per peer basis, this table reflects the bgpAsSize is twoOctet, last
                    protocol-defined error encountered and reported on the
                    peer session.  If no entry for a given peer, by its
                    bgpPeerIndex, exists in this table, then no such errors
                    have been observed, reported, and recorded on the
            range is constrained to be 0-65535."
                    session."
            ::= { bgpBaseScalars 3 bgpPeerErrors 1 }

--
--
--
        bgpLocalIdentifier

        bgpPeerErrorsEntry OBJECT-TYPE
            SYNTAX     BgpIdentifier     BgpPeerErrorsEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
                    "The BGP Identifier of local system.
            Current practice is trending away from this
            value being treated as
                "Each entry contains information about an IP address and more
            as error on
                    a generic identifier."
            ::= given BGP peer session."
            INDEX { bgpBaseScalars 4 bgpPeerIndex }

        bgpBaseScalarExtensions     OBJECT IDENTIFIER
            ::= { bgpBaseScalars 5 bgpPeerErrorsTable 1 }

        bgpBaseScalarRouteReflectionExtensions

        BgpPeerErrorsEntry ::= SEQUENCE { bgpBaseScalarExtensions 1
            bgpPeerLastError
                OCTET STRING,
            bgpPeerLastErrorData
                Unsigned32
        }

        bgp4ClusterId

        bgpPeerLastError OBJECT-TYPE
            SYNTAX      BgpIdentifier     OCTET STRING (SIZE (2))
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The configured Cluster-ID of the local router. A value
                     of 0.0.0.0 indicates last error code and subcode seen by this peer on
                 this connection.  If no error has occurred, this field
                 is zero.  Otherwise, the absence first byte of this value."
-- jmh calling it a value of "0.0.0.0" doesn't quite make sense if its
-- an octet string rather than an ip address? two byte
                 OCTET STRING contains the error code, and the second
                 byte contains the subcode."
            REFERENCE
                    "RFC 2796 - BGP Route Reflection"
            ::= { bgpBaseScalarRouteReflectionExtensions 5 }

        bgpBaseScalarASConfederationExtensions
                "draft-ietf-bgp4-15.txt, Sec. 4.5"
            ::= { bgpBaseScalarExtensions 2 bgpPeerErrorsEntry 1 }

        bgp4ConfederationId

        bgpPeerLastErrorData OBJECT-TYPE
            SYNTAX     BgpAutonomousSystemNumber     Unsigned32 (0..4075)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The local Confederation Identification Number.  A value
                     of zero (0) indicates the absence of last error code's data seen by this value."
            REFERENCE
                    "RFC 3065 - Autonomous System Confederations for BGP" peer on this
                 connection."
            ::= { bgpBaseScalarASConfederationExtensions 6 bgpPeerErrorsEntry 2 }
		-- BGP Peer table.  This table contains, one entry per
        -- BGP peer, information about the BGP peer.

        bgpPeerData

        bgpPeerAuthentication
        OBJECT IDENTIFIER ::= { bgp 2 bgpPeer 3 }

        bgpPeerTable

        --
        -- Peer Authentication
        --

        bgpPeerAuthTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpPeerEntry BgpPeerAuthEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "BGP peer authentication table.

                 This table contains, one entry per BGP peer,
                 information about the
                    connections authentication with BGP peers."
            ::= { bgpPeerData bgpPeerAuthentication 1 }

        bgpPeerEntry
        bgpPeerAuthEntry OBJECT-TYPE
            SYNTAX     BgpPeerEntry     BgpPeerAuthEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Entry containing information about the
                    connection authentication
                 with a BGP peer."
            INDEX {
        bgpPeerRemoteAddrType,
        bgpPeerRemoteAddr bgpPeerIndex }
            ::= { bgpPeerTable bgpPeerAuthTable 1 }

        BgpPeerEntry

        BgpPeerAuthEntry ::= SEQUENCE {
                bgpPeerIdentifier
                    OCTET STRING,
                bgpPeerState
                    INTEGER,
                bgpPeerAdminStatus
                    INTEGER,
                bgpPeerNegotiatedVersion
                    Integer32,
                bgpPeerLocalAddrType
                    InetAddressType,
                bgpPeerLocalAddr
                    InetAddress,
                bgpPeerLocalPort
                    Integer32,
        bgpPeerLocalAs
            BgpAutonomousSystemNumber,
                bgpPeerRemoteAddrType
                    InetAddressType,
                bgpPeerRemoteAddr
                    InetAddress,
                bgpPeerRemotePort
                    Integer32,
                bgpPeerRemoteAs
                    BgpAutonomousSystemNumber,
        bgpPeerReflectorClient
            INTEGER,
		bgpPeerConfederationMember
            TruthValue,
-- jmh add in a spot for unrecognized optional parameters?
                bgpPeerInUpdates
                    Counter32,
                bgpPeerOutUpdates
                    Counter32,
                bgpPeerInTotalMessages
                    Counter32,
                bgpPeerOutTotalMessages
                    Counter32,
                bgpPeerLastError
                    OCTET STRING,
                bgpPeerFsmEstablishedTransitions
                    Counter32,
                bgpPeerFsmEstablishedTime
                    Gauge32,
                bgpPeerConnectRetryInterval
                    Integer32,
                bgpPeerHoldTime
                    Integer32,
                bgpPeerKeepAlive
                    Integer32,
                bgpPeerHoldTimeConfigured
                    Integer32,
                bgpPeerKeepAliveConfigured
                    Integer32,
                bgpPeerMinASOriginationInterval
                    Integer32,
                bgpPeerMinRouteAdvertisementInterval
                    Integer32,
                bgpPeerInUpdateElapsedTime
                    Gauge32,
                bgpPeerAuthenticationSent
                    TruthValue,
                bgpPeerAuthenticationSentCode
                    Integer32,
                bgpPeerAuthenticationSentValue
                    OCTET STRING,
                bgpPeerAuthenticationReceived
                    TruthValue,
                bgpPeerAuthenticationReceivedCode
                    Integer32,
                bgpPeerAuthenticationReceivedValue
                    OCTET STRING
                }
		bgpPeerIdentifier OBJECT-TYPE
            SYNTAX     BgpIdentifier
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                    "The BGP Identifier of this entry's BGP peer.
                     This entry should be 0.0.0.0 unless the
                     bgpPeerState is in the openconfirm or the
                     established state."
            ::= { bgpPeerEntry 1 }

        bgpPeerState OBJECT-TYPE
            SYNTAX     INTEGER {
                idle(1),
                connect(2),
                active(3),
                opensent(4),
                openconfirm(5),
                established(6)
        }
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The BGP peer connection state."
            ::= { bgpPeerEntry 2 }

        bgpPeerAdminStatus OBJECT-TYPE
            SYNTAX     INTEGER {
                stop(1),
                start(2)
        }
            MAX-ACCESS read-write
            STATUS     current
            DESCRIPTION
                    "The desired state of the BGP connection.
                    A transition from 'stop' to 'start' will
                    cause the BGP Start Event to be generated.
                    A transition from 'start' to 'stop' will
                    cause the BGP Stop Event to be generated.
                    This parameter can be used to restart BGP
                    peer connections.  Care should be used in
                    providing write access to this object
                    without adequate authentication."
            ::= { bgpPeerEntry 3
            bgpPeerAuthSent
                TruthValue,
            bgpPeerAuthSentCode
                Unsigned32,
            bgpPeerAuthSentValue
                OCTET STRING,
            bgpPeerAuthRcvd
                TruthValue,
            bgpPeerAuthRcvdCode
                Unsigned32,
            bgpPeerAuthRcvdValue
                OCTET STRING
    }
		bgpPeerNegotiatedVersion

        bgpPeerAuthSent OBJECT-TYPE
            SYNTAX     Integer32 (1..255)
        -- jmh we may want this r/w TruthValue
            MAX-ACCESS read-only read-write
            STATUS current
            DESCRIPTION
                "The negotiated version of BGP running between local peer has sent authentication
                to the two peers." remote peer in the BGP Authentication
                    field."
               ::= { bgpPeerEntry 4 bgpPeerAuthEntry 1 }

        bgpPeerLocalAddrType

         bgpPeerAuthSentCode OBJECT-TYPE
            SYNTAX     InetAddressType  Unsigned32 (0..255)
            MAX-ACCESS read-only read-write
            STATUS current
            DESCRIPTION
                "The address family code of the local end of authentication information sent
                the peering
         session." remote peer."
            ::= { bgpPeerEntry 5 bgpPeerAuthEntry 2 }

        bgpPeerLocalAddr
        bgpPeerAuthSentValue OBJECT-TYPE
            SYNTAX     InetAddress  OCTET STRING (SIZE (0..255))
        -- jmh length is too much
        -- +++wayne get value from...IPSec MIB? Any opaque TC there to use?
            MAX-ACCESS read-only read-write
            STATUS current
            DESCRIPTION
                "The address payload of the local end of authentication information
                from the peering session." remote peer."
            ::= { bgpPeerEntry 6 bgpPeerAuthEntry 3 }

        bgpPeerLocalPort

        bgpPeerAuthRcvd OBJECT-TYPE
            SYNTAX     Integer32 (0..65535) TruthValue
            MAX-ACCESS read-only
            STATUS current
            DESCRIPTION
                "The local port for peer has received authentication
                from the TCP connection between remote peer in the BGP peers.
        If we're not running IP, could this be some generic
        value?  What size is the OSI NSAP?" Authentication
                field."
               ::= { bgpPeerEntry 7 bgpPeerAuthEntry 4 }

        bgpPeerLocalAs

        bgpPeerAuthRcvdCode OBJECT-TYPE
            SYNTAX     BgpAutonomousSystemNumber  Unsigned32 (0..255)
            MAX-ACCESS read-only
            STATUS current
            DESCRIPTION
        "Some implementations
                "The code of BGP can represent themselves
        as multiple ASs.  This is the AS that this peering
        session is representing itself as to authentication information
                from the remote peer."
            ::= { bgpPeerEntry 8 bgpPeerAuthEntry 5 }
		bgpPeerRemoteAddrType

        bgpPeerAuthRcvdValue OBJECT-TYPE
            SYNTAX     InetAddressType  OCTET STRING (SIZE (0..255))
        -- jmh length is too much
            MAX-ACCESS read-only
            STATUS current
            DESCRIPTION
                "The address family payload of the authentication information
                from the remote end peer."
            ::= { bgpPeerAuthEntry 6 }

        bgpPeerTimers
        OBJECT IDENTIFIER ::= { bgpPeer 4 }

        --
        -- Peer Event Times
        --

        bgpPeerEventTimesTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpPeerEventTimesEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "A table reporting the per-peering session amount of time
                    elapsed and update events since the peering
        session." session
                advanced into the 'established' state."
            ::= { bgpPeerTimers 1 }

        bgpPeerEventTimesEntry OBJECT-TYPE
            SYNTAX     BgpPeerEventTimesEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Each row contains a set of statistics about time
                    spent and events encountered in the peer session
                'established' state."
            INDEX { bgpPeerIndex }
            ::= { bgpPeerEntry 9 bgpPeerEventTimesTable 1 }

        bgpPeerRemoteAddr

        BgpPeerEventTimesEntry ::= SEQUENCE {
            bgpPeerFsmEstablishedTime
                Gauge32,
            bgpPeerInUpdatesElapsedTime
                Gauge32
    }

        bgpPeerFsmEstablishedTime OBJECT-TYPE
            SYNTAX     IpAddress     Gauge32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The address of
                "This timer indicates how long (in seconds) this
                peer has been in the remote end of Established state or how long
                since this peer was last in the peering session." Established state.
                It is set to zero when a new peer is configured or
                the router is booted."
            ::= { bgpPeerEntry 10 bgpPeerEventTimesEntry 1 }

        bgpPeerRemotePort

        bgpPeerInUpdatesElapsedTime OBJECT-TYPE
            SYNTAX     Integer32 (0..65535)     Gauge32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The remote port for the TCP connection
        between
                 "Elapsed time in seconds since the last BGP peers.
        If we're not running IP, this should be a generic
        transport endpoint.
        Note that
                message was received from the
        objects bgpPeerLocalAddr,
        bgpPeerLocalPort, bgpPeerRemoteAddr and
        bgpPeerRemotePort provide peer.  Each time
                bgpPeerInUpdates is incremented, the appropriate
        reference value of this
                object is set to the standard MIB TCP
        connection table. or even the ipv6 tcp MIB
        as in rfc2452.
        Is there an analog for non IP technologies?" zero (0)."
            ::= { bgpPeerEntry 11 bgpPeerEventTimesEntry 2 }

        bgpPeerRemoteAs

        --
        -- Peer Configured Timers
        --

        bgpPeerConfiguredTimersTable OBJECT-TYPE
            SYNTAX     BgpAutonomousSystemNumber     SEQUENCE OF BgpPeerConfiguredTimersEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
        "The remote autonomous system number."
                "Per peer management data on BGP session timers."
            ::= { bgpPeerEntry 12 bgpPeerTimers 2 }
	bgpPeerReflectorClient

        bgpPeerConfiguredTimersEntry OBJECT-TYPE
            SYNTAX    INTEGER {
        nonClient(0),
        client(1),
        meshedClient(2)
        }     BgpPeerConfiguredTimersEntry
            MAX-ACCESS  read-only not-accessible
            STATUS     current
            DESCRIPTION
        "This value indicates whether the given peer is a reflector
         client of this router, or not.  A value of nonClient
         indicates that this peer is not a reflector client.  A
         value of client indicates that this peer is a reflector
         client that is not fully meshed with other reflector
         clients.  A value of meshedClient indicates that the
         peer is a reflector client and is fully meshed with all
         other reflector clients."
            REFERENCE
        "RFC 2796 -
                "Each entry corresponds to the current state of BGP Route Reflection"
                    timers on a given peering session."
            INDEX { bgpPeerIndex }
            ::= { bgpPeerEntry 13 bgpPeerConfiguredTimersTable 1 }

        bgpPeerConfederationMember

        BgpPeerConfiguredTimersEntry ::= SEQUENCE {
            bgpPeerConnectRetryInterval
                Unsigned32,
            bgpPeerHoldTimeConfigured
                Unsigned32,
            bgpPeerKeepAliveConfigured
                Unsigned32,
            bgpPeerMinASOriginationInterval
                Unsigned32,
            bgpPeerMinRouteAdvertiseInterval
                Unsigned32
    }

        bgpPeerConnectRetryInterval OBJECT-TYPE
            SYNTAX      TruthValue     Unsigned32 (1..65535)
            MAX-ACCESS  read-only read-write
            STATUS     current
            DESCRIPTION
        "This value indicates whether
                "Time interval in seconds for the given peer ConnectRetry
                timer.  The suggested value for this timer is in our
         confederation or not."
        REFERENCE
        "RFC 3065 - BGP Confederations" 120
                seconds."
            ::= { bgpPeerEntry 14 bgpPeerConfiguredTimersEntry 1 }

        bgpPeerInUpdates

        bgpPeerHoldTimeConfigured OBJECT-TYPE
            SYNTAX     Counter32     Unsigned32 ( 0 | 3..65535 )
            MAX-ACCESS read-only read-write
            STATUS     current
            DESCRIPTION
        "The number of
                "Time interval in seconds for the Hold Time configured
                for this BGP UPDATE messages
        received on speaker with this connection. peer.  This object
        should be initialized value
                is placed in an OPEN message sent to this peer by
                this BGP speaker, and is compared with the Hold
                Time field in an OPEN message received from the
                peer when determining the Hold Time (bgpPeerHoldTime)
                with the peer.  This value must not be less than
                three seconds if it is not zero (0) when in which case
                the
        connection Hold Time is established." NOT to be established with the
                peer.  The suggested value for this timer is 90
                seconds."
            REFERENCE
                "RFC 1771, p. 9"
            ::= { bgpPeerEntry 15 bgpPeerConfiguredTimersEntry 2 }

        bgpPeerOutUpdates

        bgpPeerKeepAliveConfigured OBJECT-TYPE
            SYNTAX     Counter32     Unsigned32 ( 0 | 1..21845 )
            MAX-ACCESS read-only read-write
            STATUS     current
            DESCRIPTION
        "The number of
                "Time interval in seconds for the KeepAlive
                configured for this BGP UPDATE speaker with this
                peer. The value of this object will only
                determine the KEEPALIVE messages' frequency
                relative to the value specified in
                bgpPeerHoldTimeConfigured; the actual time
                interval for the KEEPALIVE messages
        transmitted on is
                indicated by bgpPeerKeepAlive.  A
                reasonable maximum value for this connection.  This
        object should timer
                would be initialized configured to zero (0)
        when the connection is established."
            ::= { bgpPeerEntry 16 }
        bgpPeerInTotalMessages OBJECT-TYPE
            SYNTAX     Counter32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The total number be one third
                of messages received
        from that of bgpPeerHoldTimeConfigured.

                If the remote peer on value of this connection.
        This object should be initialized to zero
        when the connection is established."
            ::= { bgpPeerEntry 17 }

    bgpPeerOutTotalMessages OBJECT-TYPE
            SYNTAX     Counter32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The total number of zero (0),
                no periodical KEEPALIVE messages transmitted are sent to
                the remote peer on this connection.  This
        object should be initialized to zero when after the BGP connection has been
                established.

                The suggested value for this timer is established." 30
                seconds."
            REFERENCE
                "RFC 1771, pp. 17-18"
               ::= { bgpPeerEntry 18 bgpPeerConfiguredTimersEntry 3 }

        bgpPeerLastError

        bgpPeerMinASOriginationInterval OBJECT-TYPE
            SYNTAX     OCTET STRING (SIZE (2))     Unsigned32 (1..65535)
            MAX-ACCESS read-only read-write
            STATUS     current
            DESCRIPTION
        "The last error code and subcode seen by this
        peer on this connection.  If no error has
        occurred, this field is zero.  Otherwise,
                "Time interval in seconds for the
        first byte of
                timer.  The suggested value for this two byte OCTET STRING
        contains the error code, and the second byte
        contains the subcode." timer is 15
                seconds."
            ::= { bgpPeerEntry 19 bgpPeerConfiguredTimersEntry 4 }

        bgpPeerFsmEstablishedTransitions

        bgpPeerMinRouteAdvertiseInterval OBJECT-TYPE
            SYNTAX     Counter32     Unsigned32 (1..65535)
            MAX-ACCESS read-only read-write
            STATUS     current
            DESCRIPTION
        "The total number of times the BGP FSM
        transitioned into
                "Time interval in seconds for the established state
                MinRouteAdvertisementInterval timer.  The
                value for this peer." timer is 30 seconds."
            ::= { bgpPeerEntry 20 bgpPeerConfiguredTimersEntry 5 }
		bgpPeerFsmEstablishedTime

        --
        -- Peer Negotiated Timers
        --

        bgpPeerNegotiatedTimersTable OBJECT-TYPE
            SYNTAX     Gauge32     SEQUENCE OF BgpPeerNegotiatedTimersEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
        "This timer indicates how long (in
        seconds) this peer has been in the
        Established state or how long
        since this peer was last
                "Current values of per-peer timers which can be
                    dynamically set in the
        Established state.  It is set to zero when
        a new peer is configured or bgpPeerConfiguredTimersTable.
                    Values reflected in this table are the router is
        booted." current
                operational values, after negotiation from values
                    derived from initial configuration or last set from
                    bgpPeerConfiguredTimersTable row instances."
               ::= { bgpPeerEntry 21 bgpPeerTimers 3 }

        bgpPeerConnectRetryInterval

        bgpPeerNegotiatedTimersEntry OBJECT-TYPE
            SYNTAX     Integer32 (1..65535)     BgpPeerNegotiatedTimersEntry
            MAX-ACCESS read-write not-accessible
            STATUS     current
            DESCRIPTION
        "Time interval
                "Each entry reflects a value of the currently
                    operational, negotiated timers as reflected in seconds for the
        ConnectRetry timer.  The suggested value
        for this timer is 120 seconds."
                    BgpPeerNegotiatedTimersEntry."
            INDEX { bgpPeerIndex }
            ::= { bgpPeerEntry 22 bgpPeerNegotiatedTimersTable 1 }

        BgpPeerNegotiatedTimersEntry ::= SEQUENCE {
            bgpPeerHoldTime
                Integer32,
            bgpPeerKeepAlive
                Integer32
    }

        bgpPeerHoldTime OBJECT-TYPE
            SYNTAX     Integer32  ( 0 | 3..65535 )
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "Time interval in seconds for the Hold Timer
                established with the peer.  The value of this object
                is calculated by this BGP speaker by using the
                smaller of the value in bgpPeerHoldTimeConfigured
                and the Hold Time received in the OPEN message.
                This value must be at lease least three seconds if it is
                not zero (0) in which case the Hold Timer has not
                been established with the peer, or, the value of
                bgpPeerHoldTimeConfigured is zero (0)."
-- +++wayne (from Tom Nadeau) would like to see enumerated cases of
-- description as this has too many subcases.
            ::= { bgpPeerEntry 23 bgpPeerNegotiatedTimersEntry 1 }

        bgpPeerKeepAlive OBJECT-TYPE
            SYNTAX     Integer32 ( 0 | 1..21845 )
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "Time interval in seconds for the KeepAlive timer
                established with the peer.  The value of this object
                is calculated by this BGP speaker such that, when
                compared with bgpPeerHoldTime, it has the same
                proportion as what bgpPeerKeepAliveConfigured has
                when compared with bgpPeerHoldTimeConfigured.  If
                the value of this object is zero (0), it indicates
                that the KeepAlive timer has not been established
                with the peer, or, the value of bgpPeerKeepAliveConfigured is
        zero (0)."
                bgpPeerKeepAliveConfigured is zero (0)."
            ::= { bgpPeerNegotiatedTimersEntry 2 }
        bgpPeerCapabilities
        OBJECT IDENTIFIER ::= { bgpPeer 5 }

        --
        -- Peer Capabilities
        --

        --
        -- Announced Capabilities
        --

        bgpPeerCapsAnnouncedTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpPeerCapsAnnouncedEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "This table contains contains the capabilities
                that are supported for a given peer."
            ::= { bgpPeerCapabilities 1 }

        bgpPeerCapsAnnouncedEntry OBJECT-TYPE
            SYNTAX     BgpPeerCapsAnnouncedEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "These entries are keyed by a BGP-4 peer remote
                address and the BGP Capability Code"
            INDEX {
                bgpPeerIndex,
                bgpPeerCapAnnouncedCode,
                bgpPeerCapAnnouncedIndex
                }
            ::= { bgpPeerCapsAnnouncedTable 1 }

        BgpPeerCapsAnnouncedEntry ::= SEQUENCE {
                bgpPeerCapAnnouncedCode
                    Unsigned32,
                bgpPeerCapAnnouncedIndex
                    Unsigned32,
                bgpPeerCapAnnouncedLength
                    Unsigned32,
                bgpPeerCapAnnouncedValue
                    OCTET STRING
                }
        bgpPeerCapAnnouncedCode OBJECT-TYPE
            SYNTAX     Unsigned32 (0..255)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The BGP Capability Advertisement Capability Code."
            ::= { bgpPeerCapsAnnouncedEntry 1 }

        bgpPeerCapAnnouncedIndex OBJECT-TYPE
            SYNTAX     Unsigned32 (1..128)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "Multiple instances of a given capability may be sent
                bgp a BGP speaker.  This variable is used to index them."
            ::= { bgpPeerCapsAnnouncedEntry 2 }

        bgpPeerCapAnnouncedLength OBJECT-TYPE
            SYNTAX     Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The length of the announced capability."
            ::= { bgpPeerCapsAnnouncedEntry 3 }

        bgpPeerCapAnnouncedValue OBJECT-TYPE
            SYNTAX     OCTET STRING (SIZE(0..255))
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The value of the announced capability."
            ::= { bgpPeerEntry 24 bgpPeerCapsAnnouncedEntry 4 }

        bgpPeerHoldTimeConfigured

        --
        -- Received Capabilities
        --

        bgpPeerCapsReceivedTable OBJECT-TYPE
            SYNTAX     Integer32 ( 0 | 3..65535 )     SEQUENCE OF Bgp4PeerCapsReceivedEntry
            MAX-ACCESS read-write not-accessible
            STATUS     current
            DESCRIPTION
        "Time interval in seconds for the Hold Time
        configured for this BGP speaker with this
        peer.  This value is placed in an OPEN
        message sent to this peer by this BGP
        speaker, and is compared with the Hold
        Time field in an OPEN message received
        from the peer when determining the Hold
        Time (bgpPeerHoldTime) with the peer.
        This value must not be less than three
        seconds if it is not zero (0) in which
        case the Hold Time is NOT to be
        established with
                "This table contains contains the peer.  The suggested
        value capabilities
                that are supported for this timer is 90 seconds." a given peer."
            ::= { bgpPeerEntry 25 bgpPeerCapabilities 2 }

		bgpPeerKeepAliveConfigured

        bgpPeerCapsReceivedEntry OBJECT-TYPE
            SYNTAX     Integer32 ( 0 | 1..21845 )     Bgp4PeerCapsReceivedEntry
            MAX-ACCESS read-write not-accessible
            STATUS     current
            DESCRIPTION
        "Time interval in seconds for the
        KeepAlive timer configured for this BGP
        speaker with this peer.  The value of this
        object will only determine the
        KEEPALIVE messages' frequency relative to
        the value specified in
        bgpPeerHoldTimeConfigured; the actual
        time interval for the KEEPALIVE messages is
        indicated by bgpPeerKeepAlive.  A
        reasonable maximum value for this timer
        would be configured to be one
		third of that of
        bgpPeerHoldTimeConfigured.
        If the value of this object is zero (0),
        no periodical KEEPALIVE messages
                "These entries are sent
        to the keyed by a BGP-4 peer after remote
                address and the BGP connection has
        been established.  The suggested value for
        this timer is 30 seconds." Capability Code"
            INDEX {
                bgpPeerRemoteAddrType,
                bgpPeerRemoteAddr,
                bgpPeerCapReceivedCode,
                bgpPeerCapReceivedIndex
                }
            ::= { bgpPeerCapsReceivedTable 1 }

        Bgp4PeerCapsReceivedEntry ::= SEQUENCE {
                bgpPeerCapReceivedCode
                    Unsigned32,
                bgpPeerCapReceivedIndex
                    Unsigned32,
                bgpPeerCapReceivedLength
                    Unsigned32,
                bgpPeerCapReceivedValue
                    OCTET STRING
                }

        bgpPeerCapReceivedCode OBJECT-TYPE
            SYNTAX     Unsigned32 (0..255)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The BGP Capability Advertisement Capability Code."
            ::= { bgpPeerEntry 26 bgpPeerCapsReceivedEntry 1 }

        bgpPeerMinASOriginationInterval

        bgpPeerCapReceivedIndex OBJECT-TYPE
            SYNTAX     Integer32 (1..65535)     Unsigned32 (1..128)
            MAX-ACCESS read-write read-only
            STATUS     current
            DESCRIPTION
        "Time interval in seconds for the
        MinASOriginationInterval timer.
        The suggested value for this timer
                "Multiple instances of a given capability may be sent
                bgp a BGP speaker.  This variable is 15
        seconds." used to index them."
            ::= { bgpPeerEntry 27 bgpPeerCapsReceivedEntry 2 }

        bgpPeerMinRouteAdvertisementInterval

        bgpPeerCapReceivedLength OBJECT-TYPE
            SYNTAX     Integer32 (1..65535)     Unsigned32
            MAX-ACCESS read-write read-only
            STATUS     current
            DESCRIPTION
        "Time interval in seconds for
                "The length of the
        MinRouteAdvertisementInterval timer.
        The suggested value for this timer is 30
        seconds." announced capability."
            ::= { bgpPeerEntry 28 bgpPeerCapsReceivedEntry 3 }

        bgpPeerInUpdateElapsedTime

        bgpPeerCapReceivedValue OBJECT-TYPE
            SYNTAX     Gauge32     OCTET STRING (SIZE(0..255))
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "Elapsed time in seconds since the last BGP
        UPDATE message was received from the peer.
        Each time bgpPeerInUpdates is incremented,
        the
                "The value of this object is set to zero
        (0)." the announced capability."
            ::= { bgpPeerEntry 29 bgpPeerCapsReceivedEntry 4 }

        bgpPeerCounters
        OBJECT IDENTIFIER ::= { bgpPeer 6 }

        bgpPeerAuthenticationSent

        bgpPeerCountersTable OBJECT-TYPE
            SYNTAX TruthValue     SEQUENCE OF BgpPeerCountersEntry
            MAX-ACCESS read-write not-accessible
            STATUS     current
            DESCRIPTION
                "The local peer has sent authentication information
             to the remote peer in the counters associated with a BGP Authentication field." Peer."
            ::= { bgpPeerEntry 30 bgpPeerCounters 1 }
		bgpPeerAuthenticationSentCode

        bgpPeerCountersEntry OBJECT-TYPE
            SYNTAX  Integer32 (0..255)     BgpPeerCountersEntry
            MAX-ACCESS read-write not-accessible
            STATUS     current
            DESCRIPTION
            "The code
                "Each entry contains counters of messsage transmissions
                    and FSM transitions for a given BGP Peering session."
            INDEX { bgpPeerIndex }
            ::= { bgpPeerCountersTable 1 }

        BgpPeerCountersEntry ::= SEQUENCE {
                bgpPeerInUpdates
                    Counter32,
                bgpPeerOutUpdates
                    Counter32,
                bgpPeerInTotalMessages
                    Counter32,
                bgpPeerOutTotalMessages
                    Counter32,
                bgpPeerFsmEstablishedTransitions
                     Counter32
                }

-- +++wayne need to describe what happens if connection is broken
-- and then reestablished. Does the authentication information sent prior counter value accumulate?

        bgpPeerInUpdates OBJECT-TYPE
            SYNTAX     Counter32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The number of BGP UPDATE messages received on this
                 connection.  This object should be initialized to zero
                 (0) when the remote peer." connection is established."
            ::= { bgpPeerEntry 31 bgpPeerCountersEntry 1 }

        bgpPeerAuthenticationSentValue

        bgpPeerOutUpdates OBJECT-TYPE
            SYNTAX  OCTET STRING (SIZE (0..255))
        -- jmh length is too much     Counter32
            MAX-ACCESS read-write read-only
            STATUS     current
            DESCRIPTION
                "The payload number of BGP UPDATE messages transmitted on this
                 connection.  This object should be initialized to zero
                 (0) when the authentication information received
            from the remote peer." connection is established."
            ::= { bgpPeerEntry 32 bgpPeerCountersEntry 2 }

        bgpPeerAuthenticationReceived

        bgpPeerInTotalMessages OBJECT-TYPE
            SYNTAX TruthValue     Counter32
            MAX-ACCESS read-write read-only
            STATUS     current
            DESCRIPTION
                "The local peer has total number of messages received authentication information from the remote
                 peer in on this connection.  This object should be
                 initialized to zero when the BGP Authentication field." connection is established."
            ::= { bgpPeerEntry 33 bgpPeerCountersEntry 3 }

        bgpPeerAuthenticationReceivedCode

        bgpPeerOutTotalMessages OBJECT-TYPE
            SYNTAX  Integer32 (0..255)     Counter32
            MAX-ACCESS read-write read-only
            STATUS     current
            DESCRIPTION
                "The code total number of the authentication information received from messages transmitted to the remote peer."
                 peer on this connection.  This object should be
                 initialized to zero when the connection is established."
            ::= { bgpPeerEntry 34 bgpPeerCountersEntry 4 }

        bgpPeerAuthenticationReceivedValue

        bgpPeerFsmEstablishedTransitions OBJECT-TYPE
            SYNTAX  OCTET STRING (SIZE (0..255))
        -- jmh length is too much     Counter32
            MAX-ACCESS read-write read-only
            STATUS     current
            DESCRIPTION
                "The payload total number of times the authentication information received from BGP FSM
                transitioned into the remote established state
                for this peer."
            ::= { bgpPeerEntry 35 bgpPeerCountersEntry 5 }

        --
        -- new counters Per-Peer Prefix Counters
        --

        bgpPrefixCountersTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpPrefixCountersEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Additional per-peer, per AFI/SAFI counters for prefixes"
            ::= { bgpPeerData bgpPeerCounters 2 }

        bgpPrefixCountersEntry OBJECT-TYPE
            SYNTAX     BgpPrefixCountersEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Entry containing information about a bgp-peer's prefix
                 counters."
            INDEX {
        bgpPeerRemoteAddrType,
        bgpPeerRemoteAddr,
                bgpPeerIndex,
                bgpPrefixCountersAfi,
                bgpPrefixCountersSafi
                }
            ::= { bgpPrefixCountersTable 1 }

        BgpPrefixCountersEntry ::= SEQUENCE {
            -- JMH
            -- do we really need AFI and safi in the table?
                bgpPrefixCountersAfi
                  InetAddressType,
                bgpPrefixCountersSafi
                    BgpSafi,
        bgpPrefixCountersPrefixesReceived
            Counter32,
        bgpPrefixCountersPrefixesSent
            Counter32,
        bgpPrefixCountersWithdrawsReceived
            Counter32,
        bgpPrefixCountersWithdrawsSent
            Counter32,
        bgpPrefixCountersInPrefixes
                bgpPrefixInPrefixes
                    Gauge32,
        bgpPrefixCountersInPrefixesAccepted
                bgpPrefixInPrefixesAccepted
                    Gauge32,
        bgpPrefixCountersInPrefixesRejected
                bgpPrefixInPrefixesRejected
                    Gauge32,
        bgpPrefixCountersOutPrefixes
                bgpPrefixOutPrefixes
                    Gauge32
                }

        bgpPrefixCountersAfi OBJECT-TYPE
            SYNTAX     InetAddressType
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The AFI index of the per-peer, per prefix counters"
            ::= { bgpPrefixCountersEntry 1 }

        bgpPrefixCountersSafi OBJECT-TYPE
            SYNTAX     BgpSafi
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The SAFI index of the per-peer, per prefix counters"
            ::= { bgpPrefixCountersEntry 2 }

--  +++wayne the following two showed up in the table, but not

        bgpPrefixInPrefixes OBJECT-TYPE
            SYNTAX     Gauge32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The number of prefixes received from a peer and are
                 stored in the Adj-Ribs-In for that peer."
                 --  enumerated table columns.  Is this the idea of what they were
--  supposed jmh - note that we're allowing stuff to be about?  This sounds like a *lot* discarded
            ::= { bgpPrefixCountersEntry 7 }

        bgpPrefixInPrefixesAccepted OBJECT-TYPE
            SYNTAX     Gauge32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The number of state prefixes for the
--  router to be maintaining (withdrawn local a peer that are installed
                 in the Adj-Ribs-In and peer prefixes...

    bgpPrefixCountersPrefixesReceived are eligible to become active
                 in the Loc-Rib."
            ::= { bgpPrefixCountersEntry 8 }

        bgpPrefixInPrefixesRejected OBJECT-TYPE
            SYNTAX     Counter32     Gauge32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "Total
                "The number of discrete prefixes received from this peer. The
        value in bgpPrefixCountersPrefixesReceived will be greater
        than or equal to what is in bgpPrefixCountersInPrefixes,
        since it will reflect prefixes received from this for a peer which
        may have been subsquently withdrawn, and hence will no longer
        be stored that are installed
                 in the Adj-Ribs-In for that peer." and are NOT eligible to become active
                 in the Loc-Rib."
            ::= { bgpPrefixCountersEntry 3 9 }

    bgpPrefixCountersPrefixesSent

        bgpPrefixOutPrefixes OBJECT-TYPE
            SYNTAX     Counter32     Gauge32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "Total
                "The number of prefixes which the local BGP speaker
        has announced to this peer.  The value for
        bgpPrefixCountersPrefixesSent will be greater than or equal to
        bgpPrefixCountersOutPrefixes, since it reflects prefixes
        which have been subsequently withdrawn after their announcement
        (assuming any such withdrawn prefixes exist)." a peer that are installed
                 in that peer's Adj-Ribs-Out."
            ::= { bgpPrefixCountersEntry 4 10 }

        bgpPeerExtensions
        OBJECT IDENTIFIER ::= { bgpPeer 7 }

        bgpPeerNonCapExts
            OBJECT IDENTIFIER ::= { bgpPeerExtensions 1 }

        bgpPeerCapExts
            OBJECT IDENTIFIER ::= { bgpPeerExtensions 2 }

        --
        -- Peer Route Reflection Extensions
        --

        bgpPeerRouteReflectionExts
            OBJECT IDENTIFIER ::= { bgpPeerNonCapExts 1966 }

    bgpPrefixCountersWithdrawsReceived

        bgpPeerReflectorClient OBJECT-TYPE
            SYNTAX     Counter32    INTEGER {
                nonClient(0),
                client(1),
                meshedClient(2)
            }
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
        "Total number
                "This value indicates whether the given peer is a
                 reflector client of prefixes withdrawn by this peer.  Specifically, router, or not.  A value of
                 nonClient(0) indicates that this peer is the total number not a reflector
                 client.  A value of withdrawn-routes which have
        been received in UPDATE messages from client(1) indicates that this peer." peer is a
                 reflector client that is not fully meshed with other
                 reflector clients.  A value of meshedClient(2) indicates
                 that the peer is a reflector client and is fully meshed
                 with all other reflector clients."
            REFERENCE
                "RFC 2796 - BGP Route Reflection"
            ::= { bgpPrefixCountersEntry 5 bgpPeerRouteReflectionExts 1 }

        --
        -- Peer AS Confederations Extensions
        --

        bgpPeerASConfederationExts
            OBJECT IDENTIFIER ::= { bgpPeerNonCapExts 1965 }

    bgpPrefixCountersWithdrawsSent

        bgpPeerConfederationMember OBJECT-TYPE
            SYNTAX      Counter32      TruthValue
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
        "Total number of prefixes which have been reported as
        withdrawn by the local BGP speaker to
                "This value indicates whether the given peer is in
        locally generated UPDATE messages to the peer." our
                 confederation or not."
            REFERENCE
                "RFC 3065 - BGP Confederations"
            ::= { bgpPrefixCountersEntry 6 bgpPeerASConfederationExts 1 }

        bgpRib
        OBJECT IDENTIFIER ::= { bgp 3 }
	bgpPrefixCountersInPrefixes

        --
        -- BGP NLRI Data
        --

        bgpNlriTable OBJECT-TYPE
            SYNTAX     Gauge32     SEQUENCE OF BgpNlriEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
                "The number of prefixes BGP-4 Received Path Attribute Table
                contains information about paths to
                destination networks received from a peer and are
         stored in the Adj-Ribs-In for that peer."
        -- jmh - note that we're allowing stuff to be discarded all
                BGP4 peers."
            ::= { bgpPrefixCountersEntry 7 bgpRib 1 }

    bgpPrefixCountersInPrefixesAccepted

        bgpNlriEntry OBJECT-TYPE
            SYNTAX     Gauge32     BgpNlriEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
        "The number of prefixes for
                "Information about a peer that are installed
         in the Adj-Ribs-In and are eligible path to become active
         in the Loc-Rib." a network."
            INDEX {
                bgpPeerIndex,
                bgpNlriAfi,
                bgpNlriSafi,
                bgpNlriPrefixLen,
                bgpNlriPrefix
                }
            ::= { bgpPrefixCountersEntry 8 bgpNlriTable 1 }

        BgpNlriEntry ::= SEQUENCE {
                bgpNlriAfi
                    InetAddressType,
                bgpNlriSafi
                    BgpSafi,
                bgpNlriPrefixLen
                    Unsigned32,
                bgpNlriPrefix
                    InetAddress,
                bgpNlriBest
                    TruthValue,
                bgpPathAttrIndex
                    Unsigned32,
                bgpNlriASPathStr
                    DisplayString
                }

    bgpPrefixCountersInPrefixesRejected

        bgpNlriAfi OBJECT-TYPE
            SYNTAX     Gauge32     InetAddressType
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The number address family of prefixes for a peer that are installed
         in the Adj-Ribs-In and are NOT eligible to become active
         in the Loc-Rib." prefix for this NLRI."
            ::= { bgpPrefixCountersEntry 9 bgpNlriEntry 1 }

    bgpPrefixCountersOutPrefixes

        bgpNlriSafi OBJECT-TYPE
            SYNTAX     Gauge32     BgpSafi
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The number subsequent address family of prefixes for a peer that are installed
         in that peer's Adj-Ribs-Out."
        ::= { bgpPrefixCountersEntry 10 }

--      This is the point at which per-protocol extension subsections
--      would root their branches off of to define per-extension-based
--      tables, scalar management objects.

        bgpPerPeerExtensions    OBJECT IDENTIFIER prefix for
                this NLRI"
            REFERENCE
                "RFC 2858 - Multiprotocol Extensions for BGP-4"
            ::= { bgpPeerData 3 bgpNlriEntry 2 }

--
-- capabilities
--
-- Mount this

        bgpNlriPrefixLen OBJECT-TYPE
            SYNTAX     Unsigned32 (1..128)
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "Length in its own subtree
--

        bgpCapabilitiesData   OBJECT IDENTIFIER bits of the IP address prefix in
                the Network Layer Reachability
                Information field."
            ::= { bgp bgpNlriEntry 3 }

        -- JMH - this is going to vary based on AFI/SAFI !!!
        --
        --

        bgp4SupportedCapabilitiesTable JMH - InetAddress is wrong now!
        bgpNlriPrefix OBJECT-TYPE
            SYNTAX     SEQUENCE OF Bgp4SupportedCapabilityEntry     InetAddress  (SIZE (4..16))
            MAX-ACCESS not-accessible read-only
            STATUS     current
            DESCRIPTION
            "Table of supported BGP-4 capabilities."
                "An IP address prefix in the Network Layer
                Reachability Information field.  This object
                is an IP address containing the prefix with
                length specified by
                bgpPathAttrAddrPrefixLen.
                Any bits beyond the length specified by
                bgpPathAttrAddrPrefixLen are zeroed."
            ::= { bgpCapabilitiesData 1 bgpNlriEntry 4 }

        bgp4SupportedCapabilitiesEntry

        bgpNlriBest OBJECT-TYPE
            SYNTAX     Bgp4SupportedCapabilityEntry     TruthValue
            MAX-ACCESS not-accessible read-only
            STATUS     current
            DESCRIPTION
            "Information about supported capabilities indexed
            by capability number.""
            INDEX {
            bgp4SupportedCapabilityIndex
            }
            ::= { bgp4SupportedCapabilitiesTable 1 }

            Bgp4SupportedCapabilityEntry
                "An indication of whether or not this route
                was chosen as the best BGP4 route."
            ::= SEQUENCE {
                bgp4SupportedCapabilityIndex
                Integer32,
                bgp4SupportedCapability
                TruthValue bgpNlriEntry 5 }

            bgp4SupportedCapabilityIndex

        bgpPathAttrIndex OBJECT-TYPE
            SYNTAX     Integer32 (0..255)     Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "Index of supported capability.  The
                "This value is a unique index directly
                corresponds for the per-NLRI entry in the
                bgpPeerAttrTable.  It is assigned by the agent at the point
                of creation of the bgpPeerAttrTable row entry.  While its
                value is guaranteed to be unique at any time, it is
                otherwise opaque to the management application with
                respect to its value or the BGP-4 Capability Advertisement
                Capability Code." contiguity of bgpPeerAttrIndex
                row instance values across rows of the bgpPeerAttrTable.
                It is used to provide an index structure for other
                tables whose data is logically per-peer, per-NLRI."
            ::= { bgp4SupportedCapabilitiesEntry 1 bgpNlriEntry 6 }
			bgp4SupportedCapability

        bgpNlriASPathStr OBJECT-TYPE
            SYNTAX     TruthValue     DisplayString
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "This value is True if a string depicting the autonomous system path
                 to this capability network which was received from the peer which
                 advertised it.  The format of the string is supported,
                otherwise." implementation-
                 dependent, and should be designed for operator readability."
            ::= { bgp4SupportedCapabilitiesEntry 2 bgpNlriEntry 7 }

        --
        -- BGP Rib Path Attributes Table
        --

            bgp4PeerCapsAnnouncedTable

        bgpPathAttrTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF Bgp4PeerCapsAnnouncedEntry BgpPathAttrEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "This table contains contains the capabilities
                that are supported for
                "Provides per advertised network-prefix attribute data,
                    as advertised over a given peer." peering session."
            ::= { bgpCapabilitiesData 3 bgpRib 2 }

        bgp4PeerCapsAnnouncedEntry
        bgpPathAttrEntry OBJECT-TYPE
            SYNTAX     Bgp4PeerCapsAnnouncedEntry     BgpPathAttrEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
            "These entries are keyed by
                "Each entry contains data about a BGP-4 peer remote
            address given network
                    prefix, per-prefix and the BGP Capability Code" per-advertising peer."
            INDEX {
            bgpPeerRemoteAddrType,
            bgpPeerRemoteAddr,
            bgp4PeerCapAnnouncedCode,
            bgp4PeerCapAnnouncedIndex { bgpPathAttrIndex }
            ::= { bgp4PeerCapsAnnouncedTable bgpPathAttrTable 1 }

        Bgp4PeerCapsAnnouncedEntry

        BgpPathAttrEntry ::= SEQUENCE {
            bgp4PeerCapAnnouncedCode
            Integer32,
            bgp4PeerCapAnnouncedIndex
            Integer32,
            bgp4PeerCapAnnouncedLength
            Integer32,
            bgp4PeerCapAnnouncedValue
            OCTET STRING
                bgpPathAttrOrigin
                    INTEGER,
                bgpPathAttrNextHopAddrType
                    InetAddressType,
                bgpPathAttrNextHop
                    InetAddress,
                bgpPathAttrMultiExitDiscPresent
                    TruthValue,
                bgpPathAttrMultiExitDisc
                    Unsigned32,
                bgpPathAttrLocalPrefPresent
                    TruthValue,
                bgpPathAttrLocalPref
                    Unsigned32,
                bgpPathAttrAtomicAggregate
                    INTEGER,
                bgpPathAttrAggregatorAS
                    BgpAutonomousSystemNumber,
                bgpPathAttrAggregatorAddr
                    BgpIdentifier,
                bgpPathAttrCalcLocalPref
                    Unsigned32
                }

        bgp4PeerCapAnnouncedCode

        bgpPathAttrOrigin OBJECT-TYPE
            SYNTAX     Integer32 (0..255)     INTEGER {
                igp(1),-- networks are interior
                egp(2),-- networks learned
                       -- via EGP
                incomplete(3) -- undetermined
                }
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The BGP Capability Advertisement Capability Code." ultimate origin of the path
                information."
            ::= { bgp4PeerCapsAnnouncedEntry 1 bgpPathAttrEntry 2 }
		bgp4PeerCapAnnouncedIndex

        bgpPathAttrNextHopAddrType OBJECT-TYPE
            SYNTAX     Integer32 (1..128)      InetAddressType
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
            "Multiple instances
                "The address family of a given capability may the address for
                 the border router that should be sent
            bgp a BGP speaker.  This variable is used
                 to index them." access the destination network."
            ::= { bgp4PeerCapsAnnouncedEntry 2 bgpPathAttrEntry 3 }

        bgp4PeerCapAnnouncedLength

        -- JMH - this is wrong for RFC2545!
        bgpPathAttrNextHop OBJECT-TYPE
            SYNTAX     Integer32     InetAddress
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The length address of the announced capability." border router that
                should be used to access the destination
                network.  This address is the nexthop
                address received in the UPDATE packet.
                The address family of this object will be the
                same as that of the prefix in this row."
            ::= { bgp4PeerCapsAnnouncedEntry 3 bgpPathAttrEntry 4 }

        bgp4PeerCapAnnouncedValue

        bgpPathAttrMultiExitDiscPresent OBJECT-TYPE
            SYNTAX     OCTET STRING (SIZE(0..255))     TruthValue
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
            "The
                "Whether or not the MED value of is present.
                If it is not present, the announced capability." bgpPathAttrMultiExitDisc
                object has no useful value and should be set to 0."
            ::= { bgp4PeerCapsAnnouncedEntry 4 bgpPathAttrEntry 5 }

    --
    --
    --

        bgp4PeerCapsReceivedTable

        bgpPathAttrMultiExitDisc OBJECT-TYPE
            SYNTAX     SEQUENCE OF Bgp4PeerCapsReceivedEntry     Unsigned32
            MAX-ACCESS not-accessible read-only
            STATUS     current
            DESCRIPTION
                "This table contains contains the capabilities
            that are supported for a given peer." metric is used to discriminate
                between multiple exit points to an
                adjacent autonomous system."
            ::= { bgpCapabilitiesData 3 bgpPathAttrEntry 6 }

        bgp4PeerCapsReceivedEntry

        bgpPathAttrLocalPrefPresent OBJECT-TYPE
            SYNTAX     Bgp4PeerCapsReceivedEntry     TruthValue
            MAX-ACCESS not-accessible read-only
            STATUS     current
            DESCRIPTION
            "These entries are keyed by a BGP-4 peer remote
            address and
                "Whether or not the BGP Capability Code"
            INDEX {
            bgpPeerRemoteAddrType,
            bgpPeerRemoteAddr,
            bgp4PeerCapReceivedCode,
            bgp4PeerCapReceivedIndex
            }
            ::= { bgp4PeerCapsReceivedTable 1 }
		Bgp4PeerCapsReceivedEntry LOCAL_PREF value is present.
                If it is not present, the bgpPathAttrLocalPref
                object has no useful value and should be set to 0."
            ::= SEQUENCE {
            bgp4PeerCapReceivedCode
            Integer32,
            bgp4PeerCapReceivedIndex
            Integer32,
            bgp4PeerCapReceivedLength
            Integer32,
            bgp4PeerCapReceivedValue
            OCTET STRING bgpPathAttrEntry 7 }

        bgp4PeerCapReceivedCode

        bgpPathAttrLocalPref OBJECT-TYPE
            SYNTAX     Integer32 (0..255)     Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The BGP Capability Advertisement Capability Code." originating BGP4 speaker's degree of
                preference for an advertised route."
            ::= { bgp4PeerCapsReceivedEntry 1 bgpPathAttrEntry 8 }

        bgp4PeerCapReceivedIndex

-- JMH
-- See comment in v1 draft about this.

        bgpPathAttrAtomicAggregate OBJECT-TYPE
            SYNTAX     Integer32 (1..128)     INTEGER {
                lessSpecificRouteNotSelected(1),
                lessSpecificRouteSelected(2)
            }
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
            "Multiple instances of
                "Whether or not a given capability may be sent
            bgp system has selected
                a BGP speaker.  This variable is used to index them." less specific route without
                selecting a more specific route."
            ::= { bgp4PeerCapsReceivedEntry 2 bgpPathAttrEntry 9 }

        bgp4PeerCapReceivedLength

        bgpPathAttrAggregatorAS OBJECT-TYPE
            SYNTAX     Integer32     BgpAutonomousSystemNumber
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The length AS number of the announced capability." last BGP4 speaker that
                performed route aggregation.  A value of
                zero (0) indicates the absence of this
                attribute."
            ::= { bgp4PeerCapsReceivedEntry 3 bgpPathAttrEntry 10 }

        bgp4PeerCapReceivedValue

        bgpPathAttrAggregatorAddr OBJECT-TYPE
            SYNTAX     OCTET STRING (SIZE(0..255))     BgpIdentifier
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The IP address of the last BGP4 speaker
                that performed route aggregation.  A
                value of 0.0.0.0 indicates the announced capability." absence
                of this attribute.

                Note propagation of AS of zero is illegal in
                the Internet."
            ::= { bgp4PeerCapsReceivedEntry 4 bgpPathAttrEntry 11 }

        bgp4CapabilitySupportAvailable

        bgpPathAttrCalcLocalPref OBJECT-TYPE
            SYNTAX     TruthValue     Unsigned32
            MAX-ACCESS read-write read-only
            STATUS     current
            DESCRIPTION
            "This variable determines whether BGP-4
            capabilities are supported in this
            implementation.  This variable may be set to
            false to disable capability support."
            ::= { bgpCapabilitiesData 4 }

--      This is the point at which per-protocol extension subsections
--      would root their branches off
                "The degree of to define per-extension-
--      based tables, scalar management objects.

        bgpCapabilitiesExtensions   OBJECT IDENTIFIER preference calculated by the
                receiving BGP4 speaker for an advertised
                route."
            ::= { bgpCapabilitiesData 5 bgpPathAttrEntry 12 }

        --
--
--
        bgpPathAttributesData   OBJECT IDENTIFIER ::= { bgp    BGP 4 }

        -- BGP-4 Received Path Attribute attribute AS Path Table.  This table
        -- contains,  There is one entry per path to row in
        --    this table for each AS which is advertised for a network, path given
        -- attributes received from all peers running BGP-4.

        bgp4PathAttrTable    route as provided from a peer.

-- JMH
-- We need one of these for the NewAsPath for the 4byte draft

        bgpAsPathTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF Bgp4PathAttrEntry BgpAsPathEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "The BGP-4 Received Path Attribute AS Path Table
                 contains information about paths to
        destination networks received the per network path (NLRI)
                 AS Path data recieved from all
        BGP4 peers." the
                 advertising BGP peer."
            ::= { bgpPathAttributesData  1 bgpRib 3 }

        bgp4PathAttrEntry
        bgpAsPathTableEntry OBJECT-TYPE
            SYNTAX     Bgp4PathAttrEntry     BgpAsPathEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Information about an AS path segment
                 provided with a path to a network."
            INDEX {
        bgp4PathAttrAddrPrefixType,
        bgp4PathAttrAddrPrefixSafi,
        bgp4PathAttrAddrPrefix,
        bgp4PathAttrAddrPrefixLen,
        bgp4PathAttrPeerType,
        bgp4PathAttrPeer
                    bgpPathAttrIndex,
                    bgpAsPathIndex,
                    bgpAsPathElementValue
                }
            ::= { bgp4PathAttrTable bgpAsPathTable 1 }

        Bgp4PathAttrEntry

        BgpAsPathEntry ::= SEQUENCE {
        bgp4PathAttrPeerType
        InetAddressType,
            bgp4PathAttrPeer
                InetAddress,
        bgp4PathAttrAddrPrefixType
            InetAddressType,
        bgp4PathAttrAddrPrefixSafi
        BgpSafi,
		bgp4PathAttrAddrPrefixType
        InetAddressType,
            bgp4PathAttrAddrPrefix
                InetAddress,
            bgp4PathAttrAddrPrefixLen
                Integer32,
            bgp4PathAttrOrigin
                INTEGER,
            bgp4PathAttrASPathSegment
                OCTET STRING,
            bgp4PathAttrNextHop
                InetAddress,
        bgp4PathAttrMultiExitDiscPresent
        TruthValue,
            bgp4PathAttrMultiExitDisc
                Unsigned32,
        bgp4PathAttrLocalPrefPresent
        TruthValue,
            bgp4PathAttrLocalPref
            bgpAsPathIndex
                Unsigned32,
            bgp4PathAttrAtomicAggregate
            bgpAsPathType
                INTEGER,
            bgp4PathAttrAggregatorAS
                Integer32,
            bgp4PathAttrAggregatorAddr
                BgpIdentifer,
        bgp4PathAttrCalcLocalPrefPresent
        TruthValue,
            bgp4PathAttrCalcLocalPref
                Unsigned32,
        bgp4PathAttrOriginatorId
        OCTET STRING,
        bgp4PathAttrClusterList
        OCTET STRING,
        bgp4PathAttrCommunity
        OCTET STRING,
        bgp4PathAttrExtCommunity
        OCTET STRING,
            bgp4PathAttrBest
                TruthValue,
            bgp4PathAttrUnknown
                OCTET STRING
            bgpAsPathElementValue
                BgpAutonomousSystemNumber
    }

        bgp4PathAttrPeerType

        bgpAsPathIndex OBJECT-TYPE
            SYNTAX     InetAddressType Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The AFI
                "A per-AS path index.  This will index a set of the address
                 autonomous systems in an AS path that are part
                 of the peer from which same sequence or set (as determined by
                 the
        path information was learned."
            ::= { bgp4PathAttrEntry 1 }
		bgp4PathAttrPeer OBJECT-TYPE
            SYNTAX     InetAddress
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The address row value of bgpAsPathType, which
                 should be the peer where same value for each bgpAsPathTable
                 entry indexed by the path
        information was learned." same <bgpPathAttrIndex,
                 bgpAsPathIndex> pair)."
            ::= { bgp4PathAttrEntry 2 bgpAsPathTableEntry 1 }

        bgp4PathAttrIpAddrPrefixType

        bgpAsPathType OBJECT-TYPE
            SYNTAX     InetAddressType
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The address family of the prefix for this NLRI."
            ::=  INTEGER { bgp4PathAttrEntry 3
                asSet(1),
                asSequence(2),
                confedSequence(3),
                confedSet(4)
             }

    bgp4PathAttrIpAddrPrefixSafi OBJECT-TYPE
        SYNTAX     BgpSafi
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The subsequent address family type of the prefix for
        this NLRI"
        REFERENCE
        "RFC 2858 - Multiprotocol Extensions for BGP-4"
        ::= { bgp4PathAttrEntry 4 }

        bgp4PathAttrIpAddrPrefix OBJECT-TYPE
            SYNTAX     InetAddress
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "An IP address prefix sequence in the Network Layer
        Reachability Information field.  This object
        is which this asPath
                  was advertised as an IP address containing the prefix with
        length specified by
        bgp4PathAttrIpAddrPrefixLen.
        Any bits beyond attribute.  Note that
                  all asPath row instances for a given <bgpPathAttrIndex,
                  bgpAsPathIndex> index pair will have their
                  bgpAsPathType set to the length specified by
        bgp4PathAttrIpAddrPrefixLen same value.
                  The values for bgpAsPathType are zeroed."
-- jmh this doesn't encode very small on
                  interpreted as defined in the base BGP document
                  and the wire? BGP AS Confederations document."
            REFERENCE
                "draft-ietf-idr-bgp4-16
                 RFC 3065 - BGP AS Confederations"
            ::= { bgp4PathAttrEntry 5 bgpAsPathTableEntry 2 }

    bgp4PathAttrIpAddrPrefixLen

        bgpAsPathElementValue OBJECT-TYPE
            SYNTAX     Integer32     BgpAutonomousSystemNumber
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "Length
                "An AS value for an AS the related NLRI traversed
                 in bits the propagation of its advertisement.  This
                 value is to be interpreted in the context of the IP address prefix
                 sequence implied by bgpAsPathIndex and
                 bgpAsPathType (and, in sequence of the Network Layer Reachability
        Information field."
                 other table rows with the same value of
                 bgpPathAttrIndex and bgpAsPathIndex)."
            ::= { bgp4PathAttrEntry 6 bgpAsPathTableEntry 3 }
	bgp4PathAttrOrigin OBJECT-TYPE
            SYNTAX     INTEGER {
        igp(1),-- networks are interior
                egp(2),-- networks learned

        -- via EGP
                incomplete(3)    BGP 4 Path unknown attribute.  There is one row in
        -- undetermined
        }    this table for each attribute not known by this BGP
        --    implementation (or agent instrumentation), but provided
        --    from a peer.

        bgpPathAttrUnknownTable OBJECT-TYPE
            SYNTAX     SEQUENCE OF BgpPathAttrUnknownEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
                "The ultimate origin BGP-4 Path Attribute Unknown Table
                contains the per network path (NLRI)
                data on the path attributes advertised
                with a route but not known to the local BGP implementation
                or not otherwise capable of being returned from this agent.

                The absence of row data for a given index value for
                bgpPathAttrIndex indicates a lack of such unknown
                attribute information for the indicated network path
        information."
                (as indexed by that bgpPathAttrIndex value in the
                bgpPathAttrTable)."
            ::= { bgp4PathAttrEntry 7 bgpRib 4 }

        bgp4PathAttrASPathSegment

        bgpPathAttrUnknownEntry OBJECT-TYPE
            SYNTAX     OCTET STRING (SIZE (2..4096))
-- jmh could be shorter - find a reasonable ceiling     BgpPathAttrUnknownEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
                    "The sequence of AS path segments.  Each AS
                    path segment is represented by
                "Information about an unknown attribute
                provided with a triple:
                    type, length, value.

                    The type is path to a 1-octet field which has two
                    possible values: network."
            INDEX {
                bgpPathAttrIndex,
                bgpPathAttrUnknownIndex
        }
            ::= { bgpPathAttrUnknownTable 1      AS_SET: unordered set of ASs a
                                     route in the UPDATE message
                                     has traversed

                         2      AS_SEQUENCE: ordered set of ASs
                                     a route in the UPDATE message
                                     has traversed.

             3      CONFED_SEQUENCE: ordered set of ASs
                     a route has traversed within
                     a confederation.  These MUST
                     occur before AS_SETs and
                     AS_SEQUENCES

             4      CONFED_SET: unordered set of ASs
                     a route has traversed within }

        BgpPathAttrUnknownEntry ::= SEQUENCE {
                bgpPathAttrUnknownIndex
                    Unsigned32,
                bgpPathAttrUnknownType
                    Unsigned32,
                bgpPathAttrUnknownValue
                    OCTET STRING
                }

        bgpPathAttrUnknownIndex OBJECT-TYPE
            SYNTAX Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "An integer index for a confederation.  These MUST
                     occur before AS_SETs and
                     AS_SEQUENCES

            Other types may be defined in the future and will
            be displayed row in this variable.

                    The length is a 1-octet field containing table."
            ::= { bgpPathAttrUnknownEntry 1 }

        bgpPathAttrUnknownType OBJECT-TYPE
            SYNTAX Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "The attribute type advertised with this 'unnkown'
                attribute by the
                    number peer."
            ::= { bgpPathAttrUnknownEntry 2 }

        -- Maximum size of ASs in the value field. following is derived as
        --     4096   max message size
        -- jmh   - this is a spec error
					The value field contains one or more AS
                    numbers, each AS is represented in the  16    BGP message marker bytes
        --   -   2    BGP message size
        --   -   1    BGP message type (UPDATE with unknown attr)
        --   -   2    UPDATE routes length (even assuming no routes)
        --   -   2    UPDATE path attributes length
        --   -   1    path attribute flag octet
                    string
        --   -   2    unknown path attr type (in bgpPathAttrUnknownType)
        --  ---------
        --    4070 bytes maximum per-message attribute value data

-- +++wayne ideas as a pair of octets according to the
                    following algorithm:

            If the bgpAsSize is twoOctet:
                        first-byte-of-pair = ASNumber / 256;
                        second-byte-of-pair = ASNumber & 255;
            If the bgpAsSize is fourOctet:
                        first-byte-of-quad = (ASNumber / 16777216);
                        second-byte-of-quad = (ASNumber / 65536) & 255;
            third-byte-of-quad = (ASNumber / 256) & 255;
            fourth-byte-of-quad = ASNumber & 255;"
            ::= { bgp4PathAttrEntry 8 } how to make this a reliably smaller/more broken up
-- jmh we need the new_as_path string eagerly solicited here now

        bgp4PathAttrNextHop

        bgpPathAttrUnknownValue OBJECT-TYPE
            SYNTAX     InetAddress     OCTET STRING (SIZE(0..4070))
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The address
                "Value of path attribute not understood
                 by the border router that
        should be used for the destination
        network.  This address is the nexthop
        address received in base BGP-4 document.

                Octets beyond the UPDATE packet.
        The address family of maximum size, if any,
                are not recorded by this object will be the
        same as that of row object. "
            ::= { bgpPathAttrUnknownEntry 3 }

        --
        -- Path Attribute Extensions
        --

    bgpPathAttrExtensions OBJECT IDENTIFIER ::=
        { bgpRib 5 }

        bgpPathAttrNonCapExts OBJECT IDENTIFIER ::=
            { bgpPathAttrExtensions 1 }

        bgpPathAttrCapExts OBJECT IDENTIFIER ::=
            { bgpPathAttrExtensions 2 }

        --
        -- Path Attribute Route Reflection Extensions
        --

        --
        -- Originator ID Table
        -- . This table is overkill, but seems to fit into
        -- . the prefix in this row." current paradigm.

        --

        bgpPathAttrRouteReflectionExts OBJECT IDENTIFIER ::=
            { bgp4PathAttrEntry 9 bgpPathAttrNonCapExts 1966 }

        bgp4PathAttrMultiExitDiscPresent

        bgpPathAttrOriginatorIdTable OBJECT-TYPE
            SYNTAX     TruthValue      SEQUENCE OF BgpPathAttrOriginatorIdEntry
            MAX-ACCESS read-only  not-accessible
            STATUS      current
            DESCRIPTION
        "Whether or not the MED value is present.
        If it is not present, the bgp4PathAttrMultiExitDisc
        object has no useful value and should be set
                "Per prefix data pertinent to 0." advertisement of a
                    network prefix through an originator."
            REFERENCE
                "RFC 2796 - BGP Route Reflection"
            ::= { bgp4PathAttrEntry 10 bgpPathAttrRouteReflectionExts 1 }

        bgp4PathAttrMultiExitDisc

        bgpPathAttrOriginatorIdEntry OBJECT-TYPE
            SYNTAX     Unsigned32      BgpPathAttrOriginatorIdEntry
            MAX-ACCESS read-only  not-accessible
            STATUS      current
            DESCRIPTION
        "This metric is used to discriminate
        between multiple exit points
                "Each entry contains data pertinent to an
        adjacent autonomous system." a network prefix
                    as received through its originating BGP route reflector."
            REFERENCE
                "RFC 2796 - BGP Route Reflection"
            INDEX {
                bgpPathAttrIndex
        }
            ::= { bgp4PathAttrEntry 11 bgpPathAttrOriginatorIdTable 1 }

        BgpPathAttrOriginatorIdEntry ::= SEQUENCE {
            bgpPathAttrOriginatorId
                BgpIdentifier
    }
		bgp4PathAttrLocalPrefPresent

        bgpPathAttrOriginatorId OBJECT-TYPE
            SYNTAX     TruthValue      BgpIdentifier
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
        "Whether or not
                "The Originator-ID identifying the LOCAL_PREF router that initially
                 advertised this destination to a Route Reflector.  A
                 value is present.
        If it is not present, of 0.0.0.0 indicates the bgp4PathAttrLocalPref
        object has no useful value and should be set to 0." absence of this attribute."
            REFERENCE
                 "This attribute is defined in [RFC2796]."
            ::= { bgp4PathAttrEntry 12 bgpPathAttrOriginatorIdEntry 1 }

        bgp4PathAttrLocalPref

        --
        -- Cluster table
        --

        bgpPathAttrClusterTable OBJECT-TYPE
            SYNTAX     Unsigned32     SEQUENCE OF BgpPathAttrClusterEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
                "The originating BGP4 speaker's degree BGP-4 Path Attribute Cluster Table
                 contains the per network path (NLRI)
                 data on the reflection path which a
                 route has traversed.  The absence of
        preference row
                 data for an advertised route." a given index value for bgpPathAttrIndex
                 indicates a lack of this attribute information
                 for the indicated network path (as indexed by
                 that bgpPathAttrIndex value in the bgpPathAttrTable)."
            ::= { bgp4PathAttrEntry 13 bgpPathAttrRouteReflectionExts 2 }

        bgp4PathAttrAtomicAggregate

        bgpPathAttrClusterEntry OBJECT-TYPE
            SYNTAX     INTEGER {
        lessSpecificRouteNotSelected(1),
        lessSpecificRouteSelected(2)
        }     BgpPathAttrClusterEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
        "Whether or not
                "Information about a system has selected cluster traversal
                 provided with a less specific route without
        selecting path to a more specific route." network."
            INDEX {
                bgpPathAttrIndex,
                bgpPathAttrClusterIndex
                }
            ::= { bgp4PathAttrEntry 14 bgpPathAttrClusterTable 1 }

        BgpPathAttrClusterEntry ::= SEQUENCE {
                bgpPathAttrClusterIndex
                    Unsigned32,
                bgpPathAttrClusterValue
                    Unsigned32
                }

        bgp4PathAttrAggregatorAS

        bgpPathAttrClusterIndex OBJECT-TYPE
            SYNTAX     BgpAutonomousSystemNumber     Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "The AS number of the last BGP4 speaker that
        performed route aggregation.  A value of
        zero (0) indicates the absence of
                "An integral index for a row in this
        attribute." table."
            ::= { bgp4PathAttrEntry 15 bgpPathAttrClusterEntry 1 }

        bgp4PathAttrAggregatorAddr

-- +++wayne following changed from OCTET STRING/BgpIdentifier per tdn

        bgpPathAttrClusterValue OBJECT-TYPE
            SYNTAX     BgpIdentifier      Unsigned32
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
        "The IP address
                "A four octet long value representing a part of the last BGP4 speaker
                reflection path that performed the route aggregation.  A has passed.  Each such four
                octet long value represents the ID of 0.0.0.0 indicates a cluster that
                the absence route has traversed.  The sequence of this attribute.

        Note propagation path as
                received in the route advertisement will be preserved in
                the sequence of AS bgpPathAttrClusterTable rows (and the
                bgpPathAttrClusterValue's in each row) as returned for
                a given bgpPathAttrIndex value, and the monotonically
                increasing sequence of zero bgpPathAttrClusterIndex values
                for that bgpPathAttrIndex."
            REFERENCE
                "This attribute is illegal defined in
        the Internet." [RFC2796]."
            ::= { bgp4PathAttrEntry 16 bgpPathAttrClusterEntry 2 }
        bgp4PathAttrCalcLocalPrefPresent OBJECT-TYPE
        SYNTAX     TruthValue
        MAX-ACCESS read-only
        STATUS     current
        DESCRIPTION
        "Whether or not the bgp4PathAttrCalcLocalPref is present."

        --
        -- BGP Communities
        --

        bgpPathAttrCommunityExts OBJECT IDENTIFIER ::=
            { bgp4PathAttrEntry 17 bgpPathAttrNonCapExts 1997 }

        bgp4PathAttrCalcLocalPref

        bgpPathAttrCommTable OBJECT-TYPE
            SYNTAX     Unsigned32     SEQUENCE OF BgpPathAttrCommEntry
            MAX-ACCESS read-only not-accessible
            STATUS     current
            DESCRIPTION
                "The degree BGP-4 Path Attribute Community Table
                 contains the per network path (NLRI)
                 data on the community membership advertised
                 with a route.  The absence of preference calculated row
                 data for a given index value for bgpPathAttrIndex
                 indicates a lack of this attribute information
                 for the indicated network path (as indexed by
                 that bgpPathAttrIndex value in the
        receiving BGP4 speaker for an advertised
        route." bgpPathAttrTable)."
            ::= { bgp4PathAttrEntry 18 bgpPathAttrCommunityExts 1 }

        bgp4PathAttrOriginatorId

        bgpPathAttrCommEntry OBJECT-TYPE
            SYNTAX      BgpIdentifier     BgpPathAttrCommEntry
            MAX-ACCESS  read-only not-accessible
            STATUS     current
            DESCRIPTION
                    "The Originator-ID identifying the router that initially
                     advertised this destination
                "Information about a community association
                 provided with a path to a Route Reflector.  A
                     value of 0.0.0.0 indicates the absence of this attribute."
        REFERENCE
         "This attribute is defined in [RFC2796]." network."
            INDEX { bgpPathAttrIndex, bgpPathAttrCommIndex }
            ::= { bgpPathAttrCommTable 1 }

        BgpPathAttrCommEntry ::= SEQUENCE { bgp4PathAttrEntry 19
                bgpPathAttrCommIndex
                    Unsigned32,
                bgpPathAttrCommValue
                    OCTET STRING
                }

        bgp4PathAttrClusterList

        bgpPathAttrCommIndex OBJECT-TYPE
            SYNTAX      OCTET STRING (SIZE(0..4096)) Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
        "A sequence of four octet long values representing the
         reflection path that the route has passed.  Each four
         octet long value represents the ID of
                "An integer index for a cluster that
         the route has traversed.  A length of zero (0) indicates
         the absence of this attribute."
        REFERENCE
         "This attribute is defined row in [RFC2796]." this table."
            ::= { bgp4PathAttrEntry 20 bgpPathAttrCommEntry 1 }
		bgp4PathAttrCommunity

        -- JMH
        -- Should we be using a display hint for this object?

        bgpPathAttrCommValue  OBJECT-TYPE
            SYNTAX      OCTET STRING (SIZE(0..4096)) (SIZE(4))
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
                "A list of 4-octet long values, each value representing a community.  Size zero (0) indicates the absence of
         such attributes.  Octets beyond the maximum size, if
         any, are not recorded by this object.   There are certain
                 4-octet long values which could be returned in this
                 columnar row data that carry additional semantics."
            REFERENCE
                "RFC 1997 - BGP Communities Attribute"
            ::= { bgp4PathAttrEntry 21 bgpPathAttrCommEntry 2 }

       bgp4PathAttrExtCommunity

        --
        -- BGP Extended Communities
        --

        bgpPathAttrExtCommTable OBJECT-TYPE
            SYNTAX      OCTET STRING (SIZE(0..4096))     SEQUENCE OF BgpPathAttrExtCommEntry
            MAX-ACCESS  read-only not-accessible
            STATUS     current
            DESCRIPTION
        "A sequence of values each eight octets long, and each
         representing an
                "The BGP-4 Path Attribute Community Table
                contains the per network path (NLRI)
                data on the extended community that was received membership advertised
                with the a route.  The values absence of each row
                data for a given index value for bgpPathAttrIndex
                indicates a lack of this attribute information
                for the individual
         octets may have semantic meaning.  A length of zero (0)
         indicates indicated network path (as indexed by
                that bgpPathAttrIndex value in the bgpPathAttrTable).

                XXX JMH - can't assign the OID until an RFC is published."
            ::= { bgpPathAttrNonCapExts XXX }

        bgpPathAttrExtCommEntry OBJECT-TYPE
            SYNTAX     BgpPathAttrExtCommEntry
            MAX-ACCESS not-accessible
            STATUS     current
            DESCRIPTION
                "Information about an extended community association
                 provided with a path to a network."
            INDEX {
                bgpPathAttrIndex,
                bgpPathAttrExtCommIndex
                }
            ::= { bgpPathAttrExtCommTable 1 }

        BgpPathAttrExtCommEntry ::= SEQUENCE {
                bgpPathAttrExtCommIndex
                    Unsigned32,
                bgpPathAttrExtCommValue
                    OCTET STRING
                }

        bgpPathAttrExtCommIndex OBJECT-TYPE
            SYNTAX Unsigned32
            MAX-ACCESS read-only
            STATUS     current
            DESCRIPTION
                "An integral index for a row in this table."
            ::= { bgpPathAttrExtCommEntry 1 }

        -- JMH
        -- Again, do we want a display hint for this?
        bgpPathAttrExtCommValue  OBJECT-TYPE
            SYNTAX      OCTET STRING (SIZE(8))
            MAX-ACCESS  read-only
            STATUS      current
            DESCRIPTION
                "A value representing an extended community which was
                received with the absence route implied by the bgpPathAttr
                Index value of this attribute." row data.   There are certain
                8-octet long values which could be returned in this
                columnar row data that carry additional semantics."
            REFERENCE
                "BGP-EXTCOMM - BGP Extended Communities Attribute"
            ::= { bgp4PathAttrEntry 22 bgpPathAttrExtCommEntry 2 }

        bgp4PathAttrBest OBJECT-TYPE
            SYNTAX     TruthValue
            MAX-ACCESS read-only

        bgpConformance
        OBJECT IDENTIFIER ::= { bgp 4 }

           -- conformance information

        bgpMIBCompliances OBJECT IDENTIFIER ::= { bgpConformance 1 }
        bgpMIBGroups      OBJECT IDENTIFIER ::= { bgpConformance 2 }

        bgpMIBCompliance MODULE-COMPLIANCE
            STATUS  current
            DESCRIPTION
                    "An indication of whether or not this route
                    was chosen as
                "The compliance statement for entities which
                implement the best BGP4 route." mib."
             MODULE  -- jmh - this changes the original semantics
            ::= module
             MANDATORY-GROUPS { bgp4PathAttrEntry 23
                bgpTimersGroup,
                bgpCountersGroup,
                bgpAsPathGroup,
                bgpAs4byteGroup,
                bgpBaseGroup,
                bgpErrorsGroup,
                bgpPeerGroup,
                bgpPathAttributesGroup
                }

        bgp4PathAttrUnknown OBJECT-TYPE
            SYNTAX     OCTET STRING (SIZE(0..4096))
            MAX-ACCESS read-only
            STATUS     current

        GROUP bgpAuthenticationGroup
        DESCRIPTION
                    "One or more path attributes not understood
                     by the base BGP-4 document.

                     Path attributes are recorded
           "The authentication group is
            mandatory only for those implementations which
            support sending and receiving authentication
            information with peers in the Update
                     Path attribute format of type, length, value.
                     Size zero (0) indicates BGP Authentication
            Field."
        GROUP bgpCommunitiesGroup
        DESCRIPTION
             "The communities group is mandatory only for those
            which support the absence of such
                     attribute(s).  Octets beyond BGP community attribute."
        GROUP bgpExtCommunitiesGroup
        DESCRIPTION
             "The communities group is mandatory only for those
            which support the maximum size,
                     if any, are not recorded by this object. " BGP extended community attribute."
        GROUP bgpRouteReflectionGroup
        DESCRIPTION
             "The communities group is mandatory only for those
            which support the BGP route reflection relationships."
        GROUP bgpAsConfederationGroup
        DESCRIPTION
             "The communities group is mandatory only for those
            which support the BGP confederation membership."
          GROUP bgpTimersGroup
          DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpCountersGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpCapabilitiesGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpAsPathGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpAs4byteGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpBaseGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpErrorsGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpPeerGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpPathAttributesGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        GROUP bgpPeerGroup
        DESCRIPTION
           "This group is mandatory for all agent implementations."
        ::= { bgp4PathAttrEntry 24 bgpMIBCompliances 1 }
		   -- conformance information

           bgpMIBConformance OBJECT IDENTIFIER
               ::=
    bgpAuthenticationGroup OBJECT-GROUP
        OBJECTS { bgp 5
                bgpSupportedAuthCode,
                bgpSupportedAuthValue,
                bgpSupportedAuthCode,
                bgpSupportedAuthValue,
                bgpPeerAuthSent,
                bgpPeerAuthSentCode,
                bgpPeerAuthSentValue,
                bgpPeerAuthRcvd,
                bgpPeerAuthRcvdCode,
                bgpPeerAuthRcvdValue
        }
           bgpMIBCompliances OBJECT IDENTIFIER
        STATUS current
        DESCRIPTION
                "Objects associated with BGP authentication."
        ::= { bgpMIBConformance bgpMIBGroups 1 }
           bgpMIBGroups      OBJECT IDENTIFIER

    bgpCommunitiesGroup OBJECT-GROUP
        OBJECTS {
                bgpPathAttrCommIndex,
                bgpPathAttrCommValue
        }
        STATUS current
        DESCRIPTION
                "Objects associated with BGP communities."
        ::= { bgpMIBConformance bgpMIBGroups 2 }

           bgpMIBCompliance MODULE-COMPLIANCE

    bgpExtCommunitiesGroup OBJECT-GROUP
        OBJECTS {
                bgpPathAttrExtCommIndex,
                bgpPathAttrExtCommValue
        }
        STATUS current
        DESCRIPTION
                       "The compliance statement for entities which
                        implement the BGP4 mib."
               MODULE  -- this module
                   MANDATORY-GROUPS
                "Objects associated with BGP extended communities."
        ::= { bgpMIBGroups 3 }

    bgpRouteReflectionGroup OBJECT-GROUP
        OBJECTS { bgp4MIBBasicConfigGroup,
                bgpClusterId,
                bgpPeerReflectorClient,
                bgpPathAttrOriginatorId,
                bgpPathAttrClusterIndex,
                bgpPathAttrClusterValue
        }
        STATUS current
        DESCRIPTION
                "Objects associated with BGP route reflection."
        ::= { bgpMIBCompliances 1 bgpMIBGroups 4 }

           bgp4MIBBasicConfigGroup

    bgpAsConfederationGroup OBJECT-GROUP
        OBJECTS { bgpVersion,
                 bgpAsSize,
                         bgpLocalAs,
                         bgpLocalIdentifier,
             bgp4ClusterId,
             bgp4ConfederationID,
                         bgp4CapabilitySupportAvailable
                bgpConfederationId,
                bgpPeerConfederationMember
        }
        STATUS current
        DESCRIPTION
             "A collection of objects providing information on
         the basic overall
                "Objects associated with BGP configuration." confederation membership."
        ::= { bgpMIBGroups 1 5 }

           bgp4MIBPeerGroup

    bgpTimersGroup OBJECT-GROUP
        OBJECTS {
                bgpPeerFsmEstablishedTime,
                bgpPeerInUpdatesElapsedTime,
                bgpPeerConnectRetryInterval,
                bgpPeerHoldTimeConfigured,
                bgpPeerKeepAliveConfigured,
                bgpPeerMinASOriginationInterval,
                bgpPeerMinRouteAdvertiseInterval,
                bgpPeerHoldTime,
                bgpPeerKeepAlive
        }
        STATUS current
        DESCRIPTION
                "Objects associated with BGP peering timers."
        ::= { bgpMIBGroups 6 }

    bgpCountersGroup OBJECT-GROUP
        OBJECTS { bgpPeerIdentifier,
                         bgpPeerState,
                         bgpPeerAdminStatus,
                         bgpPeerNegotiatedVersion,
                         bgpPeerLocalAddrType,
                         bgpPeerLocalAddr,
                         bgpPeerLocalPort,
                         bgpPeerLocalAs,
                         bgpPeerRemoteAddrType,
                         bgpPeerRemoteAddr,
                         bgpPeerRemotePort,
                         bgpPeerRemoteAs,
                         bgpPeerReflectorClient,
                         bgpPeerConfederationMember,
                bgpPeerInUpdates,
                bgpPeerOutUpdates,
                bgpPeerInTotalMessages,
                bgpPeerOutTotalMessages,
                         bgpPeerLastError,
                bgpPeerFsmEstablishedTransitions,
                         bgpPeerFsmEstablishedTime,
                         bgpPeerConnectRetryInterval,
                    bgpPeerHoldTime,
                         bgpPeerKeepAlive,
                         bgpPeerMinASOriginationInterval,
                         bgpPeerMinRouteAdvertisementInterval,
                         bgpPeerInUpdateElapsedTime,
                bgpPrefixCountersAfi,
                bgpPrefixCountersSafi,
                         bgpPrefixCountersPrefixesReceived,
                         bgpPrefixCountersPrefixesSent,
                         bgpPrefixCountersWithdrawsReceived,
                         bgpPrefixCountersWithdrawsSent,
                         bgpPrefixCountersWithdrawsSent,
                         bgpPrefixCountersInPrefixes,
                         bgpPrefixCountersInPrefixesAccepted,
                         bgpPrefixCountersInPrefixesRejected,
                         bgpPrefixCountersOutPrefixes
                bgpPrefixInPrefixes,
                bgpPrefixInPrefixesAccepted,
                bgpPrefixInPrefixesRejected,
                bgpPrefixOutPrefixes
        }
        STATUS current
        DESCRIPTION
                "All objects reflecting management information by
                BGP peer and sessions
                "Objects to count discrete events and exchanges on BGP peers."
                 sessions."
         ::= { bgpMIBGroups 2}

          bgp4MIBPeerConfigManagementGroup 7 }

    bgpCapabilitiesGroup OBJECT-GROUP
        OBJECTS { bgpPeerHoldTimeConfigured,
                          bgpPeerKeepAliveConfigured
                bgpCapabilitySupportAvailable,
                bgpSupportedCapabilityIndex,
                bgpSupportedCapability,
                bgpPeerCapAnnouncedCode,
                bgpPeerCapAnnouncedIndex,
                bgpPeerCapAnnouncedLength,
                bgpPeerCapAnnouncedValue,
                bgpPeerCapReceivedCode,
                bgpPeerCapReceivedIndex,
                bgpPeerCapReceivedLength,
                bgpPeerCapReceivedValue,
                bgpPeerCapAnnouncedCode,
                bgpPeerCapAnnouncedIndex,
                bgpPeerCapAnnouncedLength,
                bgpPeerCapAnnouncedValue,
                bgpPeerCapReceivedCode,
                bgpPeerCapReceivedIndex,
                bgpPeerCapReceivedLength,
                bgpPeerCapReceivedValue
        }
        STATUS current
        DESCRIPTION
              DESCRIPTION
                "All objects reflecting controls capable of
                being set
                "Objects to report capabilities as received on BGP peer
                    sessions."
        ::= { bgpMIBGroups 3}

         bgp4MIBPeerAuthenticationGroup 8 }

    bgpAsPathGroup OBJECT-GROUP
        OBJECTS {
                bgpAsPathIndex,
                bgpAsPathType,
                bgpAsPathElementValue
        }
        STATUS current
        DESCRIPTION
                "Objects to report AS paths received on BGP
                    NLRIs."
        ::= { bgpMIBGroups 9 }

    bgpAs4byteGroup OBJECT-GROUP
        OBJECTS {  bgpPeerAuthenticationSent,
                           bgpPeerAuthenticationSentCode,
                           bgpPeerAuthenticationSentValue,
                           bgpPeerAuthenticationReceived,
                           bgpPeerAuthenticationReceivedCode,
                           bgpPeerAuthenticationReceivedValue
                bgpAsSize
        }
        STATUS current
        DESCRIPTION
                "AS Size objects."
        ::= { bgpMIBGroups 10 }

    bgpBaseGroup OBJECT-GROUP
        OBJECTS {
                bgpLocalAs,
                bgpLocalIdentifier,
                bgpVersionIndex,
                bgpVersionSupported
        }
        STATUS current
        DESCRIPTION
                "This group contains
                "Basic objects reflecting the
                state of authentication negotiations and other
                per-peer authentication data." in local BGP implementation."
        ::= { bgpMIBGroups 4}
		   bgp4MIBCapabilitiesGroup 11 }

    bgpErrorsGroup OBJECT-GROUP
        OBJECTS {
                bgpPeerLastError,
                bgpPeerLastErrorData
        }
        STATUS current
        DESCRIPTION
                "Errors received on BGP peering sessions."
        ::= { bgpMIBGroups 12 }

    bgpPeerGroup OBJECT-GROUP
        OBJECTS {   bgp4SupportedCapabilityIndex,
                            bgp4SupportedCapability,
                            bgp4PeerCapAnnouncedCode,
                            bgp4PeerCapAnnouncedIndex,
                            bgp4PeerCapAnnouncedLength,
                            bgp4PeerCapAnnouncedValue,
                            bgp4PeerCapReceivedCode,
                            bgp4PeerCapReceivedIndex,
                            bgp4PeerCapReceivedLength,
                            bgp4PeerCapReceivedValue
                bgpPeerIdentifier,
                bgpPeerState,
                bgpPeerAdminStatus,
                bgpPeerConfiguredVersion,
                bgpPeerNegotiatedVersion,
                bgpPeerLocalAddrType,
                bgpPeerLocalAddr,
                bgpPeerLocalPort,
                bgpPeerLocalAs,
                bgpPeerRemoteAddrType,
                bgpPeerRemoteAddr,
                bgpPeerRemotePort,
                bgpPeerRemoteAs,
                bgpPeerIndex,
                bgpPeerRowEntryStatus
        }
        STATUS current
        DESCRIPTION
               "This group contains per BGP-4 capability
                management information objects."
                "Core object types on BGP peering sessions."
        ::= { bgpMIBGroups 5}

           bgp4MIBReceivedPathAttributesGroup 13 }
    bgpPathAttributesGroup OBJECT-GROUP
        OBJECTS { bgp4PathAttrPeerType,
                          bgp4PathAttrPeer,
                          bgp4PathAttrIpAddrPrefixType,
                          bgp4PathAttrIpAddrPrefixSafi,
                          bgp4PathAttrIpAddrPrefix
                          bgp4PathAttrIpAddrPrefixLen,
                          bgp4PathAttrOrigin,
                          bgp4PathAttrASPathSegment,
                          bgp4PathAttrNextHop,
                          bgp4PathAttrMultiExitDiscPresent,
                          bgp4PathAttrMultiExitDisc,
                          bgp4PathAttrLocalPrefPresent,
                          bgp4PathAttrLocalPref,
                          bgp4PathAttrAtomicAggregate,
                          bgp4PathAttrAggregatorAS,
                          bgp4PathAttrAggregatorAddr,
                          bgp4PathAttrCalcLocalPrefPresent,
                          bgp4PathAttrCalcLocalPref,
                          bgp4PathAttrOriginatorId,
                          bgp4PathAttrClusterList,
                          bgp4PathAttrCommunity,
                          bgp4PathAttrExtCommunity,
                          bgp4PathAttrBest,
                          bgp4PathAttrUnknown
                bgpNlriAfi,
                bgpNlriSafi,
                bgpNlriPrefixLen,
                bgpNlriPrefix,
                bgpNlriBest,
                bgpPathAttrIndex,
                bgpNlriASPathStr,
                bgpPathAttrOrigin,
                bgpPathAttrNextHopAddrType,
                bgpPathAttrNextHop,
                bgpPathAttrMultiExitDiscPresent,
                bgpPathAttrMultiExitDisc,
                bgpPathAttrLocalPrefPresent,
                bgpPathAttrLocalPref,
                bgpPathAttrAtomicAggregate,
                bgpPathAttrAggregatorAS,
                bgpPathAttrAggregatorAddr,
                bgpPathAttrCalcLocalPref,
                bgpAsPathIndex,
                bgpAsPathType,
                bgpAsPathElementValue,
                bgpPathAttrUnknownIndex,
                bgpPathAttrUnknownType,
                bgpPathAttrUnknownValue
        }
        STATUS current
        DESCRIPTION
                "This group contains objects with information about
                destination network paths as received from peers."
                "Attributes recieved on BGP peering sessions."
        ::= { bgpMIBGroups 6 14 }

           bgp4MIBNotificationsGroup

        bgpMIBNotificationsGroup NOTIFICATION-GROUP
                OBJECTS
            NOTIFICATIONS {
                bgpEstablished,
                bgpBackwardTransition
            }
            STATUS  current
            DESCRIPTION
                "This group contains objects for notifications
                supported by this MIB module."
            ::= { bgpMIBGroups 7} 15 }
END

6. Example

5.  Security Considerations

   This MIB module contains controls which relate to core services for
   interdomain routing using the Border Gateway Protocol.  In particu-
   lar, this MIB allows configuration of operational elements for those
   services.  If such configuration is done without consideration for
   the effects of such configuration activity, or malicious configura-
   tion activity is allowed on Extending the managed elements, the effect could be
   denial of service to the processes and end users in the affected
   domain(s).

   SNMPv1 is not considered a sufficiently secure environment for the
   deployment of such configuration ability.  Even if the management
   data path is secure at the network protocol layer (by the deployment
   of secure IP, for example), there are still points of exposure around
   such issues as to what operators and applications are allowed to
   access and modify the configuration as exposed through this MIB For BGP Protocol Extensions

TBD

7. mod-
   ule.

   It is strongly recommended that the agent implementor considers the
   security features afforded by the SNMP Version 3 framework in expos-
   ing the configuration features of this MIB module.  In particular,
   the availability and usage of the User-based Security Considerations

TBD

8. Model [12]
   and/or the View-based Access Control Model [15] is highly recom-
   mended.

   It is then incumbent upon the customer deploying network management
   applications which make use of these configuration features to also
   consider and deploy a security discipline to make use of these SNMP
   Version 3 security features.  In particular, the operational staff
   who have access to the configuration controls in their ability to
   create, set, and delete them, should be carefully considered.

6.  Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   intellectual property or other rights that might be claimed to
   pertain per-
   tain to the implementation or use of the technology described in this
   document or the extent to which any license under such rights might
   or might not be available; neither does it represent that it has made
   any effort to identify any such rights.  Information on the IETF's
   procedures with respect to rights in standards-track and
   standards-related standards-
   related documentation can be found in BCP-11.  Copies of claims of
   rights made available for publication and any assurances of licenses
   to be made available, or the result of an attempt made to obtain a
   general license or permission for the use of such proprietary rights
   by implementors or users of this specification can be obtained from
   the IETF Secretariat.

9.

7.  Acknowledgements

   Tom Nadeau, Cisco Systems, Inc.
   Jon Saperia, JDS Consulting, Inc.
   Bill Fenner, AT&T Research
   Mike McFadden, McFaden, Riverstone Networks, Inc.
   Joel Krauska, Exodus Networks, Inc.
   Carl W. Kalbfleisch, Verio Networks, Inc.
   Joe Dupre, Gold Wire Technology

    others TBD...

10.

8.  Open Issues

   This section will be removed from the document prior to being issued
   to IDR working group last call (at the latest).

     *    Configuration is discussed, but not currently implemented in a
          thorough way in the MIB.

     *    Is 32 bits nearly enough indexing space for a row in the
          bgp4PathAttrTable?  Row Pointers are a little more heavyweight
          for a management application to work with, but would a Row
          Pointer index type here be more appropriate regardless?

9.  References

[1]  Harrington, D., Presuhn, R., and B. Wijnen, "An Architecture for
     Describing SNMP Management Frameworks", RFC 2571, April 1999.

[2]  Rose, M., and K. McCloghrie, "Structure and Identification of Management Man-
     agement Information for TCP/IP-based Internets", STD 16, RFC 1155,
     May 1990.

[3]  Rose, M., and K. McCloghrie, "Concise MIB Definitions", STD 16, RFC
     1212, March 1991.

[4]  Rose, M., "A Convention for Defining Traps for use with the SNMP",
     RFC 1215, March 1991.

[5]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M.,
     and S. Waldbusser, "Structure of Management Information Version 2
     (SMIv2)", STD 58, RFC 2578, April 1999.

[6]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M.,
     and S. Waldbusser, "Textual Conventions for SMIv2", STD 58, RFC
     2579, April 1999.

[7]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M.,
     and S. Waldbusser, "Conformance Statements for SMIv2", STD 58, RFC
     2580, April 1999.

[8]  Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple Network
     Management Protocol", STD 15, RFC 1157, May 1990.

[9]  Case, J., McCloghrie, K., Rose, M., and S. Waldbusser,
     "Introduction "Introduc-
     tion to Community-based SNMPv2", RFC 1901, January 1996.

[10] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Transport
     Mappings for Version 2 of the Simple Network Management Protocol
     (SNMPv2)", RFC 1906, January 1996.

[11] Case, J., Harrington D., Presuhn R., and B. Wijnen, "Message Processing Pro-
     cessing and Dispatching for the Simple Network Management Protocol
     (SNMP)", RFC 2572, April 1999.

[12] Blumenthal, U., and B. Wijnen, "User-based Security Model (USM) for
     version 3 of the Simple Network Management Protocol (SNMPv3)", RFC
     2574, April 1999.

[13] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Protocol
     Operations for Version 2 of the Simple Network Management Protocol
     (SNMPv2)", RFC 1905, January 1996.

[14] Levi, D., Meyer, P., and B. Stewart, "SNMPv3 Applications", RFC
     2573, April 1999.

[15] Wijnen, B., Presuhn, R., and K. McCloghrie, "View-based Access Control Con-
     trol Model (VACM) for the Simple Network Management Protocol
     (SNMP)", RFC 2575, April 1999.

[16] McCloghrie, K. and M. Rose, Editors, "Management Information Base
     for Network Management of TCP/IP-based
     internets: Internets: MIB-II", STD 17,
     RFC 1213, Hughes LAN Systems, Performance Systems International,
     March 1991.

[7]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J.,
     Rose, M., and S. Waldbusser, "Conformance Statements for
     SMIv2", STD 58, RFC 2580, April 1999.

[8]  Case, J., Fedor, M., Schoffstall, M., and J. Davin,
     "Simple Network Management Protocol", STD 15, RFC 1157,
     May 1990.

[9]  Case, J., McCloghrie, K., Rose, M., and S. Waldbusser,
     "Introduction to Community-based SNMPv2", RFC 1901,
     January 1996.

[10] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser,
     "Transport Mappings for Version 2 of the Simple Network
     Management Protocol (SNMPv2)", RFC 1906, January 1996.

[11] Case, J., Harrington D., Presuhn R., and B. Wijnen,
     "Message Processing and Dispatching for the Simple
     Network Management Protocol (SNMP)", RFC 2572, April
     1999.

[12]

[17] Willis, S., Burruss, J., and Chu, J., "Definitions of Managed
     Objects for the Fourth Version of the Border Gateway Protocol
     (BGP-4) using SMIv2", RFC 1657, July 1994.

[13]

[18] Hares, S., Haas, J., Willis, S., Burruss, J., and Chu, J.,
     "Definitions "Defini-
     tions of Managed Objects for the Fourth Version of Border Gateway
     Protocol (BGP-4)", draft-ietf-idr-bgp4-mib-
     06.txt, Work-in-progress.

[14] draft-ietf-idr-bgp4-mib-06.txt, Work-in-
     progress.

[19] Rekhter, Y., Li, T., "A Border Gateway Protocol 4 (BGP-4)", RFC
     1771, March 1995.

[15]

[20]  Rekhter, Y., Gross, P., "Application of the Border Gateway
        Protocol Proto-
     col in the Internet", RFC 1772, March 1995.

[16]

[21]  Traina, P., McPherson, D., and Scudder, J., "Autonomous System
     Confederations for BGP", RFC 3065, February, 2001.

[17]

[22]  Chandra, R., Traina, P., and Li, T., "BGP Communities Attribute",
     RFC 1997, August, 1996.

[18]

[23]  Bates, T., Rekhter, Y., Chandra, R., and Katz, D., "Multiprotocol
     Extensions for BGP-4", June, 2000.

[19]

[24]  Bates, T., Chandra, R., and Chen, E., "BGP Route Reflection - An
     Alternative to Full Mesh IBGP", RFC 2796, April 2000.

[25] Sangli, S., Tappan, D., and Rekhter, Y., "BGP Extended Communities
     Attribute", Work-in-progress.

10.  Authors' Address

   Susan Hares Addresses

   Jeff Haas
   NextHop Technologies
   517 Williams
   Ann Arbor, MI 48103-4943
   Phone: +1 734 936 2095
   Fax:   +1 734 615-3241
   Email: skh@nexthop.com

   Jeff Johnson
   RedBack Networks, Inc.
   1389 Moffett Park Drive
   Sunnyvale, CA  94089
   Phone: +1 408 548 3516
   Email: jeff@redback.com

   Steve Willis
   Argon Networks
   25 Porter Road
   Littleton, MA 01450 jhaas@nexthop.com

   Susan Hares
   NextHop Technologies
   517 Williams
   Ann Arbor, MI 48103-4943
   Phone: +1 508 486 0665 734 936 2095
   Fax:   +1 508 486 9379 734 615-3241
   Email: swills@argon.com

   John Burruss
   Windata Inc.
   543 Great Road
   Littleton skh@nexthop.com
   Wayne Tackabury
   Gold Wire Technology
   411 Waverley Oaks Rd.
   Waltham, MA 01460  02452-8401
   Phone: +1 508 952 0170
   Email: jburruss@windata.com

   John Chu
   Cosine Communications
   1200 Bridge Parkway
   Redwood City, CA 94065
   Phone: 650-637-4780 781 398-8819
   Fax:   +1 781 398-8811
   Email: jchu@cosinecom.com wayne@goldwiretech.com

11.  Full Copyright Statement

   Copyright (C) The Internet Society (1999). (2001).  All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works.  However, this
   document doc-
   ument itself may not be modified in any way, such as by removing the
   copyright notice or references to the Internet Society or other
   Internet organizations, except as needed for the purpose of
   developing develop-
   ing Internet standards in which case the procedures for copyrights
   defined in the Internet Standards process must be followed, or as
   required to translate it into languages other than English.

   The limited permissions granted above are perpetual and will not be
   revoked by the Internet Society or its successors or assigns.

   This document and the information contained herein is provided on an
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   MERCHANTABILITY MER-
   CHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

                           Table of Contents

1. Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . .   2
2. Objectives  . . . . . . . . . . . . . . . . . . . . . . . . . . .   3
2.1. Protocol Extensions . . . . . . . . . . . . . . . . . . . . . .   3
2.2. Mechanisms for MIB Extensibility  . . . . . . . . . . . . . . .   3
2.3. BGP Configuration . . . . . . . . . . . . . . . . . . . . . . .   4

3. MIB Organization  . . . . . . . . . . . . . . . . . . . . . . . .   4
3.1. bgpBaseScalars  . . . . . . . . . . . . . . . . . . . . . . . .   5
3.2. bgpPeerData . . . . . . . . . . . . . . . . . . . . . . . . . .   5
3.2.1. bgpPeerCapabilities . . . . . . . . . . . . . . . . . . . . .   6
3.2.2. bgpPeerCounters . . . . . . . . . . . . . . . . . . . . . . .   6
3.2.3. Peering Data Extensions . . . . . . . . . . . . . . . . . . .   6
3.3. BGP Routing Information Base Data . . . . . . . . . . . . . . .   6
3.3.1. Routing Information Base Extensions . . . . . . . . . . . . .   7
3.4. Considerations on Table Indexing  . . . . . . . . . . . . . . .   7
4. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . .   8
5. Security Considerations . . . . . . . . . . . . . . . . . . . . .  62
6. Intellectual Property . . . . . . . . . . . . . . . . . . . . . .  62
7. Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  63
8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . . .  63
9. References  . . . . . . . . . . . . . . . . . . . . . . . . . . .  63
10. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . .  65
11. Full Copyright Statement . . . . . . . . . . . . . . . . . . . .  66