RFC 4750
OSPF Version 2 Management Information Base
OSPF Version 2 Management Information Base ๐ฆ
Okay bestie, so this is RFC 4750 ๐ a Standards Track doc, dated December 2006, and it obsoletes RFC 1850 (the old version). Authors:
- Editors: D. Joyal (Nortel), P. Galecki (Airvana), and S. Giacalone (CSFB) ๐
- Original authors: R. Coltun (Touch Acoustra) and F. Baker (Cisco Systems) ๐ธ
- Category: Standards Track โจ
- Obsoletes: RFC 1850 ๐
Status of This Memo
This doc is an Internet standards track spec for the Internet community, and it's literally asking for discussion and suggestions for improvements ๐ซถ For the standardization state and status of this protocol, check the current edition of "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited ๐
Copyright Notice
Copyright (C) The IETF Trust (2006). ๐
Abstract
Okay so this memo defines a piece of the Management Information Base (MIB) that network management protocols use in TCP/IP-based internets ๐ง It's all about managing version 2 of the Open Shortest Path First Routing Protocol. OSPFv2 is specific to the IPv4 address family, and OSPFv3 is specific to the IPv6 address family ๐
This memo obsoletes RFC 1850, but it's designed to be backwards compatible, so no drama ๐ฆ The functional differences between this memo and RFC 1850 are explained in Appendix B. ๐
Table of Contents
1. Overview ........................................................3
1.1. The Internet-Standard Management Framework .................3
1.2. Conceptual Row Creation ....................................3
1.3. Default Configuration ......................................4
1.4. OSPF Counters ..............................................5
1.5. Multiple OSPF Instances ....................................5
1.6. Conventions ................................................6
2. Structure of This MIB ...........................................6
2.1. The Purposes of the Sections in This MIB ...................6
2.1.1. General Variables ...................................6
2.1.2. Area Data Structure and Area Stub Metric Table ......6
2.1.3. Link State Database and External Link State
Database ............................................7
2.1.4. Address Table and Host Tables .......................7
2.1.5. Interface and Interface Metric Tables ...............7
2.1.6. Virtual Interface Table .............................7
2.1.7. Neighbor and Virtual Neighbor Tables ................7
2.1.8. Local Link State Database Table and Virtual
Local Link State Database Table .....................7
2.1.9. AS-scope Link State Database Table ..................7
2.1.10. Area LSA Count Table ...............................7
3. OSPF MIB Module .................................................8
4. OSPF Trap Overview .............................................94
4.1. Introduction ..............................................94
4.2. Approach ..................................................95
4.3. Ignoring Initial Activity .................................95
4.4. Throttling Traps ..........................................95
4.5. One Trap Per OSPF Event ...................................96
4.6. Polling Event Counters ....................................96
4.7. Translating Notification Parameters .......................97
4.8. Historical Artifacts ......................................97
5. OSPF Trap Definitions ..........................................98
6. Security Considerations .......................................110
7. IANA Considerations ...........................................111
8. Acknowledgements ..............................................111
9. References ....................................................111
9.1. Normative References .....................................111
9.2. Informative References ...................................111
Appendix A. TOS Support ..........................................113
Appendix B. Changes from RFC 1850 ................................113
B.1. General Group Changes ....................................113
B.2. OSPF NSSA Enhancement Support ............................113
B.3. Opaque LSA Support .......................................114
B.4. Graceful Restart Support .................................116
B.5. OSPF Compliances .........................................116
B.6. OSPF Authentication and Security .........................117
B.7. OSPF Trap MIB ............................................117
B.8. Miscellaneous ............................................118
1. Overview โจ
1.1. The Internet-Standard Management Framework
For the full tea on the documents that describe the current Internet-Standard Management Framework, go to section 7 of RFC 3410 [RFC3410] ๐
Managed objects live in a virtual information store called the Management Information Base, or MIB ๐ง MIB objects are usually accessed through the Simple Network Management Protocol (SNMP). Objects in the MIB are defined using the mechanisms in the Structure of Management Information (SMI). This memo specifies a MIB module that complies with SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] and STD 58, RFC 2580 [RFC2580] ๐
1.2. Conceptual Row Creation
Okay so for row creation in "conceptual" tables, the DEFVAL (Default Value) clauses in section 3 suggest values an agent should use for instances of variables that have to be created because of a Set-Request but weren't specified in that Set-Request ๐ Some read-only objects don't have DEFVAL clauses, which implies they get zeroed on row creation. Those objects have the SYNTAX Counter32 or Gauge32 ๐ธ
For objects with no DEFVAL clause, both management stations and agents should heed the Robustness Principle of the Internet (see [RFC791]):
"be liberal in what you accept, conservative in what you send"
So management stations should include as many of these columnar objects as possible (for example, all read-write objects) in a Set-Request when creating a conceptual row ๐ซถ Agents should accept a Set-Request with as few of these columnar objects as they need. The minimum contents of a "row-creating" SET are the objects that can't be intuited, so they have no default specified ๐ง
1.3. Default Configuration
Real talk, OSPF is a powerful routing protocol with features to handle pretty much any configuration requirement that might come up within an Autonomous System (AS) ๐ With that power comes a lot of complexity, which the sheer number of objects in the MIB proves ๐ So when this MIB was built, care was taken to define default values for virtually every object, so you need the least amount of parameterization in the typical case ๐ Here's that default configuration:
Given the following assumptions:
- IP has already been configured.
- The ifTable has already been configured.
- ifSpeed is estimated by the interface drivers.
- The OSPF process automatically discovers all IP interfaces and creates corresponding OSPF interfaces.
- The OSPF process automatically creates the areas required for the interfaces.
The simplest configuration of an OSPF process requires the following:
- The OSPF process be enabled.
This can be done with a single SET:
ospfAdminStat := enabled.
The configured system will have these attributes:
- The RouterID will be one of the IP addresses of the device.
- The device will be neither an Area Border Router nor an Autonomous System Border Router.
- Every IP interface, with or without an address, will be an OSPF interface.
- The AreaID of each interface will be 0.0.0.0, the backbone ๐
- Authentication will be disabled.
- All broadcast and point-to-point interfaces will be operational. Non-broadcast multi-access (NBMA) interfaces require the configuration of at least one neighbor ๐ฆ
- Timers on all direct interfaces will be:
Hello Interval: 10 seconds
Dead Timeout: 40 Seconds
Retransmission: 5 Seconds
Transit Delay: 1 Second
Poll Interval: 120 Seconds
- No direct links to hosts will be configured.
- No addresses will be summarized.
- Metrics, being a measure of bit duration, are unambiguous and intelligent ๐ง
- No virtual links will be configured.
1.4. OSPF Counters
This MIB defines several counters, namely:
ospfOriginateNewLsasandospfRxNewLsasin the ospfGeneralGroupospfSpfRunsandospfAreaNssaTranslatorEventsin the ospfAreaTableospfIfEventsin the ospfIfTableospfVirtIfEventsin the ospfVirtIfTableospfNbrEventsin the ospfNbrTableospfVirtNbrEventsin the ospfVirtNbrTable
Best practice alert ๐จ When a management entity reads these counters, it should use the discontinuity object, ospfDiscontinuityTime, to figure out whether an event happened that would invalidate its understanding of the counters. A restart of the OSPF routing process is one possible example of a discontinuity event.
1.5. Multiple OSPF Instances
SNMPv3 supports "Contexts", which can be used to set up MIB views on multiple OSPF instances on the same system ๐ See [RFC3411] or its successors for details.
1.6. Conventions
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 [RFC2119] ๐
2. Structure of This MIB ๐ธ
This MIB is made up of the following sections:
General Variables
Area Data Structure
Area Stub Metric Table
Link State Database (LSDB)
Address Range Table
Host Table
Interface Table
Interface Metric Table
Virtual Interface Table
Neighbor Table
Virtual Neighbor Table
External Link State Database
Aggregate Range Table
Local Link State Database
AS-scope Link State Database
It supports the base OSPFv2 specification [RFC2328] and extensions to OSPFv2 such as [RFC1765], [RFC1793], [RFC2370], [RFC3101] and [RFC3623] โจ
There's also a separate MIB for notifications ("traps"), which is entirely optional ๐
2.1. The Purposes of the Sections in This MIB
2.1.1. General Variables
Okay so the general variables are, as the name kinda suggests, the variables that are global to the OSPF Process ๐
2.1.2. Area Data Structure and Area Stub Metric Table
okay so the Area Data Structure is basically the list of every OSPF Area your router is hanging out in ๐ธ and the Area Table is where the info for Not-So-Stubby-Area (NSSA) translation lives โจ
the Area Stub Metric Table is all about the metrics that get advertised into a stub area by the default router(s) ๐
2.1.3. Link State Database and External Link State Database
the link state database is basically there so you can dig into the nitty gritty details when you're debugging the network ๐ main character debugging energy, fr
2.1.4. Address Table and Host Tables
the Address Range Table and Host Table let you peek at your configured Network Summary and host route info ๐ฆ
2.1.5. Interface and Interface Metric Tables
the Interface Table and the Interface Metric Table work together to describe all the IP interfaces OSPF can see ๐ the metrics get their own table so dealing with multiple types of service isn't a whole mess. the Interface table also keeps track of link-local (Opaque type-9) link state advertisement (LSA) statistics ๐
2.1.6. Virtual Interface Table
the Virtual Interface Table describes virtual links to the OSPF Process, kinda like the (non-virtual) Interface Tables but for virtual links ๐ it also includes link-local (Opaque type-9) LSA statistics ๐
2.1.7. Neighbor and Virtual Neighbor Tables
the Neighbor Table and the Virtual Neighbor Table are the guest lists for the OSPF Process, so they describe all the neighbors โจ๐ซถ
2.1.8. Local Link State Database Table and Virtual Local Link State Database Table
the Local Link State Database Table and the Virtual Local Link State Database Table have the same format as the OSPF LSDB Table, but they only hold link-local (Opaque type-9) link state advertisements for non-virtual and virtual links ๐ง
2.1.9. AS-scope Link State Database Table
the AS-scope Link State Database Table is also the same format as the OSPF LSDB Table, but this one only contains AS-scoped link state advertisements ๐
2.1.10. Area LSA Count Table
this table keeps count of link state advertisements, broken down per area and per LSA type ๐งฎ๐
3. OSPF MIB Module โจ
here's the whole MIB module, bestie ๐ copy it exactly, no edits, no cap:
OSPF-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32,
Integer32, Unsigned32, IpAddress, mib-2
FROM SNMPv2-SMI
TEXTUAL-CONVENTION, TruthValue, RowStatus, TimeStamp
FROM SNMPv2-TC
MODULE-COMPLIANCE, OBJECT-GROUP
FROM SNMPv2-CONF
InterfaceIndexOrZero
FROM IF-MIB;
ospf MODULE-IDENTITY
LAST-UPDATED "200611100000Z" -- November 10, 2006 00:00:00 EST
ORGANIZATION "IETF OSPF Working Group"
CONTACT-INFO
"WG E-Mail: ospf@ietf.org
WG Chairs: acee@cisco.com
rohit@gmail.com
Editors: Dan Joyal
Nortel
600 Technology Park Drive
Billerica, MA 01821
djoyal@nortel.com
Piotr Galecki
Airvana
19 Alpha Road
Chelmsford, MA 01824
pgalecki@airvana.com
Spencer Giacalone
CSFB
Eleven Madison Ave
New York, NY 10010-3629
spencer.giacalone@gmail.com"
DESCRIPTION
"The MIB module to describe the OSPF Version 2
Protocol. Note that some objects in this MIB
module may pose a significant security risk.
Refer to the Security Considerations section
in RFC 4750 for more information.
Copyright (C) The IETF Trust (2006).
This version of this MIB module is part of
RFC 4750; see the RFC itself for full legal
notices."
REVISION "200611100000Z" -- November 10, 2006 09:00:00 EST
DESCRIPTION
"Updated for latest changes to OSPF Version 2:
- updated the General Group with the new
ospfRFC1583Compatibility, ospfReferenceBandwidth
and ospfDiscontinuityTime objects
- added graceful-restart-related objects
- added stub-router-related objects
- updated the Area Table with NSSA-related objects
- added ospfAreaAggregateExtRouteTag object
- added Opaque LSA-related objects
- updates to the Compliances and Security sections
- added area LSA counter table
- added section describing translation of notification
parameters between SNMP versions
- added ospfComplianceObsolete to contain obsolete
object groups
- deprecated ospfExtLsdbTable
See Appendix B of RFC 4750 for more details.
This version published as part of RFC 4750"
REVISION "199501201225Z" -- Fri Jan 20 12:25:50 PST 1995
DESCRIPTION
"The initial SMIv2 revision of this MIB module, published
in RFC 1850."
::= { mib-2 14 }
AreaID ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"An OSPF Area Identifier.
Note that the Area ID, in OSPF, has the same format
as an IP address, but has the function of defining
a summarization point for link state advertisements."
SYNTAX IpAddress
RouterID ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"A OSPF Router Identifier.
Note that the Router ID, in OSPF, has the same format
as an IP address, but identifies the router independent
of its IP address."
SYNTAX IpAddress
Metric ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-0"
STATUS current
DESCRIPTION
"The OSPF internal metric.
Note that the OSPF metric is defined as an unsigned value
in the range."
SYNTAX Integer32 (0..'FFFF'h)
BigMetric ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-0"
STATUS current
DESCRIPTION
"The OSPF external metric."
SYNTAX Integer32 (0..'FFFFFF'h)
Status ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"An indication of the operability of an OSPF
function or feature. For example, the status
of an interface: 'enabled' indicates that
it is willing to communicate with other OSPF routers,
and 'disabled' indicates that it is not."
SYNTAX INTEGER { enabled (1), disabled (2) }
PositiveInteger ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-0"
STATUS current
DESCRIPTION
"A positive integer. Values in excess are precluded as
unnecessary and prone to interoperability issues."
SYNTAX Integer32 (0..'7FFFFFFF'h)
HelloRange ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-0"
STATUS current
DESCRIPTION
"The range of intervals in seconds on which Hello messages
are exchanged."
SYNTAX Integer32 (1..'FFFF'h)
UpToMaxAge ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-0"
STATUS current
DESCRIPTION
"The values in seconds that one might find or configure
for variables bounded by the maximum age of an LSA."
SYNTAX Integer32 (0..3600)
DesignatedRouterPriority ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-0"
STATUS current
DESCRIPTION
"The range of values defined for the priority of a system
for becoming the designated router."
SYNTAX Integer32 (0..'FF'h)
TOSType ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-0"
STATUS current
DESCRIPTION
"Type of Service (TOS) is defined as a mapping to the IP
Type of Service Flags as defined in the IP Forwarding
Table MIB
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | |
| PRECEDENCE | TYPE OF SERVICE | 0 |
| | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
IP TOS IP TOS
Field Policy Field Policy
Contents Code Contents Code
0 0 0 0 ==> 0 0 0 0 1 ==> 2
0 0 1 0 ==> 4 0 0 1 1 ==> 6
0 1 0 0 ==> 8 0 1 0 1 ==> 10
0 1 1 0 ==> 12 0 1 1 1 ==> 14
1 0 0 0 ==> 16 1 0 0 1 ==> 18
1 0 1 0 ==> 20 1 0 1 1 ==> 22
1 1 0 0 ==> 24 1 1 0 1 ==> 26
1 1 1 0 ==> 28 1 1 1 1 ==> 30
The remaining values are left for future definition."
SYNTAX Integer32 (0..30)
OspfAuthenticationType ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"The authentication type."
SYNTAX INTEGER {
none (0),
simplePassword (1),
md5 (2)
-- reserved for specification by IANA (> 2)
}
-- OSPF General Variables
-- Note: These parameters apply globally to the Router's
-- OSPF Process.
ospfGeneralGroup OBJECT IDENTIFIER ::= { ospf 1 }
ospfRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"A 32-bit integer uniquely identifying the
router in the Autonomous System.
By convention, to ensure uniqueness, this
should default to the value of one of the
router's IP interface addresses.
This object is persistent and when written
the entity SHOULD save the change to non-volatile storage."
REFERENCE
"OSPF Version 2, C.1 Global parameters"
::= { ospfGeneralGroup 1 }
ospfAdminStat OBJECT-TYPE
SYNTAX Status
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The administrative status of OSPF in the
router. The value 'enabled' denotes that the
OSPF Process is active on at least one interface;
'disabled' disables it on all interfaces.
This object is persistent and when written
the entity SHOULD save the change to non-volatile storage."
::= { ospfGeneralGroup 2 }
ospfVersionNumber OBJECT-TYPE
SYNTAX INTEGER { version2 (2) }
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The current version number of the OSPF protocol is 2."
REFERENCE
"OSPF Version 2, Title"
::= { ospfGeneralGroup 3 }
ospfAreaBdrRtrStatus OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A flag to note whether this router is an Area
Border Router."
REFERENCE
"OSPF Version 2, Section 3 Splitting the AS into
Areas"
::= { ospfGeneralGroup 4 }
ospfASBdrRtrStatus OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"A flag to note whether this router is configured as
an Autonomous System Border Router.
This object is persistent and when written the
entity SHOULD save the change to non-volatile storage."
REFERENCE
"OSPF Version 2, Section 3.3 Classification of
routers"
::= { ospfGeneralGroup 5 }
okay bestie, the general group keeps going and it's giving data ๐โจ these objects are the router's stats and settings, so the whole vibe is "check the vibes, check the counters, check the flags" ๐
ospfExternLsaCount OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of external (LS type-5) link state
advertisements in the link state database."
REFERENCE
"OSPF Version 2, Appendix A.4.5 AS external link
advertisements"
::= { ospfGeneralGroup 6 }
ospfExternLsaCksumSum OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The 32-bit sum of the LS checksums of
the external link state advertisements
contained in the link state database. This sum
can be used to determine if there has been a
change in a router's link state database and
to compare the link state database of two
routers. The value should be treated as unsigned
when comparing two sums of checksums."
::= { ospfGeneralGroup 7 }
ospfTOSSupport OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The router's support for type-of-service routing.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"OSPF Version 2, Appendix F.1.2 Optional TOS
support"
::= { ospfGeneralGroup 8 }
ospfOriginateNewLsas OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of new link state advertisements
that have been originated. This number is
incremented each time the router originates a new
LSA.
Discontinuities in the value of this counter can
occur at re-initialization of the management system,
and at other times as indicated by the value of
ospfDiscontinuityTime."
::= { ospfGeneralGroup 9 }
ospfRxNewLsas OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of link state advertisements received
that are determined to be new instantiations.
This number does not include newer instantiations
of self-originated link state advertisements.
Discontinuities in the value of this counter can
occur at re-initialization of the management system,
and at other times as indicated by the value of
ospfDiscontinuityTime."
::= { ospfGeneralGroup 10 }
ospfExtLsdbLimit OBJECT-TYPE
SYNTAX Integer32 (-1..'7FFFFFFF'h)
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The maximum number of non-default
AS-external LSAs entries that can be stored in the
link state database. If the value is -1, then
there is no limit.
When the number of non-default AS-external LSAs
in a router's link state database reaches
ospfExtLsdbLimit, the router enters
overflow state. The router never holds more than
ospfExtLsdbLimit non-default AS-external LSAs
in its database. OspfExtLsdbLimit MUST be set
identically in all routers attached to the OSPF
backbone and/or any regular OSPF area (i.e.,
OSPF stub areas and NSSAs are excluded).
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
DEFVAL { -1 }
::= { ospfGeneralGroup 11 }
ospfMulticastExtensions OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"A bit mask indicating whether the router is
forwarding IP multicast (Class D) datagrams
based on the algorithms defined in the
multicast extensions to OSPF.
Bit 0, if set, indicates that the router can
forward IP multicast datagrams in the router's
directly attached areas (called intra-area
multicast routing).
Bit 1, if set, indicates that the router can
forward IP multicast datagrams between OSPF
areas (called inter-area multicast routing).
Bit 2, if set, indicates that the router can
forward IP multicast datagrams between
Autonomous Systems (called inter-AS multicast
routing).
Only certain combinations of bit settings are
allowed, namely: 0 (no multicast forwarding is
enabled), 1 (intra-area multicasting only), 3
(intra-area and inter-area multicasting), 5
(intra-area and inter-AS multicasting), and 7
(multicasting everywhere). By default, no
multicast forwarding is enabled.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
DEFVAL { 0 }
::= { ospfGeneralGroup 12 }
ospfExitOverflowInterval OBJECT-TYPE
SYNTAX PositiveInteger
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The number of seconds that, after entering
OverflowState, a router will attempt to leave
OverflowState. This allows the router to again
originate non-default AS-external LSAs. When
set to 0, the router will not leave
overflow state until restarted.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
DEFVAL { 0 }
::= { ospfGeneralGroup 13 }
ospfDemandExtensions OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The router's support for demand routing.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"Extending OSPF to Support Demand Circuits"
::= { ospfGeneralGroup 14 }
ospfRFC1583Compatibility OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Indicates metrics used to choose among multiple
AS-external LSAs. When RFC1583Compatibility is set to
enabled, only cost will be used when choosing among
multiple AS-external LSAs advertising the same
destination. When RFC1583Compatibility is set to
disabled, preference will be driven first by type of
path using cost only to break ties.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"OSPF Version 2, Section 16.4.1 External path
preferences"
::= { ospfGeneralGroup 15 }
ospfOpaqueLsaSupport OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The router's support for Opaque LSA types."
REFERENCE
"The OSPF Opaque LSA Option"
::= { ospfGeneralGroup 16 }
ospfReferenceBandwidth OBJECT-TYPE
SYNTAX Unsigned32
UNITS "kilobits per second"
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Reference bandwidth in kilobits/second for
calculating default interface metrics. The
default value is 100,000 KBPS (100 MBPS).
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
::= { ospfGeneralGroup 17 }
ospfRestartSupport OBJECT-TYPE
SYNTAX INTEGER { none (1),
plannedOnly (2),
plannedAndUnplanned (3)
}
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The router's support for OSPF graceful restart.
Options include: no restart support, only planned
restarts, or both planned and unplanned restarts.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
::= { ospfGeneralGroup 18 }
ospfRestartInterval OBJECT-TYPE
SYNTAX Integer32 (1..1800)
UNITS "seconds"
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Configured OSPF graceful restart timeout interval.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
::= { ospfGeneralGroup 19 }
ospfRestartStrictLsaChecking OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Indicates if strict LSA checking is enabled for
graceful restart.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
::= { ospfGeneralGroup 20 }
ospfRestartStatus OBJECT-TYPE
SYNTAX INTEGER { notRestarting (1),
plannedRestart (2),
unplannedRestart (3)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current status of OSPF graceful restart."
::= { ospfGeneralGroup 21 }
ospfRestartAge OBJECT-TYPE
SYNTAX Unsigned32
UNITS "seconds"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Remaining time in current OSPF graceful restart
interval."
::= { ospfGeneralGroup 22 }
ospfRestartExitReason OBJECT-TYPE
SYNTAX INTEGER { none (1), -- none attempted
inProgress (2), -- restart in
-- progress
completed (3), -- successfully
-- completed
timedOut (4), -- timed out
topologyChanged (5) -- aborted due to
-- topology change.
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Describes the outcome of the last attempt at a
graceful restart. If the value is 'none', no restart
has yet been attempted. If the value is 'inProgress',
a restart attempt is currently underway."
::= { ospfGeneralGroup 23 }
ospfAsLsaCount OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of AS-scope link state
advertisements in the AS-scope link state database."
::= { ospfGeneralGroup 24 }
ospfAsLsaCksumSum OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The 32-bit unsigned sum of the LS checksums of
the AS link state advertisements contained in the AS-scope
link state database. This sum can be used to determine
if there has been a change in a router's AS-scope link
state database, and to compare the AS-scope link state
database of two routers."
::= { ospfGeneralGroup 25 }
Okay so the general group keeps going with a little stub router switch ๐ฆ Here's how it's set up:
ospfStubRouterSupport OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The router's support for stub router functionality."
REFERENCE
"OSPF Stub Router Advertisement"
::= { ospfGeneralGroup 26 }
ospfStubRouterAdvertisement OBJECT-TYPE
SYNTAX INTEGER {
doNotAdvertise (1),
advertise(2)
}
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"This object controls the advertisement of
stub router LSAs by the router. The value
doNotAdvertise will result in the advertisement
of a standard router LSA and is the default value.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
::= { ospfGeneralGroup 27 }
ospfDiscontinuityTime OBJECT-TYPE
SYNTAX TimeStamp
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The value of sysUpTime on the most recent occasion
at which any one of this MIB's counters suffered
a discontinuity.
If no such discontinuities have occurred since the last
re-initialization of the local management subsystem,
then this object contains a zero value."
::= { ospfGeneralGroup 28 }
So ospfStubRouterSupport is the read-only switch that says whether the router does stub router stuff at all ๐
It's a TruthValue and it lives at { ospfGeneralGroup 26 }, which is giving very organized vibes ๐
Then there's ospfStubRouterAdvertisement ๐ธ This one is read-write, and it decides whether the router advertises stub router LSAs. The default is doNotAdvertise, which means you get a regular router LSA, and advertise is the other option. It's persistent, so when someone writes to it, the entity SHOULD save that change to non-volatile storage. Bestie, that's the part that keeps your setting alive after a reboot ๐ซถ
And ospfDiscontinuityTime is the timestamp for the last time any counter in this MIB got a discontinuity, measured in sysUpTime ๐ง If nothing like that has happened since the local management subsystem last re-initialized, it's just zero. Lowkey the most useful little number in the whole group โจ
Next up is the area table, and it's a whole vibe ๐ Here's the comment header and the table itself:
-- OSPF Area Table
-- The OSPF Area Table contains information
-- regarding the various areas.
ospfAreaTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfAreaEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Information describing the configured parameters and
cumulative statistics of the router's attached areas.
The interfaces and virtual links are configured
as part of these areas. Area 0.0.0.0, by definition,
is the backbone area."
REFERENCE
"OSPF Version 2, Section 6 The Area Data Structure"
::= { ospf 2 }
ospfAreaEntry OBJECT-TYPE
SYNTAX OspfAreaEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Information describing the configured parameters and
cumulative statistics of one of the router's attached areas.
The interfaces and virtual links are configured as part of
these areas. Area 0.0.0.0, by definition, is the backbone
area.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
INDEX { ospfAreaId }
::= { ospfAreaTable 1 }
OspfAreaEntry ::=
SEQUENCE {
ospfAreaId
AreaID,
ospfAuthType
OspfAuthenticationType,
ospfImportAsExtern
INTEGER,
ospfSpfRuns
Counter32,
ospfAreaBdrRtrCount
Gauge32,
ospfAsBdrRtrCount
Gauge32,
ospfAreaLsaCount
Gauge32,
ospfAreaLsaCksumSum
Integer32,
ospfAreaSummary
INTEGER,
ospfAreaStatus
RowStatus,
ospfAreaNssaTranslatorRole
INTEGER,
ospfAreaNssaTranslatorState
INTEGER,
ospfAreaNssaTranslatorStabilityInterval
PositiveInteger,
ospfAreaNssaTranslatorEvents
Counter32
}
So ospfAreaTable is the table of all the router's attached areas, with the config and the stats ๐ Area 0.0.0.0 is the backbone, no debate ๐ Its entries are ospfAreaEntry, which are indexed by ospfAreaId ๐ฆ Those entries are persistent too, so the entity SHOULD save changes to non-volatile storage, same energy as before ๐
Then OspfAreaEntry is the row layout, with fourteen columns in a row ๐ Let's go through them one by one, because each one has its own personality ๐
ospfAreaId OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only -- read-only since originally
-- an SMIv1 index
STATUS current
DESCRIPTION
"A 32-bit integer uniquely identifying an area.
Area ID 0.0.0.0 is used for the OSPF backbone."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfAreaEntry 1 }
ospfAuthType OBJECT-TYPE
SYNTAX OspfAuthenticationType
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The authentication type specified for an area."
REFERENCE
"OSPF Version 2, Appendix D Authentication"
DEFVAL { none } -- no authentication, by default
::= { ospfAreaEntry 2 }
ospfImportAsExtern OBJECT-TYPE
SYNTAX INTEGER {
importExternal (1),
importNoExternal (2),
importNssa (3)
}
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"Indicates if an area is a stub area, NSSA, or standard
area. Type-5 AS-external LSAs and type-11 Opaque LSAs are
not imported into stub areas or NSSAs. NSSAs import
AS-external data as type-7 LSAs"
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
DEFVAL { importExternal }
::= { ospfAreaEntry 3 }
ospfSpfRuns OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of times that the intra-area route
table has been calculated using this area's
link state database. This is typically done
using Dijkstra's algorithm.
Discontinuities in the value of this counter can occur
at re-initialization of the management system, and at other
times as indicated by the value of ospfDiscontinuityTime."
::= { ospfAreaEntry 4 }
ospfAreaBdrRtrCount OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The total number of Area Border Routers reachable
within this area. This is initially zero and is
calculated in each Shortest Path First (SPF) pass."
::= { ospfAreaEntry 5 }
ospfAsBdrRtrCount OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The total number of Autonomous System Border
Routers reachable within this area. This is
initially zero and is calculated in each SPF
pass."
::= { ospfAreaEntry 6 }
ospfAreaLsaCount OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The total number of link state advertisements
in this area's link state database, excluding
AS-external LSAs."
::= { ospfAreaEntry 7 }
ospfAreaLsaCksumSum OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The 32-bit sum of the link state
advertisements' LS checksums contained in this
area's link state database. This sum excludes
external (LS type-5) link state advertisements.
The sum can be used to determine if there has
been a change in a router's link state
database, and to compare the link state database of
two routers. The value should be treated as unsigned
when comparing two sums of checksums."
DEFVAL { 0 }
::= { ospfAreaEntry 8 }
ospfAreaSummary OBJECT-TYPE
SYNTAX INTEGER {
noAreaSummary (1),
sendAreaSummary (2)
}
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The variable ospfAreaSummary controls the
import of summary LSAs into stub and NSSA areas.
It has no effect on other areas.
If it is noAreaSummary, the router will not
originate summary LSAs into the stub or NSSA area.
It will rely entirely on its default route.
If it is sendAreaSummary, the router will both
summarize and propagate summary LSAs."
DEFVAL { noAreaSummary }
::= { ospfAreaEntry 9 }
ospfAreaStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfAreaEntry 10 }
ospfAreaNssaTranslatorRole OBJECT-TYPE
SYNTAX INTEGER { always (1), candidate (2) }
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"Indicates an NSSA border router's ability to
perform NSSA translation of type-7 LSAs into
type-5 LSAs."
DEFVAL { candidate }
::= { ospfAreaEntry 11 }
ospfAreaNssaTranslatorState OBJECT-TYPE
SYNTAX INTEGER { enabled (1),
elected (2),
disabled (3)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Indicates if and how an NSSA border router is
performing NSSA translation of type-7 LSAs into type-5
LSAs. When this object is set to enabled, the NSSA Border
router's OspfAreaNssaExtTranslatorRole has been set to
always. When this object is set to elected, a candidate
NSSA Border router is Translating type-7 LSAs into type-5.
When this object is set to disabled, a candidate NSSA
border router is NOT translating type-7 LSAs into type-5."
::= { ospfAreaEntry 12 }
ospfAreaNssaTranslatorStabilityInterval OBJECT-TYPE
SYNTAX PositiveInteger
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The number of seconds after an elected translator
determines its services are no longer required, that
it should continue to perform its translation duties."
DEFVAL { 40 }
::= { ospfAreaEntry 13 }
ospfAreaNssaTranslatorEvents OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Indicates the number of translator state changes
that have occurred since the last boot-up.
Discontinuities in the value of this counter can occur
at re-initialization of the management system, and at other
times as indicated by the value of ospfDiscontinuityTime."
::= { ospfAreaEntry 14 }
OSPF Area Default Metric Table ๐ธ
okay so this table is where the default Area Border Router tells its stub areas which metrics to advertise, one row per Type of Service ๐
ospfStubAreaTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfStubAreaEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The set of metrics that will be advertised
by a default Area Border Router into a stub area."
REFERENCE
"OSPF Version 2, Appendix C.2, Area Parameters"
::= { ospf 3 }
ospfStubAreaEntry OBJECT-TYPE
SYNTAX OspfStubAreaEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The metric for a given Type of Service that
will be advertised by a default Area Border
Router into a stub area.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"OSPF Version 2, Appendix C.2, Area Parameters"
INDEX { ospfStubAreaId, ospfStubTOS }
::= { ospfStubAreaTable 1 }
OspfStubAreaEntry ::=
SEQUENCE {
ospfStubAreaId
AreaID,
ospfStubTOS
TOSType,
ospfStubMetric
BigMetric,
ospfStubStatus
RowStatus,
ospfStubMetricType
INTEGER
}
ospfStubAreaId OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The 32-bit identifier for the stub area. On
creation, this can be derived from the
instance."
::= { ospfStubAreaEntry 1 }
ospfStubTOS OBJECT-TYPE
SYNTAX TOSType
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The Type of Service associated with the
metric. On creation, this can be derived from
the instance."
::= { ospfStubAreaEntry 2 }
ospfStubMetric OBJECT-TYPE
SYNTAX BigMetric
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The metric value applied at the indicated Type
of Service. By default, this equals the least
metric at the Type of Service among the
interfaces to other areas."
::= { ospfStubAreaEntry 3 }
ospfStubStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfStubAreaEntry 4 }
ospfStubMetricType OBJECT-TYPE
SYNTAX INTEGER {
ospfMetric (1), -- OSPF Metric
comparableCost (2), -- external type 1
nonComparable (3) -- external type 2
}
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This variable displays the type of metric
advertised as a default route."
DEFVAL { ospfMetric }
::= { ospfStubAreaEntry 5 }
OSPF Link State Database ๐ฆ
next up is the LSDB, which is basically the pile of link state advertisements from every area the device is attached to. it's giving organised chaos ๐ง
ospfLsdbTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The OSPF Process's link state database (LSDB).
The LSDB contains the link state advertisements
from throughout the areas that the device is attached to."
REFERENCE
"OSPF Version 2, Section 12 Link State Advertisements"
::= { ospf 4 }
ospfLsdbEntry OBJECT-TYPE
SYNTAX OspfLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A single link state advertisement."
INDEX { ospfLsdbAreaId, ospfLsdbType,
ospfLsdbLsid, ospfLsdbRouterId }
::= { ospfLsdbTable 1 }
OspfLsdbEntry ::=
SEQUENCE {
ospfLsdbAreaId
AreaID,
ospfLsdbType
INTEGER,
ospfLsdbLsid
IpAddress,
ospfLsdbRouterId
RouterID,
ospfLsdbSequence
Integer32,
ospfLsdbAge
Integer32,
ospfLsdbChecksum
Integer32,
ospfLsdbAdvertisement
OCTET STRING
}
ospfLsdbAreaId OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The 32-bit identifier of the area from which
the LSA was received."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfLsdbEntry 1 }
ospfLsdbType OBJECT-TYPE
SYNTAX INTEGER {
routerLink (1),
networkLink (2),
summaryLink (3),
asSummaryLink (4),
asExternalLink (5), -- but see ospfAsLsdbTable
multicastLink (6),
nssaExternalLink (7),
areaOpaqueLink (10)
}
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The type of the link state advertisement.
Each link state type has a separate advertisement
format.
Note: External link state advertisements are permitted
for backward compatibility, but should be displayed
in the ospfAsLsdbTable rather than here."
REFERENCE
"OSPF Version 2, Appendix A.4.1 The Link State
Advertisement header"
::= { ospfLsdbEntry 2 }
ospfLsdbLsid OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The Link State ID is an LS Type Specific field
containing either a Router ID or an IP address;
it identifies the piece of the routing domain
that is being described by the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.4 Link State ID"
::= { ospfLsdbEntry 3 }
ospfLsdbRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The 32-bit number that uniquely identifies the
originating router in the Autonomous System."
REFERENCE
"OSPF Version 2, Appendix C.1 Global parameters"
::= { ospfLsdbEntry 4 }
ospfLsdbSequence OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The sequence number field is a signed 32-bit
integer. It starts with the value '80000001'h,
or -'7FFFFFFF'h, and increments until '7FFFFFFF'h.
Thus, a typical sequence number will be very negative.
It is used to detect old and duplicate Link State
Advertisements. The space of sequence numbers is linearly
ordered. The larger the sequence number, the more recent
the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.6 LS sequence
number"
::= { ospfLsdbEntry 5 }
ospfLsdbAge OBJECT-TYPE
SYNTAX Integer32 -- Should be 0..MaxAge, except when
-- doNotAge bit is set
UNITS "seconds"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the age of the link state advertisement
in seconds."
REFERENCE
"OSPF Version 2, Section 12.1.1 LS age"
::= { ospfLsdbEntry 6 }
ospfLsdbChecksum OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the checksum of the complete contents of
the advertisement, excepting the age field. The age field
is excepted so that an advertisement's age can be
incremented without updating the checksum. The checksum
used is the same that is used for ISO connectionless
datagrams; it is commonly referred to as the
Fletcher checksum."
REFERENCE
"OSPF Version 2, Section 12.1.7 LS checksum"
::= { ospfLsdbEntry 7 }
ospfLsdbAdvertisement OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (1..65535))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The entire link state advertisement, including
its header.
Note that for variable length LSAs, SNMP agents
may not be able to return the largest string size."
REFERENCE
"OSPF Version 2, Section 12 Link State Advertisements"
::= { ospfLsdbEntry 8 }
okay so bestie, this part is where we get into the Address Range table, the Host table and the start of the Interface table ๐โจ the Address Range table is an adjunct to the Area table, and it's giving "summarise my stuff before it leaves the area" ๐ฆ
-- Address Range Table
ospfAreaRangeTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfAreaRangeEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"The Address Range Table acts as an adjunct to the Area
Table. It describes those Address Range Summaries that
are configured to be propagated from an Area to reduce
the amount of information about it that is known beyond
its borders. It contains a set of IP address ranges
specified by an IP address/IP network mask pair.
For example, class B address range of X.X.X.X
with a network mask of 255.255.0.0 includes all IP
addresses from X.X.0.0 to X.X.255.255.
Note that this table is obsoleted and is replaced
by the Area Aggregate Table."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospf 5 }
ospfAreaRangeEntry OBJECT-TYPE
SYNTAX OspfAreaRangeEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"A single area address range.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
INDEX { ospfAreaRangeAreaId, ospfAreaRangeNet }
::= { ospfAreaRangeTable 1 }
OspfAreaRangeEntry ::=
SEQUENCE {
ospfAreaRangeAreaId
AreaID,
ospfAreaRangeNet
IpAddress,
ospfAreaRangeMask
IpAddress,
ospfAreaRangeStatus
RowStatus,
ospfAreaRangeEffect
INTEGER
}
ospfAreaRangeAreaId OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS obsolete
DESCRIPTION
"The area that the address range is to be found
within."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfAreaRangeEntry 1 }
ospfAreaRangeNet OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS obsolete
DESCRIPTION
"The IP address of the net or subnet indicated
by the range."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfAreaRangeEntry 2 }
ospfAreaRangeMask OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The subnet mask that pertains to the net or
subnet."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfAreaRangeEntry 3 }
ospfAreaRangeStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfAreaRangeEntry 4 }
ospfAreaRangeEffect OBJECT-TYPE
SYNTAX INTEGER {
advertiseMatching (1),
doNotAdvertiseMatching (2)
}
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"Subnets subsumed by ranges either trigger the
advertisement of the indicated summary
(advertiseMatching) or result in the subnet's not
being advertised at all outside the area."
DEFVAL { advertiseMatching }
::= { ospfAreaRangeEntry 5 }
next up: the Host table! ๐ง it's where we say which hosts are directly attached to the router, plus the metrics and types of service that get advertised for them. so cute, no cap ๐
-- OSPF Host Table
ospfHostTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfHostEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Host/Metric Table indicates what hosts are directly
attached to the router, what metrics and types
of service should be advertised for them,
and what areas they are found within."
REFERENCE
"OSPF Version 2, Appendix C.7 Host route
parameters"
::= { ospf 6 }
ospfHostEntry OBJECT-TYPE
SYNTAX OspfHostEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A metric to be advertised, for a given type of
service, when a given host is reachable.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
INDEX { ospfHostIpAddress, ospfHostTOS }
::= { ospfHostTable 1 }
OspfHostEntry ::=
SEQUENCE {
ospfHostIpAddress
IpAddress,
ospfHostTOS
TOSType,
ospfHostMetric
Metric,
ospfHostStatus
RowStatus,
ospfHostAreaID
AreaID,
ospfHostCfgAreaID
AreaID
}
ospfHostIpAddress OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The IP address of the host."
REFERENCE
"OSPF Version 2, Appendix C.7 Host route parameters"
::= { ospfHostEntry 1 }
ospfHostTOS OBJECT-TYPE
SYNTAX TOSType
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The Type of Service of the route being configured."
REFERENCE
"OSPF Version 2, Appendix C.7 Host route parameters"
::= { ospfHostEntry 2 }
ospfHostMetric OBJECT-TYPE
SYNTAX Metric
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The metric to be advertised."
REFERENCE
"OSPF Version 2, Appendix C.7 Host route parameters"
::= { ospfHostEntry 3 }
ospfHostStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfHostEntry 4 }
ospfHostAreaID OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"The OSPF area to which the host belongs.
Deprecated by ospfHostCfgAreaID."
REFERENCE
"OSPF Version 2, Appendix C.7 Host parameters"
::= { ospfHostEntry 5 }
ospfHostCfgAreaID OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"To configure the OSPF area to which the host belongs."
REFERENCE
"OSPF Version 2, Appendix C.7 Host parameters"
::= { ospfHostEntry 6 }
and now the Interface table, which is literally the OSPF view of every interface and it augments the ipAddrTable with OSPF-specific info ๐ธ bestie we're getting into the big leagues ๐
-- OSPF Interface Table
ospfIfTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfIfEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The OSPF Interface Table describes the interfaces
from the viewpoint of OSPF.
It augments the ipAddrTable with OSPF specific information."
REFERENCE
"OSPF Version 2, Appendix C.3 Router interface
parameters"
::= { ospf 7 }
ospfIfEntry OBJECT-TYPE
SYNTAX OspfIfEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The OSPF interface entry describes one interface
from the viewpoint of OSPF.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
INDEX { ospfIfIpAddress, ospfAddressLessIf }
::= { ospfIfTable 1 }
OspfIfEntry ::=
SEQUENCE {
ospfIfIpAddress
IpAddress,
ospfAddressLessIf
InterfaceIndexOrZero,
ospfIfAreaId
AreaID,
ospfIfType
INTEGER,
ospfIfAdminStat
Status,
ospfIfRtrPriority
DesignatedRouterPriority,
ospfIfTransitDelay
UpToMaxAge,
ospfIfRetransInterval
UpToMaxAge,
ospfIfHelloInterval
HelloRange,
ospfIfRtrDeadInterval
PositiveInteger,
ospfIfPollInterval
PositiveInteger,
ospfIfState
INTEGER,
ospfIfDesignatedRouter
IpAddress,
ospfIfBackupDesignatedRouter
IpAddress,
ospfIfEvents
Counter32,
ospfIfAuthKey
OCTET STRING,
ospfIfStatus
RowStatus,
ospfIfMulticastForwarding
INTEGER,
ospfIfDemand
TruthValue,
ospfIfAuthType
OspfAuthenticationType,
ospfIfLsaCount
Gauge32,
ospfIfLsaCksumSum
Unsigned32,
ospfIfDesignatedRouterId
RouterID,
ospfIfBackupDesignatedRouterId
RouterID
}
ospfIfIpAddress OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The IP address of this OSPF interface."
::= { ospfIfEntry 1 }
ospfAddressLessIf OBJECT-TYPE
SYNTAX InterfaceIndexOrZero
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"For the purpose of easing the instancing of
addressed and addressless interfaces; this
variable takes the value 0 on interfaces with
IP addresses and the corresponding value of
ifIndex for interfaces having no IP address."
::= { ospfIfEntry 2 }
ospfIfAreaId OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"A 32-bit integer uniquely identifying the area
to which the interface connects. Area ID
0.0.0.0 is used for the OSPF backbone."
DEFVAL { '00000000'H } -- 0.0.0.0
::= { ospfIfEntry 3 }
ospfIfType OBJECT-TYPE
SYNTAX INTEGER {
broadcast (1),
nbma (2),
pointToPoint (3),
pointToMultipoint (5)
}
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The OSPF interface type.
By way of a default, this field may be intuited
from the corresponding value of ifType.
Broadcast LANs, such as Ethernet and IEEE 802.5,
take the value 'broadcast', X.25 and similar
technologies take the value 'nbma', and links
that are definitively point to point take the
value 'pointToPoint'."
::= { ospfIfEntry 4 }
that's the Address Range, Host and start of Interface tables, and honestly the Interface table is giving main character energy ๐ฆ๐ the MIB definitions are a lot, but every single line matters, so we keep them exact ๐ซถ
Okay bestie, ospfIfAdminStat is up first, and it's giving main character energy ๐ โจ
ospfIfAdminStat OBJECT-TYPE
SYNTAX Status
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The OSPF interface's administrative status.
The value formed on the interface, and the interface
will be advertised as an internal route to some area.
The value 'disabled' denotes that the interface is
external to OSPF."
DEFVAL { enabled }
::= { ospfIfEntry 5 }
ospfIfRtrPriority OBJECT-TYPE
SYNTAX DesignatedRouterPriority
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The priority of this interface. Used in
multi-access networks, this field is used in
the designated router election algorithm. The
value 0 signifies that the router is not eligible
to become the designated router on this particular
network. In the event of a tie in this value,
routers will use their Router ID as a tie breaker."
DEFVAL { 1 }
::= { ospfIfEntry 6 }
ospfIfTransitDelay OBJECT-TYPE
SYNTAX UpToMaxAge
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The estimated number of seconds it takes to
transmit a link state update packet over this
interface. Note that the minimal value SHOULD be
1 second."
DEFVAL { 1 }
::= { ospfIfEntry 7 }
ospfIfRetransInterval OBJECT-TYPE
SYNTAX UpToMaxAge
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The number of seconds between link state advertisement
retransmissions, for adjacencies belonging to this
interface. This value is also used when retransmitting
database description and Link State request packets.
Note that minimal value SHOULD be 1 second."
DEFVAL { 5 }
::= { ospfIfEntry 8 }
ospfIfHelloInterval OBJECT-TYPE
SYNTAX HelloRange
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The length of time, in seconds, between the Hello packets
that the router sends on the interface. This value must be
the same for all routers attached to a common network."
DEFVAL { 10 }
::= { ospfIfEntry 9 }
ospfIfRtrDeadInterval OBJECT-TYPE
SYNTAX PositiveInteger
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The number of seconds that a router's Hello packets have
not been seen before its neighbors declare the router down.
This should be some multiple of the Hello interval. This
value must be the same for all routers attached to a common
network."
DEFVAL { 40 }
::= { ospfIfEntry 10 }
ospfIfPollInterval OBJECT-TYPE
SYNTAX PositiveInteger
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The larger time interval, in seconds, between the Hello
packets sent to an inactive non-broadcast multi-access
neighbor."
DEFVAL { 120 }
::= { ospfIfEntry 11 }
ospfIfState OBJECT-TYPE
SYNTAX INTEGER {
down (1),
loopback (2),
waiting (3),
pointToPoint (4),
designatedRouter (5),
backupDesignatedRouter (6),
otherDesignatedRouter (7)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The OSPF Interface State."
DEFVAL { down }
::= { ospfIfEntry 12 }
ospfIfDesignatedRouter OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The IP address of the designated router."
DEFVAL { '00000000'H } -- 0.0.0.0
::= { ospfIfEntry 13 }
ospfIfBackupDesignatedRouter OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The IP address of the backup designated
router."
DEFVAL { '00000000'H } -- 0.0.0.0
::= { ospfIfEntry 14 }
Next up, the event counter and the auth key objects, and yes, there's a whole safety talk in there that you need to read ๐๐ฅ
ospfIfEvents OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of times this OSPF interface has
changed its state or an error has occurred.
Discontinuities in the value of this counter can occur
at re-initialization of the management system, and at other
times as indicated by the value of ospfDiscontinuityTime."
::= { ospfIfEntry 15 }
ospfIfAuthKey OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (0..256))
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The cleartext password used as an OSPF
authentication key when simplePassword security
is enabled. This object does not access any OSPF
cryptogaphic (e.g., MD5) authentication key under
any circumstance.
If the key length is shorter than 8 octets, the
agent will left adjust and zero fill to 8 octets.
Unauthenticated interfaces need no authentication
key, and simple password authentication cannot use
a key of more than 8 octets.
Note that the use of simplePassword authentication
is NOT recommended when there is concern regarding
attack upon the OSPF system. SimplePassword
authentication is only sufficient to protect against
accidental misconfigurations because it re-uses
cleartext passwords [RFC1704].
When read, ospfIfAuthKey always returns an octet
string of length zero."
REFERENCE
"OSPF Version 2, Section 9 The Interface Data
Structure"
DEFVAL { '0000000000000000'H } -- 0.0.0.0.0.0.0.0
::= { ospfIfEntry 16 }
ospfIfStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfIfEntry 17 }
ospfIfMulticastForwarding OBJECT-TYPE
SYNTAX INTEGER {
blocked (1), -- no multicast forwarding
multicast (2), -- using multicast address
unicast (3) -- to each OSPF neighbor
}
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The way multicasts should be forwarded on this
interface: not forwarded, forwarded as data
link multicasts, or forwarded as data link
unicasts. Data link multicasting is not
meaningful on point-to-point and NBMA interfaces,
and setting ospfMulticastForwarding to 0 effectively
disables all multicast forwarding."
DEFVAL { blocked }
::= { ospfIfEntry 18 }
ospfIfDemand OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"Indicates whether Demand OSPF procedures (hello
suppression to FULL neighbors and setting the
DoNotAge flag on propagated LSAs) should be
performed on this interface."
DEFVAL { false }
::= { ospfIfEntry 19 }
ospfIfAuthType OBJECT-TYPE
SYNTAX OspfAuthenticationType
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The authentication type specified for an interface.
Note that this object can be used to engage
in significant attacks against an OSPF router."
REFERENCE
"OSPF Version 2, Appendix D Authentication"
DEFVAL { none } -- no authentication, by default
::= { ospfIfEntry 20 }
โ ๏ธ bestie, ospfIfAuthKey and ospfIfAuthType are both giving "handle with care" energy, so read those descriptions twice ๐
The last few objects are the LSA count, the checksum sum, and the router IDs for the DR and BDR ๐ง๐
ospfIfLsaCount OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The total number of link-local link state advertisements
in this interface's link-local link state database."
::= { ospfIfEntry 21 }
ospfIfLsaCksumSum OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The 32-bit unsigned sum of the Link State
Advertisements' LS checksums contained in this
interface's link-local link state database.
The sum can be used to determine if there has
been a change in the interface's link state
database and to compare the interface link state
database of routers attached to the same subnet."
::= { ospfIfEntry 22 }
ospfIfDesignatedRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The Router ID of the designated router."
::= { ospfIfEntry 23 }
ospfIfBackupDesignatedRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The Router ID of the backup designated router."
::= { ospfIfEntry 24 }
okay bestie, now we're in the Interface Metric Table ๐ this one is basically the Interface Table's bestie ๐ซถ it's where each interface gets its metric for each type of service ๐ฆ
-- OSPF Interface Metric Table
ospfIfMetricTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfIfMetricEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Metric Table describes the metrics to be advertised
for a specified interface at the various types of service.
As such, this table is an adjunct of the OSPF Interface
Table.
Types of service, as defined by RFC 791, have the ability
to request low delay, high bandwidth, or reliable linkage.
For the purposes of this specification, the measure of
bandwidth:
Metric = referenceBandwidth / ifSpeed
is the default value.
The default reference bandwidth is 10^8.
For multiple link interfaces, note that ifSpeed is the sum
of the individual link speeds. This yields a number having
the following typical values:
Network Type/bit rate Metric
>= 100 MBPS 1
Ethernet/802.3 10
E1 48
T1 (ESF) 65
64 KBPS 1562
56 KBPS 1785
19.2 KBPS 5208
9.6 KBPS 10416
Routes that are not specified use the default
(TOS 0) metric.
Note that the default reference bandwidth can be configured
using the general group object ospfReferenceBandwidth."
REFERENCE
"OSPF Version 2, Appendix C.3 Router interface
parameters"
::= { ospf 8 }
so the default metric is the measure of bandwidth, Metric = referenceBandwidth / ifSpeed โจ the default reference bandwidth is 10^8, and for multi-link interfaces ifSpeed is the sum of all the link speeds ๐ there's a little cheat sheet of typical values right in the description, and routes that aren't specified just fall back to the default (TOS 0) metric ๐ธ and if you want a different reference bandwidth, you can set it with ospfReferenceBandwidth in the general group ๐
ospfIfMetricEntry OBJECT-TYPE
SYNTAX OspfIfMetricEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A particular TOS metric for a non-virtual interface
identified by the interface index.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"OSPF Version 2, Appendix C.3 Router interface
parameters"
INDEX { ospfIfMetricIpAddress,
ospfIfMetricAddressLessIf,
ospfIfMetricTOS }
::= { ospfIfMetricTable 1 }
OspfIfMetricEntry ::=
SEQUENCE {
ospfIfMetricIpAddress
IpAddress,
ospfIfMetricAddressLessIf
InterfaceIndexOrZero,
ospfIfMetricTOS
TOSType,
ospfIfMetricValue
Metric,
ospfIfMetricStatus
RowStatus
}
ospfIfMetricIpAddress OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The IP address of this OSPF interface. On row
creation, this can be derived from the instance."
::= { ospfIfMetricEntry 1 }
ospfIfMetricAddressLessIf OBJECT-TYPE
SYNTAX InterfaceIndexOrZero
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"For the purpose of easing the instancing of
addressed and addressless interfaces; this
variable takes the value 0 on interfaces with
IP addresses and the value of ifIndex for
interfaces having no IP address. On row
creation, this can be derived from the instance."
::= { ospfIfMetricEntry 2 }
ospfIfMetricTOS OBJECT-TYPE
SYNTAX TOSType
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The Type of Service metric being referenced.
On row creation, this can be derived from the
instance."
::= { ospfIfMetricEntry 3 }
ospfIfMetricValue OBJECT-TYPE
SYNTAX Metric
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The metric of using this Type of Service on
this interface. The default value of the TOS 0
metric is 10^8 / ifSpeed."
::= { ospfIfMetricEntry 4 }
ospfIfMetricStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfIfMetricEntry 5 }
the entry is indexed by ospfIfMetricIpAddress, ospfIfMetricAddressLessIf and ospfIfMetricTOS ๐ง the first two are read-only because they started out as SMIv1 indexes, and so is ospfIfMetricTOS ๐ ospfIfMetricValue and ospfIfMetricStatus are the read-create ones, so you can actually write to them ๐ and the entry description says the info in this table is persistent, so when you write to it the entity has to save the change to non-volatile storage ๐ that's the whole vibe, iykyk ๐
okay bestie, we're in the virtual interface table now ๐ฆ the stuff that describes the virtual links a router is set up to run ๐ the code is verbatim, so every single character is staying put โจ
-- OSPF Virtual Interface Table
ospfVirtIfTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfVirtIfEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Information about this router's virtual interfaces
that the OSPF Process is configured to carry on."
REFERENCE
"OSPF Version 2, Appendix C.4 Virtual link
parameters"
::= { ospf 9 }
ospfVirtIfEntry OBJECT-TYPE
SYNTAX OspfVirtIfEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Information about a single virtual interface.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
INDEX { ospfVirtIfAreaId, ospfVirtIfNeighbor }
::= { ospfVirtIfTable 1 }
OspfVirtIfEntry ::=
SEQUENCE {
ospfVirtIfAreaId
AreaID,
ospfVirtIfNeighbor
RouterID,
ospfVirtIfTransitDelay
UpToMaxAge,
ospfVirtIfRetransInterval
UpToMaxAge,
ospfVirtIfHelloInterval
HelloRange,
ospfVirtIfRtrDeadInterval
PositiveInteger,
ospfVirtIfState
INTEGER,
ospfVirtIfEvents
Counter32,
ospfVirtIfAuthKey
OCTET STRING,
ospfVirtIfStatus
RowStatus,
ospfVirtIfAuthType
OspfAuthenticationType,
ospfVirtIfLsaCount
Gauge32,
ospfVirtIfLsaCksumSum
Unsigned32
}
ospfVirtIfAreaId OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The transit area that the virtual link
traverses. By definition, this is not 0.0.0.0."
::= { ospfVirtIfEntry 1 }
ospfVirtIfNeighbor OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The Router ID of the virtual neighbor."
::= { ospfVirtIfEntry 2 }
ospfVirtIfTransitDelay OBJECT-TYPE
SYNTAX UpToMaxAge
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The estimated number of seconds it takes to
transmit a Link State update packet over this
interface. Note that the minimal value SHOULD be
1 second."
DEFVAL { 1 }
::= { ospfVirtIfEntry 3 }
ospfVirtIfRetransInterval OBJECT-TYPE
SYNTAX UpToMaxAge
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The number of seconds between link state
avertisement retransmissions, for adjacencies
belonging to this interface. This value is
also used when retransmitting database
description and Link State request packets. This
value should be well over the expected
round-trip time. Note that the minimal value SHOULD be
1 second."
DEFVAL { 5 }
::= { ospfVirtIfEntry 4 }
ospfVirtIfHelloInterval OBJECT-TYPE
SYNTAX HelloRange
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The length of time, in seconds, between the
Hello packets that the router sends on the
interface. This value must be the same for the
virtual neighbor."
DEFVAL { 10 }
::= { ospfVirtIfEntry 5 }
ospfVirtIfRtrDeadInterval OBJECT-TYPE
SYNTAX PositiveInteger
UNITS "seconds"
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The number of seconds that a router's Hello
packets have not been seen before its
neighbors declare the router down. This should be
some multiple of the Hello interval. This
value must be the same for the virtual neighbor."
DEFVAL { 60 }
::= { ospfVirtIfEntry 6 }
ospfVirtIfState OBJECT-TYPE
SYNTAX INTEGER {
down (1), -- these use the same encoding
pointToPoint (4) -- as the ospfIfTable
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"OSPF virtual interface states."
DEFVAL { down }
::= { ospfVirtIfEntry 7 }
ospfVirtIfEvents OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of state changes or error events on
this virtual link.
Discontinuities in the value of this counter can occur
at re-initialization of the management system, and at other
times as indicated by the value of ospfDiscontinuityTime."
::= { ospfVirtIfEntry 8 }
ospfVirtIfAuthKey OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(0..256))
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The cleartext password used as an OSPF
authentication key when simplePassword security
is enabled. This object does not access any OSPF
cryptogaphic (e.g., MD5) authentication key under
any circumstance.
If the key length is shorter than 8 octets, the
agent will left adjust and zero fill to 8 octets.
Unauthenticated interfaces need no authentication
key, and simple password authentication cannot use
a key of more than 8 octets.
Note that the use of simplePassword authentication
is NOT recommended when there is concern regarding
attack upon the OSPF system. SimplePassword
authentication is only sufficient to protect against
accidental misconfigurations because it re-uses
cleartext passwords. [RFC1704]
When read, ospfIfAuthKey always returns an octet
string of length zero."
REFERENCE
"OSPF Version 2, Section 9 The Interface Data
Structure"
DEFVAL { '0000000000000000'H } -- 0.0.0.0.0.0.0.0
::= { ospfVirtIfEntry 9 }
ospfVirtIfStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfVirtIfEntry 10 }
ospfVirtIfAuthType OBJECT-TYPE
SYNTAX OspfAuthenticationType
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The authentication type specified for a virtual interface.
Note that this object can be used to engage
in significant attacks against an OSPF router."
REFERENCE
"OSPF Version 2, Appendix E Authentication"
DEFVAL { none } -- no authentication, by default
::= { ospfVirtIfEntry 11 }
ospfVirtIfLsaCount OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The total number of link-local link state advertisements
in this virtual interface's link-local link state database."
::= { ospfVirtIfEntry 12 }
ospfVirtIfLsaCksumSum OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The 32-bit unsigned sum of the link state
advertisements' LS checksums contained in this
virtual interface's link-local link state database.
The sum can be used to determine if there has
been a change in the virtual interface's link state
database, and to compare the virtual interface
link state database of the virtual neighbors."
::= { ospfVirtIfEntry 13 }
Okay bestie, now we're in the OSPF Neighbor Table ๐ This table is basically the guest list for every non-virtual neighbor the OSPF router can see around it ๐ฆ Each row is one neighbor, and the rows are indexed by the neighbor's IP address plus an AddressLess index. Lowkey iconic design โจ
-- OSPF Neighbor Table
ospfNbrTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfNbrEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A table describing all non-virtual neighbors
in the locality of the OSPF router."
REFERENCE
"OSPF Version 2, Section 10 The Neighbor Data
Structure"
::= { ospf 10 }
ospfNbrEntry OBJECT-TYPE
SYNTAX OspfNbrEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The information regarding a single neighbor.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"OSPF Version 2, Section 10 The Neighbor Data
Structure"
INDEX { ospfNbrIpAddr, ospfNbrAddressLessIndex }
::= { ospfNbrTable 1 }
OspfNbrEntry ::=
SEQUENCE {
ospfNbrIpAddr
IpAddress,
ospfNbrAddressLessIndex
InterfaceIndexOrZero,
ospfNbrRtrId
RouterID,
ospfNbrOptions
Integer32,
ospfNbrPriority
DesignatedRouterPriority,
ospfNbrState
INTEGER,
ospfNbrEvents
Counter32,
ospfNbrLsRetransQLen
Gauge32,
ospfNbmaNbrStatus
RowStatus,
ospfNbmaNbrPermanence
INTEGER,
ospfNbrHelloSuppressed
TruthValue,
ospfNbrRestartHelperStatus
INTEGER,
ospfNbrRestartHelperAge
Unsigned32,
ospfNbrRestartHelperExitReason
INTEGER
}
ospfNbrIpAddr OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The IP address this neighbor is using in its
IP source address. Note that, on addressless
links, this will not be 0.0.0.0 but the
address of another of the neighbor's interfaces."
::= { ospfNbrEntry 1 }
ospfNbrAddressLessIndex OBJECT-TYPE
SYNTAX InterfaceIndexOrZero
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"On an interface having an IP address, zero.
On addressless interfaces, the corresponding
value of ifIndex in the Internet Standard MIB.
On row creation, this can be derived from the
instance."
::= { ospfNbrEntry 2 }
ospfNbrRtrId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A 32-bit integer (represented as a type
IpAddress) uniquely identifying the neighboring
router in the Autonomous System."
DEFVAL { '00000000'H } -- 0.0.0.0
::= { ospfNbrEntry 3 }
ospfNbrOptions OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A bit mask corresponding to the neighbor's
options field.
Bit 0, if set, indicates that the system will
operate on Type of Service metrics other than
TOS 0. If zero, the neighbor will ignore all
metrics except the TOS 0 metric.
Bit 1, if set, indicates that the associated
area accepts and operates on external
information; if zero, it is a stub area.
Bit 2, if set, indicates that the system is
capable of routing IP multicast datagrams, that is
that it implements the multicast extensions to
OSPF.
Bit 3, if set, indicates that the associated
area is an NSSA. These areas are capable of
carrying type-7 external advertisements, which
are translated into type-5 external advertisements
at NSSA borders."
REFERENCE
"OSPF Version 2, Section 12.1.2 Options"
DEFVAL { 0 }
::= { ospfNbrEntry 4 }
ospfNbrPriority OBJECT-TYPE
SYNTAX DesignatedRouterPriority
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"The priority of this neighbor in the designated
router election algorithm. The value 0 signifies
that the neighbor is not eligible to become
the designated router on this particular network."
DEFVAL { 1 }
::= { ospfNbrEntry 5 }
ospfNbrState OBJECT-TYPE
SYNTAX INTEGER {
down (1),
attempt (2),
init (3),
twoWay (4),
exchangeStart (5),
exchange (6),
loading (7),
full (8)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The state of the relationship with this neighbor."
REFERENCE
"OSPF Version 2, Section 10.1 Neighbor States"
DEFVAL { down }
::= { ospfNbrEntry 6 }
ospfNbrEvents OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of times this neighbor relationship
has changed state or an error has occurred.
Discontinuities in the value of this counter can occur
at re-initialization of the management system, and at other
times as indicated by the value of ospfDiscontinuityTime."
::= { ospfNbrEntry 7 }
ospfNbrLsRetransQLen OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The current length of the retransmission
queue."
::= { ospfNbrEntry 8 }
ospfNbmaNbrStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfNbrEntry 9 }
ospfNbmaNbrPermanence OBJECT-TYPE
SYNTAX INTEGER {
dynamic (1), -- learned through protocol
permanent (2) -- configured address
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This variable displays the status of the entry;
'dynamic' and 'permanent' refer to how the neighbor
became known."
DEFVAL { permanent }
::= { ospfNbrEntry 10 }
ospfNbrHelloSuppressed OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Indicates whether Hellos are being suppressed
to the neighbor."
::= { ospfNbrEntry 11 }
ospfNbrRestartHelperStatus OBJECT-TYPE
SYNTAX INTEGER { notHelping (1),
helping (2)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Indicates whether the router is acting
as a graceful restart helper for the neighbor."
::= { ospfNbrEntry 12 }
ospfNbrRestartHelperAge OBJECT-TYPE
SYNTAX Unsigned32
UNITS "seconds"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Remaining time in current OSPF graceful restart
interval, if the router is acting as a restart
helper for the neighbor."
::= { ospfNbrEntry 13 }
ospfNbrRestartHelperExitReason OBJECT-TYPE
SYNTAX INTEGER { none (1), -- not attempted
inProgress (2), -- restart in
-- progress
completed (3), -- successfully
-- completed
timedOut (4), -- timed out
topologyChanged (5) -- aborted due to
-- topology
-- change.
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Describes the outcome of the last attempt at acting
as a graceful restart helper for the neighbor."
::= { ospfNbrEntry 14 }
The big takeaway ๐ฅ The table is indexed by two objects, and the entry-level DESCRIPTION says the entity SHOULD save changes to non-volatile storage, so this data is meant to stick around ๐
Okay bestie, we're on the virtual neighbor table now, and it's giving read-only realness ๐ฆ Virtual links get configured in the Virtual Interface Table, so this table just shows you who's on the other end. Ngl, that's very clean.
The table is indexed by Area and Router ID, and the Router ID bit is a whole mood. ๐
-- OSPF Virtual Neighbor Table
ospfVirtNbrTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfVirtNbrEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"This table describes all virtual neighbors.
Since virtual links are configured
in the Virtual Interface Table, this table is read-only."
REFERENCE
"OSPF Version 2, Section 15 Virtual Links"
::= { ospf 11 }
ospfVirtNbrEntry OBJECT-TYPE
SYNTAX OspfVirtNbrEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Virtual neighbor information."
INDEX { ospfVirtNbrArea, ospfVirtNbrRtrId }
::= { ospfVirtNbrTable 1 }
OspfVirtNbrEntry ::=
SEQUENCE {
ospfVirtNbrArea
AreaID,
ospfVirtNbrRtrId
RouterID,
ospfVirtNbrIpAddr
IpAddress,
ospfVirtNbrOptions
Integer32,
ospfVirtNbrState
INTEGER,
ospfVirtNbrEvents
Counter32,
ospfVirtNbrLsRetransQLen
Gauge32,
ospfVirtNbrHelloSuppressed
TruthValue,
ospfVirtNbrRestartHelperStatus
INTEGER,
ospfVirtNbrRestartHelperAge
Unsigned32,
ospfVirtNbrRestartHelperExitReason
INTEGER
}
ospfVirtNbrArea OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The Transit Area Identifier."
::= { ospfVirtNbrEntry 1 }
ospfVirtNbrRtrId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"A 32-bit integer uniquely identifying the
neighboring router in the Autonomous System."
::= { ospfVirtNbrEntry 2 }
ospfVirtNbrIpAddr OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The IP address this virtual neighbor is using."
::= { ospfVirtNbrEntry 3 }
ospfVirtNbrOptions OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A bit mask corresponding to the neighbor's
options field.
Bit 1, if set, indicates that the system will
operate on Type of Service metrics other than
TOS 0. If zero, the neighbor will ignore all
metrics except the TOS 0 metric.
Bit 2, if set, indicates that the system is
network multicast capable, i.e., that it
implements OSPF multicast routing."
::= { ospfVirtNbrEntry 4 }
ospfVirtNbrState OBJECT-TYPE
SYNTAX INTEGER {
down (1),
attempt (2),
init (3),
twoWay (4),
exchangeStart (5),
exchange (6),
loading (7),
full (8)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The state of the virtual neighbor relationship."
::= { ospfVirtNbrEntry 5 }
ospfVirtNbrEvents OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of times this virtual link has
changed its state or an error has occurred.
Discontinuities in the value of this counter can occur
at re-initialization of the management system, and at other
times as indicated by the value of ospfDiscontinuityTime."
::= { ospfVirtNbrEntry 6 }
ospfVirtNbrLsRetransQLen OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The current length of the retransmission
queue."
::= { ospfVirtNbrEntry 7 }
ospfVirtNbrHelloSuppressed OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Indicates whether Hellos are being suppressed
to the neighbor."
::= { ospfVirtNbrEntry 8 }
ospfVirtNbrRestartHelperStatus OBJECT-TYPE
SYNTAX INTEGER { notHelping (1),
helping (2)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Indicates whether the router is acting
as a graceful restart helper for the neighbor."
::= { ospfVirtNbrEntry 9 }
ospfVirtNbrRestartHelperAge OBJECT-TYPE
SYNTAX Unsigned32
UNITS "seconds"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Remaining time in current OSPF graceful restart
interval, if the router is acting as a restart
helper for the neighbor."
::= { ospfVirtNbrEntry 10 }
ospfVirtNbrRestartHelperExitReason OBJECT-TYPE
SYNTAX INTEGER { none (1), -- not attempted
inProgress (2), -- restart in
-- progress
completed (3), -- successfully
-- completed
timedOut (4), -- timed out
topologyChanged (5) -- aborted due to
-- topology
-- change.
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Describes the outcome of the last attempt at acting
as a graceful restart helper for the neighbor."
::= { ospfVirtNbrEntry 11 }
-- OSPF Link State Database, External
ospfExtLsdbTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfExtLsdbEntry
MAX-ACCESS not-accessible
STATUS deprecated
DESCRIPTION
"The OSPF Process's external LSA link state database.
This table is identical to the OSPF LSDB Table
in format, but contains only external link state
advertisements. The purpose is to allow external
LSAs to be displayed once for the router rather
than once in each non-stub area.
Note that external LSAs are also in the AS-scope link state
database."
REFERENCE
"OSPF Version 2, Section 12 Link State Advertisements"
::= { ospf 12 }
ospfExtLsdbEntry OBJECT-TYPE
SYNTAX OspfExtLsdbEntry
MAX-ACCESS not-accessible
STATUS deprecated
DESCRIPTION
"A single link state advertisement."
INDEX { ospfExtLsdbType, ospfExtLsdbLsid, ospfExtLsdbRouterId }
::= { ospfExtLsdbTable 1 }
OspfExtLsdbEntry ::=
SEQUENCE {
ospfExtLsdbType
INTEGER,
ospfExtLsdbLsid
IpAddress,
ospfExtLsdbRouterId
RouterID,
ospfExtLsdbSequence
Integer32,
ospfExtLsdbAge
Integer32,
ospfExtLsdbChecksum
Integer32,
ospfExtLsdbAdvertisement
OCTET STRING
}
ospfExtLsdbType OBJECT-TYPE
SYNTAX INTEGER {
asExternalLink (5)
}
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS deprecated
DESCRIPTION
"The type of the link state advertisement.
Each link state type has a separate advertisement
format."
REFERENCE
"OSPF Version 2, Appendix A.4.1 The Link State
Advertisement header"
::= { ospfExtLsdbEntry 1 }
ospfExtLsdbLsid OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS deprecated
DESCRIPTION
"The Link State ID is an LS Type Specific field
containing either a Router ID or an IP address;
it identifies the piece of the routing domain
that is being described by the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.4 Link State ID"
::= { ospfExtLsdbEntry 2 }
ospfExtLsdbRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS deprecated
DESCRIPTION
"The 32-bit number that uniquely identifies the
originating router in the Autonomous System."
REFERENCE
"OSPF Version 2, Appendix C.1 Global parameters"
::= { ospfExtLsdbEntry 3 }
ospfExtLsdbSequence OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"The sequence number field is a signed 32-bit
integer. It starts with the value '80000001'h,
or -'7FFFFFFF'h, and increments until '7FFFFFFF'h.
Thus, a typical sequence number will be very negative.
It is used to detect old and duplicate link state
advertisements. The space of sequence numbers is linearly
ordered. The larger the sequence number, the more recent
the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.6 LS sequence
number"
::= { ospfExtLsdbEntry 4 }
ospfExtLsdbAge OBJECT-TYPE
SYNTAX Integer32 -- Should be 0..MaxAge, except when
-- doNotAge bit is set
UNITS "seconds"
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"This field is the age of the link state
advertisement in seconds."
REFERENCE
"OSPF Version 2, Section 12.1.1 LS age"
::= { ospfExtLsdbEntry 5 }
ospfExtLsdbChecksum OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"This field is the checksum of the complete
contents of the advertisement, excepting the
age field. The age field is excepted so that
an advertisement's age can be incremented
without updating the checksum. The checksum
used is the same that is used for ISO
connectionless datagrams; it is commonly referred
to as the Fletcher checksum."
REFERENCE
"OSPF Version 2, Section 12.1.7 LS checksum"
::= { ospfExtLsdbEntry 6 }
ospfExtLsdbAdvertisement OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(36))
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"The entire link state advertisement, including
its header."
REFERENCE
"OSPF Version 2, Section 12 Link State
Advertisements"
::= { ospfExtLsdbEntry 7 }
Okay so the big picture is that the Virtual Neighbor Table is read-only, its entries are indexed by Transit Area and Router ID, and it reports state, events, retransmission queue length, Hello suppression, and graceful restart helper info. ๐ธ
The External LSDB table is marked deprecated, which means it's giving retired legend but still in the lineup for compatibility. ๐
OSPF Use of the CIDR Route Table ๐
okay so this next bit is all about how OSPF uses the CIDR route table, and it's giving main character energy ๐
first up, ospfRouteGroup is a group that hangs off ospf, numbered 13, so it's basically OSPF's own little corner of the routing world ๐ธ
-- OSPF Use of the CIDR Route Table
ospfRouteGroup OBJECT IDENTIFIER ::= { ospf 13 }
-- The IP Forwarding Table defines a number of objects for use by
-- the routing protocol to externalize its information. Most of
-- the variables (ipForwardDest, ipForwardMask, ipForwardPolicy,
-- ipForwardNextHop, ipForwardIfIndex, ipForwardType,
-- ipForwardProto, ipForwardAge, and ipForwardNextHopAS) are
-- defined there.
-- Those that leave some discretion are defined here.
-- ipCidrRouteProto is, of course, ospf (13).
-- ipCidrRouteAge is the time since the route was first
-- calculated, as opposed to the time since the last SPF run.
-- ipCidrRouteInfo is an OBJECT IDENTIFIER for use by the routing
-- protocol. The following values shall be found there depending
-- on the way the route was calculated.
so the IP Forwarding Table already owns most of the good stuff (ipForwardDest, ipForwardMask, ipForwardPolicy, ipForwardNextHop, ipForwardIfIndex, ipForwardType, ipForwardProto, ipForwardAge, and ipForwardNextHopAS), and OSPF only gets to define the bits that are left up to it โจ ipCidrRouteProto is ospf (13), obvs ๐ ipCidrRouteAge is how long ago the route was first calculated, which is different from the time since the last SPF run, so don't mix those up ๐ and ipCidrRouteInfo is an OID for the routing protocol, with the value depending on how the route got calculated ๐ง
ospfIntraArea OBJECT IDENTIFIER ::= { ospfRouteGroup 1 }
ospfInterArea OBJECT IDENTIFIER ::= { ospfRouteGroup 2 }
ospfExternalType1 OBJECT IDENTIFIER ::= { ospfRouteGroup 3 }
ospfExternalType2 OBJECT IDENTIFIER ::= { ospfRouteGroup 4 }
-- ipCidrRouteMetric1 is, by definition, the primary routing
-- metric. Therefore, it should be the metric that route
-- selection is based on. For intra-area and inter-area routes,
-- it is an OSPF metric. For External Type 1 (comparable value)
-- routes, it is an OSPF metric plus the External Metric. For
-- external Type 2 (non-comparable value) routes, it is the
-- external metric.
-- ipCidrRouteMetric2 is, by definition, a secondary routing
-- metric. Therefore, it should be the metric that breaks a tie
-- among routes having equal metric1 values and the same
-- calculation rule. For intra-area, inter-area routes, and
-- External Type 1 (comparable value) routes, it is unused. For
-- External Type 2 (non-comparable value) routes, it is the metric
-- to the AS border router.
-- ipCidrRouteMetric3, ipCidrRouteMetric4, and ipCidrRouteMetric5
-- are unused.
so those four OIDs are the calculation flavours: ospfIntraArea, ospfInterArea, ospfExternalType1 and ospfExternalType2 ๐ฆ now the metrics are where it gets spicy ๐ถ๏ธ ipCidrRouteMetric1 is the primary metric, so it's the one route selection is supposed to be based on. for intra-area and inter-area routes it's an OSPF metric, for External Type 1 (comparable value) routes it's an OSPF metric plus the External Metric, and for External Type 2 (non-comparable value) routes it's just the external metric ๐ฅ ipCidrRouteMetric2 is the secondary one that breaks ties between routes with equal metric1 values and the same calculation rule. it's unused for intra-area, inter-area and External Type 1 routes, but for External Type 2 routes it's the metric to the AS border router ๐ and ipCidrRouteMetric3, ipCidrRouteMetric4 and ipCidrRouteMetric5 are unused, period ๐
The OSPF Area Aggregate Table ๐
this table is the upgrade that replaces the OSPF Area Summary Table, and it's an extension built for CIDR routers, so it's very much the new hotness โจ it's an adjunct to the Area Table, and it describes the address aggregates that are set up to be propagated out of an area. the whole point is to reduce how much info is known beyond an area's borders, which is lowkey genius ๐ง
each range is an IP address and network mask pair. so a class B range like X.X.X.X with mask 255.255.0.0 covers everything from X.X.0.0 to X.X.255.255 ๐ and if ranges overlap, like 10.0.0.0 with mask 255.0.0.0 and 10.1.0.0 with mask 255.255.0.0, the most specific match is the one that wins ๐
ospfAreaAggregateTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfAreaAggregateEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Area Aggregate Table acts as an adjunct
to the Area Table. It describes those address aggregates
that are configured to be propagated from an area.
Its purpose is to reduce the amount of information
that is known beyond an Area's borders.
It contains a set of IP address ranges
specified by an IP address/IP network mask pair.
For example, a class B address range of X.X.X.X
with a network mask of 255.255.0.0 includes all IP
addresses from X.X.0.0 to X.X.255.255.
Note that if ranges are configured such that one range
subsumes another range (e.g., 10.0.0.0 mask 255.0.0.0
and 10.1.0.0 mask 255.255.0.0),
the most specific match is the preferred one."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospf 14 }
each row is one area aggregate entry, and the index is made of ospfAreaAggregateAreaID, ospfAreaAggregateLsdbType, ospfAreaAggregateNet and ospfAreaAggregateMask ๐ the entry's description covers what happens when someone writes to it, so read the block below for the details ๐
ospfAreaAggregateEntry OBJECT-TYPE
SYNTAX OspfAreaAggregateEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A single area aggregate entry.
Information in this table is persistent and when this object
is written the entity SHOULD save the change to non-volatile
storage."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
INDEX { ospfAreaAggregateAreaID, ospfAreaAggregateLsdbType,
ospfAreaAggregateNet, ospfAreaAggregateMask }
::= { ospfAreaAggregateTable 1 }
OspfAreaAggregateEntry ::=
SEQUENCE {
ospfAreaAggregateAreaID
AreaID,
ospfAreaAggregateLsdbType
INTEGER,
ospfAreaAggregateNet
IpAddress,
ospfAreaAggregateMask
IpAddress,
ospfAreaAggregateStatus
RowStatus,
ospfAreaAggregateEffect
INTEGER,
ospfAreaAggregateExtRouteTag
Unsigned32
}
the columns are next, and they're all pretty chill ๐ first up is the area the aggregate lives in, which is read-only because it started life as an SMIv1 index ๐
ospfAreaAggregateAreaID OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The area within which the address aggregate is to be
found."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfAreaAggregateEntry 1 }
next is the type of the aggregate, which can be summaryLink (3) or nssaExternalLink (7). it says which Lsdb type the aggregate applies to, and it's read-only for the same SMIv1 index reason ๐
ospfAreaAggregateLsdbType OBJECT-TYPE
SYNTAX INTEGER {
summaryLink (3),
nssaExternalLink (7)
}
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The type of the address aggregate. This field
specifies the Lsdb type that this address
aggregate applies to."
REFERENCE
"OSPF Version 2, Appendix A.4.1 The Link State
Advertisement header"
::= { ospfAreaAggregateEntry 2 }
then we get the net, which is the IP address of the net or subnet the range points at ๐ธ
ospfAreaAggregateNet OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The IP address of the net or subnet indicated
by the range."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfAreaAggregateEntry 3 }
the mask goes with it, and it's the subnet mask that pertains to that net or subnet ๐ง
ospfAreaAggregateMask OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only -- read-only since originally an
-- SMIv1 index
STATUS current
DESCRIPTION
"The subnet mask that pertains to the net or
subnet."
REFERENCE
"OSPF Version 2, Appendix C.2 Area parameters"
::= { ospfAreaAggregateEntry 4 }
the status column is the RowStatus one that lets you manage the table, so you can create, construct and destroy rows ๐ ๏ธ the bit to remember is that its value has no effect on whether the other objects in the row can be modified ๐ซถ
ospfAreaAggregateStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"This object permits management of the table by
facilitating actions such as row creation,
construction, and destruction.
The value of this object has no effect on
whether other objects in this conceptual row can be
modified."
::= { ospfAreaAggregateEntry 5 }
effect is where you decide what happens to subnets that get subsumed by a range. they either trigger the advertisement of the aggregate (advertiseMatching), or they just don't get advertised outside the area at all (doNotAdvertiseMatching). the default is advertiseMatching ๐ฅ
ospfAreaAggregateEffect OBJECT-TYPE
SYNTAX INTEGER {
advertiseMatching (1),
doNotAdvertiseMatching (2)
}
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"Subnets subsumed by ranges either trigger the
advertisement of the indicated aggregate
(advertiseMatching) or result in the subnet's not
being advertised at all outside the area."
DEFVAL { advertiseMatching }
::= { ospfAreaAggregateEntry 6 }
and last but not least, the external route tag column. it's the tag that gets put into NSSA (type-7) LSAs, and it defaults to 0 ๐
ospfAreaAggregateExtRouteTag OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"External route tag to be included in NSSA (type-7)
LSAs."
DEFVAL { 0 }
::= { ospfAreaAggregateEntry 7 }
OSPF Link State Database, link-local for non-virtual links โจ
okay bestie, this part is all about the link-local LSDB ๐ฆ It's the table that lets you see link-local LSAs for each non-virtual interface, and it's built to support type-9 LSAs from The OSPF Opaque LSA Option ๐ The MIB module below is copied exactly, because the details matter ๐
-- OSPF Link State Database, link-local for non-virtual links
ospfLocalLsdbTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfLocalLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The OSPF Process's link-local link state database
for non-virtual links.
This table is identical to the OSPF LSDB Table
in format, but contains only link-local Link State
Advertisements for non-virtual links. The purpose is
to allow link-local LSAs to be displayed for each
non-virtual interface. This table is implemented to
support type-9 LSAs that are defined
in 'The OSPF Opaque LSA Option'."
REFERENCE
"OSPF Version 2, Section 12 Link State Advertisements
and The OSPF Opaque LSA Option"
::= { ospf 17 }
ospfLocalLsdbEntry OBJECT-TYPE
SYNTAX OspfLocalLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A single link state advertisement."
INDEX { ospfLocalLsdbIpAddress, ospfLocalLsdbAddressLessIf,
ospfLocalLsdbType, ospfLocalLsdbLsid, ospfLocalLsdbRouterId
}
::= { ospfLocalLsdbTable 1 }
OspfLocalLsdbEntry ::=
SEQUENCE {
ospfLocalLsdbIpAddress
IpAddress,
ospfLocalLsdbAddressLessIf
InterfaceIndexOrZero,
ospfLocalLsdbType
INTEGER,
ospfLocalLsdbLsid
IpAddress,
ospfLocalLsdbRouterId
RouterID,
ospfLocalLsdbSequence
Integer32,
ospfLocalLsdbAge
Integer32,
ospfLocalLsdbChecksum
Integer32,
ospfLocalLsdbAdvertisement
OCTET STRING
}
ospfLocalLsdbIpAddress OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The IP address of the interface from
which the LSA was received if the interface is
numbered."
REFERENCE
"OSPF Version 2, Appendix C.3 Interface parameters"
::= { ospfLocalLsdbEntry 1 }
ospfLocalLsdbAddressLessIf OBJECT-TYPE
SYNTAX InterfaceIndexOrZero
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The interface index of the interface from
which the LSA was received if the interface is
unnumbered."
REFERENCE
"OSPF Version 2, Appendix C.3 Interface parameters"
::= { ospfLocalLsdbEntry 2 }
ospfLocalLsdbType OBJECT-TYPE
SYNTAX INTEGER { localOpaqueLink (9) }
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The type of the link state advertisement.
Each link state type has a separate
advertisement format."
REFERENCE
"OSPF Version 2, Appendix A.4.1 The Link State
Advertisement header"
::= { ospfLocalLsdbEntry 3 }
ospfLocalLsdbLsid OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Link State ID is an LS Type Specific field
containing a 32-bit identifier in IP address format;
it identifies the piece of the routing domain
that is being described by the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.4 Link State ID"
::= { ospfLocalLsdbEntry 4 }
ospfLocalLsdbRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The 32-bit number that uniquely identifies the
originating router in the Autonomous System."
REFERENCE
"OSPF Version 2, Appendix C.1 Global parameters"
::= { ospfLocalLsdbEntry 5 }
ospfLocalLsdbSequence OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The sequence number field is a signed 32-bit
integer. It starts with the value '80000001'h,
or -'7FFFFFFF'h, and increments until '7FFFFFFF'h.
Thus, a typical sequence number will be very negative.
It is used to detect old and duplicate link state
advertisements. The space of sequence numbers is linearly
ordered. The larger the sequence number, the more recent
the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.6 LS sequence
number"
::= { ospfLocalLsdbEntry 6 }
ospfLocalLsdbAge OBJECT-TYPE
SYNTAX Integer32 -- Should be 0..MaxAge, except when
-- doNotAge bit is set
UNITS "seconds"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the age of the link state
advertisement in seconds."
REFERENCE
"OSPF Version 2, Section 12.1.1 LS age"
::= { ospfLocalLsdbEntry 7 }
ospfLocalLsdbChecksum OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the checksum of the complete
contents of the advertisement, excepting the
age field. The age field is excepted so that
an advertisement's age can be incremented
without updating the checksum. The checksum
used is the same that is used for ISO
connectionless datagrams; it is commonly referred
to as the Fletcher checksum."
REFERENCE
"OSPF Version 2, Section 12.1.7 LS checksum"
::= { ospfLocalLsdbEntry 8 }
ospfLocalLsdbAdvertisement OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (1..65535))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The entire link state advertisement, including
its header.
Note that for variable length LSAs, SNMP agents
may not be able to return the largest string size."
REFERENCE
"OSPF Version 2, Section 12 Link State
Advertisements"
::= { ospfLocalLsdbEntry 9 }
that's the whole local LSDB table!! ๐ธ ready for the next bit whenever you are ๐
OSPF Link State Database, link-local for virtual Links โจ
okay so this section is the virtual link version of the link-local LSDB ๐ฆ it's basically the same table as the OSPF LSDB Table, just filtered down to link-local LSAs that belong to virtual links. the whole point is to let you look at those LSAs for each virtual interface, and it's there to support type-9 LSAs from The OSPF Opaque LSA Option ๐
ospfVirtLocalLsdbTable is the table itself. it's not-accessible, so you never read it directly, you go through its entries ๐
-- OSPF Link State Database, link-local for virtual Links
ospfVirtLocalLsdbTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfVirtLocalLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The OSPF Process's link-local link state database
for virtual links.
This table is identical to the OSPF LSDB Table
in format, but contains only link-local Link State
Advertisements for virtual links. The purpose is to
allow link-local LSAs to be displayed for each virtual
interface. This table is implemented to support type-9 LSAs
that are defined in 'The OSPF Opaque LSA Option'."
REFERENCE
"OSPF Version 2, Section 12 Link State
Advertisements and The OSPF Opaque LSA Option"
::= { ospf 18 }
ospfVirtLocalLsdbEntry OBJECT-TYPE
SYNTAX OspfVirtLocalLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A single link state advertisement."
INDEX { ospfVirtLocalLsdbTransitArea,
ospfVirtLocalLsdbNeighbor,
ospfVirtLocalLsdbType,
ospfVirtLocalLsdbLsid,
ospfVirtLocalLsdbRouterId
}
::= { ospfVirtLocalLsdbTable 1 }
OspfVirtLocalLsdbEntry ::=
SEQUENCE {
ospfVirtLocalLsdbTransitArea
AreaID,
ospfVirtLocalLsdbNeighbor
RouterID,
ospfVirtLocalLsdbType
INTEGER,
ospfVirtLocalLsdbLsid
IpAddress,
ospfVirtLocalLsdbRouterId
RouterID,
ospfVirtLocalLsdbSequence
Integer32,
ospfVirtLocalLsdbAge
Integer32,
ospfVirtLocalLsdbChecksum
Integer32,
ospfVirtLocalLsdbAdvertisement
OCTET STRING
}
the entry is indexed by five things, so think of each LSA as being pinned down by its transit area, virtual neighbor, type, LSID, and router ID ๐ the entry is just a single link state advertisement ๐ธ
ospfVirtLocalLsdbTransitArea โจ
this one is the transit area that the virtual link goes through. it's never 0.0.0.0, by definition ๐
ospfVirtLocalLsdbTransitArea OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The transit area that the virtual link
traverses. By definition, this is not 0.0.0.0."
REFERENCE
"OSPF Version 2, Appendix C.3 Interface parameters"
::= { ospfVirtLocalLsdbEntry 1 }
ospfVirtLocalLsdbNeighbor โจ
the Router ID of the virtual neighbor, so you know which far-end router this virtual link is talking to ๐ง
ospfVirtLocalLsdbNeighbor OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Router ID of the virtual neighbor."
REFERENCE
"OSPF Version 2, Appendix C.3 Interface parameters"
::= { ospfVirtLocalLsdbEntry 2 }
ospfVirtLocalLsdbType โจ
this is the LSA type. the only value allowed is localOpaqueLink (9), which is the type-9 thing this whole table exists for ๐ each type has its own advertisement format, so the type decides what the body looks like ๐
ospfVirtLocalLsdbType OBJECT-TYPE
SYNTAX INTEGER { localOpaqueLink (9) }
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The type of the link state advertisement.
Each link state type has a separate
advertisement format."
REFERENCE
"OSPF Version 2, Appendix A.4.1 The Link State
Advertisement header"
::= { ospfVirtLocalLsdbEntry 3 }
ospfVirtLocalLsdbLsid โจ
the Link State ID is an LS Type Specific field. it's a 32-bit identifier written in IP address format, and it says which piece of the routing domain the advertisement is describing ๐
ospfVirtLocalLsdbLsid OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Link State ID is an LS Type Specific field
containing a 32-bit identifier in IP address format;
it identifies the piece of the routing domain
that is being described by the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.4 Link State ID"
::= { ospfVirtLocalLsdbEntry 4 }
ospfVirtLocalLsdbRouterId โจ
the 32-bit number that uniquely identifies the router that originated the advertisement, inside the Autonomous System ๐
ospfVirtLocalLsdbRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The 32-bit number that uniquely identifies the
originating router in the Autonomous System."
REFERENCE
"OSPF Version 2, Appendix C.1 Global parameters"
::= { ospfVirtLocalLsdbEntry 5 }
ospfVirtLocalLsdbSequence โจ
this is a signed 32-bit integer that's used to tell old and duplicate LSAs apart. it starts at '80000001'h (or -'7FFFFFFF'h) and goes up until '7FFFFFFF'h, so a normal sequence number will look very negative ๐ the bigger the number, the more recent the advertisement, and the sequence space is linearly ordered ๐
ospfVirtLocalLsdbSequence OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The sequence number field is a signed 32-bit
integer. It starts with the value '80000001'h,
or -'7FFFFFFF'h, and increments until '7FFFFFFF'h.
Thus, a typical sequence number will be very negative.
It is used to detect old and duplicate link state
advertisements. The space of sequence numbers is linearly
ordered. The larger the sequence number, the more recent
the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.6 LS sequence
number"
::= { ospfVirtLocalLsdbEntry 6 }
ospfVirtLocalLsdbAge โจ
the age of the LSA in seconds โฐ it's supposed to sit between 0 and MaxAge, except when the doNotAge bit is set ๐
ospfVirtLocalLsdbAge OBJECT-TYPE
SYNTAX Integer32 -- Should be 0..MaxAge, except when
-- doNotAge bit is set
UNITS "seconds"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the age of the link state
advertisement in seconds."
REFERENCE
"OSPF Version 2, Section 12.1.1 LS age"
::= { ospfVirtLocalLsdbEntry 7 }
ospfVirtLocalLsdbChecksum โจ
this is the checksum of the whole advertisement, except the age field. the age is left out so it can keep ticking up without the checksum having to be recomputed ๐งฎ the checksum is the same one used for ISO connectionless datagrams, which people usually call the Fletcher checksum ๐ซถ
ospfVirtLocalLsdbChecksum OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the checksum of the complete
contents of the advertisement, excepting the
age field. The age field is excepted so that
an advertisement's age can be incremented
without updating the checksum. The checksum
used is the same that is used for ISO
connectionless datagrams; it is commonly
referred to as the Fletcher checksum."
REFERENCE
"OSPF Version 2, Section 12.1.7 LS checksum"
::= { ospfVirtLocalLsdbEntry 8 }
ospfVirtLocalLsdbAdvertisement โจ
last one! this is the entire link state advertisement, header included, as an OCTET STRING of 1 to 65535 bytes ๐ฆ for variable length LSAs, the SNMP agent might not be able to return the biggest possible string size ๐ฅบ
ospfVirtLocalLsdbAdvertisement OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (1..65535))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The entire link state advertisement, including
its header."
REFERENCE
"OSPF Version 2, Section 12 Link State
Advertisements.
Note that for variable length LSAs, SNMP agents
may not be able to return the largest string size."
::= { ospfVirtLocalLsdbEntry 9 }
okay so the AS-scope table is literally the cutest bit of this whole MIB ๐ it shows each AS-scope LSA once for the whole router instead of once per non-stub area, which is so smart ๐ง
-- OSPF Link State Database, AS-scope
ospfAsLsdbTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfAsLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The OSPF Process's AS-scope LSA link state database.
The database contains the AS-scope Link State
Advertisements from throughout the areas that
the device is attached to.
This table is identical to the OSPF LSDB Table
in format, but contains only AS-scope Link State
Advertisements. The purpose is to allow AS-scope
LSAs to be displayed once for the router rather
than once in each non-stub area."
REFERENCE
"OSPF Version 2, Section 12 Link State
Advertisements"
::= { ospf 19 }
ospfAsLsdbEntry OBJECT-TYPE
SYNTAX OspfAsLsdbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A single link state advertisement."
INDEX { ospfAsLsdbType, ospfAsLsdbLsid, ospfAsLsdbRouterId }
::= { ospfAsLsdbTable 1 }
OspfAsLsdbEntry ::=
SEQUENCE {
ospfAsLsdbType
INTEGER,
ospfAsLsdbLsid
IpAddress,
ospfAsLsdbRouterId
RouterID,
ospfAsLsdbSequence
Integer32,
ospfAsLsdbAge
Integer32,
ospfAsLsdbChecksum
Integer32,
ospfAsLsdbAdvertisement
OCTET STRING
}
ospfAsLsdbType OBJECT-TYPE
SYNTAX INTEGER {
asExternalLink (5),
asOpaqueLink (11)
}
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The type of the link state advertisement.
Each link state type has a separate
advertisement format."
REFERENCE
"OSPF Version 2, Appendix A.4.1 The Link State
Advertisement header"
::= { ospfAsLsdbEntry 1 }
ospfAsLsdbLsid OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Link State ID is an LS Type Specific field
containing either a Router ID or an IP address;
it identifies the piece of the routing domain
that is being described by the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.4 Link State ID"
::= { ospfAsLsdbEntry 2 }
ospfAsLsdbRouterId OBJECT-TYPE
SYNTAX RouterID
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The 32-bit number that uniquely identifies the
originating router in the Autonomous System."
REFERENCE
"OSPF Version 2, Appendix C.1 Global parameters"
::= { ospfAsLsdbEntry 3 }
ospfAsLsdbSequence OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The sequence number field is a signed 32-bit
integer. It starts with the value '80000001'h,
or -'7FFFFFFF'h, and increments until '7FFFFFFF'h.
Thus, a typical sequence number will be very negative.
It is used to detect old and duplicate link state
advertisements. The space of sequence numbers is linearly
ordered. The larger the sequence number, the more recent
the advertisement."
REFERENCE
"OSPF Version 2, Section 12.1.6 LS sequence
number"
::= { ospfAsLsdbEntry 4 }
ospfAsLsdbAge OBJECT-TYPE
SYNTAX Integer32 -- Should be 0..MaxAge, except when
-- doNotAge bit is set
UNITS "seconds"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the age of the link state
advertisement in seconds."
REFERENCE
"OSPF Version 2, Section 12.1.1 LS age"
::= { ospfAsLsdbEntry 5 }
ospfAsLsdbChecksum OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This field is the checksum of the complete
contents of the advertisement, excepting the
age field. The age field is excepted so that
an advertisement's age can be incremented
without updating the checksum. The checksum
used is the same that is used for ISO
connectionless datagrams; it is commonly referred
to as the Fletcher checksum."
REFERENCE
"OSPF Version 2, Section 12.1.7 LS checksum"
::= { ospfAsLsdbEntry 6 }
ospfAsLsdbAdvertisement OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (1..65535))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The entire link state advertisement, including
its header."
REFERENCE
"OSPF Version 2, Section 12 Link State
Advertisements.
Note that for variable length LSAs, SNMP agents
may not be able to return the largest string size."
::= { ospfAsLsdbEntry 7 }
Next up is the area LSA counter table ๐ it's basically a little tally sheet that counts how many LSAs of each type live in each area, and it's giving organised โจ
-- OSPF Area LSA Counter Table
ospfAreaLsaCountTable OBJECT-TYPE
SYNTAX SEQUENCE OF OspfAreaLsaCountEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"This table maintains per-area, per-LSA-type counters"
::= { ospf 20 }
ospfAreaLsaCountEntry OBJECT-TYPE
SYNTAX OspfAreaLsaCountEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"An entry with a number of link advertisements
of a given type for a given area."
INDEX { ospfAreaLsaCountAreaId, ospfAreaLsaCountLsaType }
::= { ospfAreaLsaCountTable 1 }
OspfAreaLsaCountEntry ::=
SEQUENCE {
ospfAreaLsaCountAreaId
AreaID,
ospfAreaLsaCountLsaType
INTEGER,
ospfAreaLsaCountNumber
Gauge32
}
ospfAreaLsaCountAreaId OBJECT-TYPE
SYNTAX AreaID
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"This entry Area ID."
::= { ospfAreaLsaCountEntry 1 }
ospfAreaLsaCountLsaType OBJECT-TYPE
SYNTAX INTEGER {
routerLink (1),
networkLink (2),
summaryLink (3),
asSummaryLink (4),
multicastLink (6),
nssaExternalLink (7),
areaOpaqueLink (10)
}
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"This entry LSA type."
::= { ospfAreaLsaCountEntry 2 }
ospfAreaLsaCountNumber OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of LSAs of a given type for a given area."
::= { ospfAreaLsaCountEntry 3 }
Now the conformance section ๐ฆ this is where the MIB tells you which groups you need, depending on which version of the spec you're following.
-- conformance information
ospfConformance OBJECT IDENTIFIER ::= { ospf 15 }
ospfGroups OBJECT IDENTIFIER ::= { ospfConformance 1 }
ospfCompliances OBJECT IDENTIFIER ::= { ospfConformance 2 }
-- compliance statements
ospfCompliance MODULE-COMPLIANCE
STATUS deprecated
DESCRIPTION
"The compliance statement for OSPF systems
conforming to RFC 1850."
MODULE -- this module
MANDATORY-GROUPS {
ospfBasicGroup,
ospfAreaGroup,
ospfStubAreaGroup,
ospfIfGroup,
ospfIfMetricGroup,
ospfVirtIfGroup,
ospfNbrGroup,
ospfVirtNbrGroup,
ospfAreaAggregateGroup
}
GROUP ospfHostGroup
DESCRIPTION
"This group is mandatory for OSPF systems that support
attached hosts."
GROUP ospfLsdbGroup
DESCRIPTION
"This group is mandatory for OSPF systems that display
their per-area link state database."
GROUP ospfExtLsdbGroup
DESCRIPTION
"This group is mandatory for OSPF systems that display
their external link state database."
::= { ospfCompliances 1 }
ospfCompliance2 MODULE-COMPLIANCE
STATUS current
DESCRIPTION
"The compliance statement."
MODULE -- this module
MANDATORY-GROUPS {
ospfBasicGroup2,
ospfAreaGroup2,
ospfStubAreaGroup,
ospfIfGroup2,
ospfIfMetricGroup,
ospfVirtIfGroup2,
ospfNbrGroup2,
ospfVirtNbrGroup2,
ospfAreaAggregateGroup2
}
GROUP ospfHostGroup2
DESCRIPTION
"This group is mandatory for OSPF systems that support
attached hosts."
GROUP ospfLsdbGroup
DESCRIPTION
"This group is mandatory for OSPF systems that display
their per-area link state database."
GROUP ospfAsLsdbGroup
DESCRIPTION
"This group is mandatory for OSPF systems that display
their AS-scope link state database."
GROUP ospfLocalLsdbGroup
DESCRIPTION
"This group is mandatory for OSPF systems that display
their per-link link state database for non-virtual
links."
GROUP ospfVirtLocalLsdbGroup
DESCRIPTION
"This group is mandatory for OSPF systems that display
their per-link link state database for virtual links."
GROUP ospfAreaLsaCountGroup
DESCRIPTION
"This group is mandatory for OSPF systems that display
per-area, per-LSA-type counters."
::= { ospfCompliances 2 }
ospfComplianceObsolete MODULE-COMPLIANCE
STATUS obsolete
DESCRIPTION
"Contains obsolete object groups."
MODULE -- this module
GROUP ospfAreaRangeGroup
DESCRIPTION
"This group is obsolete, and it is mandatory only
for non-Classless Inter-Domain Routing (CIDR) OSPF
systems that support multiple areas."
GROUP ospfObsoleteGroup
DESCRIPTION
"This group contains obsolete objects,
which are no longer required for OSPF systems."
::= { ospfCompliances 3 }
Last bit for this part: the units of conformance, which are the actual object groups the compliance statements above point at ๐
-- units of conformance
ospfBasicGroup OBJECT-GROUP
OBJECTS {
ospfRouterId,
ospfAdminStat,
ospfVersionNumber,
ospfAreaBdrRtrStatus,
ospfASBdrRtrStatus,
ospfExternLsaCount,
ospfExternLsaCksumSum,
ospfTOSSupport,
ospfOriginateNewLsas,
ospfRxNewLsas,
ospfExtLsdbLimit,
ospfMulticastExtensions,
ospfExitOverflowInterval,
ospfDemandExtensions
}
STATUS deprecated
DESCRIPTION
"These objects are used to monitor/manage
global OSPF parameters. This object group
conforms to RFC 1850."
::= { ospfGroups 1 }
ospfAreaGroup OBJECT-GROUP
OBJECTS {
ospfAreaId,
ospfImportAsExtern,
ospfSpfRuns,
ospfAreaBdrRtrCount,
ospfAsBdrRtrCount,
ospfAreaLsaCount,
ospfAreaLsaCksumSum,
ospfAreaSummary,
ospfAreaStatus
}
STATUS deprecated
DESCRIPTION
"These objects are used for OSPF systems
supporting areas per RFC 1850."
::= { ospfGroups 2 }
Okay bestie, the units of conformance are where the MIB lists which objects belong together in each group. Each group gets a number, a status, and a little description, so think of it as the VIP list for every feature set ๐ โจ
ospfStubAreaGroup OBJECT-GROUP
OBJECTS {
ospfStubAreaId,
ospfStubTOS,
ospfStubMetric,
ospfStubStatus,
ospfStubMetricType
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems
supporting stub areas."
::= { ospfGroups 3 }
ospfLsdbGroup OBJECT-GROUP
OBJECTS {
ospfLsdbAreaId,
ospfLsdbType,
ospfLsdbLsid,
ospfLsdbRouterId,
ospfLsdbSequence,
ospfLsdbAge,
ospfLsdbChecksum,
ospfLsdbAdvertisement
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems
that display their link state database."
::= { ospfGroups 4 }
ospfAreaRangeGroup OBJECT-GROUP
OBJECTS {
ospfAreaRangeAreaId,
ospfAreaRangeNet,
ospfAreaRangeMask,
ospfAreaRangeStatus,
ospfAreaRangeEffect
}
STATUS obsolete
DESCRIPTION
"These objects are used for non-CIDR OSPF
systems that support multiple areas. This
object group is obsolete."
::= { ospfGroups 5 }
ospfHostGroup OBJECT-GROUP
OBJECTS {
ospfHostIpAddress,
ospfHostTOS,
ospfHostMetric,
ospfHostStatus,
ospfHostAreaID
}
STATUS deprecated
DESCRIPTION
"These objects are used for OSPF systems
that support attached hosts."
::= { ospfGroups 6 }
ospfIfGroup OBJECT-GROUP
OBJECTS {
ospfIfIpAddress,
ospfAddressLessIf,
ospfIfAreaId,
ospfIfType,
ospfIfAdminStat,
ospfIfRtrPriority,
ospfIfTransitDelay,
ospfIfRetransInterval,
ospfIfHelloInterval,
ospfIfRtrDeadInterval,
ospfIfPollInterval,
ospfIfState,
ospfIfDesignatedRouter,
ospfIfBackupDesignatedRouter,
ospfIfEvents,
ospfIfAuthType,
ospfIfAuthKey,
ospfIfStatus,
ospfIfMulticastForwarding,
ospfIfDemand
}
STATUS deprecated
DESCRIPTION
"These objects are used to monitor/manage OSPF
interfaces. This object group conforms to RFC 1850."
::= { ospfGroups 7 }
ospfIfMetricGroup OBJECT-GROUP
OBJECTS {
ospfIfMetricIpAddress,
ospfIfMetricAddressLessIf,
ospfIfMetricTOS,
ospfIfMetricValue,
ospfIfMetricStatus
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems for supporting
interface metrics."
::= { ospfGroups 8 }
ospfVirtIfGroup OBJECT-GROUP
OBJECTS {
ospfVirtIfAreaId,
ospfVirtIfNeighbor,
ospfVirtIfTransitDelay,
ospfVirtIfRetransInterval,
ospfVirtIfHelloInterval,
ospfVirtIfRtrDeadInterval,
ospfVirtIfState,
ospfVirtIfEvents,
ospfVirtIfAuthType,
ospfVirtIfAuthKey,
ospfVirtIfStatus
}
STATUS deprecated
DESCRIPTION
"These objects are used for OSPF systems for supporting
virtual interfaces. This object group conforms
to RFC 1850."
::= { ospfGroups 9 }
ospfNbrGroup OBJECT-GROUP
OBJECTS {
ospfNbrIpAddr,
ospfNbrAddressLessIndex,
ospfNbrRtrId,
ospfNbrOptions,
ospfNbrPriority,
ospfNbrState,
ospfNbrEvents,
ospfNbrLsRetransQLen,
ospfNbmaNbrStatus,
ospfNbmaNbrPermanence,
ospfNbrHelloSuppressed
}
STATUS deprecated
DESCRIPTION
"These objects are used to monitor/manage OSPF neighbors.
This object group conforms to RFC 1850."
::= { ospfGroups 10 }
ospfVirtNbrGroup OBJECT-GROUP
OBJECTS {
ospfVirtNbrArea,
ospfVirtNbrRtrId,
ospfVirtNbrIpAddr,
ospfVirtNbrOptions,
ospfVirtNbrState,
ospfVirtNbrEvents,
ospfVirtNbrLsRetransQLen,
ospfVirtNbrHelloSuppressed
}
STATUS deprecated
DESCRIPTION
"These objects are used to monitor/manage OSPF virtual
neighbors. This object group conforms to RFC 1850."
::= { ospfGroups 11 }
ospfExtLsdbGroup OBJECT-GROUP
OBJECTS {
ospfExtLsdbType,
ospfExtLsdbLsid,
ospfExtLsdbRouterId,
ospfExtLsdbSequence,
ospfExtLsdbAge,
ospfExtLsdbChecksum,
ospfExtLsdbAdvertisement
}
STATUS deprecated
DESCRIPTION
"These objects are used for OSPF systems that display
their link state database. This object group
conforms to RFC 1850.
This object group is replaced by the ospfAsLsdbGroup
in order to support any AS-scope LSA type in a single
table."
::= { ospfGroups 12 }
ospfAreaAggregateGroup OBJECT-GROUP
OBJECTS {
ospfAreaAggregateAreaID,
ospfAreaAggregateLsdbType,
ospfAreaAggregateNet,
ospfAreaAggregateMask,
ospfAreaAggregateStatus,
ospfAreaAggregateEffect
}
STATUS deprecated
DESCRIPTION
"These objects are used for OSPF systems to support
network prefix aggregation across areas."
::= { ospfGroups 13 }
ospfLocalLsdbGroup OBJECT-GROUP
OBJECTS {
ospfLocalLsdbSequence,
ospfLocalLsdbAge,
ospfLocalLsdbChecksum,
ospfLocalLsdbAdvertisement
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems
that display their link-local link state databases
for non-virtual links."
::= { ospfGroups 14 }
ospfVirtLocalLsdbGroup OBJECT-GROUP
OBJECTS {
ospfVirtLocalLsdbSequence,
ospfVirtLocalLsdbAge,
ospfVirtLocalLsdbChecksum,
ospfVirtLocalLsdbAdvertisement
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems
that display their link-local link state databases
for virtual links."
::= { ospfGroups 15 }
ospfAsLsdbGroup OBJECT-GROUP
OBJECTS {
ospfAsLsdbSequence,
ospfAsLsdbAge,
ospfAsLsdbChecksum,
ospfAsLsdbAdvertisement
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems
that display their AS-scope link state database."
::= { ospfGroups 16 }
ospfBasicGroup2 OBJECT-GROUP
OBJECTS {
ospfRouterId,
ospfAdminStat,
ospfVersionNumber,
ospfAreaBdrRtrStatus,
ospfASBdrRtrStatus,
ospfExternLsaCount,
ospfExternLsaCksumSum,
ospfTOSSupport,
ospfOriginateNewLsas,
ospfRxNewLsas,
ospfExtLsdbLimit,
ospfMulticastExtensions,
ospfExitOverflowInterval,
ospfDemandExtensions,
ospfRFC1583Compatibility,
ospfOpaqueLsaSupport,
ospfReferenceBandwidth,
ospfRestartSupport,
ospfRestartInterval,
ospfRestartStrictLsaChecking,
ospfRestartStatus,
ospfRestartAge,
ospfRestartExitReason,
ospfAsLsaCount,
ospfAsLsaCksumSum,
ospfStubRouterSupport,
ospfStubRouterAdvertisement,
ospfDiscontinuityTime
}
STATUS current
DESCRIPTION
"These objects are used to monitor/manage OSPF global
parameters."
::= { ospfGroups 17 }
ospfAreaGroup2 OBJECT-GROUP
OBJECTS {
ospfAreaId,
ospfImportAsExtern,
ospfSpfRuns,
ospfAreaBdrRtrCount,
ospfAsBdrRtrCount,
ospfAreaLsaCount,
ospfAreaLsaCksumSum,
ospfAreaSummary,
ospfAreaStatus,
ospfAreaNssaTranslatorRole,
ospfAreaNssaTranslatorState,
ospfAreaNssaTranslatorStabilityInterval,
ospfAreaNssaTranslatorEvents
}
STATUS current
DESCRIPTION
"These objects are used by OSPF systems
to support areas."
::= { ospfGroups 18 }
ospfIfGroup2 OBJECT-GROUP
OBJECTS {
ospfIfIpAddress,
ospfAddressLessIf,
ospfIfAreaId,
ospfIfType,
ospfIfAdminStat,
ospfIfRtrPriority,
ospfIfTransitDelay,
ospfIfRetransInterval,
ospfIfHelloInterval,
ospfIfRtrDeadInterval,
ospfIfPollInterval,
ospfIfState,
ospfIfDesignatedRouter,
ospfIfBackupDesignatedRouter,
ospfIfEvents,
ospfIfAuthType,
ospfIfAuthKey,
ospfIfStatus,
ospfIfMulticastForwarding,
ospfIfDemand,
ospfIfLsaCount,
ospfIfLsaCksumSum
}
STATUS current
DESCRIPTION
"These objects are used to monitor/manage OSPF interfaces."
::= { ospfGroups 19 }
ospfVirtIfGroup2 OBJECT-GROUP
OBJECTS {
ospfVirtIfAreaId,
ospfVirtIfNeighbor,
ospfVirtIfTransitDelay,
ospfVirtIfRetransInterval,
ospfVirtIfHelloInterval,
ospfVirtIfRtrDeadInterval,
ospfVirtIfState,
ospfVirtIfEvents,
ospfVirtIfAuthType,
ospfVirtIfAuthKey,
ospfVirtIfStatus,
ospfVirtIfLsaCount,
ospfVirtIfLsaCksumSum,
ospfIfDesignatedRouterId,
ospfIfBackupDesignatedRouterId
}
STATUS current
DESCRIPTION
"These objects are used to monitor/manage OSPF
virtual interfaces."
::= { ospfGroups 20 }
ospfNbrGroup2 OBJECT-GROUP
OBJECTS {
ospfNbrIpAddr,
ospfNbrAddressLessIndex,
ospfNbrRtrId,
ospfNbrOptions,
ospfNbrPriority,
ospfNbrState,
ospfNbrEvents,
ospfNbrLsRetransQLen,
ospfNbmaNbrStatus,
ospfNbmaNbrPermanence,
ospfNbrHelloSuppressed,
ospfNbrRestartHelperStatus,
ospfNbrRestartHelperAge,
ospfNbrRestartHelperExitReason
}
STATUS current
DESCRIPTION
"These objects are used to monitor/manage OSPF
neighbors."
::= { ospfGroups 21 }
ospfVirtNbrGroup2 OBJECT-GROUP
OBJECTS {
ospfVirtNbrArea,
ospfVirtNbrRtrId,
ospfVirtNbrIpAddr,
ospfVirtNbrOptions,
ospfVirtNbrState,
ospfVirtNbrEvents,
ospfVirtNbrLsRetransQLen,
ospfVirtNbrHelloSuppressed,
ospfVirtNbrRestartHelperStatus,
ospfVirtNbrRestartHelperAge,
ospfVirtNbrRestartHelperExitReason
}
STATUS current
DESCRIPTION
"These objects are used to monitor/manage OSPF
virtual neighbors."
::= { ospfGroups 22 }
ospfAreaAggregateGroup2 OBJECT-GROUP
OBJECTS {
ospfAreaAggregateAreaID,
ospfAreaAggregateLsdbType,
ospfAreaAggregateNet,
ospfAreaAggregateMask,
ospfAreaAggregateStatus,
ospfAreaAggregateEffect,
ospfAreaAggregateExtRouteTag
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems to support
network prefix aggregation across areas."
::= { ospfGroups 23 }
Quick vibe check ๐ซถ: the groups marked obsolete or deprecated are the retired ones (ospfAreaRangeGroup, ospfHostGroup, ospfIfGroup, and friends), and the current ones are what you should be looking at. Lots of ospfIfGroup2, ospfNbrGroup2 and ospfAreaAggregateGroup2 glow-ups happening here ๐ธโจ
ospfAreaLsaCountGroup OBJECT-GROUP
OBJECTS {
ospfAreaLsaCountNumber
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems that display
per-area, per-LSA-type counters."
::= { ospfGroups 24 }
ospfHostGroup2 OBJECT-GROUP
OBJECTS {
ospfHostIpAddress,
ospfHostTOS,
ospfHostMetric,
ospfHostStatus,
ospfHostCfgAreaID
}
STATUS current
DESCRIPTION
"These objects are used for OSPF systems
that support attached hosts."
::= { ospfGroups 25 }
-- This object group is included for SMI conformance. It is not a
-- mandatory group for compliance with this MIB
ospfObsoleteGroup OBJECT-GROUP
OBJECTS {
ospfAuthType
}
STATUS obsolete
DESCRIPTION
"These objects are obsolete and are no longer required for
OSPF systems. They are placed into this group for SMI
conformance."
::= { ospfGroups 26 }
END
4. OSPF Trap Overview โจ
4.1. Introduction
okay so OSPF is an event-driven routing protocol ๐ธ. That means the stuff that gets it moving can be a change in an OSPF interface's link-level status, an OSPF timer expiring, or an OSPF protocol packet showing up. A lot of what OSPF does in response to those events ends up changing the routing topology ๐ .
Once routing topologies get big and messy, figuring out where a change started (or why a route is going somewhere weird) by polling a huge pile of routers is genuinely painful ๐ญ. So the more sensible move is for devices to tell a network manager about potentially critical OSPF events using SNMP traps ๐.
This section defines a set of traps, objects, and mechanisms that help manage IP internetworks using OSPF as their Interior Gateway Protocol (IGP). It's optional, but honestly very useful as an extension to the OSPF MIB ๐ง.
4.2. Approach
Sending traps is pretty straightforward โจ. When an exception event happens, the application tells the local agent, and the agent sends a trap to the right SNMP management stations. The message carries the trap type and can also include a list of trap-specific variables. Section 5 has the trap definitions, variable lists included. The Router ID of the trap's originator sits in the variable list, so the network manager can easily figure out where the trap came from ๐ซถ.
To keep the number of OSPF traps in check, a few extra mechanisms are suggested below ๐.
4.3. Ignoring Initial Activity
Okay this part is a big moment. Most critical events happen right when OSPF gets turned on on a router, when the designated router gets elected and neighbor adjacencies form. Those events are expected at that point, so a flood of traps would just be noise ๐. To avoid that, a router should not originate expected OSPF interface-related traps until two of that interface's dead timer intervals have passed. The expected ones are ospfIfStateChange, ospfVirtIfStateChange, ospfNbrStateChange, ospfVirtNbrStateChange, ospfTxRetransmit, and ospfVirtIfTxRetransmit.
On top of that, ospfMaxAgeLsa and ospfOriginateLsa traps should not be originated until two dead timer intervals have elapsed, and the dead timer interval used should be the dead timer with the smallest value ๐.
4.4. Throttling Traps
The throttling mechanism is similar to the one explained in RFC 1224 [RFC1224] ๐ฆ. The core idea is a sliding window, defined in seconds, plus an upper bound on how many traps can be generated inside that window. Heads up though: unlike RFC 1224, traps are not sent to tell the network manager that throttling has kicked in ๐.
A single window should be used to throttle all OSPF trap types, except for ospfLsdbOverflow and ospfLsdbApproachingOverflow, which should not be throttled. For example, say the window time is 3, the upper bound is 3, and events cause trap types 1, 3, 5, and 7 (that's 4 traps within a 3-second period). Then the type-7 (the 4th) trap should not be generated ๐.
Appropriate values are 7 traps with a window time of 10 seconds โจ.
4.5. One Trap Per OSPF Event
Several traps from section 5 happen because an unusual condition shows up while parsing an OSPF packet or handling a timer event. There can be more than one unusual condition in a single event ๐. For example, a link state update packet might contain several retransmitted link state advertisements (LSAs), or a retransmitted database description packet might contain several database description entries.
To limit the number of traps and variables, OSPF should generate at most one trap per OSPF event ๐ซถ. Only the variables tied to the first unusual condition should go with the trap. Similarly, if more than one type of unusual condition shows up while parsing the packet, only the first one will generate a trap.
4.6. Polling Event Counters
Lots of tables in the OSPF MIB have generalized event counters ๐. By enabling the traps defined in this document, a network manager can get way more specific info about those events. The manager may want to poll these counters and turn on specific OSPF traps when a particular counter starts climbing abnormally ๐.
The table below shows how the event counters in the OSPF MIB line up with the trap types:
Counter32 Trap Type
----------------------- ------------------------
ospfOriginateNewLsas ospfOriginateLsa
ospfIfEvents ospfIfStateChange
ospfConfigError
ospfIfAuthFailure
ospfRxBadPacket
ospfTxRetransmit
ospfVirtIfEvents ospfVirtIfStateChange
ospfVirtIfConfigError
ospfVirtIfAuthFailure
ospfVirtIfRxBadPacket
ospfVirtIfTxRetransmit
ospfNbrEvents ospfNbrStateChange
ospfVirtNbrEvents ospfVirtNbrStateChange
ospfExternLSACount ospfLsdbApproachingOverflow
ospfExternLSACount ospfLsdbOverflow
4.7. Translating Notification Parameters
Here's the tea ๐ต. The OSPF notifications were defined before the RFC 2578 [RFC2578] rule that the penultimate sub-identifier needs a zero value when translating SNMPv2/SNMPv3 trap parameters into SNMPv1 trap parameters. RFC 3584 [RFC3584], section 3, lays out the translation rules that intermediate proxy agents or multi-lingual agents can implement to convert SNMPv2/SNMPv3 notifications to SNMPv1 notifications and back. The conversion is not reversible ๐ โโ๏ธ. Convert to one version and then back again, and you end up with an incorrectly formatted notification.
According to RFC 3584, section 3.1, translating OSPF notifications from SNMPv1 to SNMPv2/SNMPv3 makes the SNMPv2/SNMPv3 snmpTrapOID the SNMPv1 'enterprise' parameter plus two extra sub-identifiers: '0' and the SNMPv1 'specific-trap' parameter ๐งฉ.
According to RFC 3584, section 3.2, translating OSPF notifications from SNMPv2/SNMPv3 to SNMPv1 (as this MIB defines them) sets the SNMPv1 'enterprise' parameter to the SNMPv2/SNMPv3 snmpTrapOID value with the last sub-identifier removed. The 'specific-trap' parameter gets set to the last sub-identifier of that snmpTrapOID value.
Also, a notification that starts from an SNMPv1 agent won't turn into the same notification a native SNMPv2/SNMPv3 agent would originate. Not the same, bestie ๐ฅฒ.
4.8. Historical Artifacts
The MIB modules updated by this document were originally written in SMIv1 for SNMPv1, back when only traps were a thing ๐ฐ๏ธ. This version is written in SMIv2, so all types of notifications (trap and inform PDUs) may be used by native SNMPv2 and SNMPv3 agents, even though only traps get mentioned. And for backwards compatibility, the OSPF Trap module stays rooted at {ospf 16} ๐.
5. OSPF Trap Definitions ๐ฆ
OSPF-TRAP-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, IpAddress
FROM SNMPv2-SMI
MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
FROM SNMPv2-CONF
ospfRouterId, ospfIfIpAddress, ospfAddressLessIf, ospfIfState,
ospfVirtIfAreaId, ospfVirtIfNeighbor, ospfVirtIfState,
ospfNbrIpAddr, ospfNbrAddressLessIndex, ospfNbrRtrId,
ospfNbrState, ospfVirtNbrArea, ospfVirtNbrRtrId,
ospfVirtNbrState, ospfLsdbType, ospfLsdbLsid, ospfLsdbRouterId,
ospfLsdbAreaId, ospfExtLsdbLimit, ospf, ospfAreaId,
ospfAreaNssaTranslatorState, ospfRestartStatus,
ospfRestartInterval, ospfRestartExitReason,
ospfNbrRestartHelperStatus, ospfNbrRestartHelperAge,
ospfNbrRestartHelperExitReason, ospfVirtNbrRestartHelperStatus,
ospfVirtNbrRestartHelperAge, ospfVirtNbrRestartHelperExitReason
FROM OSPF-MIB;
ospfTrap MODULE-IDENTITY
LAST-UPDATED "200611100000Z" -- November 10, 2006 00:00:00 EST
ORGANIZATION "IETF OSPF Working Group"
CONTACT-INFO
"WG E-Mail: ospf@ietf.org
WG Chairs: acee@cisco.com
rohit@gmail.com
Editors: Dan Joyal
Nortel
600 Technology Park Drive
Billerica, MA 01821
djoyal@nortel.com
Piotr Galecki
Airvana
19 Alpha Road
Chelmsford, MA 01824
pgalecki@airvana.com
Spencer Giacalone
CSFB
Eleven Madison Ave
New York, NY 10010-3629
spencer.giacalone@gmail.com"
DESCRIPTION
"The MIB module to describe traps for the OSPF
Version 2 Protocol.
Copyright (C) The IETF Trust (2006).
This version of this MIB module is part of
RFC 4750; see the RFC itself for full legal
notices."
REVISION "200611100000Z" -- November 10, 2006 00:00:00 EST
DESCRIPTION
"Updated for latest changes to OSPFv2:
-added graceful restart related traps
-added new config error types
-added ospfNssaTranslatorStatusChange trap.
See Appendix B of RFC 4750 for more details.
This version published as part of RFC 4750"
REVISION "199501201225Z" -- Fri Jan 20 12:25:50 PST 1995
DESCRIPTION
"The initial SMIv2 revision of this MIB module, published
in RFC 1850."
::= { ospf 16 }
-- Trap Support Objects
-- The following are support objects for the OSPF traps.
ospfTrapControl OBJECT IDENTIFIER ::= { ospfTrap 1 }
ospfTraps OBJECT IDENTIFIER ::= { ospfTrap 2 }
okay bestie, this is where the MIB gets real ๐ we've got the control objects first, then the traps themselves, and each one tells you exactly when it should fire ๐ฆ
ospfSetTrap is the main on/off switch ๐ it's a 4-octet bitmap where a 1 means enabled, and the rightmost bit is trap 0 โจ it's persistent too, so the entity SHOULD save changes to non-volatile storage ๐พ
ospfSetTrap OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(4))
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"A 4-octet string serving as a bit map for
the trap events defined by the OSPF traps. This
object is used to enable and disable specific
OSPF traps where a 1 in the bit field
represents enabled. The right-most bit (least
significant) represents trap 0.
This object is persistent and when written
the entity SHOULD save the change to non-volatile
storage."
::= { ospfTrapControl 1 }
ospfConfigErrorType OBJECT-TYPE
SYNTAX INTEGER {
badVersion (1),
areaMismatch (2),
unknownNbmaNbr (3), -- Router is DR eligible
unknownVirtualNbr (4),
authTypeMismatch(5),
authFailure (6),
netMaskMismatch (7),
helloIntervalMismatch (8),
deadIntervalMismatch (9),
optionMismatch (10),
mtuMismatch (11),
duplicateRouterId (12),
noError (13) }
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Potential types of configuration conflicts.
Used by the ospfConfigError and
ospfConfigVirtError traps. When the last value
of a trap using this object is needed, but no
traps of that type have been sent, this value
pertaining to this object should be returned as
noError."
::= { ospfTrapControl 2 }
ospfPacketType OBJECT-TYPE
SYNTAX INTEGER {
hello (1),
dbDescript (2),
lsReq (3),
lsUpdate (4),
lsAck (5),
nullPacket (6) }
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"OSPF packet types. When the last value of a trap
using this object is needed, but no traps of
that type have been sent, this value pertaining
to this object should be returned as nullPacket."
::= { ospfTrapControl 3 }
ospfPacketSrc OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The IP address of an inbound packet that cannot
be identified by a neighbor instance. When
the last value of a trap using this object is
needed, but no traps of that type have been sent,
this value pertaining to this object should
be returned as 0.0.0.0."
::= { ospfTrapControl 4 }
-- Traps
ospfVirtIfStateChange NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfVirtIfAreaId,
ospfVirtIfNeighbor,
ospfVirtIfState -- The new state
}
STATUS current
DESCRIPTION
"An ospfVirtIfStateChange trap signifies that there
has been a change in the state of an OSPF virtual
interface.
This trap should be generated when the interface
state regresses (e.g., goes from Point-to-Point to Down)
or progresses to a terminal state
(i.e., Point-to-Point)."
::= { ospfTraps 1 }
ospfNbrStateChange NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfNbrIpAddr,
ospfNbrAddressLessIndex,
ospfNbrRtrId,
ospfNbrState -- The new state
}
STATUS current
DESCRIPTION
"An ospfNbrStateChange trap signifies that
there has been a change in the state of a
non-virtual OSPF neighbor. This trap should be
generated when the neighbor state regresses
(e.g., goes from Attempt or Full to 1-Way or
Down) or progresses to a terminal state (e.g.,
2-Way or Full). When an neighbor transitions
from or to Full on non-broadcast multi-access
and broadcast networks, the trap should be
generated by the designated router. A designated
router transitioning to Down will be noted by
ospfIfStateChange."
::= { ospfTraps 2 }
ospfVirtNbrStateChange NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfVirtNbrArea,
ospfVirtNbrRtrId,
ospfVirtNbrState -- The new state
}
STATUS current
DESCRIPTION
"An ospfVirtNbrStateChange trap signifies that there
has been a change in the state of an OSPF virtual
neighbor. This trap should be generated
when the neighbor state regresses (e.g., goes
from Attempt or Full to 1-Way or Down) or
progresses to a terminal state (e.g., Full)."
::= { ospfTraps 3 }
ospfIfConfigError NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfIfIpAddress,
ospfAddressLessIf,
ospfPacketSrc, -- The source IP address
ospfConfigErrorType, -- Type of error
ospfPacketType
}
STATUS current
DESCRIPTION
"An ospfIfConfigError trap signifies that a
packet has been received on a non-virtual
interface from a router whose configuration
parameters conflict with this router's
configuration parameters. Note that the event
optionMismatch should cause a trap only if it
prevents an adjacency from forming."
::= { ospfTraps 4 }
ospfVirtIfConfigError NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfVirtIfAreaId,
ospfVirtIfNeighbor,
ospfConfigErrorType, -- Type of error
ospfPacketType
}
STATUS current
DESCRIPTION
"An ospfVirtIfConfigError trap signifies that a
packet has been received on a virtual interface
from a router whose configuration parameters
conflict with this router's configuration
parameters. Note that the event optionMismatch
should cause a trap only if it prevents an
adjacency from forming."
::= { ospfTraps 5 }
ospfIfAuthFailure NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfIfIpAddress,
ospfAddressLessIf,
ospfPacketSrc, -- The source IP address
ospfConfigErrorType, -- authTypeMismatch or
-- authFailure
ospfPacketType
}
STATUS current
DESCRIPTION
"An ospfIfAuthFailure trap signifies that a
packet has been received on a non-virtual
interface from a router whose authentication key
or authentication type conflicts with this
router's authentication key or authentication
type."
::= { ospfTraps 6 }
ospfVirtIfAuthFailure NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfVirtIfAreaId,
ospfVirtIfNeighbor,
ospfConfigErrorType, -- authTypeMismatch or
-- authFailure
ospfPacketType
}
STATUS current
DESCRIPTION
"An ospfVirtIfAuthFailure trap signifies that a
packet has been received on a virtual interface
from a router whose authentication key or
authentication type conflicts with this router's
authentication key or authentication type."
::= { ospfTraps 7 }
ospfIfRxBadPacket NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfIfIpAddress,
ospfAddressLessIf,
ospfPacketSrc, -- The source IP address
ospfPacketType
}
STATUS current
DESCRIPTION
"An ospfIfRxBadPacket trap signifies that an
OSPF packet has been received on a non-virtual
interface that cannot be parsed."
::= { ospfTraps 8 }
ospfVirtIfRxBadPacket NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfVirtIfAreaId,
ospfVirtIfNeighbor,
ospfPacketType
}
STATUS current
DESCRIPTION
"An ospfVirtIfRxBadPacket trap signifies that an OSPF
packet has been received on a virtual interface
that cannot be parsed."
::= { ospfTraps 9 }
ospfTxRetransmit NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfIfIpAddress,
ospfAddressLessIf,
ospfNbrRtrId, -- Destination
ospfPacketType,
ospfLsdbType,
ospfLsdbLsid,
ospfLsdbRouterId
}
STATUS current
DESCRIPTION
"An ospfTxRetransmit trap signifies than an
OSPF packet has been retransmitted on a
non-virtual interface. All packets that may be
retransmitted are associated with an LSDB entry.
The LS type, LS ID, and Router ID are used to
identify the LSDB entry."
::= { ospfTraps 10 }
ospfVirtIfTxRetransmit NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfVirtIfAreaId,
ospfVirtIfNeighbor,
ospfPacketType,
ospfLsdbType,
ospfLsdbLsid,
ospfLsdbRouterId
}
STATUS current
DESCRIPTION
"An ospfVirtIfTxRetransmit trap signifies than an
OSPF packet has been retransmitted on a virtual
interface. All packets that may be retransmitted
are associated with an LSDB entry. The LS
type, LS ID, and Router ID are used to identify
the LSDB entry."
::= { ospfTraps 11 }
ospfOriginateLsa NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap
ospfLsdbAreaId, -- 0.0.0.0 for AS Externals
ospfLsdbType,
ospfLsdbLsid,
ospfLsdbRouterId
}
STATUS current
DESCRIPTION
"An ospfOriginateLsa trap signifies that a new
LSA has been originated by this router. This
trap should not be invoked for simple refreshes
of LSAs (which happens every 30 minutes), but
instead will only be invoked when an LSA is
(re)originated due to a topology change.
Additionally, this trap does not include LSAs that
are being flushed because they have reached
MaxAge."
::= { ospfTraps 12 }
ospfConfigErrorType and ospfPacketType are the enum-style objects ๐ธ they tell you what kind of mismatch or packet we're talking about, and both have a "noError" or "nullPacket" fallback for when no trap of that type has been sent yet ๐ง
ospfPacketSrc is the IP address of an inbound packet that can't be matched to a neighbor instance, and if nothing's been sent yet it reads as 0.0.0.0 ๐ซถ
the OSPF notifications are the actual alarms ๐จ each one lists the objects it carries (router ID, interface or neighbor info, and so on) and says exactly when it should be generated. the "should" language in those DESCRIPTION strings is copied verbatim above, so don't read it as anything stronger or weaker than what's written ๐
ospfMaxAgeLsa NOTIFICATION-TYPE OBJECTS { ospfRouterId, -- The originator of the trap ospfLsdbAreaId, -- 0.0.0.0 for AS Externals ospfLsdbType, ospfLsdbLsid, ospfLsdbRouterId } STATUS current DESCRIPTION
"An ospfMaxAgeLsa trap signifies that one of the LSAs in the router's link state database has aged to MaxAge." ::= { ospfTraps 13 }
ospfLsdbOverflow NOTIFICATION-TYPE OBJECTS { ospfRouterId, -- The originator of the trap ospfExtLsdbLimit }
STATUS current DESCRIPTION "An ospfLsdbOverflow trap signifies that the number of LSAs in the router's link state database has exceeded ospfExtLsdbLimit." ::= { ospfTraps 14 }
ospfLsdbApproachingOverflow NOTIFICATION-TYPE OBJECTS { ospfRouterId, -- The originator of the trap ospfExtLsdbLimit } STATUS current DESCRIPTION "An ospfLsdbApproachingOverflow trap signifies that the number of LSAs in the router's link state database has exceeded ninety percent of ospfExtLsdbLimit." ::= { ospfTraps 15 }
ospfIfStateChange NOTIFICATION-TYPE OBJECTS { ospfRouterId, -- The originator of the trap ospfIfIpAddress, ospfAddressLessIf, ospfIfState -- The new state } STATUS current DESCRIPTION "An ospfIfStateChange trap signifies that there has been a change in the state of a non-virtual OSPF interface. This trap should be generated when the interface state regresses (e.g., goes from Dr to Down) or progresses to a terminal state (i.e., Point-to-Point, DR Other, Dr, or Backup)." ::= { ospfTraps 16 }
ospfNssaTranslatorStatusChange NOTIFICATION-TYPE OBJECTS { ospfRouterId, -- The originator of the trap
ospfAreaId, ospfAreaNssaTranslatorState -- The current translation -- status } STATUS current DESCRIPTION "An ospfNssaTranslatorStatusChange trap indicates that there has been a change in the router's ability to translate OSPF type-7 LSAs into OSPF type-5 LSAs. This trap should be generated when the translator status transitions from or to any defined status on a per-area basis." ::= { ospfTraps 17 }
ospfRestartStatusChange NOTIFICATION-TYPE OBJECTS { ospfRouterId, -- The originator of the trap ospfRestartStatus, ospfRestartInterval, ospfRestartExitReason } STATUS current DESCRIPTION "An ospfRestartStatusChange trap signifies that there has been a change in the graceful restart state for the router. This trap should be generated when the router restart status changes." ::= { ospfTraps 18 }
ospfNbrRestartHelperStatusChange NOTIFICATION-TYPE OBJECTS { ospfRouterId, -- The originator of the trap ospfNbrIpAddr, ospfNbrAddressLessIndex, ospfNbrRtrId, ospfNbrRestartHelperStatus, ospfNbrRestartHelperAge, ospfNbrRestartHelperExitReason } STATUS current DESCRIPTION "An ospfNbrRestartHelperStatusChange trap signifies that there has been a change in the graceful restart helper state for the neighbor. This trap should be generated when the neighbor restart helper status transitions for a neighbor." ::= { ospfTraps 19 }
ospfVirtNbrRestartHelperStatusChange NOTIFICATION-TYPE
OBJECTS { ospfRouterId, -- The originator of the trap ospfVirtNbrArea, ospfVirtNbrRtrId, ospfVirtNbrRestartHelperStatus, ospfVirtNbrRestartHelperAge, ospfVirtNbrRestartHelperExitReason } STATUS current DESCRIPTION "An ospfVirtNbrRestartHelperStatusChange trap signifies that there has been a change in the graceful restart helper state for the virtual neighbor. This trap should be generated when the virtual neighbor restart helper status transitions for a virtual neighbor." ::= { ospfTraps 20 }
Conformance Information โจ
Okay bestie, this part is all about the conformance stuff, which is basically the MIB's report card ๐ It tells you which bits you have to build and which ones are optional.
-- conformance information
ospfTrapConformance OBJECT IDENTIFIER ::= { ospfTrap 3 }
ospfTrapGroups OBJECT IDENTIFIER ::= { ospfTrapConformance 1 }
ospfTrapCompliances OBJECT IDENTIFIER ::= { ospfTrapConformance 2 }
Compliance Statements ๐
Here are the compliance statements, the checklists that say what a system has to support ๐
-- compliance statements
ospfTrapCompliance MODULE-COMPLIANCE
STATUS obsolete
DESCRIPTION
"The compliance statement."
MODULE -- this module
MANDATORY-GROUPS { ospfTrapControlGroup }
GROUP ospfTrapControlGroup
DESCRIPTION
"This group is optional but recommended for all
OSPF systems."
::= { ospfTrapCompliances 1 }
ospfTrapCompliance2 MODULE-COMPLIANCE
STATUS current
DESCRIPTION
"The compliance statement."
MODULE -- this module
MANDATORY-GROUPS { ospfTrapControlGroup, ospfTrapEventGroup }
OBJECT ospfConfigErrorType
MIN-ACCESS accessible-for-notify
DESCRIPTION
"This object is only required to be supplied within
notifications."
OBJECT ospfPacketType
MIN-ACCESS accessible-for-notify
DESCRIPTION
"This object is only required to be supplied within
notifications."
OBJECT ospfPacketSrc
MIN-ACCESS accessible-for-notify
DESCRIPTION
"This object is only required to be supplied within
notifications."
::= { ospfTrapCompliances 2 }
Units of Conformance ๐งฉ
Last bit of the conformance section! These are the groups, the actual bundles of objects and traps you're signing up for ๐ฆ
-- units of conformance
ospfTrapControlGroup OBJECT-GROUP
OBJECTS { ospfSetTrap,
ospfConfigErrorType,
ospfPacketType,
ospfPacketSrc }
STATUS current
DESCRIPTION
"These objects are required to control traps
from OSPF systems."
::= { ospfTrapGroups 1 }
ospfTrapEventGroup NOTIFICATION-GROUP
NOTIFICATIONS {
ospfVirtIfStateChange,
ospfNbrStateChange,
ospfVirtNbrStateChange,
ospfIfConfigError,
ospfVirtIfConfigError,
ospfIfAuthFailure,
ospfVirtIfAuthFailure,
ospfIfRxBadPacket,
ospfVirtIfRxBadPacket,
ospfTxRetransmit,
ospfVirtIfTxRetransmit,
ospfOriginateLsa,
ospfMaxAgeLsa,
ospfLsdbOverflow,
ospfLsdbApproachingOverflow,
ospfIfStateChange,
ospfNssaTranslatorStatusChange,
ospfRestartStatusChange,
ospfNbrRestartHelperStatusChange,
ospfVirtNbrRestartHelperStatusChange
}
STATUS current
DESCRIPTION
"A grouping of OSPF trap events, as specified
in NOTIFICATION-TYPE constructs."
::= { ospfTrapGroups 2 }
END
6. Security Considerations ๐
Okay this part is serious, no cap. SNMP write access can wreck a network, so read this one carefully ๐ญ
There are a number of management objects defined in this MIB that have a MAX-ACCESS clause of read-write and/or read-create. Such objects may be considered sensitive or vulnerable in some network environments. The support for SET operations in a non-secure environment without proper protection can have a negative effect on network operations.
It is recommended that attention be specifically given to implementing the MAX-ACCESS clause in a number of objects, including ospfIfAuthKey, ospfIfAuthType, ospfVirtIfAuthKey, and ospfVirtIfAuthType in scenarios that DO NOT use SNMPv3 strong security (i.e., authentication and encryption). Extreme caution must be used to minimize the risk of cascading security vulnerabilities when SNMPv3 strong security is not used. When SNMPv3 strong security is not used, these objects should have access of read-only, not read-create.
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 3414 [RFC3414] and the View-based Access Control Model RFC 3415 [RFC3415] 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. IANA Considerations ๐ธ
The MIB module in this document uses the following IANA-assigned OBJECT IDENTIFIER values recorded in the SMI Numbers registry:
Descriptor OBJECT IDENTIFIER value
---------- -----------------------
ospf { mib-2 14 }
8. Acknowledgements ๐ซถ
This document was produced by the OSPF Working Group and is based on the MIB for OSPF version 2 by Rob Coltun and Fred Baker [RFC1850]. The editors would like to acknowledge John Moy, Rob Coltun, Randall Atkinson, David T. Perkins, Ken Chapman, Brian Field, Acee Lindem, Vishwas Manral, Roy Jose, Don Goodspeed, Vivek Dubey, Keith McCloghrie, Bill Fenner, and Dan Romascanu for their constructive comments.
9. References ๐
9.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2578] McCloghrie, K., Perkins, D., and J. Schoenwaelder,
"Structure of Management Information Version 2 (SMIv2)",
STD 58, RFC 2578, April 1999.
[RFC2579] McCloghrie, K., Perkins, D., and J. Schoenwaelder,
"Textual Conventions for SMIv2", STD 58, RFC 2579, April
1999.
[RFC2580] McCloghrie, K., Perkins, D., and J. Schoenwaelder,
"Conformance Statements for SMIv2", STD 58, RFC 2580,
April 1999.
9.2. Informative References ๐
Okay bestie, these are the extra reads. They aren't required, but they give you the background ๐ง
[RFC1224] Steinberg, L., "Techniques for managing asynchronously generated alerts", RFC 1224, May 1991.
[RFC1704] Haller, N. and R. Atkinson, "On Internet Authentication", RFC 1704, October 1994.
[RFC1765] Moy, J., "OSPF Database Overflow", RFC 1765, March 1995.
[RFC1793] Moy, J., "Extending OSPF to Support Demand Circuits", RFC 1793, April 1995.
[RFC1850] Baker, F. and R. Coltun, "OSPF Version 2 Management Information Base", RFC 1850, November 1995.
[RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, April 1998.
[RFC2370] Coltun, R., "The OSPF Opaque LSA Option", RFC 2370, July 1998.
[RFC3101] Murphy, P., "The OSPF Not-So-Stubby Area (NSSA) Option", RFC 3101, January 2003.
[RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002.
[RFC3414] Blumenthal, U. and B. Wijnen, "User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)", STD 62, RFC 3414, December 2002.
[RFC3415] Wijnen, B., Presuhn, R., and K. McCloghrie, "View-based Access Control Model (VACM) for the Simple Network Management Protocol (SNMP)", STD 62, RFC 3415, December 2002.
[RFC3584] Frye, R., Levi, D., Routhier, S., and B. Wijnen, "Coexistence between Version 1, Version 2, and Version 3 of the Internet-standard Network Management Framework", BCP 74, RFC 3584, August 2003.
[RFC3623] Moy, J., Pillay-Esnault, P., and A. Lindem, "Graceful OSPF Restart", RFC 3623, November 2003.
[RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981.
[RFC3411] Harrington, D., Presuhn, R., and B. Wijnen, "An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks", STD 62, RFC 3411, December 2002.
[RFC1583] Moy, J., "OSPF Version 2", RFC 1583, March 1994.
Appendix A. TOS Support ๐
Okay so for backward compatibility with the older versions of the OSPF MIB spec, the TOS-specific info is still hanging around in this document ๐ซถ Even though the TOS routing option got deleted from OSPF [RFC2328], we kept it so nothing breaks for the old crowd ๐
Appendix B. Changes from RFC 1850 ๐ธ
This section is the tea โ It walks through every difference between this memo and RFC 1850, so you can see exactly what glow-up happened.
Appendix B.1. General Group Changes โจ
Added the object ospfRFC1583Compatibility to show support for "RFC 1583 Compatibility" [RFC1583]. Its DEFVAL is "enabled", so it's on by default ๐
Added the object ospfReferenceBandwidth, which lets you configure a reference bandwidth for working out default interface metrics ๐
Added the objects ospfRestartSupport, ospfRestartInterval, ospfRestartAge, ospfRestartStrictLsaChecking, and ospfRestartExitReason to support graceful restart ๐
Added the objects ospfStubRouterSupport and ospfStubRouteAdvertisement to support stub routers ๐ง
Added the object ospfDiscontinuityTime so a management entity can detect counter discontinuity events โฐ
Appendix B.2. OSPF NSSA Enhancement Support ๐ฆ
Added some new objects to the OspfAreaTable, including these:
ospfAreaNssaTranslatorRoleto show the configured NSSA translation role.ospfAreaNssaTranslatorStateto show the current NSSA translation role.ospfAreaNssaTranslatorStabilityIntervalto show how long to keep performing at the current translation status.ospfAreaNssaTranslatorEventsto show how many times the OSPF translation state has changed.
Added the new object ospfAreaAggregateExtRouteTag to ospfAreaAggregateTable.
Added the new object ospfNssaTranslatorStatusChange to ospfTraps in OSPF-TRAP-MIB DEFINITIONS.
Added ospfAreaId to IMPORTS in OSPF-TRAP-MIB DEFINITIONS so ospfNssaTranslatorStatusChange can use it ๐
Added ospfAreaExtNssaTranslatorStatus to IMPORTS in OSPF-TRAP-MIB DEFINITIONS to support ospfNssaTranslatorStatusChange.
Modified the DESCRIPTION clause of the ospfAreaSummary object in the ospfAreaTable to show support for NSSA.
Modified the DESCRIPTION clause of the ospfImportAsExtern object in the ospfAreaTable for clarity ๐
Appendix B.3. Opaque LSA Support ๐
Added the object ospfOpaqueLsaSupport to ospfGeneralGroup to show support for OSPF Opaque LSAs.
Created ospfLocalLsdbTable for link-local (type-9) LSA support. It's indexed by:
ospflocalLsdbIpAddressospfLocalLsdbAddressLessIfospfLocalLsdbTypeospfLocalLsdbLsidospfLocalLsdbRouterId
ospfLocalLsdbTable has these columnar objects:
ospfLocalLsdbSequence, to show the LSA instanceospfLocalLsdbAgeospfLocalLsdbChecksumospfLocalLsdbAdvertisement, which holds the entire LSA
Created ospfVirLocalLsdbTable for link-local (type-9) LSA support on virtual links ๐ It's indexed by:
ospfVirtLocalLsdbTransitAreaospfVirtLocalLsdbNeighbor, to show the router ID of the virtual neighborospfVirLocalLsdbTypeospfVirLocalLsdbLsidospfVirLocalLsdbRouterId
ospfVirLocalLsdbTable has these columnar objects:
ospfVirLocalLsdbSequence, to show the LSA instanceospfVirLocalLsdbAgeospfVirLocalLsdbChecksumospfVirLocalLsdbAdvertisement, which holds the entire LSA
Added objects to ospfIfTable to support link-local (type-9) LSAs, including:
ospfIfLsaCountospfIfLsaCksumSum, to show the sum of the type-9 link state advertisement checksums on this interface
Added objects to ospfVirIfTable to support link-local (type-9) LSAs on virtual links, including:
ospfVirIfLsaCountospfVirIfLsaCksumSum, to show the sum of the type-9 link state advertisement checksums on this link
To support area scope (type-10) LSAs, the enumeration areaOpaqueLink (10) was added to ospfLsdbType in the ospfLsdbTable ๐ฏ
Created ospfAsLsdbTable for AS-scope LSA support. It's indexed by:
ospfAsLsdbTypeospfAsLsdbLsidospfAsLsdbRouterId
ospfAsLsdbTable has these columnar objects:
ospfAsLsdbSequence, to show the LSA instanceospfAsLsdbAgeospfAsLsdbChecksumospfAsLsdbAdvertisement, which holds the entire LSA
Appendix B.4. Graceful Restart Support ๐
Added the objects ospfRestartSupport, ospfRestartInterval, ospfRestartAge, ospfRestartStrictLsaChecking, and ospfRestartExitReason to the general group.
Added the objects ospfNbrRestartHelperStatus, ospfNbrRestartHelperAge, and ospfNbrRestartHelperExitReason to OspfNbrTable.
Added the objects ospfVirtNbrRestartHelperStatus, ospfVirtNbrRestartHelperAge, and ospfVirtNbrRestartHelperExitReason to OspfVirtNbrTable.
Appendix B.5. OSPF Compliances ๐
New compliance statements were added for new and for obsoleted conformance groups. They include:
ospfCompliance2ospfComplianceObsolete
New conformance groups were created to support the new objects added to the group. They include:
ospfBasicGroup2ospfAreaGroup2ospfIfGroup2ospfVirtIfGroup2ospfNbrGroup2ospfVirtNbrGroup2ospfAreaAggregateGroup2
Completely new conformance groups were added too, including:
ospfLocalLsdbGroup, which specifies support for link-local (type-9) LSAsospfVirtLocalLsdbGroup, which specifies support for link-local (type-9) LSAs on virtual linksospfObsoleteGroup, for obsolete objects and SMI compatibility
Appendix B.6. OSPF Authentication and Security ๐
There's been a lot of worry in the community about cascading security vulnerabilities, so these changes got made ๐ญ
- Modified the DESCRIPTION clause of
ospfIfAuthKeybecause of security concerns and to add clarity. - Modified the DESCRIPTION clause of
ospfVirtIfAuthKeybecause of security concerns and to add clarity. - Modified the DESCRIPTION clause of
ospfIfAuthTypebecause of security concerns and to add clarity. - Modified the DESCRIPTION clause of
ospfVirtIfTypebecause of security concerns and to add clarity. - Modified the OSPF MIB MODULE DESCRIPTION because of security concerns, and to include a reference to the Security Considerations section in this document that will transcend compilation.
- Modified the Security Considerations section to add detail.
Appendix B.7. OSPF Trap MIB ๐จ
Added ospfTrapEventGroup.
Added importation of NOTIFICATION-GROUP.
Changed the STATUS of the ospfTrapCompliance MODULE-COMPLIANCE construct to obsolete.
Added the ospfTrapCompliance2 MODULE-COMPLIANCE construct, which replaces ospfTrapCompliance. ospfTrapCompliance2 has an updated MANDATORY-GROUPS clause and new MIN-ACCESS specifications ๐
Added the mtuMismatch enumeration to the ospfConfigErrorType object in ospfTrapControl to imply MTU mismatch trap generation. in ospfIfConfigError.
Added the noError enumeration to the ospfConfigErrorType object for situations where traps are requested but none have been sent. Updated the DESCRIPTION clause accordingly ๐
Added the nullPacket enumeration to the ospfPacketType object for situations where traps are requested but none have been sent. Updated the DESCRIPTION clause accordingly.
Updated the DESCRIPTION clause of ospfPacketSrc for situations where traps are requested but none have been sent.
Added NOTIFICATION-TYPE for ospfRestartStatusChange.
Added NOTIFICATION-TYPE for ospfNbrRestartHelperStatusChange.
Added NOTIFICATION-TYPE for ospfVirtNbrRestartHelperStatusChange. ๐ธ
Appendix B.8. Miscellaneous โจ
okay so this last appendix is the "everything else" pile ๐งบ Various sections got moved or tweaked for clarity, and most of the changes are semantic, which means they're about what things mean rather than how they look. Here's the rundown, no cap:
- The OSPF overview section got a glow-up in its format ๐ Unneeded info got cut, including the OSPF TOS default values.
- The trap overview section also got reformatted and cleaned up, and its working was revised ๐ช
- The DESCRIPTION clause of the
StatusTEXTUAL-CONVENTIONwas modified for clarity ๐ฉต - The Updates section got promoted from the overview into its own section, iconic ๐
REFERENCEclauses got updated in all objects, as needed ๐- The SEQUENCE of the
OspfIfTablewas modified so it matches the true order of the objects in the table ๐ข - The DESCRIPTION clause of all row management objects got a clarity makeover โจ
Now the new stuff, bestie ๐ซถ
ospfHostCfgAreaID was added to the Host table as an object with read-create access ๐ and ospfHostAreaID got deprecated ๐ฅ
InterfaceIndexOrZero is now imported from IF-MIB ๐ and it's going to replace the InterfaceIndex TEXTUAL-CONVENTION. Passing the torch, periodt ๐ฅ
ospfNbrAddressLessIndex now uses the semantically identical InterfaceIndexOrZero for its SYNTAX clause, which the SMI allows ๐ง
The STATUS clause of the TEXTUAL-CONVENTION InterfaceIndex was changed to obsolete, and its DESCRIPTION got updated to match ๐ชฆ
ospfAddressLessIf also switched to InterfaceIndexOrZero in its SYNTAX clause, since the SMI permits it ๐
ospfIfMetricAddressLessIf got the exact same treatment, using InterfaceIndexOrZero in its SYNTAX clause as the SMI permits ๐ธ
The importation of mib-2 was changed from RFC1213-MIB to SNMPv2-SMI ๐ฆ
An Intellectual Property Rights section was added ๐งพ
REVISION DESCRIPTION clauses got updated with a description of the major MIB modifications ๐
All the relevant MIB comments were moved into the objects' DESCRIPTION clauses ๐๏ธ
Reasoning for object deprecation was added ๐ง
Persistence information was added for read-write and read-create objects ๐พ
The conditions for when columns can be modified in RowStatus managed rows were described, as required by RFC 2579 ๐
OspfAuthenticationType got defined as a new TC, and the authentication type objects were modified to use it ๐
Index objects of the new tables were made not accessible ๐
The UNITS clause got added to several objects ๐
ospfIfDesignatedRouterId and ospfIfBackupDesignatedRouterId were added to the OspfIfEntry ๐ฆ
The area LSA counter table was added ๐งฎ
An IANA Considerations section was added ๐ท
Authors' Addresses ๐๏ธ
Dan Joyal (Editor)
Nortel, Inc.
600 Technology Park Drive
Billerica, MA 01821
USA
EMail: djoyal@nortel.com
Piotr Galecki (Editor)
Airvana, Inc.
19 Alpha Road
Chelmsford, MA 01824
USA
EMail: pgalecki@airvana.com
Spencer Giacalone (Editor)
CSFB
Eleven Madison Ave
New York, NY 10010-3629
USA
EMail: spencer.giacalone@gmail.com
Fred Baker
Cisco Systems
1121 Via Del Rey
Santa Barbara, California 93117
USA
EMail: fred@cisco.com
Rob Coltun
Touch Acoustra
3204 Brooklawn Terrace
Chevy Chase, MD 20815
USA
EMail: undisclosed
Full Copyright Statement โ๏ธ
Copyright (C) The IETF Trust (2006).
This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.
This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST, AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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.
Intellectual Property ๐ง
The IETF takes no position regarding the validity or scope of any Intellectual Property Rights 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; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat 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 implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.
Acknowledgement ๐ธ
Funding for the RFC Editor function is currently provided by the Internet Society. ๐
๐ฆ where this page comes from
- ietf: rfc4750 2006-12
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms