NETWORK-SERVICES-MIB DEFINITIONS ::= BEGIN

IMPORTS
    OBJECT-TYPE, Counter32, Gauge32, MODULE-IDENTITY, mib-2
      FROM SNMPv2-SMI
    TimeStamp, TEXTUAL-CONVENTION
      FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP
      FROM SNMPv2-CONF
    SnmpAdminString
        FROM SNMP-FRAMEWORK-MIB;

application MODULE-IDENTITY
    LAST-UPDATED "200003030000Z"
    ORGANIZATION "IETF Mail and Directory Management Working Group"

    CONTACT-INFO
      "        Ned Freed

       Postal: Innosoft International, Inc.
               1050 Lakes Drive
               West Covina, CA 91790
               US

          Tel: +1 626 919 3600
          Fax: +1 626 919 3614

       E-Mail: ned.freed@innosoft.com"
    DESCRIPTION
      "The MIB module describing network service applications"
    REVISION "200003030000Z"
    DESCRIPTION
      "This revision, published in RFC 2788, changes a number of
       DisplayStrings to SnmpAdminStrings. Note that this change
       is not strictly supported by SMIv2.  However, the alternative
       of deprecating the old objects and defining new objects
       would have a more adverse impact on backward compatibility
       and interoperability, given the particular semantics of
       these objects. The defining reference for distinguished
       names has also been updated from RFC 1779 to RFC 2253."
    REVISION "199905120000Z"
    DESCRIPTION
      "This revision fixes a few small technical problems found
       in previous versions, mostly in regards to the conformance
       groups for different versions of this MIB.  No changes have
       been made to the objects this MIB defines since RFC 2248."
    REVISION "199708170000Z"
    DESCRIPTION
      "This revision, published in RFC 2248, adds the
       applDescription and applURL objects, adds the quiescing
       state to the applOperStatus object and renames the MIB
       from the APPLICATION-MIB to the NETWORK-SERVICE-MIB."
    REVISION "199311280000Z"
    DESCRIPTION
      "The original version of this MIB was published in RFC 1565"
    ::= {mib-2 27}

-- Textual conventions

-- DistinguishedName is used to refer to objects in the
-- directory.

DistinguishedName ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "255a"
    STATUS current
    DESCRIPTION
        "A Distinguished Name represented in accordance with
         RFC 2253, presented in the UTF-8 charset defined in
         RFC 2279."
    SYNTAX OCTET STRING (SIZE (0..255))

-- Uniform Resource Locators are stored in URLStrings.

URLString ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "255a"
    STATUS current
    DESCRIPTION
        "A Uniform Resource Locator represented in accordance
         with RFCs 1738 and 2368, presented in the NVT ASCII
         charset defined in RFC 854."
    SYNTAX OCTET STRING (SIZE (0..255))

-- The basic applTable contains a list of the application
-- entities.

applTable OBJECT-TYPE
    SYNTAX SEQUENCE OF ApplEntry
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
        "The table holding objects which apply to all different
         kinds of applications providing network services.
         Each network service application capable of being
         monitored should have a single entry in this table."
    ::= {application 1}

applEntry OBJECT-TYPE
    SYNTAX ApplEntry
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
      "An entry associated with a single network service
       application."
    INDEX {applIndex}
    ::= {applTable 1}

ApplEntry ::= SEQUENCE {
    applIndex
        INTEGER,
    applName
        SnmpAdminString,
    applDirectoryName

        DistinguishedName,
    applVersion
        SnmpAdminString,
    applUptime
        TimeStamp,
    applOperStatus
        INTEGER,
    applLastChange
        TimeStamp,
    applInboundAssociations
        Gauge32,
    applOutboundAssociations
        Gauge32,
    applAccumulatedInboundAssociations
        Counter32,
    applAccumulatedOutboundAssociations
        Counter32,
    applLastInboundActivity
        TimeStamp,
    applLastOutboundActivity
        TimeStamp,
    applRejectedInboundAssociations
        Counter32,
    applFailedOutboundAssociations
        Counter32,
    applDescription
        SnmpAdminString,
    applURL
        URLString
}

applIndex OBJECT-TYPE
    SYNTAX INTEGER (1..2147483647)
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
      "An index to uniquely identify the network service
       application. This attribute is the index used for
       lexicographic ordering of the table."
    ::= {applEntry 1}

applName OBJECT-TYPE
    SYNTAX SnmpAdminString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The name the network service application chooses to be
       known by."
    ::= {applEntry 2}

applDirectoryName OBJECT-TYPE
    SYNTAX DistinguishedName
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The Distinguished Name of the directory entry where
       static information about this application is stored.
       An empty string indicates that no information about
       the application is available in the directory."
    ::= {applEntry 3}

applVersion OBJECT-TYPE
    SYNTAX SnmpAdminString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The version of network service application software.
       This field is usually defined by the vendor of the
       network service application software."
    ::= {applEntry 4}
applUptime OBJECT-TYPE
    SYNTAX TimeStamp
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The value of sysUpTime at the time the network service
       application was last initialized.  If the application was
       last initialized prior to the last initialization of the
       network management subsystem, then this object contains
       a zero value."
    ::= {applEntry 5}

applOperStatus OBJECT-TYPE
    SYNTAX INTEGER {
      up(1),
      down(2),
      halted(3),
      congested(4),
      restarting(5),
      quiescing(6)
    }
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "Indicates the operational status of the network service
       application. 'down' indicates that the network service is

       not available. 'up' indicates that the network service
       is operational and available.  'halted' indicates that the
       service is operational but not available.  'congested'
       indicates that the service is operational but no additional
       inbound associations can be accommodated.  'restarting'
       indicates that the service is currently unavailable but is
       in the process of restarting and will be available soon.
       'quiescing' indicates that service is currently operational
       but is in the process of shutting down. Additional inbound
       associations may be rejected by applications in the
       'quiescing' state."
    ::= {applEntry 6}

applLastChange OBJECT-TYPE
    SYNTAX TimeStamp
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The value of sysUpTime at the time the network service
       application entered its current operational state.  If
       the current state was entered prior to the last
       initialization of the local network management subsystem,
       then this object contains a zero value."
    ::= {applEntry 7}

applInboundAssociations OBJECT-TYPE
    SYNTAX Gauge32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The number of current associations to the network service
       application, where it is the responder.  An inbound
       association occurs when another application successfully
       connects to this one."
    ::= {applEntry 8}

applOutboundAssociations OBJECT-TYPE
    SYNTAX Gauge32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The number of current associations to the network service
       application, where it is the initiator.  An outbound
       association occurs when this application successfully
       connects to another one."
    ::= {applEntry 9}

applAccumulatedInboundAssociations OBJECT-TYPE
    SYNTAX Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The total number of associations to the application entity
       since application initialization, where it was the responder."
    ::= {applEntry 10}

applAccumulatedOutboundAssociations OBJECT-TYPE
    SYNTAX Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The total number of associations to the application entity
       since application initialization, where it was the initiator."
    ::= {applEntry 11}

applLastInboundActivity OBJECT-TYPE
    SYNTAX TimeStamp
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The value of sysUpTime at the time this application last
       had an inbound association.  If the last association
       occurred prior to the last initialization of the network
       subsystem, then this object contains a zero value."
    ::= {applEntry 12}

applLastOutboundActivity OBJECT-TYPE
    SYNTAX TimeStamp
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The value of sysUpTime at the time this application last
       had an outbound association.  If the last association
       occurred prior to the last initialization of the network
       subsystem, then this object contains a zero value."
    ::= {applEntry 13}

applRejectedInboundAssociations OBJECT-TYPE
    SYNTAX Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The total number of inbound associations the application
       entity has rejected, since application initialization.
       Rejected associations are not counted in the accumulated
       association totals.  Note that this only counts

       associations the application entity has rejected itself;
       it does not count rejections that occur at lower layers
       of the network.  Thus, this counter may not reflect the
       true number of failed inbound associations."
    ::= {applEntry 14}

applFailedOutboundAssociations OBJECT-TYPE
    SYNTAX Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The total number associations where the application entity
       is initiator and association establishment has failed,
       since application initialization.  Failed associations are
       not counted in the accumulated association totals."
    ::= {applEntry 15}

applDescription OBJECT-TYPE
    SYNTAX SnmpAdminString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "A text description of the application.  This information
       is intended to identify and briefly describe the
       application in a status display."
    ::= {applEntry 16}

applURL OBJECT-TYPE
    SYNTAX URLString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "A URL pointing to a description of the application.
       This information is intended to identify and describe
       the application in a status display."
    ::= {applEntry 17}

-- The assocTable augments the information in the applTable
-- with information about associations.  Note that two levels
-- of compliance are specified below, depending on whether
-- association monitoring is mandated.

assocTable OBJECT-TYPE
    SYNTAX SEQUENCE OF AssocEntry
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
        "The table holding a set of all active application

         associations."
    ::= {application 2}

assocEntry OBJECT-TYPE
    SYNTAX AssocEntry
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
      "An entry associated with an association for a network
       service application."
    INDEX {applIndex, assocIndex}
    ::= {assocTable 1}

AssocEntry ::= SEQUENCE {
    assocIndex
        INTEGER,
    assocRemoteApplication
        SnmpAdminString,
    assocApplicationProtocol
        OBJECT IDENTIFIER,
    assocApplicationType
        INTEGER,
    assocDuration
        TimeStamp
}

assocIndex OBJECT-TYPE
    SYNTAX INTEGER (1..2147483647)
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
      "An index to uniquely identify each association for a network
       service application.  This attribute is the index that is
       used for lexicographic ordering of the table.  Note that the
       table is also indexed by the applIndex."
    ::= {assocEntry 1}

assocRemoteApplication OBJECT-TYPE
    SYNTAX SnmpAdminString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The name of the system running remote network service
       application.  For an IP-based application this should be
       either a domain name or IP address.  For an OSI application
       it should be the string encoded distinguished name of the
       managed object.  For X.400(1984) MTAs which do not have a
       Distinguished Name, the RFC 2156 syntax 'mta in

       globalid' used in X400-Received: fields can be used. Note,
       however, that not all connections an MTA makes are
       necessarily to another MTA."
    ::= {assocEntry 2}

assocApplicationProtocol OBJECT-TYPE
    SYNTAX OBJECT IDENTIFIER
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "An identification of the protocol being used for the
       application.  For an OSI Application, this will be the
       Application Context.  For Internet applications, OID
       values of the form {applTCPProtoID port} or {applUDPProtoID
       port} are used for TCP-based and UDP-based protocols,
       respectively. In either case 'port' corresponds to the
       primary port number being used by the protocol. The
       usual IANA procedures may be used to register ports for
       new protocols."
    ::= {assocEntry 3}

assocApplicationType OBJECT-TYPE
    SYNTAX INTEGER {
        uainitiator(1),
        uaresponder(2),
        peerinitiator(3),
        peerresponder(4)}
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "This indicates whether the remote application is some type of
       client making use of this network service (e.g., a Mail User
       Agent) or a server acting as a peer. Also indicated is whether
       the remote end initiated an incoming connection to the network
       service or responded to an outgoing connection made by the
       local application.  MTAs and messaging gateways are
       considered to be peers for the purposes of this variable."
    ::= {assocEntry 4}

assocDuration OBJECT-TYPE
    SYNTAX TimeStamp
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
      "The value of sysUpTime at the time this association was
       started.  If this association started prior to the last
       initialization of the network subsystem, then this
       object contains a zero value."
    ::= {assocEntry 5}

-- Conformance information

applConformance OBJECT IDENTIFIER ::= {application 3}

applGroups      OBJECT IDENTIFIER ::= {applConformance 1}
applCompliances OBJECT IDENTIFIER ::= {applConformance 2}

-- Compliance statements

applCompliance MODULE-COMPLIANCE
    STATUS obsolete
    DESCRIPTION
      "The compliance statement for RFC 1565 implementations
       which support the Network Services Monitoring MIB
       for basic monitoring of network service applications.
       This is the basic compliance statement for RFC 1565."
    MODULE
      MANDATORY-GROUPS {applRFC1565Group}
    ::= {applCompliances 1}

assocCompliance MODULE-COMPLIANCE
    STATUS obsolete
    DESCRIPTION
      "The compliance statement for RFC 1565 implementations
       which support the Network Services Monitoring MIB
       for basic monitoring of network service applications
       and their associations."
    MODULE
      MANDATORY-GROUPS {applRFC1565Group, assocRFC1565Group}
    ::= {applCompliances 2}

applRFC2248Compliance MODULE-COMPLIANCE
    STATUS deprecated
    DESCRIPTION
      "The compliance statement for RFC 2248 implementations
       which support the Network Services Monitoring MIB
       for basic monitoring of network service applications."
    MODULE
      MANDATORY-GROUPS {applRFC2248Group}
    ::= {applCompliances 3}

assocRFC2248Compliance MODULE-COMPLIANCE
    STATUS deprecated
    DESCRIPTION
      "The compliance statement for RFC 2248 implementations

       which support the Network Services Monitoring MIB for
       basic monitoring of network service applications and
       their associations."
    MODULE
      MANDATORY-GROUPS {applRFC2248Group, assocRFC2248Group}
    ::= {applCompliances 4}

