Internet Draft                                  Editor: Paul Hoffman
draft-ietf-ipsec-ike-monitor-mib-04.txt               VPN Consortium
April 15, 2003
Expires in six months

             Internet Key Exchange (IKE) Monitoring MIB

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 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 as reference material
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.

Table of Contents

[[ Needs to be generated in the RFC publication step ]]


1. Introduction

   This document defines monitoring and status MIBs for use when the
   (Internet Key Exchange) IKE protocol [IKE] is used to create IPsec
   security associations (SAs). As such, the MIBs provide the linkage
   between IKE (phase 1) SAs and the IPsec (phase 2) SAs created by
   those SAs.

   It does not define MIBs that may be used for configuring IPsec
   implementations or for providing low-level diagnostic or debugging
   information. It assumes no specific use of IPsec SAs, except that
   they were created using IKE. Further, it does not provide policy
   information.

   The purpose of the MIBs is to allow system administrators to
   determine operating conditions and perform system operational level
   monitoring of the IPsec portion of their network. Statistics are
   provided as well. Additionally, it may be used as the basis for
   application specific MIBs for specific uses of IPsec.

   Note: SNMPv1 implementations of this MIB may need to adjust limits on
   SNMP message sizes to accommodate some of the variables (for example,
   modpPrime) that would cause those messages to exceed 484 octets in
   length.


2. The SNMP Management Framework

   The SNMP Management Framework presently consists of five major
   components:

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

   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 [RFC1155], STD 16, RFC 1212 [RFC1212] and RFC 1215
       [RFC1215]. The second version, called SMIv2, is described in STD
       58, RFC 2578 [RFC2578], RFC 2579 [RFC2579] and RFC 2580
       [RFC2580].

   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 [RFC1157]. A second version of the
       SNMP message protocol, which is not an Internet standards track
       protocol, is called SNMPv2c and described in RFC 1901 [RFC1901]
       and RFC 1906 [RFC1906]. The third version of the message protocol
       is called SNMPv3 and described in RFC 1906 [RFC1906], RFC 2572
       [RFC2572] and RFC 2574 [RFC2574].

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

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

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

   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.

   This memo specifies a MIB module that is compliant to the SMIv2. A
   MIB conforming to the SMIv1 can be produced through the appropriate
   translations. The resulting translated MIB must be semantically
   equivalent, except where objects or events are omitted because no
   translation is possible (use of Counter64). Some machine readable
   information in SMIv2 will be converted into textual descriptions in
   SMIv1 during the translation process. However, this loss of machine
   readable information is not considered to change the semantics of the
   MIB.


2.1 Object Definitions

   Managed objects are accessed via a virtual information store, termed
   the Management Information Base or MIB. Objects in the MIB are
   defined using the subset of Abstract Syntax Notation One (ASN.1)
   defined in the SMI. In particular, each object type is named by an
   OBJECT IDENTIFIER, an administratively assigned name. The object type
   together with an object instance serves to uniquely identify a
   specific instantiation of the object. For human convenience, we often
   use a textual string, termed the descriptor, to refer to the object
   type.


3. Definitions


3.1 Security Association, Inbound and Outbound

   This document uses the same definitions of "security association",
   "inbound" and "outbound" as [IMMIB].


3.2 Phase 2 Security Association Suite

   This MIB uses a concept of a phase 2 security association suite. A
   phase 2 security association suite is defined as the set of SAs that
   result from each SA payload in a successful IKE Quick Mode exchange.
   This entity is called a suite for the remainder of this document to
   reduce the usage of the ambiguous term "security association".

   Phrased another way, a suite is the set of IPsec phase 2 SAs created
   when negotiated using IKE, and the phase 2 SAs were negotiated as
   part of the same SA payload.

   As such, a suite is a subset of an SA bundle as defined in RFC 2401.
   In RFC 2401, the SA pairs in the bundle may be negotiated separately
   and independently.4. IPsec MIB Objects Architecture

   The IPsec MIB consists of a number of separate tables.

   First, there is an IKE SA table that provides monitoring for phase 1
   security associations (SAs). This table is a DOI-specific table that
   uses the base ISAKMP SA table from the ISAKMP DOI-independent MIB as
   its base. Specifically, the IKE SA table has a sparse dependent
   relationship to the ISAKMP SA table.

   Secondly, there is an endpoint table. This table is used to store the
   identities of all endpoints that have been (or may be) involved in
   IKE SA negotiation with the local entity. This includes any
   identities that the local entity itself may use. Additionally, this
   table also has some endpoint specific information.

   Additionally, there are a number of tables associated with the phase
   2 SAs. One of these tables contains suites. Each row of this table
   contains common and general objects that are part of the suite.

   Another table allows determination of the specific phase 2 SAs that
   are the components of each suite. This table augments the suite
   table. This table, called the phase 2 SA table, has a dependent
   expansion relationship to the suite table. Note that this table
   should not be confused with the collection of phase 2 SA tables found
   in [IMMIB]. However, this table indirectly refers to those tables.

   Configuration about the phase 1 IKE SAs and the suites is provided as
   are statistics related to the phase 1 IKE SAs and the suites
   themselves. Additionally, the MIBs provide a number of entity level
   aggregate totals for the phase 1 SAs and suites.

   A general picture of the relationship of the tables is shown in
   Figure 1. The individual phase 2 SA tables and the selector table are
   from [IMMIB] and the phase 1 DOI-independent SA table is from
   [IDIMIB]. The tables from this MIB require both the IPsec tables and
   the ISAKMP table.

   Both the phase 1 SA and suite tables refer to the endpoint table to
   subsequently refer to the peers that negotiated the SAs and suites.

   Additional tables, such as the Oakley groups, the exchange table and
   helper tables are not shown in Figure 1.

+-------------------------+           +----------------------------+
|                         |  sparse   |                            |
| ISAKMP DOI-independent  | dependent |  IKE SA table "ikeSaTable" |
|   part of Phase 1 SAs   |---------->|                            |
|       "saTable"         |           +----------------------------+
+-------------------------+                       |
                                                 \ /
                                         +--------------------+
                                         |                    |
                                     --->| endpoint table     |
                                    /    | "ikeEndpointTable" |
                                    |    +--------------------+
                                    |
                                    |
                                    |                  +---------------+
                              +-------------+ dependent|               |
                              |             | expansion| phase 2       |
                     -------->| suite table |--------->| SA table      |
                    /         |"suiteTable" |          |"phase2SaTable"|
      dependent    /          +-------------+          |               |
      expansion   /                                    +---------------+
                 |                                             |
                 |                    -------------------------/
                 |                   / -indirect reference;
IPsec SA tables  |                  |   uses protocol and SPIs
                 |                 \ /
  +-----------------+     +-------------------------------------+
  | selector table  |---->| ESP Inbound SAs "ipsecSaEspInTable" |
  | "selectorTable" | \   +-------------------------------------+
  +-----------------+  \  +-------------------------------------+
                        ->| AH Inbound SAs "ipsecSaAhInTable"   |
                     etc. +-------------------------------------+
                          +-------------------------------------------+
                          | IPcomp Inbound SAs "ipsecSaIpcompInTable" |
                          +-------------------------------------------+
                          +---------------------------------------+
                          | ESP Outbound SAs "ipsecSaEspOutTable" |
                          +---------------------------------------+
                          +-------------------------------------+
                          | AH Outbound SAs "ipsecSaAhInTable"  |
                          +-------------------------------------+
                         +---------------------------------------------+
                         | IPcomp Outbound SAs "ipsecSaIpcompOutTable" |
                         +---------------------------------------------+


                  Figure 1. Relationship of MIB Tables

4.1 Endpoint Table

   This table is used to allow the endpoints involved in the IKE
   negotiations to be identified. It provides the ID type and value used
   by both ends during phase 1 negotiations, as well as certificate
   information. (See next section.)

   Additionally, it indicates if the endpoint is local or remote, and
   provides basic statistics for the endpoints with respect to the
   number of IKE SAs and phase 2 SA suites the endpoints have created.

   Implementations could also use this as a base table for more detailed
   per endpoint statistics, such as error counts or traffic counts.
   However, these are not specified in this MIB.


4.1.1 Peer Certificate Information

   The MIB provides certificate information related to the
   authentication of the peer entity. This information is the ID used in
   phase 1, and the certificate's serial number and issuer. It is
   intended that this information be sufficient to determine the
   certificate that was used for peer authentication.

   No certificate chain information is provided. The reasons for this
   are that the chain may not be available to the entity and the chain
   is not necessarily exchanged in phase 1. A more appropriate place for
   this type of information might be in a PKI MIB; as such, it is beyond
   the scope of this document.


4.2 IKE Security Association Table

   IKE SAs presented in the table contain information about the services
   provided, their lifetime, endpoint authentication and some aggregate
   performance statistics.

   This table extends the ISAKMP DOI-independent phase 1 SA table, so is
   indexed by the same indices. It does not use the AUGMENTS capability
   of SNMP, since all ISAKMP SAs are not necessarily IKE SAs. As stated
   earlier, it has a sparse dependent relationship to the ISAKMP SA
   table.

   In addition to the information already provided by the DOI-
   independent phase 1 SA table, the IKE SA table adds to information
   related to the identities of the two endpoint entities, the security
   information of the IKE SA, some expiration limits and some additional
   operating statistics.4.2.1 Phase 1 SA Helper Tables

   The MIB provides one helper table to modify the search order for
   phase 1 SAs. This table uses the endpoints along with an arbitrary
   value as its index.

   The rows of this table contain the endpoint addresses and cookies of
   the individual SAs that exist between the endpoints. This allows look
   up of the specific phase 1 SAs from these values.


  +-------------------------+           +----------------------------+
  | find IKE SA by endpoint |           |                            |
  |   "saByCreatorsTable"   |---------->|  IKE SA table "ikeSaTable" |
  | local | remote | index  |           |                            |
  +-------------------------+           +----------------------------+
      ^       ^
      |       |
    +--------------------+
    |                    |
    | endpoint table     |
    | "ikeEndpointTable" |
    +--------------------+


                  Figure 2. IKE SA Table Helper Table


