RFC 3014 PROPOSED STANDARD SNMP · NETWORK MANAGEMENT · MIB

Notification Log MIB

An SNMP MIB that keeps a log of notifications so managers can catch up on alerts they missed.

On rfc-editor.org ↗
PUBLISHED
November 2000
AUTHORS
R. Kavasseri
STREAM
IETF
MIB LOCATION
mib-2 92 (notificationLogMIB)
DEFAULT AGE-OUT
1440 minutes (24 hours)
LOG NAME LENGTH
0 to 32 characters
LOG INDEX RANGE
1 to 4294967295
VALUE TYPES
9
DOI
10.17487/RFC3014

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                            Editor of this version:
Request for Comments: 3014                                  R. Kavasseri
Category: Standards Track                            Cisco Systems, Inc.
                                             Author of previous version:
                                                              B. Stewart
                                                           November 2000


                          Notification Log MIB

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

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

Abstract

   This memo defines a portion of the Management Information Base (MIB)
   for use with network management protocols in the Internet community.
   In particular, it describes managed objects used for logging Simple
   Network Management Protocol (SNMP) Notifications.

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119.

Table of Contents

   1 The SNMP Management Framework .................................  2
   2 Overview ......................................................  3
   2.1 Environment .................................................  3
   2.1.1 SNMP Engines and Contexts .................................  4
   2.1.2 Security ..................................................  4
   2.2 Structure ...................................................  5
   2.2.1 Configuration .............................................  5
   2.2.2 Statistics ................................................  6
   2.2.3 Log .......................................................  6
   2.3 Example .....................................................  6
   3 Definitions ...................................................  7
   4 Intellectual Property ......................................... 23
   5 References .................................................... 23
   6 Security Considerations ....................................... 25
   7 Author's Address .............................................. 25
   8 Full Copyright Statement ...................................... 26

1.  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], STD 58, RFC 2579 [RFC2579] and
         STD 58, 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.  Overview

   Systems that support SNMP often need a mechanism for recording
   Notification information as a hedge against lost Notifications,
   whether those are Traps or Informs [RFC1905] that exceed
   retransmission limits.  This MIB therefore provides common
   infrastructure for other MIBs in the form of a local logging
   function.  It is intended primarily for senders of Notifications but
   could be used also by receivers.

   Given the Notification Log MIB, individual MIBs bear less
   responsibility to record the transient information associated with an
   event against the possibility that the Notification message is lost,
   and applications can poll the log to verify that they have not missed
   important Notifications.

2.1.  Environment

   The overall environmental concerns for the MIB are:

      o  SNMP Engines and Contexts

      o  Security

2.1.1.  SNMP Engines and Contexts

   There are two distinct information flows from multiple notification
   originators that one may log.  The first is the notifications that
   are received (from one or more SNMP engines) for logging as SNMP
   informs and traps.  The other comprises notifications delivered to an
   SNMP engine at the interface to the notification originator (using a
   notification mechanism other than SNMP informs or traps).  The latter
   information flow (using a notification mechanism other than SNMP
   informs or traps) is modeled here as the SNMP engine (which maintains
   the log) sending a notification to itself.  The remainder of this
   section discusses the handling of the former information flow -
   notifications (received in the form of SNMP informs or traps) from
   multiple SNMP engines.

   As described in the SNMP architecture [RFC2571], a given system may
   support multiple SNMP engines operating independently of one another,
   each with its own SNMP engine identification.  Furthermore, within
   the purview of a given engine there may be multiple named management
   contexts supporting overlapping or disjoint sets of MIB objects and
   Notifications.  Thus, understanding a particular Notification
   requires knowing the SNMP engine and management context from whence
   it came.

   To provide the necessary source information for a logged
   Notification, the MIB includes objects to record that Notification's
   source SNMP engine ID and management context name.

2.1.2.  Security

   Security for Notifications is awkward since access control for the
   objects in the Notification can be checked only where the
   Notification is created.  Thus such checking is possible only for
   locally-generated Notifications, and even then only when security
   credentials are available.

   For the purpose of this discussion, "security credentials" means the
   input values for the abstract service interface function
   isAccessAllowed [RFC2571] and using those credentials means
   conceptually using that function to see that those credentials allow
   access to the MIB objects in question, operating as for a
   Notification Originator in [RFC2573].

   The Notification Log MIB has the notion of a "named log."  By using
   log names and view-based access control [RFC2575] a network
   administrator can provide different access for different users.  When
   an application creates a named log the security credentials of the
   creator stay associated with that log.

   A managed system with fewer resources MAY disallow the creation of
   named logs, providing only the default, null-named log.  Such a log
   has no implicit security credentials for Notification object access
   control and Notifications are put into it with no further checking.

   When putting locally-generated Notifications into a named log, the
   managed system MUST use the security credentials associated with that
   log and MUST apply the same access control rules as described for a
   Notification Originator in [RFC2573].

   The managed system SHOULD NOT apply access control when adding
   remotely-generated Notifications into either a named log or the
   default, null-named log.  In those cases the security of the
   information in the log SHOULD be left to the normal, overall access
   control for the log itself.

   The Notification Log MIB allows applications to set the maximum
   number of Notifications that can be logged, using
   nlmConfigGlobalEntryLimit.  Similarly, an application can set the
   maximum age using nlmConfigGlobalAgeOut, after which older
   Notifications MAY be timed out.  Please be aware that contention
   between multiple applications trying to set these objects to
   different values MAY affect the reliability and completeness of data
   seen by each application, i.e., it is possible that one application
   may change the value of either of these objects, resulting in some
   Notifications being deleted before the other applications have had a
   chance to see them.  This could be used to orchestrate a denial-of-
   service attack.  Methods for countering such an attack are for
   further study.