applRFC2788Compliance MODULE-COMPLIANCE
    STATUS current
    DESCRIPTION
      "The compliance statement for RFC 2788 implementations
       which support the Network Services Monitoring MIB
       for basic monitoring of network service applications."
    MODULE
      MANDATORY-GROUPS {applRFC2788Group}
    ::= {applCompliances 5}

assocRFC2788Compliance MODULE-COMPLIANCE
    STATUS current
    DESCRIPTION
      "The compliance statement for RFC 2788 implementations
       which support the Network Services Monitoring MIB for
       basic monitoring of network service applications and
       their associations."
    MODULE
      MANDATORY-GROUPS {applRFC2788Group, assocRFC2788Group}
    ::= {applCompliances 6}

-- Units of conformance

applRFC1565Group OBJECT-GROUP
    OBJECTS {
      applName, applVersion, applUptime, applOperStatus,
      applLastChange, applInboundAssociations,
      applOutboundAssociations, applAccumulatedInboundAssociations,
      applAccumulatedOutboundAssociations, applLastInboundActivity,
      applLastOutboundActivity, applRejectedInboundAssociations,
      applFailedOutboundAssociations}
    STATUS obsolete
    DESCRIPTION
      "A collection of objects providing basic monitoring of
       network service applications.  This is the original set
       of such objects defined in RFC 1565."
    ::= {applGroups 7}

assocRFC1565Group OBJECT-GROUP
    OBJECTS {

      assocRemoteApplication, assocApplicationProtocol,
      assocApplicationType, assocDuration}
    STATUS obsolete
    DESCRIPTION
      "A collection of objects providing basic monitoring of
       network service applications' associations.  This is the
       original set of such objects defined in RFC 1565."
    ::= {applGroups 2}

applRFC2248Group OBJECT-GROUP
    OBJECTS {
      applName, applVersion, applUptime, applOperStatus,
      applLastChange, applInboundAssociations,
      applOutboundAssociations, applAccumulatedInboundAssociations,
      applAccumulatedOutboundAssociations, applLastInboundActivity,
      applLastOutboundActivity, applRejectedInboundAssociations,
      applFailedOutboundAssociations, applDescription, applURL}
    STATUS deprecated
    DESCRIPTION
      "A collection of objects providing basic monitoring of
       network service applications.  This group was originally
       defined in RFC 2248; note that applDirectoryName is
       missing."
    ::= {applGroups 3}

assocRFC2248Group OBJECT-GROUP
    OBJECTS {
      assocRemoteApplication, assocApplicationProtocol,
      assocApplicationType, assocDuration}
    STATUS deprecated
    DESCRIPTION
      "A collection of objects providing basic monitoring of
       network service applications' associations.  This group
       was originally defined by RFC 2248."
    ::= {applGroups 4}

applRFC2788Group OBJECT-GROUP
    OBJECTS {
      applName, applDirectoryName, applVersion, applUptime,
      applOperStatus, applLastChange, applInboundAssociations,
      applOutboundAssociations, applAccumulatedInboundAssociations,
      applAccumulatedOutboundAssociations, applLastInboundActivity,
      applLastOutboundActivity, applRejectedInboundAssociations,
      applFailedOutboundAssociations, applDescription, applURL}
    STATUS current
    DESCRIPTION
      "A collection of objects providing basic monitoring of
       network service applications.  This is the appropriate

       group for RFC 2788 -- it adds the applDirectoryName object
       missing in RFC 2248."
    ::= {applGroups 5}

assocRFC2788Group OBJECT-GROUP
    OBJECTS {
      assocRemoteApplication, assocApplicationProtocol,
      assocApplicationType, assocDuration}
    STATUS current
    DESCRIPTION
      "A collection of objects providing basic monitoring of
       network service applications' associations.  This is
       the appropriate group for RFC 2788."
    ::= {applGroups 6}

-- OIDs of the form {applTCPProtoID port} are intended to be used
-- for TCP-based protocols that don't have OIDs assigned by other
-- means. {applUDPProtoID port} serves the same purpose for
-- UDP-based protocols. In either case 'port' corresponds to
-- the primary port number being used by the protocol. For example,
-- assuming no other OID is assigned for SMTP, an OID of
-- {applTCPProtoID 25} could be used, since SMTP is a TCP-based
-- protocol that uses port 25 as its primary port.

applTCPProtoID OBJECT IDENTIFIER ::= {application 4}
applUDPProtoID OBJECT IDENTIFIER ::= {application 5}

END