4.3 Phase 2 Security Association Suite Table

   Suites are as defined above (in Section 3). This MIB makes no
   assumptions about the order or protocol of the individual SAs within
   the suite.

   Individual bi-directional SAs that are negotiated using IKE's quick
   mode are treated as a suite that uses only a single security
   protocol.

   [ISAKMP] requires that common attributes negotiated within a suite
   apply to all SAs. Therefore, the suite table provides expiration
   values and selectors for the suite. In order to get the statistics
   for the individual SAs, the phase 2 SA table provides the ability to
   get to the SAs themselves.

   The suite table is indexed by an arbitrary integer. This was done to
   ease implementation, since the number of objects that are required to
   uniquely identify individual suites is very high. (For a suite with
   three inbound/outbound SA pairs, there would be 11 indices required.)
   This also allows the suite table to be independent of the number and
   order of SAs as used within the suite.

   Helper tables may be used to provide a list of suites in the desired
   order; a number of these are provided for what are expected to be
   desirable sorting orders.

   In order to link the creation of suites (and thereby SAs) to specific
   endpoints, the suite table also contains references to the endpoints
   that negotiated the SAs. No direct link is possible since there is no
   requirement that any phase 1 SA exists after creation of a suite.

   Many of the objects of each suite are duplicates of objects found in
   the SAs' entries in their respective tables. This is done to allow a
   faster lookup of the SA information as the SAs are being used by IKE.
   As part of this, some statistical aggregation is done as well.

   As stated earlier, the suite table itself does not provide knowledge
   of which specific SAs make up the suite. This information is obtained
   from the phase 2 SA table.


4.3.1 Suite Helper Tables

   There are three helper tables provided to allow searching of suites
   in a non-arbitrary order. These tables are ordered by endpoints, by
   SA selector and phase 2 SA identifiers, respectively.

   The first table is indexed in the same way as the IKE SA helper
   table, but provides a reference to a specific suite index value. It
   can be used to look up suites based on a specific set of entity IDs.

   SA selectors index the second table, by augmenting the selectors
   table from IPsec Monitoring MIB. Since duplicates of suites with the
   same selector is permitted, and is normal during re-keying, the
   additional index is an arbitrary integer. Each row provides a
   reference to a specific suite index value.

   The third helper table is provided to allow the determination of
   which suite a particular SA is being used in. This table is indexed
   by a destination address, a protocol and an SPI (CPI if the protocol
   is IPcomp). These are the objects that make an SA unique. Each row
   then provides a reference to a specific suite in which the SA is
   being used.

  +-----------------+
  | selector table  |
  | "selectorTable" |
  +-----------------+
       |
      \ /
  +------------+-------------+
  | selector   | index       |
  | "suiteBySelectorsTable"  |------\
  | find suite by selector   |       \
  +--------------------------+       |
                                     |
  +--------------------------+       \   +----------------------------+
  | find suite by endpoint   |        -->|                            |
  | "suiteByCreatorsTable"   |---------->|  suite table "suiteTable"  |
  | local | remote | index   |        -->|                            |
  +-------+--------+---------+       /   +----------------------------+
      ^       ^                      |
      |       |                      |
    +--------------------+           |
    |                    |           |
    | endpoint table     |           |
    | "ikeEndpointTable" |           |
    +--------------------+           |
                                     |
  +--------------------------+       |
  | find suite by SA         |       /
  | "ipsecSaInSuiteTable"    |------/
  | address | protocol | SPI |
  +---------+----------+-----+


                  Figure 3. Suite Table Helper Tables


4.3.2 Phase 2 SA Table

   This table allows the determination of which SAs from the IPsec
   monitoring MIB are in the SA suites. It is indexed by the suite
   table's index with an additional integer object added. This
   effectively causes expansion of the suite table for suites that have
   more than one SA. As stated earlier, it has a dependent expansion
   relationship to the suite table, and is shown in Figure 1.

   The value of the additional index object is the position of the
   particular SA in the suite. The value one is used to indicate the
   outer most SA; that is, the SA whose header appears as the outer most
   after application of all the SA's headers. (In the case of IPcomp,
   the header may be missing for specific packets if the packet was not
   considered compressible; for the purposes of this definition, it is
   assumed the IPcomp header is always applied.)

   The other row elements in this table are the security protocol and
   the SPIs of the inbound and outbound SAs. This information, along
   with the addresses of the suite, can be used to form a lookup into
   the IPsec monitoring MIB's SA table for specific SAs.


4.4 Security Association Bundles

   This MIB does not explicitly show SA bundles or any combination of
   layered SAs that do not meet the suite definition as defined in this
   document. However, these may be represented in these MIBs by separate
   protection suites with the appropriate set of selectors.


4.5 Uni-directional Suites

   This MIB does not explicitly support suites that are uni-directional.
   However, this can be supported by the suite to SA table using a value
   of 0 for the SPI in the particular direction that is not used.


4.6 Oakley Group Tables

   These tables are used to allow an entity to describe the Oakley
   groups that it knows about. Each table contains a row for each of the
   Oakley groups of a specific type. This table does not contain the
   well-known groups.

   The structure of each table is taken directly from Appendix A of
   [OAKLEY].

   The tables are used to allow both phase 1 SAs and suites to indicate
   how their source keying material was generated if they did not use
   one of the well-known groups. Additionally in the case of suites,
   this method is used if the phase 2 keying material was not derived
   from the phase 1 SA's keying material.


4.7 Exchange Table

   This table provides the number of IPsec DOI exchanges tried that were
   used in a phase 1 IKE SA, the number successfully responded to in a
   phase 1 IKE SA and the total number successfully completed in a phase
   1 IKE SA.   This table augments the phase 1 security associations table
   (but again, not using the AUGMENTS clause of SNMP).


4.8 Notify Messages

   Notify messages sent from peer to peer are collected as they occur
   and accumulated in a parse table structure.

   A notify message object is defined. This object is used as the index
   into the table of accumulated notify messages. This helps system
   administrators determine if there are potential configuration
   problems or attacks on their network.


4.9 Traps

   Traps are provided to let system administrators know about the
   existence of error conditions occurring in the entity. Errors are
   associated with the creation and deletion of SAs, and also
   operational errors that may indicate the presence of attacks on the
   system.

   Traps are not provided when SAs come up or go down, unless they
   cannot be negotiated or go down due to error conditions.

   The causes of SA negotiation failure are indicated by a notify
   message object.

   The transmission of traps may be controlled as well.


4.10 Entity Level Objects

   This part of the MIB carries statistics global to the device.

   Statistics included are aggregate usage and aggregate errors for both
   phase 1 SAs and phase 2 suites. The statistics are provided as
   objects in a tree below these groups.