2.2.  Structure

   The MIB has the following sections:

      o  Configuration -- control over how much the log can hold and
         what Notifications are to be logged.

      o  Statistics -- indications of logging activity.

      o  Log -- the Notifications themselves.

2.2.1.  Configuration

   The configuration section contains objects to manage resource use by
   the MIB.

   This section also contains a table to specify what logs exist and how
   they operate.  Deciding which Notifications are to be logged depends
   on filters defined in the the snmpNotifyFilterTable in the standard
   SNMP Notification MIB [RFC2573] identified by the initial index
   (snmpNotifyFilterName) from that table.

2.2.2.  Statistics

   The statistics section contains counters for Notifications logged and
   discarded, supplying a means to understand the results of log
   capacity configuration and resource problems.

2.2.3.  Log

   The log contains the Notifications and the objects that came in their
   variable binding list, indexed by an integer that reflects when the
   entry was made.  An application that wants to collect all logged
   Notifications or to know if it may have missed any can keep track of
   the highest index it has retrieved and start from there on its next
   poll, checking sysUpTime for a discontinuity that would have reset
   the index and perhaps have lost entries.

   Variables are in a table indexed by Notification index and variable
   index within that Notification.  The values are kept as a
   "discriminated union," with one value object per variable.  Exactly
   which value object is instantiated depends on the SNMP data type of
   the variable, with a separate object of appropriate type for each
   distinct SNMP data type.

   An application can thus reconstruct the information from the
   Notification PDU from what is recorded in the log.

2.3.  Example

   Following is an example configuration of a named log for logging only
   linkUp and linkDown Notifications.

   In nlmConfigLogTable:

      nlmConfigLogFilterName.5."links"    = "link-status"
      nlmConfigLogEntryLimit.5."links"    = 0
      nlmConfigLogAdminStatus.5."links"   = enabled
      nlmConfigLogOperStatus.5."links"    = operational
      nlmConfigLogStorageType.5."links"   = nonVolatile
      nlmConfigLogEntryStatus.5."links"   = active

   Note that snmpTraps is:

      iso.org.dod.internet.snmpV2.snmpModules.snmpMIB.snmpMIBObjects.5
   Or numerically:

      1.3.6.1.6.3.1.1.5

   And linkDown is snmpTraps.3 and linkUp is snmpTraps.4.

   So to allow the two Notifications in snmpNotifyFilterTable:

     snmpNotifyFilterMask.11."link-status".1.3.6.1.6.3.1.1.5.3 = ''H
     snmpNotifyFilterType.11."link-status".1.3.6.1.6.3.1.1.5.3 = include
     snmpNotifyFilterStorageType.11."link-status".1.3.6.1.6.3.1.1.5.3
      = nonVolatile
     snmpNotifyFilterRowStatus.11."link-status".1.3.6.1.6.3.1.1.5.3
      = active

     snmpNotifyFilterMask.11."link-status".1.3.6.1.6.3.1.1.5.4 = ''H
     snmpNotifyFilterType.11."link-status".1.3.6.1.6.3.1.1.5.4 = include
     snmpNotifyFilterStorageType.11."link-status".1.3.6.1.6.3.1.1.5.4
      = nonVolatile
     snmpNotifyFilterRowStatus.11."link-status".1.3.6.1.6.3.1.1.5.4
      = active

3.  Definitions

NOTIFICATION-LOG-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    Integer32, Unsigned32,
    TimeTicks, Counter32, Counter64,
    IpAddress, Opaque, mib-2       FROM SNMPv2-SMI
    TimeStamp, DateAndTime,
    StorageType, RowStatus,
    TAddress, TDomain              FROM SNMPv2-TC
    SnmpAdminString, SnmpEngineID  FROM SNMP-FRAMEWORK-MIB
    MODULE-COMPLIANCE, OBJECT-GROUP     FROM SNMPv2-CONF;

notificationLogMIB MODULE-IDENTITY
    LAST-UPDATED "200011270000Z"            -- 27 November 2000
    ORGANIZATION "IETF Distributed Management Working Group"
    CONTACT-INFO "Ramanathan Kavasseri
                  Cisco Systems, Inc.
                  170 West Tasman Drive,
                  San Jose CA 95134-1706.
                  Phone: +1 408 527 2446
                  Email: ramk@cisco.com"
    DESCRIPTION
     "The MIB module for logging SNMP Notifications, that is, Traps
     and Informs."
-- Revision History

       REVISION     "200011270000Z"            -- 27 November 2000
       DESCRIPTION  "This is the initial version of this MIB.
               Published as RFC 3014"
    ::= { mib-2 92 }


notificationLogMIBObjects OBJECT IDENTIFIER ::= { notificationLogMIB 1 }

nlmConfig OBJECT IDENTIFIER ::= { notificationLogMIBObjects 1 }
nlmStats  OBJECT IDENTIFIER ::= { notificationLogMIBObjects 2 }
nlmLog         OBJECT IDENTIFIER ::= { notificationLogMIBObjects 3 }

--
-- Configuration Section
--

nlmConfigGlobalEntryLimit OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
     "The maximum number of notification entries that may be held
     in nlmLogTable for all nlmLogNames added together.  A particular
     setting does not guarantee that much data can be held.

     If an application changes the limit while there are
     Notifications in the log, the oldest Notifications MUST be
     discarded to bring the log down to the new limit - thus the
     value of nlmConfigGlobalEntryLimit MUST take precedence over
     the values of nlmConfigGlobalAgeOut and nlmConfigLogEntryLimit,
     even if the Notification being discarded has been present for
     fewer minutes than the value of nlmConfigGlobalAgeOut, or if
     the named log has fewer entries than that specified in
     nlmConfigLogEntryLimit.

     A value of 0 means no limit.

     Please be aware that contention between multiple managers
     trying to set this object to different values MAY affect the
     reliability and completeness of data seen by each manager."
    DEFVAL { 0 }
    ::= { nlmConfig 1 }

nlmConfigGlobalAgeOut OBJECT-TYPE
    SYNTAX      Unsigned32
    UNITS       "minutes"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
     "The number of minutes a Notification SHOULD be kept in a log
     before it is automatically removed.

     If an application changes the value of nlmConfigGlobalAgeOut,
     Notifications older than the new time MAY be discarded to meet the
     new time.

     A value of 0 means no age out.

     Please be aware that contention between multiple managers
     trying to set this object to different values MAY affect the
     reliability and completeness of data seen by each manager."
    DEFVAL { 1440 }  -- 24 hours
    ::= { nlmConfig 2 }


--
-- Basic Log Configuration Table
--

nlmConfigLogTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF NlmConfigLogEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A table of logging control entries."
    ::= { nlmConfig 3 }

nlmConfigLogEntry OBJECT-TYPE
    SYNTAX      NlmConfigLogEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A logging control entry.  Depending on the entry's storage type
     entries may be supplied by the system or created and deleted by
     applications using nlmConfigLogEntryStatus."
    INDEX      { nlmLogName }
    ::= { nlmConfigLogTable 1 }

NlmConfigLogEntry ::= SEQUENCE {
    nlmLogName           SnmpAdminString,
    nlmConfigLogFilterName    SnmpAdminString,
    nlmConfigLogEntryLimit    Unsigned32,
    nlmConfigLogAdminStatus   INTEGER,
    nlmConfigLogOperStatus    INTEGER,
    nlmConfigLogStorageType   StorageType,
    nlmConfigLogEntryStatus   RowStatus
    }

nlmLogName OBJECT-TYPE
    SYNTAX     SnmpAdminString (SIZE(0..32))
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
     "The name of the log.

     An implementation may allow multiple named logs, up to some
     implementation-specific limit (which may be none).  A
     zero-length log name is reserved for creation and deletion by
     the managed system, and MUST be used as the default log name by
     systems that do not support named logs."
    ::= { nlmConfigLogEntry 1 }

nlmConfigLogFilterName OBJECT-TYPE
    SYNTAX     SnmpAdminString (SIZE(0..32))
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
     "A value of snmpNotifyFilterProfileName as used as an index
     into the snmpNotifyFilterTable in the SNMP Notification MIB,
     specifying the locally or remotely originated Notifications
     to be filtered out and not logged in this log.

     A zero-length value or a name that does not identify an
     existing entry in snmpNotifyFilterTable indicate no
     Notifications are to be logged in this log."
    DEFVAL { ''H }
    ::= { nlmConfigLogEntry 2 }

nlmConfigLogEntryLimit OBJECT-TYPE
    SYNTAX     Unsigned32
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
     "The maximum number of notification entries that can be held in
     nlmLogTable for this named log.  A particular setting does not
     guarantee that that much data can be held.

     If an application changes the limit while there are
     Notifications in the log, the oldest Notifications are discarded
     to bring the log down to the new limit.

     A value of 0 indicates no limit.

     Please be aware that contention between multiple managers
     trying to set this object to different values MAY affect the
     reliability and completeness of data seen by each manager."
    DEFVAL { 0 }
    ::= { nlmConfigLogEntry 3 }