5. MIB Definitions

    IKE-MON-MIB DEFINITIONS ::= BEGIN

        IMPORTS

        MODULE-IDENTITY, OBJECT-TYPE, Counter32, Counter64,
        Unsigned32, Gauge32, OBJECT-IDENTITY,
        experimental, NOTIFICATION-TYPE
                                        FROM SNMPv2-SMI
        TruthValue                      FROM SNMPv2-TC
        InetAddressType, InetAddress
                                        FROM INET-ADDRESS-MIB
        IpsecRawId, selectorIndex       FROM IPSEC-SA-MON-MIB
        saLocalIpAddressType, saLocalIpAddress, saRemoteIpAddressType,
        saRemoteIpAddress, saInitiatorCookie, saResponderCookie,
        IsakmpCookie, localIpAddressType, localIpAddress, localUdpPort,
        remoteIpAddressType, remoteIpAddress, remoteUdpPort
                                        FROM ISAKMP-DOI-IND-MON-MIB
        IpsecDoiIdentType, IkeAuthMethod, IkeEncryptionAlgorithm,
        IkeGroupDescription, IkePrf, IkeNotifyMessageType,
        IkeHashAlgorithm, IpsecDoiTransformIdent, IkeExchangeType,
        IpsecDoiSecProtocolId           FROM IPSEC-ISAKMP-IKE-DOI-TC
        OBJECT-GROUP, NOTIFICATION-GROUP, MODULE-COMPLIANCE
                                        FROM SNMPv2-CONF;

    ikeMonModule MODULE-IDENTITY
        LAST-UPDATED    "0110031200Z"
        ORGANIZATION    "IETF IPsec Working Group"
        CONTACT-INFO
                "   Tim Jenkins
                    Catena Networks
                    307 Legget Drive
                    Kanata, ON
                    Canada
                    K2K 3C8
                    +1 (613) 599-6430
                    tjenkins@catena.com

                    John Shriver
                    Intel Corporation
                    28 Crosby Drive Bedford, MA
                    01730
                    +1 (781) 687-1329
                    John.Shriver@intel.com
                "
        DESCRIPTION
            "The MIB module to describe IKE phase 1 SAs, security
            association suites, and entity level objects and events for
            those types."

        REVISION    "9910211200Z"
        DESCRIPTION
            "Initial revision."

        REVISION    "0007101200Z"
        DESCRIPTION
            "Group and compliance statements added.
            Endpoint table added and used in place of explicit phase 1
            IDs.
            Selector table from IPsec Monitoring MIB used in place of
            explicit selectors.
            Replaced addresses with types from INET-ADDRESS-MIB.
            Added IANA assigned experimental number of 106.
            Changes to notify parameters.
            More text pictures."

        REVISION    "0102071200Z"
        DESCRIPTION
            "Change MAX-ACCESS clause of index objects to
            not-accessible. This lead to other changes due to
            restrictions on the use of objects with MAX-ACCESS clause
            values of not-accessible."

        REVISION    "0110031200Z"
        DESCRIPTION
            "A number of typo errors corrected. Also:
             -- descriptions of suiteOakleyGroupDesc and
                suiteOakleyGroup enhanced
             -- change kilobytes to Kilobytes and make it 1024 bytes
             -- used plurals for some counter object names"

    -- replace xxx in next line before release, uncomment before release
    --     ::= { mib-2 xxx }
    -- delete next line before release
            ::= { experimental 106 }


    ikeMonMIBObjects OBJECT-IDENTITY
        STATUS      current
        DESCRIPTION
            "This is the base object identifier for all IKE monitoring
            MIB branches."
        ::= { ikeMonModule 1 }

    --
    -- significant branches
    --

    ikePhase1Objects OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for IKE phase 1
            objects."
        ::= { ikeMonMIBObjects 1 }

    ikePhase2Objects OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for IKE phase 2 objects,
            including the suite and phase 2 SA tables."
        ::= { ikeMonMIBObjects 2 }

    oakleyObjects OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for Oakley groups."
        ::= { ikeMonMIBObjects 3 }

    ikeGroups OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            describe the groups in this MIB."
        ::= { ikeMonMIBObjects 4 }

    ikeConformance OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            describe the conformance for this MIB."
        ::= { ikeMonMIBObjects 5 }

    --
    -- significant IKE phase 1 SA branches
    --

    ikeTables OBJECT-IDENTITY
        STATUS  current

        DESCRIPTION
            "This is the base object identifier for the IKE phase 1
            security associations table."
        ::= { ikePhase1Objects 1 }

    ikeGlobals OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            are global values for IKE."
        ::= { ikePhase1Objects 2 }

    ikeTrafStats OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            are traffic statistic values for IKE."
        ::= { ikePhase1Objects 3 }

    ikeErrors OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            are error values for IKE."
        ::= { ikePhase1Objects 4 }

    ikeTrapObjects OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all trap objects for
            the IKE phase 1 SA portion of this MIB."
        ::= { ikePhase1Objects 5 }

    ikeTrapControl OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all trap controls
            for the IKE phase 1 SA portion of this MIB."
        ::= { ikePhase1Objects 6 }

    ikeTraps OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all traps for the
            IKE phase 1 SA portion of this MIB."
        ::= { ikePhase1Objects 7 }

    ikeNotifications OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all notification
            objects of this MIB."
        ::= { ikePhase1Objects 8 }

    --
    -- significant SA suite branches
    --

    suiteTables OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for the suite table."
        ::= { ikePhase2Objects 1 }

    suiteGlobals OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            are global values for suites."
        ::= { ikePhase2Objects 2 }

    suiteTrafStats OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            are global counters for suite traffic statistics."
        ::= { ikePhase2Objects 3 }

    suiteErrors OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all objects which
            are global error counters for suites."
        ::= { ikePhase2Objects 4 }

    suiteTrapControl OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all trap controls
            for the suite portion of this MIB."
        ::= { ikePhase2Objects 5 }

    suiteTraps OBJECT-IDENTITY
        STATUS  current
        DESCRIPTION
            "This is the base object identifier for all traps for the
            suite portion of this MIB."
        ::= { ikePhase2Objects 6 }

    --
    -- the Oakley Group MIB-Group
    --
    -- a collection of objects providing information about the
    -- Oakley Groups that the entity knows about that are not well known
    --
    -- A table is defined for each type of Oakley group
    -- (each value in 'IkeGroupDescription').
    --
    -- This MIB has tables for groups of type MODP, ECP, or EC2N.
    -- For groups that are not MODP, ECP, or EC2N, a new table should be
    -- defined in a MIB for that group.  The table should have one
    -- integer index, which should be the first column.  The columns
    -- should be the IKE attributes used by that new type of group.
    --


    modpGroupTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF ModpGroupEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing Oakley MODP groups that
            are not well known that the entity has negotiated or knows
            about.

            There should be one row for every Oakley MODP group
            negotiated or supported by the entity that is not a well-
            known group. The maximum number of rows is implementation
            dependent."
        ::= { oakleyObjects 1 }

    modpGroupEntry OBJECT-TYPE
        SYNTAX      ModpGroupEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing the information on a
            particular Oakley MODP group.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX   { modpGroupIndex }
        ::= { modpGroupTable 1 }

    ModpGroupEntry ::= SEQUENCE {
        modpGroupIndex          Unsigned32,

    -- component parts
        modpFieldSize           Unsigned32,
        modpPrime               OCTET STRING,
        modpGenerator           OCTET STRING,
        modpLPF                 OCTET STRING,
        modpStrength            Unsigned32
    }

    modpGroupIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..16777215)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each Oakley MODP
            group. It is recommended that values are assigned
            contiguously starting from 1.

            The value for each MODP group must remain constant at least
            from one re-initialization of entity's network management
            system to the next re-initialization."
        ::= { modpGroupEntry 1 }

    modpFieldSize OBJECT-TYPE
        SYNTAX      Unsigned32
        UNITS       "bits"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The size of a field element, in bits."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { modpGroupEntry 2 }

    modpPrime OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The prime of the MODP group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { modpGroupEntry 3 }

    modpGenerator OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The generator value of the MODP group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { modpGroupEntry 4 }

    modpLPF      OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The largest prime factor of the group size, or 0 if
            unspecified."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { modpGroupEntry 5 }

    modpStrength OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The strength of the group, which is approximately the
            number of key-bits protected, or 0 if unspecified."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { modpGroupEntry 6 }


    ecpGroupTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF EcpGroupEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing Oakley ECP groups that
            are not well known that the entity has negotiated or knows
            about.

            There should be one row for every Oakley ECP group
            negotiated or supported by the entity that is not a well-
            known group. The maximum number of rows is implementation
            dependent."
        ::= { oakleyObjects 2 }

    ecpGroupEntry OBJECT-TYPE
        SYNTAX      EcpGroupEntry
        MAX-ACCESS  not-accessible        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing the information on a
            particular Oakley ECP group.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX   { ecpGroupIndex }
        ::= { ecpGroupTable 1 }

    EcpGroupEntry  ::= SEQUENCE {
        ecpGroupIndex       Unsigned32,

    -- component parts
        ecpFieldSize            Unsigned32,
        ecpPrime                OCTET STRING,
        ecpGeneratorOne         OCTET STRING,
        ecpGeneratorTwo         OCTET STRING,
        ecpParameterOne         OCTET STRING,
        ecpParameterTwo         OCTET STRING,
        ecpLPF                  OCTET STRING,
        ecpOrder                OCTET STRING,
        ecpStrength             Unsigned32
    }

    ecpGroupIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..16777215)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each Oakley ECP
            group. It is recommended that values are assigned
            contiguously starting from 1.

            The value for each ECP group must remain constant at least
            from one re-initialization of entity's network management
            system to the next re-initialization."
        ::= { ecpGroupEntry 1 }

    ecpFieldSize OBJECT-TYPE
        SYNTAX      Unsigned32
        UNITS       "bits"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The size of a field element, in bits."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 2 }
    ecpPrime OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The prime of the ECP group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 3 }

    ecpGeneratorOne  OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The first generator value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 4 }

    ecpGeneratorTwo OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The second generator value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 5 }

    ecpParameterOne OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The first elliptic curve parameter value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 6 }

    ecpParameterTwo OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The second elliptic curve parameter value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 7 }

    ecpLPF OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The largest prime factor of the group size, or 0 if
            unspecified."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 8 }

    ecpOrder OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The order of the group, or 0 if it is unspecified."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 9 }

    ecpStrength OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The strength of the group, which is approximately the
            number of key-bits protected."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ecpGroupEntry 10 }


    ec2nGroupTable  OBJECT-TYPE
        SYNTAX      SEQUENCE OF Ec2nGroupEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing Oakley EC2N groups that
            are not well known that the entity has negotiated or knows
            about.

            There should be one row for every Oakley group negotiated or
            supported by the entity that is not a well-known group. The
            maximum number of rows is implementation dependent."
        ::= { oakleyObjects 3 }

    ec2nGroupEntry OBJECT-TYPE
        SYNTAX      Ec2nGroupEntry
        MAX-ACCESS  not-accessible
        STATUS      current

        DESCRIPTION
            "An entry (conceptual row) containing the information on a
            particular Oakley EC2N group.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX   { ec2nGroupIndex }
        ::= { ec2nGroupTable 1 }

    Ec2nGroupEntry  ::= SEQUENCE {
        ec2nGroupIndex          Unsigned32,

    -- component parts
        ec2nDegree              Unsigned32,
        ec2nIrrPoly             OCTET STRING,
        ec2nGeneratorOne        OCTET STRING,
        ec2nGeneratorTwo        OCTET STRING,
        ec2nParameterOne        OCTET STRING,
        ec2nParameterTwo        OCTET STRING,
        ec2nLPF                 OCTET STRING,
        ec2nOrder               OCTET STRING,
        ec2nStrength            Unsigned32
    }

    ec2nGroupIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..16777215)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each Oakley EC2N
            group. It is recommended that values are assigned
            contiguously starting from 1.

            The value for each EC2N group must remain constant at least
            from one re-initialization of entity's network management
            system to the next re-initialization."
        ::= { ec2nGroupEntry 1 }

    ec2nDegree OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The degree of the irreducible polynomial."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 2 }

    ec2nIrrPoly  OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The prime or the irreducible field polynomial."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 3 }

    ec2nGeneratorOne OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The first generator value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 4 }

    ec2nGeneratorTwo OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The second generator value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 5 }

    ec2nParameterOne OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The first elliptic curve parameter value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 6 }

    ec2nParameterTwo OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The second elliptic curve parameter value of the group."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 7 }

    ec2nLPF     OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only        STATUS      current
        DESCRIPTION
            "The largest prime factor of the group size, or 0 if
            unspecified."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 8 }

    ec2nOrder OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The order of the group, or 0 if it is unspecified."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 9 }

    ec2nStrength OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The strength of the group, which is approximately the
            number of key-bits protected, or 0 if it is unspecified."
        REFERENCE   "RFC 2412 Appendix A"
        ::= { ec2nGroupEntry 10 }


    --
    -- the IKE Endpoint Table
    --
    -- a collection of objects providing information about
    -- the endpoints involved with IKE in this entity
    --

    ikeEndpointTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF IkeEndpointEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing information about the
            endpoints involved IKE in this entity.

            There is one row for each endpoint that is active in or with
            the entity, including remote endpoints and local endpoints.

            The maximum number of rows is implementation dependent."
        ::= { ikeTables 1 }
    ikeEndpointEntry OBJECT-TYPE
        SYNTAX      IkeEndpointEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing an IKE ID.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table.

            It is not necessary to delete rows for endpoints that are no
            longer active; this is implementation dependent."
        INDEX   {   endpointIndex   }
        ::= { ikeEndpointTable 1 }

    IkeEndpointEntry   ::= SEQUENCE {
     -- index
        endpointIndex               Unsigned32,

    -- ID and authentication information
        endpointIdType              IpsecDoiIdentType,
        endpointIdValue             IpsecRawId,
        endpointCertSerialNum       OCTET STRING,
        endpointCertIssuer          OCTET STRING,

    -- other info about the ID, including statistics
        endpointIsLocal             TruthValue,
        endpointCurrentIkeSAs       Gauge32,
        endpointTotalIkeSAs         Counter32,
        endpointCurrentSuites       Gauge32,
        endpointTotalSuites         Counter32

    }

    endpointIndex OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each endpoint
            associated with the entity, whether local or remote. It is
            recommended that values are assigned contiguously starting
            from 1."
        ::= { ikeEndpointEntry 1 }

    endpointIdType OBJECT-TYPE
        SYNTAX      IpsecDoiIdentType
        MAX-ACCESS  read-only        STATUS      current
        DESCRIPTION
            "The type of ID used by the endpoint. This is the type of
            the ID that is used by the endpoint during phase 1
            negotiations.

            If this is not a local endpoint, then this value is taken
            directly from the phase 1 exchange with the remote
            endpoint."
        REFERENCE   "RFC 2407 Section 4.6.2.1"
        ::= { ikeEndpointEntry 2 }

    endpointIdValue OBJECT-TYPE
        SYNTAX      IpsecRawId
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The ID of the endpoint. This is the ID value that is used
            by the endpoint during phase 1 negotiations.

            If this is not a local endpoint, then this value is taken
            directly from the phase 1 exchange with the remote
            endpoint."
        REFERENCE   "RFC 2407 Section 4.6.2.1"
        ::= { ikeEndpointEntry 3 }

    endpointCertSerialNum OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..63))
        MAX-ACCESS  read-only
        STATUS  current
        DESCRIPTION
            "The serial number of the certificate used by the endpoint.

            This object has no meaning if a certificate was not used in
            authenticating the endpoint."
        ::= { ikeEndpointEntry 4 }

    endpointCertIssuer OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..511))
        MAX-ACCESS  read-only
        STATUS  current
        DESCRIPTION
            "The issuer name of the certificate used by the endpoint.

            This object has no meaning if a certificate was not used in
            authenticating the endpoint."
        ::= { ikeEndpointEntry 5 }
    endpointIsLocal OBJECT-TYPE
        SYNTAX      TruthValue
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "True if this row represents a local endpoint (the entity
            uses this endpoint)."
        ::= { ikeEndpointEntry 6 }

    endpointCurrentIkeSAs OBJECT-TYPE
        SYNTAX      Gauge32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of current IKE SAs in the entity for which this
            endpoint is found at one end."
        ::= { ikeEndpointEntry 7 }

    endpointTotalIkeSAs OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE SAs in the entity for which this
            endpoint is or was found at one end."
        ::= { ikeEndpointEntry 8 }

    endpointCurrentSuites OBJECT-TYPE
        SYNTAX      Gauge32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of current phase 2 SA suites in the entity that
            this endpoint was involved in the creation of."
        ::= { ikeEndpointEntry 9 }

    endpointTotalSuites  OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            " The total number of phase 2 SA suites in the entity that
            this endpoint was involved in the creation of."
        ::= { ikeEndpointEntry 10 }



    --
    -- the IKE Phase 1 SA MIB-Group
    --
    -- a collection of objects providing information about
    -- the IKE phase 1 SAs
    --

    ikeSaTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF IkeSaEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing the IKE SAs.

            The number of rows is the same as the number of IKE phase 2
            SAs that are in the process of being negotiated or are
            negotiated in the entity. Phrased another way, there is a
            row in this table for each row in 'saTable' for which
            'saDoi' is 'ipsecDOI(1)'.

            The maximum number of rows is implementation dependent."
        ::= { ikeTables 2 }

    ikeSaEntry OBJECT-TYPE
        SYNTAX      IkeSaEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing the information on a
            particular IKE SA. There is an entry in this table for each
            'saEntry' in which which 'saDoi' is 'ipsecDOI(1)'.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX
            {
                saLocalIpAddressType,
                saLocalIpAddress,
                saRemoteIpAddressType,
                saRemoteIpAddress,
                saInitiatorCookie,
                saResponderCookie
            }
        ::= { ikeSaTable 1 }

    IkeSaEntry ::= SEQUENCE {
    -- ID and authentication information
        saAuthMethod                IkeAuthMethod,
        saPeerEndpoint              Unsigned32,
        saLocalEndpoint             Unsigned32,

    -- security algorithm information
        saEncAlg                    IkeEncryptionAlgorithm,
        saEncKeyLength              Unsigned32,
        saHashAlg                   IkeHashAlgorithm,
        saHashKeyLength             Unsigned32,
        saPRF                       IkePrf,
        saOakleyGroupDesc           IkeGroupDescription,
        saOakleyGroup               OBJECT IDENTIFIER,

    -- expiration limits
        saLimitSeconds              Unsigned32, -- 0 if none
        saLimitKbytes               Unsigned32, -- 0 if none
        saLimitKeyUses              Unsigned32, -- 0 if none

    -- current operating statistics
        saAccKbytes                 Counter32,
        saKeyUses                   Counter32,
        saCreatedSuites             Counter32,
        saDeletedSuites             Counter32,

    -- error counts
        saDecryptErrors             Counter32,
        saHashErrors                Counter32,
        saOtherReceiveErrors        Counter32,
        saSendErrors                Counter32
    }

    saAuthMethod OBJECT-TYPE
        SYNTAX      IkeAuthMethod
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The authentication method used to authenticate the peers.

            Note that this does not include the specific method of
            extended authentication if extended authentication is used."
        ::= { ikeSaEntry 1 }

    saPeerEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The index of the endpoint table row for the peer endpoint
            that negotiated this SA. In other words, the value of
            'endpointIndex' for the appropriate row ('ikeEndpointEntry')
            from the 'ikeEndpointTable'."
        ::= { ikeSaEntry 2 }

    saLocalEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The index of the endpoint table row for the local endpoint
            that negotiated this SA. In other words, the value of
            'endpointIndex' for the appropriate row ('ikeEndpointEntry')
            from the 'ikeEndpointTable'."
        ::= { ikeSaEntry 3 }

    saEncAlg OBJECT-TYPE
        SYNTAX      IkeEncryptionAlgorithm
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The encryption algorithm used to protect this SA."
        ::= { ikeSaEntry 4 }

    saEncKeyLength OBJECT-TYPE
        SYNTAX      Unsigned32 (0..65531)
        UNITS       "bits"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The length of the encryption key in bits used for the
            algorithm specified in the 'saEncAlg' object. It may be 0 if
            the key length is implicit in the specified algorithm."
        ::= { ikeSaEntry 5 }

    saHashAlg OBJECT-TYPE
        SYNTAX      IkeHashAlgorithm
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The hash algorithm used to protect this SA."
        ::= { ikeSaEntry 6 }

    saHashKeyLength OBJECT-TYPE
        SYNTAX      Unsigned32 (0..65531)
        UNITS       "bits"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The length of the encryption key in bits used for the
            algorithm specified in the 'saHashAlg' object. It may be 0
            if the key length is implicit in the specified algorithm."
        ::= { ikeSaEntry 7 }

    saPRF OBJECT-TYPE
        SYNTAX      IkePrf
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The pseudo-random function used by this SA, or 0 if the
            HMAC version of the negotiated hash algorithm is used as a
            pseudo-random function."
        REFERENCE   "RFC 2409 Appendix A"
        ::= { ikeSaEntry 8 }

    saOakleyGroupDesc OBJECT-TYPE
        SYNTAX      IkeGroupDescription
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The group number used to generate the Diffie-Hellman key
            pair when setting up the SA, or 0 if none of the defined
            groups was used.

            If this value is 0, the 'saOakleyGroup' must not also be
            OBJECT IDENTIFIER { 0 0 }."
        REFERENCE   "RFC 2409 Section 6."
        ::= { ikeSaEntry 9 }

    saOakleyGroup OBJECT-TYPE
        SYNTAX   OBJECT IDENTIFIER
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The object identifier of the Oakley group row that was used
            if a well-known group was not used to generate the Diffie-
            Hellman key pair for this SA.

            If a well-known group was used, the value should be set to
            the OBJECT IDENTIFIER { 0 0 }.

            For example, if the group is a MODP group, the value of this
            object is the object identifier of 'modpGroupIndex' of the
            appropriate row ('modpGroupEntry') in 'modpGroupTable'."
        REFERENCE   "RFC 2409 Section 6"
        ::= { ikeSaEntry 10 }
    saLimitSeconds OBJECT-TYPE
        SYNTAX      Unsigned32
        UNITS       "seconds"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The maximum number of seconds the SA is allowed to exist,
            or 0 if there is no time-based limit on the existence of the
            SA.

            The display value is limited to 4,294,967,295 seconds (more
            than 136 years); values greater than that value will be
            truncated."
        ::= { ikeSaEntry 11 }

    saLimitKbytes OBJECT-TYPE
        SYNTAX      Unsigned32
        UNITS       "Kilobytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The maximum number of Kilobytes (1024 bytes) the SA is
            allowed to encrypt before it expires, or 0 if there is no
            traffic-by-byte-based limit on the existence of the SA.

            The display value is limited to 4,294,967,295 Kilobytes
            (more than 4,194,304 Mbyte); values greater than that value
            will be truncated."
        ::= { ikeSaEntry 12 }

    saLimitKeyUses OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The maximum number of times the SA is allowed to provide
            keying material from its own Diffie-Hellman exchange before
            it expires, or 0 if there is no keying material-based limit
            on the existence of the SA."
        ::= { ikeSaEntry 13 }

    saAccKbytes OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "Kilobytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of Kilobytes (1024 bytes) the SA has encrypted
            that count against any lifetime restriction based on
            traffic. This value may be 0 if there is no such
            restriction."
        ::= { ikeSaEntry 14 }

    saKeyUses OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of times the SA has provided keying material
            derived from its own original Diffie-Hellman exchange."
        ::= { ikeSaEntry 15 }

    saCreatedSuites OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of SA suites that this SA has successfully
            created. In other words, the total number of successful
            quick mode exchanges multiplied by the number of SA payloads
            in each of those exchanges."
        ::= { ikeSaEntry 16 }

    saDeletedSuites OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of SA suites deleted for which this SA
            sent or received SA suite delete notifications. When delete
            notifications are sent or received for more than one IPsec
            SA in an SA suite, this number shall be incremented by one,
            and not by the number IPsec SAs in the suite that were
            deleted."
        ::= { ikeSaEntry 17 }

    saDecryptErrors OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current


        DESCRIPTION
            "The total number of packets inbound to this SA that were
            discarded due to decryption errors."
        ::= { ikeSaEntry 18 }

    saHashErrors OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of packets inbound to this SA that were
            discarded due to hash result errors."
        ::= { ikeSaEntry 19 }

    saOtherReceiveErrors OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of packets inbound to this SA that were
            discarded due to errors other than decryption or hash result
            errors. This may include packets dropped to a lack of
            receive buffer space."
        ::= { ikeSaEntry 20 }

    saSendErrors OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of packets outbound from this SA that were
            discarded due to errors. This may include packets dropped to
            a lack of transmit buffer space."
        ::= { ikeSaEntry 21 }

    --
    -- the IKE SA By Creators Table
    --

    saByCreatorsTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF SaByCreatorsEntry
        MAX-ACCESS  not-accessible
        STATUS      current

        DESCRIPTION
            "The (conceptual) table that sorts the IKE phase 1 SAs by
            the endpoint identifiers.

            The number of rows in this table is the same as the number
            of IKE phase 1 SAs in the entity."
        ::= { ikeTables 3 }

    saByCreatorsEntry OBJECT-TYPE
        SYNTAX      SaByCreatorsEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) referencing a particular IKE
            phase 1 SA.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX
            {
                saByCreatorsLocalEndpoint,
                saByCreatorsRemoteEndpoint,
                saByCreatorsIndex
            }
        ::= { saByCreatorsTable 1 }

    SaByCreatorsEntry  ::= SEQUENCE {
    -- index
        saByCreatorsLocalEndpoint   Unsigned32,
        saByCreatorsRemoteEndpoint  Unsigned32,
        saByCreatorsIndex           Unsigned32,

    -- phase 1 SA reference
        saIkeLocalIpAddressType     InetAddressType,
        saIkeLocalIpAddress         InetAddress,
        saIkeRemoteIpAddressType    InetAddressType,
        saIkeRemoteIpAddress        InetAddress,
        saIkeInitiatorCookie        IsakmpCookie,
        saIkeResponderCookie        IsakmpCookie
    }

    saByCreatorsLocalEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  not-accessible
        STATUS      current


        DESCRIPTION
            "The index of the endpoint table row for the local
            endpoint."
        ::= { saByCreatorsEntry 1 }

    saByCreatorsRemoteEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The index of the endpoint table row for the remote
            endpoint."
        ::= { saByCreatorsEntry 2 }

    saByCreatorsIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..16777215)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each IKE phase 1 SA
            that exists between the two endpoints. It is recommended
            that values are assigned contiguously starting from 1."
        ::= { saByCreatorsEntry 3 }

    saIkeLocalIpAddressType OBJECT-TYPE
        SYNTAX      InetAddressType
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of 'saLocalIpAddressType' of the phase 1 SA for
            this row."
        ::= { saByCreatorsEntry 4 }

    saIkeLocalIpAddress OBJECT-TYPE
        SYNTAX      InetAddress (SIZE(4|16|20))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of 'saLocalIpAddress' of the phase 1 SA for this
            row."
        ::= { saByCreatorsEntry 5 }

    saIkeRemoteIpAddressType OBJECT-TYPE
        SYNTAX      InetAddressType
        MAX-ACCESS  read-only
        STATUS      current

        DESCRIPTION
            "The value of 'saRemoteIpAddressType' of the phase 1 SA for
            this row."
        ::= { saByCreatorsEntry 6 }

    saIkeRemoteIpAddress OBJECT-TYPE
        SYNTAX      InetAddress (SIZE(4|16|20))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of 'saRemoteIpAddress' of the phase 1 SA for this
            row."
        ::= { saByCreatorsEntry 7 }

    saIkeInitiatorCookie OBJECT-TYPE
        SYNTAX      IsakmpCookie
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of 'saInitiatorCookie' of the phase 1 SA for this
            row."
        ::= { saByCreatorsEntry 8 }

    saIkeResponderCookie OBJECT-TYPE
        SYNTAX      IsakmpCookie
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of 'saResponderCookie' of the phase 1 SA for this
            row."
        ::= { saByCreatorsEntry 9 }


    -- the Exchange Count MIB-Group
    --
    -- a collection of objects providing information about the
    -- number of exchanges performed using ISAKMP-based SAs
    --

    exchangeTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF ExchangeEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing the exchanges used.

            There should be one row for every exchange attempt that has
            occurred using a phase 1 security association that exists in
            the entity. The maximum number of rows is implementation
            dependent."
        ::= { ikeTables 4 }

    exchangeEntry OBJECT-TYPE
        SYNTAX      ExchangeEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing the information on a
            particular exchange used in an SA.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX   {
                saLocalIpAddressType,
                saLocalIpAddress,
                saRemoteIpAddressType,
                saRemoteIpAddress,
                saInitiatorCookie,
                saResponderCookie,
                exchangeType
                }
        ::= { exchangeTable 1 }

    ExchangeEntry::= SEQUENCE {
    -- identification
        exchangeType            IkeExchangeType,

    -- the statistics
        exchangesTotalCount     Counter32,
        exchangesInitiatedCount Counter32,
        exchangesRespondedCount Counter32
    }

    exchangeType OBJECT-TYPE
        SYNTAX      IkeExchangeType
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The type of the exchange for which the statistics of this
            row apply."
        ::= { exchangeEntry 1 }

    exchangesTotalCount OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current        DESCRIPTION
            "The total number of complete exchanges of the type
            performed using the SA, as either initiator or as responder.

            If there were failed attempts to initiate exchanges, this
            value is not equal to the sum of 'exchangesInitiatedCount'
            and 'exchangesRespondedCount'."
        ::= { exchangeEntry 2 }

    exchangesInitiatedCount OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of exchanges of the type attempted using
            the SA as initiator. This includes exchange that failed or
            were incomplete"
        ::= { exchangeEntry 3 }

    exchangesRespondedCount OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of complete exchanges of the type
            performed using the SA as responder."
        ::= { exchangeEntry 4 }

    --
    -- the Suite MIB-Group
    --
    -- a collection of objects providing information about
    -- the phase 2 SA suites
    --

    suiteTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF SuiteEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing the phase 2 suites.

            The number of rows in this table is the same as the number
            of suites in the entity. The maximum number of rows is
            implementation dependent."
        ::= { suiteTables 1 }

    suiteEntry OBJECT-TYPE
        SYNTAX      SuiteEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing the information on a
            particular phase 2 SA suite.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX   { suiteIndex }
        ::= { suiteTable 1 }

    SuiteEntry ::= SEQUENCE {
    -- index
        suiteIndex                  Unsigned32,

    -- end points
        suiteLocalAddressType       InetAddressType,
        suiteLocalAddress           InetAddress,
        suiteRemoteAddressType      InetAddressType,
        suiteRemoteAddress          InetAddress,

    -- creator ID information
        suitePhase1RemoteEndpoint   Unsigned32,
        suitePhase1LocalEndpoint    Unsigned32,

    -- selector
        suiteSelector               Unsigned32,

    -- keying material source information
        suiteOakleyGroupDesc        IkeGroupDescription,
        suiteOakleyGroup            OBJECT IDENTIFIER,

    -- operating statistics
        suiteLifeSeconds            Counter32,
        suiteInUserOctets           Counter64,
        suiteInPackets              Counter64,
        suiteOutUserOctets          Counter64,
        suiteOutPackets             Counter64,

    -- error statistics
        suiteSendErrors             Counter32,
        suiteReceiveErrors          Counter32
    }

    suiteIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..16777215)        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each SA suite. It is
            recommended that values are assigned contiguously starting
            from 1."
        ::= { suiteEntry 1 }

    suiteLocalAddressType OBJECT-TYPE
        SYNTAX      InetAddressType
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The type of address used by the local entity that
            negotiated the SA suite. "
        ::= { suiteEntry 2 }

    suiteLocalAddress OBJECT-TYPE
        SYNTAX      InetAddress (SIZE(4|16|20))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The address used by the local entity that negotiated the SA
            suite. "
        ::= { suiteEntry 3 }

    suiteRemoteAddressType OBJECT-TYPE
        SYNTAX      InetAddressType
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The type of address used by the remote entity that
            negotiated the SA suite."
        ::= { suiteEntry 4 }

    suiteRemoteAddress OBJECT-TYPE
        SYNTAX      InetAddress (SIZE(4|16|20))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The address used by the remote entity that negotiated the
            SA suite."
        ::= { suiteEntry 5 }

    suitePhase1RemoteEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current        DESCRIPTION
            "The index of the endpoint table row for remote entity that
            negotiated this suite. In other words, the value of
            'endpointIndex' for the appropriate row ('ikeEndpointEntry')
            from the 'ikeEndpointTable'."
        ::= { suiteEntry 6 }

    suitePhase1LocalEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The index of the endpoint table row for local entity that
            negotiated this suite. In other words, the value of
            'endpointIndex' for the appropriate row ('ikeEndpointEntry')
            from the 'ikeEndpointTable'"
        ::= { suiteEntry 7 }

    suiteSelector OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The index of the selector table row for this suite. In
            other words, the value of 'selectorIndex' for the
            appropriate row ('SelectorEntry') from the 'selectorTable'"
        ::= { suiteEntry 8 }

    suiteOakleyGroupDesc OBJECT-TYPE
        SYNTAX      IkeGroupDescription
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The group number used to generate the Diffie-Hellman key
            pair when setting up the SA, or 0 if none of the well known
            groups was used, or if perfect forward secrecy was not used.

            If this value is 0, the 'suiteOakleyGroup' must not also be
            OBJECT IDENTIFIER { 0 0 }."
        ::= { suiteEntry 9 }

    suiteOakleyGroup OBJECT-TYPE
        SYNTAX      OBJECT IDENTIFIER
        MAX-ACCESS  read-only
        STATUS      current


        DESCRIPTION
            "The OID for the Oakley group row that was used if a well-
            known group was not used to generate the Diffie-Hellman key
            pair for this SA.

            If a well-known group was used, or if perfect forward
            secrecy was not used, the value should be set to the OBJECT
            IDENTIFIER { 0 0 }.

            For example, if the group is a MODP group, the value of this
            object is the object identifier of 'modpGroupIndex' of the
            appropriate row ('modpGroupEntry') in 'modpGroupTable'."
        ::= { suiteEntry 10 }

    suiteLifeSeconds OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "seconds"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of seconds that the SA has existed."
        ::= { suiteEntry 11 }

    suiteInUserOctets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "bytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The amount of user level traffic measured in bytes handled
            by the suite in the inbound direction.

            This is the same as the user level traffic of the inner most
            inbound SA in the suite. Note that if the inner-most SA is a
            shared IPcomp SA, then this value may be difficult to
            calculate."
        ::= { suiteEntry 12 }

    suiteInPackets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of inbound packets handled by the suite.


            This is the same as the number of packets handled by any one
            of the inbound SAs in the suite."
        ::= { suiteEntry 13 }

    suiteOutUserOctets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "bytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The amount of user level traffic measured in bytes handled
            by the suite in the outbound direction.

            This is the same as the user level traffic of the inner most
            outbound SA in the suite. Note that if the inner most SA is
            a shared IPcomp SA, then this value may be difficult to
            calculate."
        ::= { suiteEntry 14 }

    suiteOutPackets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of outbound packets handled by the suite.

            This is the same as the number of packets handled by any one
            of the outbound SAs in the suite."
        ::= { suiteEntry 15 }

    suiteSendErrors  OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of outbound packets discarded by the suite due
            to any error.

            This is the same as the sum of all errors of all outbound
            SAs in the suite."
        ::= { suiteEntry 16 }

    suiteReceiveErrors OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current        DESCRIPTION
            "The number of inbound packets discarded by the suite due to
            any error.

            This is the same as the sum of all errors of all inbound SAs
            in the suite."
        ::= { suiteEntry 17 }


    --
    -- the Phase 2 SA MIB-Group
    --
    -- a collection of objects providing information about
    -- the phase 2 SAs in SA suites
    --

    phase2SaTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF Phase2SaEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing ID information for the
            phase 2 SAs that are part of suites.

            The number of rows in this table is the same as the number
            of phase 2 IPsec SA pairs that are created as part of
            suites. The maximum number of rows is implementation
            dependent."
        ::= { suiteTables 3 }

    phase2SaEntry OBJECT-TYPE
        SYNTAX      Phase2SaEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing the information on a
            particular phase 2 SA within a suite.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX   { suiteIndex, saOrder }
        ::= { phase2SaTable 1 }

    Phase2SaEntry  ::= SEQUENCE {
    -- additional indexing objects
        saOrder             Unsigned32,

    -- SA identifiers
        saProtocol          IpsecDoiTransformIdent,
        saInSpi             Unsigned32,
        saOutSpi            Unsigned32
    }

    saOrder     OBJECT-TYPE
        SYNTAX      Unsigned32 (1..15)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The position within the suite of the pair of SAs indicated
            by this row.

            A value of 1 is used to represent the outer-most SA pair.
            The outer-most SA of any given packet has its header next to
            the outer IP header of the processed packet, while the
            inner-most SA has its header nearest the data of the
            unprocessed packet. (Note that the IPcomp header may be
            missing in actual usage if a particular packet was not
            compressed.)

            This value should be monotonically increasing for every SA
            pair in a suite. The maximum value is implementation
            dependent, but will generally not exceed three."
        ::= { phase2SaEntry 1 }

    saProtocol OBJECT-TYPE
        SYNTAX      IpsecDoiTransformIdent
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The protocol of the inbound/outbound SA pair indicated by
            this row of the table."
        ::= { phase2SaEntry 2 }

    saInSpi OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The security parameters index of the inbound SA of the
            inbound/outbound SA pair. If the protocol of the SA pair is
            IPcomp, this value is the CPI.

            This value is used with the value of 'suiteLocalAddress'
            from the row indexed by 'suiteIndex' to create a SPI/address
            pair that uniquely identifies the inbound SA used in this SA
            suite. This can then be used to look up the SA in the
            appropriate inbound SA table, based on 'saProtocol'."
        REFERENCE   "RFC 2406 Section 2.1"
        ::= { phase2SaEntry 3 }

    saOutSpi OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The security parameters index of the outbound SA of the
            inbound/outbound SA pair. If the protocol of the SA pair is
            IPcomp, this value is the CPI.

            This value is used with the value of 'suiteRemoteAddress'
            from the row indexed by 'suiteIndex' to create a SPI/address
            pair that uniquely identifies the outbound SA used in this
            SA suite. This can then be used to look up the SA in the
            appropriate outbound SA table, based on 'saProtocol'."
        REFERENCE   "RFC 2406 Section 2.1"
        ::= { phase2SaEntry 4 }


    --
    -- the Phase 2 Suite By Creators Table
    --

    suiteByCreatorsTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF SuiteByCreatorsEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table that sorts the SA suites by the
            endpoint identifiers.

            The number of rows in this table is the same as the number
            of suites in the entity."
        ::= { suiteTables 4 }

    suiteByCreatorsEntry OBJECT-TYPE
        SYNTAX      SuiteByCreatorsEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) referencing a particular suite.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."        INDEX
            {
                suiteByCreatorsP1LocalEndpoint,
                suiteByCreatorsP1RemoteEndpoint,
                suiteByCreatorsIndex
            }
        ::= { suiteByCreatorsTable 1 }

    SuiteByCreatorsEntry    ::= SEQUENCE {
     -- index
        suiteByCreatorsP1LocalEndpoint  Unsigned32,
        suiteByCreatorsP1RemoteEndpoint Unsigned32,
        suiteByCreatorsIndex            Unsigned32,

    -- suite reference
        suiteByCreatorsRef              OBJECT IDENTIFIER
    }

    suiteByCreatorsP1LocalEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The index of the endpoint table row for the local
            endpoint."
        ::= { suiteByCreatorsEntry 1 }

    suiteByCreatorsP1RemoteEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The index of the endpoint table row for the remote
            endpoint."
        ::= { suiteByCreatorsEntry 2 }

    suiteByCreatorsIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..16777215)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each SA suite that
            is between the two endpoints. It is recommended that values
            are assigned contiguously starting from 1 for each SA suite
            between the two endpoints.

            Note that duplicate entries for the saByCreatorsHash value
            may also arise due to hash result collisions."
        ::= { suiteByCreatorsEntry 3 }

    suiteByCreatorsRef OBJECT-TYPE
        SYNTAX   OBJECT IDENTIFIER
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The object identifier of 'suiteIndex' in the row
            ('suiteEntry') of the 'suiteTable' to which this row
            refers."
        ::= { suiteByCreatorsEntry 4 }


    --
    -- the Phase 2 Suite By Selector Table
    --

    suiteBySelectorsTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF SuiteBySelectorsEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table that sorts the suites by the
            selectors.

            The number of rows in this table is the same as the number
            of suites in the entity.

            The maximum number of rows in this table is implementation
            dependent."
        ::= { suiteTables 5 }

    suiteBySelectorsEntry OBJECT-TYPE
        SYNTAX      SuiteBySelectorsEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) referencing a particular suite.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX
            {
                selectorIndex,
                suiteBySelectorsIndex
            }
        ::= { suiteBySelectorsTable 1 }
    SuiteBySelectorsEntry  ::= SEQUENCE {
    -- additional index
        suiteBySelectorsIndex       Unsigned32,

    -- suite reference
        suiteBySelectorsRef         OBJECT IDENTIFIER
    }

    suiteBySelectorsIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..16777215)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A unique value, greater than zero, for each SA suite that
            has the same selectors. It is recommended that values are
            assigned contiguously starting from 1."
        ::= { suiteBySelectorsEntry 1 }

    suiteBySelectorsRef OBJECT-TYPE
        SYNTAX   OBJECT IDENTIFIER
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The object identifier of 'suiteIndex' in the row
            ('suiteEntry') of the 'suiteTable' to which this row
            refers."
        ::= { suiteBySelectorsEntry 2 }

    --
    -- the Phase 2 SA to Suite Table
    --

    ipsecSaInSuiteTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF IpsecSaInSuiteEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table that allows determination of which
            suite a particular phase 2 SA is in.

            The number of rows in this table is the same as the number
            of phase 2 SAs in the entity."
        ::= { suiteTables 6 }

    ipsecSaInSuiteEntry OBJECT-TYPE
        SYNTAX      IpsecSaInSuiteEntry
        MAX-ACCESS  not-accessible
        STATUS      current        DESCRIPTION
            "An entry (conceptual row) referencing a particular phase 2
            SA.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX
            {
                ipsecSaInSuiteDestAddrType,
                ipsecSaInSuiteDestAddress,
                ipsecSaInSuiteProtocol,
                ipsecSaInSuiteSpi
            }
        ::= { ipsecSaInSuiteTable 1 }

    IpsecSaInSuiteEntry ::= SEQUENCE {
    -- index
        ipsecSaInSuiteDestAddrType  InetAddressType,
        ipsecSaInSuiteDestAddress   InetAddress,
        ipsecSaInSuiteProtocol      IpsecDoiSecProtocolId,
        ipsecSaInSuiteSpi           Unsigned32,

    -- SA reference
        ipsecSaInSuiteRef           OBJECT IDENTIFIER
    }

    ipsecSaInSuiteDestAddrType OBJECT-TYPE
        SYNTAX      InetAddressType
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The type of the destination address of the IPsec phase 2 SA
            to which this row refers."
        ::= { ipsecSaInSuiteEntry 1 }

    ipsecSaInSuiteDestAddress OBJECT-TYPE
        SYNTAX      InetAddress (SIZE(4|16|20))
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The destination address of the IPsec phase 2 SA to which
            this row refers."
        ::= { ipsecSaInSuiteEntry 2 }

    ipsecSaInSuiteProtocol OBJECT-TYPE
        SYNTAX      IpsecDoiSecProtocolId
        MAX-ACCESS  not-accessible
        STATUS      current        DESCRIPTION
            "The security protocol of the IPsec phase 2 SA to which this
            row refers."
        ::= { ipsecSaInSuiteEntry 3 }

    ipsecSaInSuiteSpi OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The SPI value of the IPsec phase 2 SA to which this row
            refers. If the value of 'ipsecSaInSuiteProtocol' is
            'protoIpcomp(4)', then this is the CPI of the SA."
        REFERENCE   "RFC 2407 Section 4.6.2.1"
        ::= { ipsecSaInSuiteEntry 4 }

    ipsecSaInSuiteRef OBJECT-TYPE
        SYNTAX   OBJECT IDENTIFIER
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The object identifier of 'suiteIndex' in the row
            ('suiteEntry') of the 'suiteTable' to which this row refers.

            This is the suite that uses this SA."
        ::= { ipsecSaInSuiteEntry 5 }


    -- the Notify Message MIB-Group
    --
    -- a collection of objects providing information about
    -- the occurrences of notify messages

    notifyCountTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF NotifyCountEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The (conceptual) table containing information on IPSec
            notify message counts.

            Rows are created in this table for every notification type
            that has been sent or received by the entity.

            This table MAY be sparsely populated; that is, rows for
            which the count is 0 may be absent."
        ::= { ikeNotifications 1 }
    notifyCountEntry OBJECT-TYPE
        SYNTAX      NotifyCountEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "An entry (conceptual row) containing the total number of
            occurrences of a notify message.

            A row in this table cannot be created or deleted by SNMP
            operations on columns of the table."
        INDEX   { notifyProtocol, notifyType }
        ::= { notifyCountTable 1 }

    NotifyCountEntry ::= SEQUENCE {
    -- identification
        notifyProtocol          IpsecDoiSecProtocolId,
        notifyType              IkeNotifyMessageType,

    -- ocurrences
        notifiesSent            Counter32,
        notifiesReceived        Counter32
    }

    notifyProtocol OBJECT-TYPE
        SYNTAX      IpsecDoiSecProtocolId
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The value representing a protocol for which the notify was
            used."
        REFERENCE   "RFC 2408 Section 3.14"
        ::= { notifyCountEntry 1 }

    notifyType OBJECT-TYPE
        SYNTAX      IkeNotifyMessageType
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The value representing a specific ISAKMP notify message, or
            0 if unknown.

            Values are assigned from the set of notify message types as
            defined in Section 3.14.1 of [ISAKMP], and enhanced by the
            IPsec DOI. In addition, the value 0 may be used for this
            object when the object is used as a trap cause, and the
            cause is unknown."
        REFERENCE   "RFC 2408 Section 3.14.1"
        ::= { notifyCountEntry 2 }
    notifiesSent    OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of times the specific notify message has
            been sent by the entity since system boot."
        ::= { notifyCountEntry 3 }

    notifiesReceived    OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of times the specific notify message has
            been received by the entity since system boot."
        ::= { notifyCountEntry 4 }


    --
    -- the IKE Entity MIB-Group
    --
    -- a collection of objects providing information about overall IKE
    -- status in the entity

    --
    -- IKE phase 1 SA statistics
    --

    ikeCurrentSAs OBJECT-TYPE
        SYNTAX      Gauge32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The current number of IKE SAs in the entity."
        ::= { ikeGlobals 1 }

    ikeCurrentInitiatedSAs OBJECT-TYPE
        SYNTAX      Gauge32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The current number of IKE SAs successfully negotiated in
            the entity that were initiated by the entity."
        ::= { ikeGlobals 2 }

    ikeCurrentRespondedSAs OBJECT-TYPE
        SYNTAX      Gauge32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The current number of IKE SAs successfully negotiated in
            the entity that were initiated by the peer entity."
        ::= { ikeGlobals 3 }

    ikeTotalSAs OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE SAs successfully negotiated in the
            entity since boot time."
        ::= { ikeGlobals 4 }

    ikeTotalInitiatedSAs OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE SAs successfully negotiated in the
            entity since boot time that were initiated by the entity."
        ::= { ikeGlobals 5 }

    ikeTotalRespondedSAs OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE SAs successfully negotiated in the
            entity since boot time that were initiated by the peer
            entity."
        ::= { ikeGlobals 6 }

    ikeTotalAttempts OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE SAs negotiation attempts made since
            boot time. This includes successful negotiations."
        ::= { ikeGlobals 7 }

    ikeTotalSaInitAttempts OBJECT-TYPE
        SYNTAX      Counter32        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE SAs negotiation attempts made where
            the entity was the initiator since boot time. This includes
            successful negotiations."
        ::= { ikeGlobals 8 }

    ikeTotalSaRespAttempts OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE SAs negotiation attempts made where
            the entity was the responder since boot time. This includes
            successful negotiations."
        ::= { ikeGlobals 9 }


    --
    -- IKE Aggregate Traffic Statistics
    --

    ikeTotalInPackets OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE packets received by the entity
            since boot time, including re-transmissions and un-encrypted
            packets."
        ::= { ikeTrafStats 1 }

    ikeTotalOutPackets OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of IKE packets sent by the entity since
            boot time, including re-transmissions and un-encrypted
            packets."
        ::= { ikeTrafStats 2 }

    ikeTotalInOctets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "bytes"        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total amount of IKE traffic received by the entity
            since boot time, measured in bytes, including any re-
            transmitted packets received, and including encrypted and
            un-encrypted packets."
        ::= { ikeTrafStats 3 }

    ikeTotalOutOctets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "bytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total amount of IKE traffic sent by the entity since
            boot time, measured in bytes, including any re-transmissions
            and including encrypted and un-encrypted packets."
        ::= { ikeTrafStats 4 }


    --
    -- IKE Phase 1 SA Aggregate Errors
    --

    ikeTotalInitFailures OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of attempts to initiate an IKE phase 1 SA
            that failed since boot time, when there was a response from
            the peer entity.

            This value may be used to detect clogging or denial-of-
            service attacks."
        ::= { ikeErrors 1 }

    ikeTotalInitNoResponses OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of attempts to initiate an IKE phase 1 SA
            that failed since boot time, when there was no response from
            the peer entity.

            This should only be incremented if the peer does not repond
            to the first packet of attempted negotiations."
        ::= { ikeErrors 2 }

    ikeTotalRespFailures OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of attempts to initiate an IKE phase 1 SA
            that failed since boot time, when the initiation attempt
            came for the peer entity."
        ::= { ikeErrors 3 }


    --
    -- Suite Global Objects
    --

    totalSuites OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of suites created by the entity since
            system boot."
        ::= { suiteGlobals 1 }

    currentSuites OBJECT-TYPE
        SYNTAX      Gauge32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of suites currently in existence in the
            entity."
        ::= { suiteGlobals 2 }

    --
    -- Suite Aggregate Traffic Statistics
    --

    suiteTotalInUserKbytes OBJECT-TYPE
        SYNTAX      Counter64        UNITS       "Kilobytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total amount of user level traffic carried by all
            suites in the entity since boot time, measured in Kilobytes
            (1024 bytes), in the inbound direction.

            This is the sum of the 'suiteInUserOctets' column for all
            suite rows created since boot time."
        ::= { suiteTrafStats 1 }

    suiteTotalInPackets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of packets carried by all suites in the
            entity since boot time in the inbound direction.

            This is the sum of the 'suiteInPackets' column for all suite
            rows created since boot time."
        ::= { suiteTrafStats 2 }

    suiteTotalOutUserKbytes OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "Kilobytes"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total amount of user level traffic carried by all
            suites in the entity since boot time, measured in Kilobytes
            (1024 bytes), in the outbound direction.

            This is the sum of the 'suiteOutUserOctets' column for all
            suite rows created since boot time."
        ::= { suiteTrafStats 3 }

    suiteTotalOutPackets OBJECT-TYPE
        SYNTAX      Counter64
        UNITS       "packets"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of packets carried by all suites in the
            entity since boot time, in the outbound direction.
            This is the sum of the 'suiteOutPackets' column for all
            suite rows created since boot time."
        ::= { suiteTrafStats 4 }

    --
    -- Suite Aggregate Error Counts
    --

    suiteInitFailures OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of attempts to initiate an suite that
            failed since boot time, when the attempt was initiated
            locally."
        ::= { suiteErrors 1 }

    suiteRespondFailures OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of attempts to initiate an suite that
            failed since boot time, when the attempt was initiated by
            the peer entity."
        ::= { suiteErrors 2 }


    --
    -- Trap Objects, Traps and Trap Control
    --

    ikeLocalEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  accessible-for-notify
        STATUS      current
        DESCRIPTION
            "The index to an endpoint that is the local endpoint in a
            trap."
        ::= { ikeTrapObjects 1 }

    ikeRemoteEndpoint OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  accessible-for-notify
        STATUS      current

        DESCRIPTION
            "The index to an endpoint that is the remote endpoint in a
            trap."
        ::= { ikeTrapObjects 2 }

    ikeSelector OBJECT-TYPE
        SYNTAX      Unsigned32
        MAX-ACCESS  accessible-for-notify
        STATUS      current
        DESCRIPTION
            "The index to a selector that is involved in a trap."
        ::= { ikeTrapObjects 3 }

    ikeAuthMethod OBJECT-TYPE
        SYNTAX      IkeAuthMethod
        MAX-ACCESS  accessible-for-notify
        STATUS      current
        DESCRIPTION
            "An authentication method that was used in a trap."
        ::= { ikeTrapObjects 4 }

    ikeNegFailureTrapEnable OBJECT-TYPE
        SYNTAX      TruthValue
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
            "Indicates whether ikeNegFailure traps should be generated."
        DEFVAL { false }
        ::= { ikeTrapControl 1 }

    ikeNegFailure NOTIFICATION-TYPE
     OBJECTS   {
            ikeLocalEndpoint,
            ikeRemoteEndpoint,
            localIpAddressType,
            localIpAddress,
            localUdpPort,
            remoteIpAddressType,
            remoteIpAddress,
            remoteUdpPort,
            ikeAuthMethod,
            ikeTotalInitFailures,
            ikeTotalInitNoResponses,
            ikeTotalRespFailures,
            notifiesSent,
            notifiesReceived
        }
        STATUS  current        DESCRIPTION
            "An attempt to negotiate a phase 1 IKE SA failed.

            The notification counts are also sent as part of the trap,
            along with the current value of the total negotiation error
            counters for ISAKMP."
        ::= { ikeTraps 0 1 }

    suiteNegFailureTrapEnable OBJECT-TYPE
        SYNTAX      TruthValue
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
            "Indicates whether 'suiteNegFailure' traps should be
            generated."
        DEFVAL { false }
        ::= { suiteTrapControl 1 }

    suiteNegFailure NOTIFICATION-TYPE
     OBJECTS   {
            ikeSelector,
            suiteInitFailures,
            suiteRespondFailures,
            notifiesSent,
            notifiesReceived
        }
        STATUS  current
        DESCRIPTION
            "An attempt to negotiate a phase 2 SA suite for the
            specified selector failed.

            The current total failure counts are passed as well as the
            notification type counts for the notify involved in the
            failure."
        ::= { suiteTraps 0 1 }


    --
    -- Units of conformance (Object Groups)
    --

    --
    -- Authors' note: Index objects are commented out, since the current
    -- SMI does not allow objects with a MAX-ACCESS clause of
    -- 'not-accessible' to be put in groups.
    --

    oakleyGroup  OBJECT-GROUP
     OBJECTS
        {
            -- modpGroupIndex,
            modpFieldSize, modpPrime, modpGenerator, modpLPF,
            modpStrength,
            -- ecpGroupIndex,
            ecpFieldSize, ecpPrime, ecpGeneratorOne, ecpGeneratorTwo,
            ecpParameterOne, ecpParameterTwo, ecpLPF, ecpOrder,
            ecpStrength,
            -- ec2nGroupIndex,
            ec2nDegree, ec2nIrrPoly, ec2nGeneratorOne, ec2nGeneratorTwo,
            ec2nParameterOne, ec2nParameterTwo, ec2nLPF, ec2nOrder,
            ec2nStrength
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that describe the Oakley Groups
            used or known by the entity."
        REFERENCE   "RFC 2412"
        ::= { ikeGroups 1 }

    endpointGroup OBJECT-GROUP
     OBJECTS
        {
            -- endpointIndex,
            endpointIdType, endpointIdValue, endpointCertSerialNum,
            endpointCertIssuer, endpointIsLocal, endpointCurrentIkeSAs,
            endpointTotalIkeSAs, endpointCurrentSuites,
            endpointTotalSuites
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that describe IKE endpoints."
        ::= { ikeGroups 2 }

    ikeSaGroup OBJECT-GROUP
     OBJECTS
        {
            saAuthMethod, saPeerEndpoint, saLocalEndpoint, saEncAlg,
            saEncKeyLength, saHashAlg, saHashKeyLength, saPRF,
            saOakleyGroupDesc, saOakleyGroup, saLimitSeconds,
            saLimitKbytes, saLimitKeyUses, saAccKbytes, saKeyUses,
            saCreatedSuites, saDeletedSuites, saDecryptErrors,
            saHashErrors, saOtherReceiveErrors, saSendErrors
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that describe IKE phase 1 SAs."
        ::= { ikeGroups 3 }

    ikeHelpersGroup OBJECT-GROUP
     OBJECTS
        {
            -- saByCreatorsLocalEndpoint, saByCreatorsRemoteEndpoint,
            -- saByCreatorsIndex,
            saIkeLocalIpAddressType, saIkeLocalIpAddress,
            saIkeRemoteIpAddressType, saIkeRemoteIpAddress,
            saIkeInitiatorCookie, saIkeResponderCookie
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that help look up IKE phase 1 SAs."
        ::= { ikeGroups 4 }

    exchangeGroup OBJECT-GROUP
     OBJECTS
        {
            -- exchangeType,
            exchangesTotalCount, exchangesInitiatedCount,
            exchangesRespondedCount
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that count exchanges."
        ::= { ikeGroups 5 }

    suiteGroup OBJECT-GROUP
     OBJECTS
        {
            -- suiteIndex,
            suiteLocalAddressType, suiteLocalAddress,
            suiteRemoteAddressType, suiteRemoteAddress,
            suitePhase1RemoteEndpoint, suitePhase1LocalEndpoint,
            suiteSelector, suiteOakleyGroupDesc, suiteOakleyGroup,
            suiteLifeSeconds, suiteInUserOctets, suiteInPackets,
            suiteOutUserOctets, suiteOutPackets, suiteSendErrors,
            suiteReceiveErrors
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that describe phase 2 SA suites."
        ::= { ikeGroups 7 }

    phase2SaGroup OBJECT-GROUP
     OBJECTS
        {
            -- saOrder,
            saProtocol, saInSpi, saOutSpi,
            -- ipsecSaInSuiteDestAddrType, ipsecSaInSuiteDestAddress,
            -- ipsecSaInSuiteProtocol, ipsecSaInSuiteSpi,
            ipsecSaInSuiteRef
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that relate phase 2 SAs to phase 2
            SA suites."
        ::= { ikeGroups 8 }

    suiteHelperGroup OBJECT-GROUP
     OBJECTS
        {
            -- suiteByCreatorsP1LocalEndpoint,
            -- suiteByCreatorsP1RemoteEndpoint, suiteByCreatorsIndex,
            suiteByCreatorsRef,
            -- suiteBySelectorsIndex,
            suiteBySelectorsRef
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that help look up phase 2 SA
            suites."
        ::= { ikeGroups 9 }

    notifyGroup OBJECT-GROUP
     OBJECTS
        {
            -- notifyProtocol, notifyType,
            notifiesSent, notifiesReceived
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects that take statistics for notify
            messages in IKE."
        ::= { ikeGroups 10 }

    ikeGlobalsGroup  OBJECT-GROUP
     OBJECTS
        {
            ikeCurrentSAs, ikeCurrentInitiatedSAs,
            ikeCurrentRespondedSAs, ikeTotalSAs, ikeTotalInitiatedSAs,
            ikeTotalRespondedSAs, ikeTotalAttempts,
            ikeTotalSaInitAttempts, ikeTotalSaRespAttempts,
            ikeTotalInPackets, ikeTotalOutPackets, ikeTotalInOctets,
            ikeTotalOutOctets, ikeTotalInitFailures,
            ikeTotalInitNoResponses, ikeTotalRespFailures
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects providing global IKE phase 1 SA
            statistics."
        ::= { ikeGroups 11 }

    suiteGlobalsGroup OBJECT-GROUP
     OBJECTS
        {
            totalSuites, currentSuites, suiteTotalInUserKbytes,
            suiteTotalInPackets, suiteTotalOutUserKbytes,
            suiteTotalOutPackets, suiteInitFailures,
            suiteRespondFailures
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects providing global phase 2 SA suite
            statistics."
        ::= { ikeGroups 12 }

    ikeTrapArgumentGroup OBJECT-GROUP
     OBJECTS
        {
            ikeLocalEndpoint, ikeRemoteEndpoint, ikeSelector,
            ikeAuthMethod
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects used only as arguments in traps."
        ::= { ikeGroups 13 }

    ikeTrapEnableGroup OBJECT-GROUP
     OBJECTS
        {
            ikeNegFailureTrapEnable, suiteNegFailureTrapEnable
        }
        STATUS  current
        DESCRIPTION
            "A collection of objects providing control over trap
            generation."
        ::= { ikeGroups 14 }

    ikeTrapGroup    NOTIFICATION-GROUP
        NOTIFICATIONS
        {
            ikeNegFailure, suiteNegFailure
        }
        STATUS  current
        DESCRIPTION
            "A collection of traps."
        ::= { ikeGroups 15 }

    --
    -- Compliance statements
    --

    ikeMonitorCompliance    MODULE-COMPLIANCE
        STATUS      current
        DESCRIPTION
            "The compliance statement for SNMPv2 entities which
            implement the IKE Monitoring MIB."
        MODULE      -- this module
        MANDATORY-GROUPS
            {
                endpointGroup, ikeSaGroup, ikeHelpersGroup,
                exchangeGroup, suiteGroup, phase2SaGroup,
                suiteHelperGroup, notifyGroup, ikeGlobalsGroup,
                suiteGlobalsGroup, ikeTrapArgumentGroup,
                ikeTrapEnableGroup, ikeTrapGroup
            }

        -- Allow the trap controls to be read-only

        OBJECT  ikeNegFailureTrapEnable
        MIN-ACCESS  read-only
        DESCRIPTION
            "If an implementation cannot properly secure this variable
            against unauthorized write access, it SHOULD implement it as
            read-only, to prevent the security risk of enabling the
            traps. Of course, there must be other means of controlling
            the generation of the associated trap."

        OBJECT  suiteNegFailureTrapEnable
        MIN-ACCESS  read-only
        DESCRIPTION
            "If an implementation cannot properly secure this variable
            against unauthorized write access, it SHOULD implement it as
            read-only, to prevent the security risk of enabling the
            traps. Of course, there must be other means of controlling
            the generation of the associated trap."
          -- don't require support for dns(16) address type

        -- Authors' note: The following statements are commented out,
        -- since the current SMI does not allow objects with a
        -- MAX-ACCESS clause of not-accessible to be put in groups,
        -- and objects that are not in groups cannot be in
        -- compliance statements.

     -- OBJECT  saIkeLocalIpAddressType
     -- SYNTAX INTEGER { ipv4(1), ipv6(2) }
     -- DESCRIPTION
     --     "An implementation is only required to support IPv4 and IPv6
     --      addresses."

     -- OBJECT  saIkeRemoteIpAddressType
     -- SYNTAX INTEGER { ipv4(1), ipv6(2) }
     -- DESCRIPTION
     --     "An implementation is only required to support IPv4 and IPv6
     --      addresses."

     -- OBJECT  suiteLocalAddressType
     -- SYNTAX INTEGER { ipv4(1), ipv6(2) }
     -- DESCRIPTION
     --     "An implementation is only required to support IPv4 and IPv6
     --      addresses."

     -- OBJECT  suiteRemoteAddressType
     -- SYNTAX INTEGER { ipv4(1), ipv6(2) }
     -- DESCRIPTION
     --     "An implementation is only required to support IPv4 and IPv6
     --      addresses."

     -- OBJECT  ipsecSaInSuiteDestAddrType
     -- SYNTAX INTEGER { ipv4(1), ipv6(2) }
     -- DESCRIPTION
     --     "An implementation is only required to support IPv4 and IPv6
     --      addresses."

        ::= { ikeConformance 1 }

    END


6. Security Considerations

   This MIB contains readable objects whose values provide information
   related to IPsec SAs. While some of the information is readily
   available by monitoring the traffic into an entity, other information
   may provide attackers with more information than an administrator may
   desire.

   Some of the specific concerns are related to the display of the
   algorithms and key lengths associated with encryption, and the
   feedback of error counters and traps that enable an attacker to
   quickly determine the effect of his or her attacks.

   Specific examples of this include, but are not limited to:

  o  Replay counts that tell attackers that replay values are being
     checked, and what the current window is.

  o  Specific algorithms and key lengths are displayed, giving
     attackers a better idea of how to attack.

  o  Specific traffic counts, giving attackers more information for
     traffic analysis.

   Of particular concern is the ability to disable the transmission of
   traps. The traps defined in this MIB may appear due to badly
   configured systems and transient error conditions, but they may also
   appear due to attacks. If an attacker can disable these traps, they
   reduce some of the warnings that may be provided to system
   administrators.

   It is thus important to control even GET access to these objects and
   possibly to even encrypt the values of these object when sending them
   over the network via SNMP. Not all versions of SNMP provide features
   for such a secure environment.

   SNMPv1 by itself is not a secure environment. Even if the network
   itself is secure (for example by using IPsec), even then, there is no
   control as to who on the secure network is allowed to access and
   GET/SET (read/change/create/delete) the objects in this MIB.

   It is recommended that the implementers consider the security
   features as provided by the SNMPv3 framework. Specifically, the use
   of the User-based Security Model RFC 2574 [RFC2574] and the View-
   based Access Control Model RFC 2575 [RFC2575] is recommended.

   It is then a customer/user responsibility to ensure that the SNMP
   entity giving access to an instance of this MIB, is properly
   configured to give access to the objects only to those principals
   (users) that have legitimate rights to indeed GET or SET
   (change/create/delete) them.


7. Acknowledgments

   This document was begun and mostly developed by Tim Jenkins and John
   Shriver. The editor listed for this document (Paul Hoffman) only
   sheparded the last steps before final publication.

   This document is based in part on an earlier proposal titled "draft-
   ietf-ipsec-mib-xx.txt". That series was abandoned, since it included
   application specific constructs in addition to the IPsec only
   objects.

   Portions of the original document's origins were based on the working
   paper "IP Security Management Information Base" by R. Thayer and U.
   Blumenthal.

   Significant contribution to the IPsec MIB series of documents comes
   from Charles Brooks and Carl Powell, both of GTE Internetworking.
   Obviously, the IPsec working group made signification contributions,
   including M. Daniele, T. Kivinen, J. Walker, S. Kelly, J. Leonard, S.
   Waters, M. Richardson, M. Zallocco and M. Shelor. Thanks also to J.
   Schoenwaelder and M. Baugher for comments related to indexing of the
   tables.


8. References

8.1 Normative references

   [ADDRMIB] Daniele, M., Haberman, B., Routhier, S., Schoenwaelder, J.,
           "Textual Conventions for Internet Network Addresses",
           RFC 2851, June, 2000

   [IDIMIB]Jenkins, T., Shriver, J., "ISAKMP DOI-Independent Monitoring
           MIB, draft-ietf-ipsec-isakmp-di-mon-mib, work in
           progress

   [IMMIB] Jenkins, T., Shriver, J., "IPsec Monitoring MIB, draft-ietf-
           ipsec-monitor-mib, work in progress

   [IPSECTC] Shriver, J., "IPSec DOI Textual Conventions MIB, draft-
           ietf-ipsec-doi-tc-mib, work in progress

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

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

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

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

   [RFC2578] 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

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

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

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

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

   [RFC1906] 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.

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

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

   [RFC1905] 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.

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

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

   [RFC2570] Case, J., Mundy, R., Partain, D., and B. Stewart,
           "Introduction to Version 3 of the Internet-standard Network
           Management Framework", RFC 2570, April 1999

8.2 Non-normative references

   [IKE]   Harkins, D., Carrel, D., "The Internet Key Exchange (IKE)",
           RFC2409, November 1998

   [IPCOMP]Shacham, A., Monsour, R., Pereira, R., Thomas, M., "IP
           Payload Compression Protocol (IPcomp)", RFC3173, September
           2001

   [IPDOI] Piper, D., "The Internet IP Security Domain of Interpretation
           for ISAKMP", RFC2407, November 1998

   [ISAKMP]Maughan, D., Schertler, M., Schneider, M., and Turner, J.,
           "Internet Security Association and Key Management Protocol
           (ISAKMP)", RFC2408, November 1998

   [OAKLEY]Orman, H., "The OAKLEY Key Determination Protocol", RFC2412,
           November 1998

   [SECARCH] Kent, S., Atkinson, R., "Security Architecture for the
           Internet Protocol", RFC2401, November 1998


A. Changes from -03 to -04

[[ To be removed when published as an RFC ]]

- Changed the authors' names to the editor's name.

- Added acknowledgement for the original authors.

- Minor formatting changes.

- Split the references into normative and non-normative.

NOTE: There are still lines that talk about things that need to be
changed before release of the RFC (search for "release").