nlmConfigLogAdminStatus OBJECT-TYPE
    SYNTAX     INTEGER { enabled(1), disabled(2) }
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
     "Control to enable or disable the log without otherwise
     disturbing the log's entry.

     Please be aware that contention between multiple managers
     trying to set this object to different values MAY affect the
     reliability and completeness of data seen by each manager."
    DEFVAL { enabled }
    ::= { nlmConfigLogEntry 4 }

nlmConfigLogOperStatus OBJECT-TYPE
    SYNTAX     INTEGER { disabled(1), operational(2), noFilter(3) }
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
     "The operational status of this log:

          disabled  administratively disabled

          operational    administratively enabled and working

          noFilter  administratively enabled but either
                    nlmConfigLogFilterName is zero length
                    or does not name an existing entry in
                    snmpNotifyFilterTable"
    ::= { nlmConfigLogEntry 5 }

nlmConfigLogStorageType OBJECT-TYPE
    SYNTAX     StorageType
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
     "The storage type of this conceptual row."
    ::= { nlmConfigLogEntry 6 }

nlmConfigLogEntryStatus OBJECT-TYPE

    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
     "Control for creating and deleting entries.  Entries may be
     modified while active.

     For non-null-named logs, the managed system records the security
     credentials from the request that sets nlmConfigLogStatus
     to 'active' and uses that identity to apply access control to
     the objects in the Notification to decide if that Notification
     may be logged."
    ::= { nlmConfigLogEntry 7 }

--
-- Statistics Section
--

nlmStatsGlobalNotificationsLogged OBJECT-TYPE
    SYNTAX      Counter32
    UNITS       "notifications"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The number of Notifications put into the nlmLogTable.  This
     counts a Notification once for each log entry, so a Notification
      put into multiple logs is counted multiple times."
    ::= { nlmStats 1 }

nlmStatsGlobalNotificationsBumped OBJECT-TYPE
    SYNTAX      Counter32
    UNITS       "notifications"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The number of log entries discarded to make room for a new entry
     due to lack of resources or the value of nlmConfigGlobalEntryLimit
     or nlmConfigLogEntryLimit.  This does not include entries discarded
     due to the value of nlmConfigGlobalAgeOut."
    ::= { nlmStats 2 }

--
-- Log Statistics Table
--

nlmStatsLogTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF NlmStatsLogEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A table of Notification log statistics entries."
    ::= { nlmStats 3 }

nlmStatsLogEntry OBJECT-TYPE
    SYNTAX      NlmStatsLogEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A Notification log statistics entry."
    AUGMENTS { nlmConfigLogEntry }
    ::= { nlmStatsLogTable 1 }

NlmStatsLogEntry ::= SEQUENCE {
    nlmStatsLogNotificationsLogged Counter32,
    nlmStatsLogNotificationsBumped Counter32
}

nlmStatsLogNotificationsLogged OBJECT-TYPE
    SYNTAX      Counter32
    UNITS       "notifications"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The number of Notifications put in this named log."
    ::= { nlmStatsLogEntry 1 }

nlmStatsLogNotificationsBumped OBJECT-TYPE
    SYNTAX      Counter32
    UNITS       "notifications"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The number of log entries discarded from this named log to make
     room for a new entry due to lack of resources or the value of
     nlmConfigGlobalEntryLimit or nlmConfigLogEntryLimit.  This does not
     include entries discarded due to the value of
     nlmConfigGlobalAgeOut."
    ::= { nlmStatsLogEntry 2 }


--
-- Log Section
--

--
-- Log Table

--

nlmLogTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF NlmLogEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A table of Notification log entries.

     It is an implementation-specific matter whether entries in this
     table are preserved across initializations of the management
     system.  In general one would expect that they are not.

     Note that keeping entries across initializations of the
     management system leads to some confusion with counters and
     TimeStamps, since both of those are based on sysUpTime, which
     resets on management initialization.  In this situation,
     counters apply only after the reset and nlmLogTime for entries
     made before the reset MUST be set to 0."
    ::= { nlmLog 1 }

nlmLogEntry OBJECT-TYPE
    SYNTAX      NlmLogEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A Notification log entry.

     Entries appear in this table when Notifications occur and pass
     filtering by nlmConfigLogFilterName and access control.  They are
     removed to make way for new entries due to lack of resources or
     the values of nlmConfigGlobalEntryLimit, nlmConfigGlobalAgeOut, or
     nlmConfigLogEntryLimit.

     If adding an entry would exceed nlmConfigGlobalEntryLimit or system
     resources in general, the oldest entry in any log SHOULD be removed
     to make room for the new one.

     If adding an entry would exceed nlmConfigLogEntryLimit the oldest
     entry in that log SHOULD be removed to make room for the new one.

     Before the managed system puts a locally-generated Notification
     into a non-null-named log it assures that the creator of the log
     has access to the information in the Notification.  If not it
     does not log that Notification in that log."
    INDEX       { nlmLogName, nlmLogIndex }
    ::= { nlmLogTable 1 }

NlmLogEntry ::= SEQUENCE {
    nlmLogIndex                Unsigned32,
    nlmLogTime                 TimeStamp,
    nlmLogDateAndTime          DateAndTime,
    nlmLogEngineID             SnmpEngineID,
    nlmLogEngineTAddress       TAddress,
    nlmLogEngineTDomain        TDomain,
    nlmLogContextEngineID      SnmpEngineID,
    nlmLogContextName          SnmpAdminString,
    nlmLogNotificationID       OBJECT IDENTIFIER
}

nlmLogIndex OBJECT-TYPE
    SYNTAX     Unsigned32 (1..4294967295)
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
     "A monotonically increasing integer for the sole purpose of
     indexing entries within the named log.  When it reaches the
     maximum value, an extremely unlikely event, the agent wraps the
     value back to 1."
    ::= { nlmLogEntry 1 }

nlmLogTime OBJECT-TYPE
    SYNTAX      TimeStamp
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value of sysUpTime when the entry was placed in the log. If
     the entry occurred before the most recent management system
     initialization this object value MUST be set to zero."
    ::= { nlmLogEntry 2 }

nlmLogDateAndTime OBJECT-TYPE
    SYNTAX      DateAndTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The local date and time when the entry was logged, instantiated
     only by systems that have date and time capability."
    ::= { nlmLogEntry 3 }

nlmLogEngineID OBJECT-TYPE
    SYNTAX      SnmpEngineID
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The identification of the SNMP engine at which the Notification
     originated.

     If the log can contain Notifications from only one engine
     or the Trap is in SNMPv1 format, this object is a zero-length
     string."
    ::= { nlmLogEntry 4 }

nlmLogEngineTAddress OBJECT-TYPE
    SYNTAX      TAddress
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The transport service address of the SNMP engine from which the
     Notification was received, formatted according to the corresponding
     value of nlmLogEngineTDomain. This is used to identify the source
     of an SNMPv1 trap, since an nlmLogEngineId cannot be extracted
     from the SNMPv1 trap pdu.

     This object MUST always be instantiated, even if the log
     can contain Notifications from only one engine.

     Please be aware that the nlmLogEngineTAddress may not uniquely
     identify the SNMP engine from which the Notification was received.
     For example, if an SNMP engine uses DHCP or NAT to obtain
     ip addresses, the address it uses may be shared with other
     network devices, and hence will not uniquely identify the
     SNMP engine."
    ::= { nlmLogEntry 5 }

nlmLogEngineTDomain OBJECT-TYPE
    SYNTAX      TDomain
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "Indicates the kind of transport service by which a Notification
     was received from an SNMP engine. nlmLogEngineTAddress contains
     the transport service address of the SNMP engine from which
     this Notification was received.

     Possible values for this object are presently found in the
     Transport Mappings for SNMPv2 document (RFC 1906 [8])."
    ::= { nlmLogEntry 6 }

nlmLogContextEngineID OBJECT-TYPE
    SYNTAX      SnmpEngineID
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "If the Notification was received in a protocol which has a
      contextEngineID element like SNMPv3, this object has that value.
      Otherwise its value is a zero-length string."
     ::= { nlmLogEntry 7 }

nlmLogContextName OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The name of the SNMP MIB context from which the Notification came.
     For SNMPv1 Traps this is the community string from the Trap."
    ::= { nlmLogEntry 8 }

nlmLogNotificationID OBJECT-TYPE
    SYNTAX      OBJECT IDENTIFIER
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The NOTIFICATION-TYPE object identifier of the Notification that
     occurred."
    ::= { nlmLogEntry 9 }

--
-- Log Variable Table
--

nlmLogVariableTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF NlmLogVariableEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A table of variables to go with Notification log entries."
    ::= { nlmLog 2 }

nlmLogVariableEntry OBJECT-TYPE
    SYNTAX      NlmLogVariableEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
     "A Notification log entry variable.

     Entries appear in this table when there are variables in
     the varbind list of a Notification in nlmLogTable."
    INDEX       { nlmLogName, nlmLogIndex, nlmLogVariableIndex }
    ::= { nlmLogVariableTable 1 }

NlmLogVariableEntry ::= SEQUENCE {

    nlmLogVariableIndex              Unsigned32,
    nlmLogVariableID                 OBJECT IDENTIFIER,
    nlmLogVariableValueType          INTEGER,
    nlmLogVariableCounter32Val       Counter32,
    nlmLogVariableUnsigned32Val      Unsigned32,
    nlmLogVariableTimeTicksVal       TimeTicks,
    nlmLogVariableInteger32Val       Integer32,
    nlmLogVariableOctetStringVal     OCTET STRING,
    nlmLogVariableIpAddressVal       IpAddress,
    nlmLogVariableOidVal             OBJECT IDENTIFIER,
    nlmLogVariableCounter64Val       Counter64,
    nlmLogVariableOpaqueVal          Opaque
}

nlmLogVariableIndex OBJECT-TYPE
    SYNTAX     Unsigned32 (1..4294967295)
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
     "A monotonically increasing integer, starting at 1 for a given
     nlmLogIndex, for indexing variables within the logged
     Notification."
    ::= { nlmLogVariableEntry 1 }

nlmLogVariableID OBJECT-TYPE
    SYNTAX     OBJECT IDENTIFIER
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
     "The variable's object identifier."
    ::= { nlmLogVariableEntry 2 }

nlmLogVariableValueType OBJECT-TYPE
    SYNTAX      INTEGER { counter32(1), unsigned32(2), timeTicks(3),
                 integer32(4), ipAddress(5), octetString(6),
                 objectId(7), counter64(8), opaque(9) }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The type of the value.  One and only one of the value
     objects that follow must be instantiated, based on this type."
    ::= { nlmLogVariableEntry 3 }

nlmLogVariableCounter32Val OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'counter32'."
    ::= { nlmLogVariableEntry 4 }

nlmLogVariableUnsigned32Val OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'unsigned32'."
    ::= { nlmLogVariableEntry 5 }

nlmLogVariableTimeTicksVal OBJECT-TYPE
    SYNTAX      TimeTicks
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'timeTicks'."
    ::= { nlmLogVariableEntry 6 }

nlmLogVariableInteger32Val OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'integer32'."
    ::= { nlmLogVariableEntry 7 }

nlmLogVariableOctetStringVal OBJECT-TYPE
    SYNTAX      OCTET STRING
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'octetString'."
    ::= { nlmLogVariableEntry 8 }

nlmLogVariableIpAddressVal OBJECT-TYPE
    SYNTAX      IpAddress
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'ipAddress'.
     Although this seems to be unfriendly for IPv6, we
     have to recognize that there are a number of older
     MIBs that do contain an IPv4 format address, known
     as IpAddress.

     IPv6 addresses are represented using TAddress or
     InetAddress, and so the underlying datatype is
     OCTET STRING, and their value would be stored in
     the nlmLogVariableOctetStringVal column."
    ::= { nlmLogVariableEntry 9 }

nlmLogVariableOidVal OBJECT-TYPE
    SYNTAX      OBJECT IDENTIFIER
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'objectId'."
    ::= { nlmLogVariableEntry 10 }

nlmLogVariableCounter64Val OBJECT-TYPE
    SYNTAX      Counter64
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'counter64'."
    ::= { nlmLogVariableEntry 11 }

nlmLogVariableOpaqueVal OBJECT-TYPE
    SYNTAX      Opaque
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
     "The value when nlmLogVariableType is 'opaque'."
    ::= { nlmLogVariableEntry 12 }


--
-- Conformance
--

notificationLogMIBConformance OBJECT IDENTIFIER ::=
    { notificationLogMIB 3 }
notificationLogMIBCompliances OBJECT IDENTIFIER ::=
    { notificationLogMIBConformance 1 }
notificationLogMIBGroups      OBJECT IDENTIFIER ::=
    { notificationLogMIBConformance 2 }

-- Compliance

notificationLogMIBCompliance MODULE-COMPLIANCE
     STATUS current
     DESCRIPTION
          "The compliance statement for entities which implement
          the Notification Log MIB."
     MODULE    -- this module

          MANDATORY-GROUPS {
               notificationLogConfigGroup,
               notificationLogStatsGroup,
               notificationLogLogGroup
          }

     OBJECT nlmConfigGlobalEntryLimit
         SYNTAX Unsigned32 (0..4294967295)
         MIN-ACCESS read-only
         DESCRIPTION
          "Implementations may choose a limit and not allow it to be
          changed or may enforce an upper or lower bound on the
          limit."

     OBJECT nlmConfigLogEntryLimit
         SYNTAX Unsigned32 (0..4294967295)
         MIN-ACCESS read-only
         DESCRIPTION
          "Implementations may choose a limit and not allow it to be
          changed or may enforce an upper or lower bound on the
          limit."

     OBJECT nlmConfigLogEntryStatus
         MIN-ACCESS read-only
         DESCRIPTION
          "Implementations may disallow the creation of named logs."

     GROUP notificationLogDateGroup
         DESCRIPTION
          "This group is mandatory on systems that keep wall clock
          date and time and should not be implemented on systems that
          do not have a wall clock date."

     ::= { notificationLogMIBCompliances 1 }

-- Units of Conformance

notificationLogConfigGroup OBJECT-GROUP
     OBJECTS {
          nlmConfigGlobalEntryLimit,
          nlmConfigGlobalAgeOut,
          nlmConfigLogFilterName,
          nlmConfigLogEntryLimit,
          nlmConfigLogAdminStatus,
          nlmConfigLogOperStatus,
          nlmConfigLogStorageType,
          nlmConfigLogEntryStatus
     }
     STATUS current
     DESCRIPTION
          "Notification log configuration management."
     ::= { notificationLogMIBGroups 1 }

notificationLogStatsGroup OBJECT-GROUP
     OBJECTS {
          nlmStatsGlobalNotificationsLogged,
          nlmStatsGlobalNotificationsBumped,
          nlmStatsLogNotificationsLogged,
          nlmStatsLogNotificationsBumped
     }
     STATUS current
     DESCRIPTION
          "Notification log statistics."
     ::= { notificationLogMIBGroups 2 }

notificationLogLogGroup OBJECT-GROUP
     OBJECTS {
          nlmLogTime,
          nlmLogEngineID,
          nlmLogEngineTAddress,
          nlmLogEngineTDomain,
          nlmLogContextEngineID,
          nlmLogContextName,
          nlmLogNotificationID,
          nlmLogVariableID,
          nlmLogVariableValueType,
          nlmLogVariableCounter32Val,
          nlmLogVariableUnsigned32Val,
          nlmLogVariableTimeTicksVal,
          nlmLogVariableInteger32Val,
          nlmLogVariableOctetStringVal,
          nlmLogVariableIpAddressVal,
          nlmLogVariableOidVal,
          nlmLogVariableCounter64Val,
          nlmLogVariableOpaqueVal
     }
     STATUS current
     DESCRIPTION
          "Notification log data."
     ::= { notificationLogMIBGroups 3 }

notificationLogDateGroup OBJECT-GROUP
     OBJECTS {
          nlmLogDateAndTime
     }
     STATUS current
     DESCRIPTION
          "Conditionally mandatory notification log data.
          This group is mandatory on systems that keep wall
          clock date and time and should not be implemented
          on systems that do not have a wall clock date."
     ::= { notificationLogMIBGroups 4 }

END

4.  Intellectual Property

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

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights which may cover technology that may be required to practice
   this standard.  Please address the information to the IETF Executive
   Director.

5.  References

   [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]   Rose, M., "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.

6.  Security Considerations

   Security issues are discussed in Section 3.1.2.

7.  Authors' Addresses

   Bob Stewart
   Cisco Systems, Inc.
   170 West Tasman Drive
   San Jose, CA 95134-1706
   U.S.A.


   Ramanathan Kavasseri
   Cisco Systems, Inc.
   170 West Tasman Drive
   San Jose, CA 95134-1706
   U.S.A.

   Phone: +1 408 527 2446
   EMail: ramk@cisco.com

8.  Full Copyright Statement

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

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

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

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

Acknowledgement

   Funding for the RFC Editor function is currently provided by the
   Internet Society.

AI ELI5

On this page
PROBLEMSNMP Traps and Informs can be lost, for example when Informs exceed their retransmission limits, so a manager may never learn that something happened.
MECHANISMThe Notification Log MIB gives a system a local log of notifications, with configuration objects, statistics counters and log tables that a manager can poll later.
WHY IT MATTERSOther MIBs need to do less to preserve event details, and applications can poll the log to check that they have not missed important notifications.

§2Why Log Notifications

Systems that support SNMP often need to record notification information as a hedge against lost notifications. These are Traps or Informs (RFC 1905) that exceed their retransmission limits. This MIB provides a common local logging function for other MIBs to use. It is intended mainly for senders of notifications but could also be used by receivers.

With the log in place, individual MIBs carry less responsibility for recording the transient details of an event in case the message is lost, and applications can poll the log to verify they have not missed important notifications.

The module is written in SMIv2. Section 1 of the RFC also gives the usual overview of the SNMP Management Framework and its components, which this explainer does not repeat.

Sometimes a shouted warning is not heard. The log is a notebook where the warning is also written down, so you can read it afterwards.

§3Engines, Contexts and Named Logs

A log can collect two flows of notifications: ones received from one or more SNMP engines as informs and traps, and ones delivered to the engine by some other mechanism at the interface to the notification originator. The second flow is modeled as the engine sending a notification to itself.

A system may have several SNMP engines, each with its own engine identification, and an engine may have several named management contexts. To understand a logged notification you need to know which engine and context it came from, so the MIB records the source engine ID and the context name.

The MIB also has named logs. With log names and view-based access control (RFC 2575), an administrator can give different users different access. A system with fewer resources MAY disallow named logs and provide only the default, null-named log. That log has no implicit security credentials and notifications go into it with no further checking.

If many people write in the same notebook, each note says who wrote it and which room it came from. You can also keep several notebooks, with different people allowed to read each one.

§4Structure of the MIB

The module is registered as notificationLogMIB under mib-2 at number 92, and has three sections.

  • Configuration (nlmConfig) controls how much the log can hold and which notifications are logged. Its table of logs says what logs exist and how they work, and the choice of what to log depends on filters in the snmpNotifyFilterTable of the SNMP Notification MIB (RFC 2573).
  • Statistics (nlmStats) holds counters for notifications logged and discarded, so you can see the effect of capacity settings and resource problems.
  • Log (nlmLog) holds the notifications themselves.

The conformance section requires compliant systems to implement the configuration, statistics and log groups. A further date group is mandatory only on systems that keep wall clock date and time.

The diary has three parts: the rules for how to write in it, a tally of how many entries were written or thrown away, and the entries themselves.

OBJECT TREE OF THE NOTIFICATION LOG MIB (RFC 3014)
  • notificationLogMIB mib-2 92
    • notificationLogMIBObjects 1
      • nlmConfig 1: limits, age-out, log table
      • nlmStats 2: logged and bumped counters
      • nlmLog 3: log table and variable table
    • notificationLogMIBConformance 3

§5The Log and Variable Tables

Each log entry is indexed by log name and by nlmLogIndex, an integer that increases as entries are made. An entry records the time (nlmLogTime, the value of sysUpTime when it was logged), the local date and time on systems that can supply it, the source engine ID, the transport address and domain it was received from, the context engine ID, the context name and the notification's object identifier.

For SNMPv1 traps the engine ID cannot be taken from the PDU, so the transport address identifies the source. The RFC warns that the address may not uniquely identify the engine, because an engine that uses DHCP or NAT may share its address with other devices.

The variables from a notification's varbind list go in a second table, indexed by log name, notification index and variable index. The value is kept as a discriminated union: nlmLogVariableValueType says which one of the value objects is filled in, with a separate object for each distinct SNMP data type. An application can therefore rebuild the information in the original notification PDU from the log.

Each diary entry has a number, a time stamp and who sent it. Extra details go on a separate sheet, with a note saying what kind of detail each one is.

VALUE TYPES IN THE LOG VARIABLE TABLE
  • 1counter32 — Counter32 value.
  • 2unsigned32 — Unsigned32 value.
  • 3timeTicks — TimeTicks value.
  • 4integer32 — Integer32 value.
  • 5ipAddress — IpAddress value (IPv4 format).
  • 6octetString — OCTET STRING value; IPv6 addresses are stored here.
  • 7objectId — OBJECT IDENTIFIER value.
  • 8counter64 — Counter64 value.
  • 9opaque — Opaque value.

§6Limits, Aging and Polling

Two global settings control how much is kept. nlmConfigGlobalEntryLimit is the maximum number of entries across all logs, where 0 means no limit. nlmConfigGlobalAgeOut is the number of minutes a notification SHOULD be kept, with a default of 1440 (24 hours) and 0 meaning no age out. Each named log also has its own nlmConfigLogEntryLimit.

If a limit is lowered while entries exist, the oldest are discarded. The global entry limit takes precedence over the age-out and per-log limits, even if the discarded entry is younger than the age-out time. When adding an entry would exceed a limit or the system resources, the oldest entry SHOULD be removed to make room. Entries removed for that reason are counted as bumped. Entries aged out are not counted that way.

A collector can poll without losing its place. The RFC suggests keeping the highest index retrieved, starting from there on the next poll, and checking sysUpTime for a discontinuity that would have reset the index and possibly lost entries. The index wraps back to 1 if it ever reaches its maximum.

The notebook has a limited number of pages. When it is full, the oldest page is torn out to make room. To catch up, you remember the last page you read and carry on from there.

§7Example: Logging Only Link Changes

The RFC shows how to set up a named log called links that records only linkUp and linkDown notifications. In the log configuration table the log gets the filter name link-status, an entry limit of 0, an admin status of enabled, non-volatile storage and an active row status.

The filter itself is built in snmpNotifyFilterTable. The object snmpTraps is 1.3.6.1.6.3.1.1.5, with linkDown as snmpTraps.3 and linkUp as snmpTraps.4. Two filter entries, one for each of those, are set to include.

You tell the diary to write down only two kinds of alarm, the "link went up" and "link went down" bells, and ignore the rest.

§8Security Considerations

Section 6 of the RFC only points back to the security discussion in the overview. That discussion notes that access control for the objects in a notification can only be checked where the notification is created, so it is possible only for locally generated ones, and only when credentials are available.

For a named log, the credentials of the creator stay attached to it. The system MUST use them and apply the same access control as a Notification Originator (RFC 2573) when putting local notifications in it. For remotely generated notifications the system SHOULD NOT apply access control, and security is left to the normal access control on the log.

The RFC also warns that managers setting the global entry limit or age-out to different values can disturb each other, so that some notifications are deleted before another application sees them. This could be used for a denial-of-service attack, and methods for countering it are left for further study.

Anyone who can change the notebook's page limit might make pages vanish before others read them. The authors noticed this and said they had no fix yet.

§8References