RFC 1248

OSPF Version 2 Management Information Base

๐Ÿ“… published July 1991, from ietf

OSPF Version 2 Management Information Base ๐ŸŽ€

Okay bestie, so RFC 1248 is all about the OSPF Version 2 Management Information Base ๐Ÿฆ‹. Two authors wrote it: F. Baker from ACC and R. Coltun from the Computer Science Center. It's dated July 1991. The title block doesn't list anything it obsoletes or updates, so no drama there โœจ

Status of This Memo ๐Ÿ“œ

This RFC is an IAB standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements ๐Ÿ’… For the standardization state and status of this protocol, check the current edition of the "IAB Official Protocol Standards." Distribution of this memo is unlimited ๐ŸŒˆ

Table of Contents ๐Ÿ“š

1. Abstract .............................................    2
2. The Network Management Framework......................    2
3. Objects ..............................................    2
3.1 Format of Definitions ...............................    3
4. Overview .............................................    3
4.1 Textual Conventions .................................    3
4.2 Structure of MIB ....................................    3
4.2.1 General Variables .................................    4
4.2.2 Area Data Structure and Area Stub Metric Table ....    4
4.2.3 Link State Database ...............................    4
4.2.4 Address Table and Host Tables .....................    4
4.2.5 Interface and Interface Metric Tables .............    4
4.2.6 Virtual Interface Table ...........................    4
4.2.7 Neighbor and Virtual Neighbor Tables ..............    4
4.3 Conceptual Row Creation .............................    5
4.4 Default Configuration ...............................    5
5. Definitions ..........................................    7
5.1 OSPF General Variables ..............................    8
5.2 OSPF Area Data Structure ............................   11
5.3 OSPF Area Default Metric Table ......................   14
5.4 OSPF Link State Database ............................   16
5.5 OSPF Address Range Table ............................   19
5.6 OSPF Host Table .....................................   21
5.7 OSPF Interface Table ................................   23
5.8 OSPF Interface Metric Table .........................   28
5.9 OSPF Virtual Interface Table ........................   31
5.10 OSPF Neighbor Table ................................   34
5.11 OSPF Virtual Neighbor Table ........................   38
6. Acknowledgements .....................................   40
7. References ...........................................   40
8. Security Considerations...............................   41
9. Authors' Addresses....................................   42

1. Abstract ๐Ÿ“

This memo defines an experimental portion of the Management Information Base (MIB) for use with network management protocols in TCP/IP-based internets ๐Ÿซถ Specifically, it defines objects for managing OSPF Version 2.

2. The Network Management Framework ๐Ÿงš

The Internet-standard Network Management Framework is made up of three components, and they're the power trio ๐Ÿ”ฅ

  • RFC 1155 defines the SMI, the mechanisms used for describing and naming objects for the purpose of management. RFC 1212 defines a more concise description mechanism, which is wholly consistent with the SMI.
  • RFC 1156 defines MIB-I, the core set of managed objects for the Internet suite of protocols. RFC 1213, defines MIB-II, an evolution of MIB-I based on implementation experience and new operational requirements.
  • RFC 1157 defines the SNMP, the protocol used for network access to managed objects.

The Framework also lets people define new objects for experimentation and evaluation โœจ

3. Objects ๐ŸŽ€

Managed objects are accessed through a virtual information store called the Management Information Base, or MIB ๐Ÿ’œ Objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) [7] that's defined in the SMI. Each object has a name, a syntax, and an encoding. The name is an object identifier, which is an administratively assigned name that specifies an object type. The object type together with an object instance is what uniquely identifies one specific instance of the object. For human convenience, we often use a text string, called the OBJECT DESCRIPTOR, to also refer to the object type ๐Ÿฆ‹

The syntax of an object type defines the abstract data structure that matches that object type, and ASN.1 is the language used for this. The SMI [3] purposely restricts which ASN.1 constructs can be used, and that's done on purpose to keep things simple ๐ŸŒธ

The encoding of an object type is just how that object type gets represented using its syntax. Tied right in with an object type's syntax and encoding is how the object type is represented when it's sent over the network ๐Ÿซถ

The SMI uses the basic encoding rules of ASN.1 [8], subject to the additional requirements that SNMP imposes ๐Ÿ’…

3.1. Format of Definitions ๐Ÿ“

Section 5 has the specification of all the object types in this MIB module. These object types are defined using the conventions from the SMI, as extended by the extensions specified in [9] ๐ŸŒˆ

4. Overview ๐Ÿ‘‘

4.1. Textual Conventions ๐Ÿ“

This MIB document introduces several new data types as textual conventions. They make the spec easier to read and easier to compare with other specs when that's useful ๐Ÿงš Introducing these textual conventions has no effect on the syntax or the semantics of any managed object, so the SMI and SNMP don't need any changes to support them. They're just a convenience for readers and writers chasing the elusive goal of clear, concise, unambiguous MIB documents ๐Ÿ˜ญ Objects defined using them are always encoded using the rules for the primitive type underneath ๐Ÿ’œ

The new data types are AreaID, RouterID, TOSType, Metric, BigMetric, TruthValue, Status, Validation, PositiveInteger, HelloRange, UpToMaxAge, InterfaceIndex, and DesignatedRouterPriority โœจ

4.2. Structure of MIB ๐ŸŒธ

The MIB is made up of the following sections:

General Variables
Area Data Structure
Area Stub Metric Table
Link State Database
Address Range Table
Host Table
Interface Table
Interface Metric Table
Virtual Interface Table
Neighbor Table
Virtual Neighbor Table

4.2.1. General Variables ๐ŸŒ

The General Variables are exactly what they sound like: variables that are global to the OSPF Process ๐Ÿ’–

4.2.2. Area Data Structure and Area Stub Metric Table ๐Ÿ—บ๏ธ

The Area Data Structure describes the OSPF Areas that the router takes part in. The Area Stub Metric Table describes the metrics advertised into a stub area by the default router(s) ๐Ÿฆ‹

The Link State Database is there mainly to give detailed information for network debugging ๐Ÿ™ˆ

4.2.4. Address Table and Host Tables ๐Ÿ“‡

The Address Range Table and Host Table are there so you can view configured Network Summary and Host Route information โœจ

4.2.5. Interface and Interface Metric Tables ๐Ÿ”Œ

The Interface Table and the Interface Metric Table together describe the various IP interfaces to OSPF. The metrics live in separate tables so that dealing with multiple types of service is simpler, and so there's flexibility if the IP TOS definition ever changes ๐ŸŽ€ A Default Value specification is supplied for the TOS 0 (default) metric ๐Ÿ’…

4.2.6. Virtual Interface Table ๐Ÿชข

Likewise, the Virtual Interface Table describes virtual links to the OSPF Process ๐Ÿงš

4.2.7. Neighbor and Virtual Neighbor Tables ๐Ÿค

The Neighbor Table and the Virtual Neighbor Table describe the neighbors of the OSPF Process ๐Ÿซถ

4.3. Conceptual Row Creation ๐Ÿง

To help with row creation in "conceptual" tables (see [9]), DEFVAL (Default Value) clauses are included in the definitions in section 5. They suggest values an agent should use for instances of variables that need 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 means they get zeroed out when a row is created. These objects have a SYNTAX of Counter or Gauge ๐Ÿ’œ

For objects without a DEFVAL clause, both management stations and agents should keep the Robustness Principle of the Internet in mind (see RFC-791) ๐ŸŒˆ

"be liberal in what you accept, conservative in what you send"

So in practice, management stations should include as many of these columnar objects as possible (for example, all the read-write objects) in a Set-Request when creating a conceptual row ๐ŸŽ€ Agents should accept a Set-Request with as few of these as they need. The minimum contents of a row-creating SET are the objects that can't be intuited and have no specified default ๐Ÿฆ‹

There are lots of read-write objects in this MIB, because it's designed for SNMP management of the protocol and not just SNMP monitoring of its state ๐Ÿ’… But since there isn't a standard SNMP Security architecture yet, it's acceptable for implementations to make these read-only and offer a different interface for changing them ๐Ÿ”

Part 1 of 6 done, bestie! ๐Ÿ’–

4.4. Default Configuration โœจ

okay so OSPF is a powerful routing protocol ๐Ÿ’… it can handle basically any configuration you could reasonably need inside an Autonomous System. that power comes with a lot of complexity, and the sheer number of objects in the MIB proves it ๐Ÿ™ˆ so when this MIB was built, someone made sure almost every object has a default value, so you don't have to set up a ton of stuff in the typical case. here's the default setup ๐ŸŽ€

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 TOS 0 metrics are autonomously derived from ifSpeed
  • The OSPF Process automatically creates the Areas required for the Interfaces

The simplest configuration of an OSPF process requires that:

  • The OSPF Process be Enabled.

and the whole thing can be done with a single SET ๐Ÿฆ‹

ospfAdminStat := enabled.

once that's done, 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. 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.

5. Definitions ๐ŸŒˆ

     RFC1248-MIB DEFINITIONS ::= BEGIN

     IMPORTS
             experimental, Counter, Gauge, IpAddress
                     FROM RFC1155-SMI
             OBJECT-TYPE
                     FROM RFC-1212;

     --  This MIB module uses the extended OBJECT-TYPE macro as
     --  defined in [9].

             ospf OBJECT IDENTIFIER ::= { standard-mib 13 }

     --  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

             AreaID ::= IpAddress

     --  The Router ID, in OSPF, has the same format as an IP Address,
     --  but identifies the router independent of its IP Address.

             RouterID ::= IpAddress

     --  The OSPF Metric is defined as an unsigned value in the range

             Metric    ::= INTEGER (1..'FFFF'h)
             BigMetric ::= INTEGER (1..'FFFFFF'h)

     --  Boolean Values

             TruthValue ::= INTEGER { true (1), false (2) }

     --  Status Values

             Status ::= INTEGER { enabled (1), disabled (2) }

     --  Row Creation/Deletion Values

             Validation ::= INTEGER { valid (1), invalid (2) }

     --  Time Durations measured in seconds

             PositiveInteger ::= INTEGER (1..'FFFFFFFF'h)
             HelloRange      ::= INTEGER (1..'FFFF'h)
             UpToMaxAge      ::= INTEGER (1..3600)

     --  The range of ifIndex, i.e. (1..ifNumber)

             InterfaceIndex ::= INTEGER

     --  Potential Priorities for the Designated Router Election

             DesignatedRouterPriority ::= INTEGER (0..'FF'h)

     --  Type of Service is defined as a mapping to the IP Type of
     --  Service Flags as defined in the Router Requirements
     --  Document:
     --
     --      D => Low Delay          R => Reliable Route
     --      T => High Bandwidth

     --  D T R   TOS      D T R   TOS
     --  0 0 0 =>  0      0 0 1 =>  4
     --  0 1 0 =>  8      0 1 1 => 12
     --  1 0 0 => 16      1 0 1 => 20
     --  1 1 0 => 24      1 1 1 => 28

     --  The remaining values are left for future definition.

             TOSType ::= INTEGER (0..31)

     --  OSPF General Variables

     --      These parameters apply globally to the Router's
     --      OSPF Process.

     ospfGeneralGroup OBJECT IDENTIFIER ::= { ospf 1 }

     ospfRouterId OBJECT-TYPE
         SYNTAX   RouterID
         ACCESS   read-write
         STATUS   mandatory
         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."
         REFERENCE
            "OSPF Version 2, C.1 Global parameters"
         ::= { ospfGeneralGroup 1 }

     ospfAdminStat OBJECT-TYPE
         SYNTAX   Status
         ACCESS   read-write
         STATUS   mandatory
         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."
         ::= { ospfGeneralGroup 2 }

     ospfVersionNumber OBJECT-TYPE
         SYNTAX   INTEGER { version2 (2) }
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The current version number of the OSPF protocol is 2."
         REFERENCE
            "OSPF Version 2, Title"
         ::= { ospfGeneralGroup 3 }

     ospfAreaBdrRtrStatus OBJECT-TYPE
         SYNTAX   TruthValue
         ACCESS   read-only
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "A flag to note whether this router is an Autonomous
            System border router."

         REFERENCE
            "OSPF Version 2, Section 3.3 Classification of routers"
         ::= { ospfGeneralGroup 5 }

     ospfExternLSACount OBJECT-TYPE
         SYNTAX   Gauge
         ACCESS   read-only
         STATUS   mandatory
         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   INTEGER
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The 32-bit unsigned 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."
         ::= { ospfGeneralGroup 7 }

     ospfTOSSupport OBJECT-TYPE
         SYNTAX   TruthValue
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The router's support for type-of-service routing."
         REFERENCE
            "OSPF Version 2, Appendix F.1.2 Optional TOS support"
         ::= { ospfGeneralGroup 8 }

     ospfOriginateNewLSAs OBJECT-TYPE
         SYNTAX   Counter
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The number of new link-state advertisements that have
            been originated.  This number is incremented each time
            the router originates a new LSA."
         ::= { ospfGeneralGroup 9 }

     ospfRxNewLSAs OBJECT-TYPE
         SYNTAX   Counter
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The number of link-state advertisements received
            determined to be new instantiations.  This number does
            not include newer instantiations of self-originated
            link-state advertisements."
         ::= { ospfGeneralGroup 10 }


     --      The OSPF Area Data Structure contains information
     --      regarding the various areas. The interfaces and
     --      virtual links are configured as part of these areas.
     --      Area 0.0.0.0, by definition, is the Backbone Area

     ospfAreaTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfAreaEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "Information describing the configured parameters and
            cumulative statistics of the router's attached areas."
         REFERENCE
            "OSPF Version 2, Section 6  The Area Data Structure"
         ::= { ospf 2 }

     ospfAreaEntry OBJECT-TYPE
         SYNTAX   OspfAreaEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "Information describing the configured parameters and
            cumulative statistics of one of the router's attached
            areas."
         INDEX { ospfAreaID }
         ::= { ospfAreaTable 1 }

     OspfAreaEntry ::=
         SEQUENCE {
             ospfAreaId
                 AreaID,
             ospfAuthType
                 INTEGER,
             ospfImportASExtern
                 TruthValue,
             ospfSpfRuns

                 Counter,
             ospfAreaBdrRtrCount
                 Gauge,
             ospfASBdrRtrCount
                 Gauge,
             ospfLSACount
                 Gauge,
             ospfAreaLSACksumSum
                 INTEGER
         }

     ospfAreaId OBJECT-TYPE
         SYNTAX   AreaID
         ACCESS   read-write
         STATUS   mandatory
         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   INTEGER
                     -- none (0),
                     -- simplePassword (1)
                     -- reserved for specification by IANA (> 1)
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The authentication type specified for an area.
            Additional authentication types may be assigned locally
            on a per Area basis."
         REFERENCE
            "OSPF Version 2, Appendix E Authentication"
         DEFVAL { 0 }        -- no authentication, by default
         ::= { ospfAreaEntry 2 }

     ospfImportASExtern OBJECT-TYPE
         SYNTAX   TruthValue
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The area's support for importing AS external link-
            state advertisements."
         REFERENCE
            "OSPF Version 2, Appendix C.2 Area parameters"
         DEFVAL { true }
         ::= { ospfAreaEntry 3 }

Okay so this is the part where the Area table gets its stats ๐Ÿ“Š The counters here are giving main character energy, so let's go โœจ

ospfSpfRuns counts how many times the intra-area route table has been calculated from this area's link-state database ๐Ÿงฎ

     ospfSpfRuns OBJECT-TYPE
         SYNTAX   Counter
         ACCESS   read-only
         STATUS   mandatory
         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."
         DEFVAL   { 0 }
         ::= { ospfAreaEntry 4 }

     ospfAreaBdrRtrCount OBJECT-TYPE
         SYNTAX   Gauge
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The total number of area border routers reachable
            within this area.  This is initially zero, and is
            calculated in each SPF Pass."
         DEFVAL   { 0 }
         ::= { ospfAreaEntry 5 }

     ospfASBdrRtrCount OBJECT-TYPE
         SYNTAX   Gauge
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The total number of Autonomous System border routers
            reachable within this area.  This is initially zero,
            and is calculated in each SPF Pass."
         DEFVAL   { 0 }
         ::= { ospfAreaEntry 6 }

     ospfAreaLSACount OBJECT-TYPE
         SYNTAX   Gauge
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The total number of link-state advertisements in this
            area's link-state database, excluding AS External
            LSA's."
         DEFVAL   { 0 }
         ::= { ospfAreaEntry 7 }

     ospfAreaLSACksumSum OBJECT-TYPE
         SYNTAX   INTEGER
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The 32-bit unsigned 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."
         DEFVAL   { 0 }
         ::= { ospfAreaEntry 8 }

Next up is the stub area defaults table ๐ŸŽ€ It's basically the metrics a default ABR will advertise into a Stub area, and it's keyed by area and Type of Service ๐Ÿ“

     --  OSPF Area Default Metric Table

     --      The OSPF Area Default Metric Table describes the metrics
     --      that a default Area Border Router will advertise into a
     --      Stub area.

     ospfStubAreaTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfStubAreaEntry
         ACCESS   not-accessible
         STATUS   mandatory
         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
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "The metric for a given Type of Service that will be
            advertised by a default Area Border Router into a stub
            area."
         REFERENCE
            "OSPF Version 2, Appendix C.2, Area Parameters"
         INDEX { ospfStubAreaID, ospfStubTOS }
         ::= { ospfStubAreaTable 1 }

     OspfStubAreaEntry ::=
         SEQUENCE {
             ospfStubAreaID
                 AreaID,
             ospfStubTOS
                 TOSType,
             ospfStubMetric
                 BigMetric,
             ospfStubStatus
                 Validation
         }

     ospfStubAreaID OBJECT-TYPE
         SYNTAX   AreaID
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         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   Validation
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "This variable displays the validity or invalidity of
            the entry.  Setting it to 'invalid' has the effect of
            rendering it inoperative.  The internal effect (row
            removal) is implementation dependent."
         DEFVAL   { valid }
         ::= { ospfStubAreaEntry 4 }

Now we're at the Link State Database ๐Ÿฆ‹ This is the big one, holding every LSA from every area the device is attached to ๐ŸŒˆ

     --  OSPF Link State Database

     --      The Link State Database contains the Link State
     --      Advertisements from throughout the areas that the
     --      device is attached to.

     ospfLsdbTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfLsdbEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "The OSPF Process's Links State Database."
         REFERENCE
            "OSPF Version 2, Section 12 Link State Advertisements"
         ::= { ospf 4 }

     ospfLsdbEntry OBJECT-TYPE
         SYNTAX   OspfLsdbEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "A single Link State Advertisement."
         INDEX { ospfLsdbAreaId, ospfLsdbType,
                 ospfLsdbLSID, ospfLsdbRouterId }
         ::= { ospfLsdbTable 1 }

     OspfLsdbEntry ::=
         SEQUENCE {
             ospfLsdbAreaId
                 AreaID,
             ospfLsdbType
                 INTEGER,
             ospfLsdbLSID
                 IpAddress,
             ospfLsdbRouterId
                 RouterID,
             ospfLsdbSequence
                 INTEGER,
             ospfLsdbAge
                 INTEGER,
             ospfLsdbChecksum

                 INTEGER,
             ospfLsdbAdvertisement
                 OCTET STRING
         }

     ospfLsdbAreaId OBJECT-TYPE
         SYNTAX   AreaID
         ACCESS   read-only
         STATUS   mandatory
         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)
                  }
         ACCESS   read-only
         STATUS   mandatory
         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"
         ::= { ospfLsdbEntry 2 }

     ospfLsdbLSID OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-only
         STATUS   mandatory
         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
         ACCESS   read-only
         STATUS   mandatory
         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 }

     --  Note that the OSPF Sequence Number is a 32 bit signed
     --  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.

     ospfLsdbSequence OBJECT-TYPE
         SYNTAX   INTEGER
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The sequence number field is a signed 32-bit integer.
            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   INTEGER    -- Should be 0..MaxAge
         ACCESS   read-only
         STATUS   mandatory
         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   INTEGER
         ACCESS   read-only
         STATUS   mandatory
         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
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The entire Link State Advertisement, including its
            header."
         REFERENCE
            "OSPF Version 2, Section 12 Link State Advertisements"
         ::= { ospfLsdbEntry 8 }

Last bit for this part is the Address Range Table ๐Ÿงš It's the adjunct to the Area Table that tracks which address range summaries get propagated out of an Area, so less info leaks past its borders ๐Ÿซถ

     --  Address Range Table

     --      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 which is known beyond
     --      its borders.

     ospfAreaRangeTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfAreaRangeEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "A range if IP addresses 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"
         REFERENCE
            "OSPF Version 2, Appendix C.2  Area parameters"
         ::= { ospf 5 }

     ospfAreaRangeEntry OBJECT-TYPE
         SYNTAX   OspfAreaRangeEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "A range if IP addresses 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"
         REFERENCE
            "OSPF Version 2, Appendix C.2  Area parameters"
         INDEX { ospfAreaRangeAreaID, ospfAreaRangeNet }
         ::= { ospfAreaRangeTable 1 }

     OspfAreaRangeEntry ::=
         SEQUENCE {
             ospfAreaRangeAreaID
                 AreaID,
             ospfAreaRangeNet
                 IpAddress,
             ospfAreaRangeMask
                 IpAddress,
             ospfAreaRangeStatus
                 Validation
         }

okay so we're still in the MIB definitions, and this part is all about the area ranges, the host table, and the first chunk of the OSPF interface table ๐Ÿฆ‹ the actual OBJECT-TYPE blocks have to stay exact, so I've kept them in code blocks, character for character ๐Ÿ’…

Area range objects, where each address range lives and what it covers โœจ

     ospfAreaRangeAreaID OBJECT-TYPE
         SYNTAX   AreaID
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The Area the Address Range is to be found within."
         REFERENCE
            "OSPF Version 2, Appendix C.2 Area parameters"
         ::= { ospfAreaRangeEntry 1 }

     ospfAreaRangeNet OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         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   Validation
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "This variable displays the validity or invalidity of
            the entry.  Setting it to 'invalid' has the effect of
            rendering it inoperative.  The internal effect (row
            removal) is implementation dependent."
         DEFVAL   { valid }
         ::= { ospfAreaRangeEntry 4 }

Now the host table, which says which hosts hang directly off the router and what metrics and types of service get advertised for them ๐Ÿงš

     --  OSPF Host Table

     --      The Host/Metric Table indicates what hosts are directly
     --      attached to the Router, and what metrics and types of
     --      service should be advertised for them.

     ospfHostTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfHostEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "The list of Hosts, and their metrics, that the router
            will advertise as host routes."
         REFERENCE
            "OSPF Version 2, Appendix C.6  Host route parameters"
         ::= { ospf 6 }

     ospfHostEntry OBJECT-TYPE
         SYNTAX   OspfHostEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "A metric to be advertised, for a given type of service,
            when a given host is reachable."
         INDEX { ospfHostIpAddress, ospfHostTOS }
         ::= { ospfHostTable 1 }

     OspfHostEntry ::=
         SEQUENCE {
             ospfHostIpAddress
                 IpAddress,
             ospfHostTOS

                 TOSType,
             ospfHostMetric
                 Metric,
             ospfHostStatus
                 Validation
         }

     ospfHostIpAddress OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The IP Address of the Host."
         REFERENCE
            "OSPF Version 2, Appendix C.6 Host route parameters"
         ::= { ospfHostEntry 1 }

     ospfHostTOS OBJECT-TYPE
         SYNTAX   TOSType
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The Type of Service of the route being configured."
         REFERENCE
            "OSPF Version 2, Appendix C.6 Host route parameters"
         ::= { ospfHostEntry 2 }

     ospfHostMetric OBJECT-TYPE
         SYNTAX   Metric
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The Metric to be advertised."
         REFERENCE
            "OSPF Version 2, Appendix C.6 Host route parameters"
         ::= { ospfHostEntry 3 }

     ospfHostStatus OBJECT-TYPE
         SYNTAX   Validation
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "This variable displays the validity or invalidity of
            the entry.  Setting it to 'invalid' has the effect of
            rendering it inoperative.  The internal effect (row
            removal) is implementation dependent."
         DEFVAL   { valid }
         ::= { ospfHostEntry 4 }

And now the OSPF interface table ๐ŸŽ€ it augments the ifTable with all the OSPF-specific goodies

     --  OSPF Interface Table

     --      The OSPF Interface Table augments the ifTable with OSPF
     --      specific information.

     ospfIfTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfIfEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "The OSPF Interface Table describes the interfaces from
            the viewpoint of OSPF."
         REFERENCE
            "OSPF Version 2, Appendix C.3  Router interface
            parameters"
         ::= { ospf 7 }

     ospfIfEntry OBJECT-TYPE
         SYNTAX   OspfIfEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "The OSPF Interface Entry describes one interface from
            the viewpoint of OSPF."
         INDEX { ospfIfIpAddress, ospfAddressLessIf }
         ::= { ospfIfTable 1 }

     OspfIfEntry ::=
         SEQUENCE {
             ospfIfIpAddress
                 IpAddress,
             ospfAddressLessIf
                 INTEGER,
             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
                 Counter,
             ospfIfAuthKey
                 OCTET STRING
         }

     ospfIfIpAddress OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The IP address of this OSPF interface."
         ::= { ospfIfEntry 1 }

     ospfAddressLessIf OBJECT-TYPE
         SYNTAX   INTEGER
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         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)
                  }
         ACCESS   read-write
         STATUS   mandatory
         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, Frame Relay, and similar
            technologies take the value 'nbma', and links that are
            definitively point to point take the value
            'pointToPoint'."
         ::= { ospfIfEntry 4 }

     ospfIfAdminStat OBJECT-TYPE
         SYNTAX   Status
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The OSPF interface's administrative status.  The value
            'enabled' denotes that neighbor relationships may be
            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
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The estimated number of seconds it takes to transmit a
            link- state update packet over this interface."
         DEFVAL { 1 }
         ::= { ospfIfEntry 7 }

     ospfIfRetransInterval OBJECT-TYPE
         SYNTAX   UpToMaxAge
         ACCESS   read-write
         STATUS   mandatory
         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."
         DEFVAL { 5 }
         ::= { ospfIfEntry 8 }

     ospfIfHelloInterval OBJECT-TYPE
         SYNTAX   HelloRange
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The number of seconds that a router's Hello packets
            have not been seen before it's 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
         ACCESS   read-write
         STATUS   mandatory
         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)
                  }
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The OSPF Interface State."
         DEFVAL { down }
         ::= { ospfIfEntry 12 }

     ospfIfDesignatedRouter OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The IP Address of the Designated Router."
         DEFVAL   { '00000000'H }    -- 0.0.0.0
         ::= { ospfIfEntry 13 }

okay bestie, the Backup Designated Router gets its own object ๐Ÿ’– It's the IP address of the backup DR, and it starts out as 0.0.0.0 ๐ŸŒธ

     ospfIfBackupDesignatedRouter OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The IP Address of the Backup Designated Router."
         DEFVAL   { '00000000'H }    -- 0.0.0.0
         ::= { ospfIfEntry 14 }

     ospfIfEvents OBJECT-TYPE
         SYNTAX   Counter
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The number of times this OSPF interface has changed
            its state, or an error has occurred."
         DEFVAL   { 0 }
         ::= { ospfIfEntry 15 }

     ospfIfAuthKey OBJECT-TYPE
         SYNTAX   OCTET STRING
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The Authentication Key.  If the Area's Authorization
            Type is simplePassword, and the key length is shorter
            than 8 octets, the agent will left adjust and zero fill
            to 8 octets.

            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 }

ospfIfEvents counts how many times the interface changed state or hit an error โœจ and ospfIfAuthKey is the auth key ๐Ÿ”, which is write-friendly but reads back as a zero-length string, iykyk ๐Ÿ™ˆ

Next up is the OSPF Interface Metric Table ๐Ÿฆ‹ It's basically an add-on to the interface table, and it holds the metrics advertised for an interface for each type of service. The big idea is the default bandwidth-based metric, 10^8 / ifSpeed, and the comments include a cute little chart of typical values so you can see how the numbers climb as the link slows down ๐Ÿš€

     --  OSPF Interface Metric Table

     --      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 = 10^8 / ifSpeed

     -- is the default value.  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

     ospfIfMetricTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfIfMetricEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "The TOS metrics for a non-virtual interface identified
            by the interface index."
         REFERENCE
            "OSPF Version 2, Appendix C.3  Router interface
            parameters"
         ::= { ospf 8 }

     ospfIfMetricEntry OBJECT-TYPE
         SYNTAX   OspfIfMetricEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "A particular TOS metric for a non-virtual interface
            identified by the interface index."
         REFERENCE
            "OSPF Version 2, Appendix C.3  Router interface
            parameters"
         INDEX { ospfIfMetricIpAddress,
                 ospfIfMetricAddressLessIf,
                 ospfIfMetricTOS }
         ::= { ospfIfMetricTable 1 }

     OspfIfMetricEntry ::=
         SEQUENCE {
             ospfIfMetricIpAddress
                 IpAddress,
             ospfIfMetricAddressLessIf
                 INTEGER,
             ospfIfMetricTOS
                 TOSType,

             ospfIfMetricMetric
                 Metric,
             ospfIfMetricStatus
                 Validation
         }

     ospfIfMetricIpAddress OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The IP address of this OSPF interface.  On row
            creation, this can be derived from the instance."
         ::= { ospfIfMetricEntry 1 }

     ospfIfMetricAddressLessIf OBJECT-TYPE
         SYNTAX   INTEGER
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The type of service metric being referenced.  On row
            creation, this can be derived from the instance."
         ::= { ospfIfMetricEntry 3 }

     ospfIfMetricMetric OBJECT-TYPE
         SYNTAX   Metric
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The metric of using this type of service on this
            interface.  The default value of the TOS 0 Metric is
            10^8 / ifSpeed.

            The value FFFF is distinguished to mean 'no route via
            this TOS'."
         ::= { ospfIfMetricEntry 4 }

     ospfIfMetricStatus OBJECT-TYPE
         SYNTAX   Validation
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "This variable displays the validity or invalidity of
            the entry.  Setting it to 'invalid' has the effect of
            rendering it inoperative.  The internal effect (row
            removal) is implementation dependent."
         DEFVAL   { valid }
         ::= { ospfIfMetricEntry 5 }

ngl the value FFFF is the drama queen of this table ๐Ÿ’€ It means "no route via this TOS" ๐Ÿ™…โ€โ™€๏ธ

Now we're in the OSPF Virtual Interface Table ๐Ÿงš It describes the virtual links the OSPF process is set up to carry on. Each entry is indexed by the transit area and the virtual neighbor, and it holds timers, state, events, an auth key and a status. The defaults are pretty cute too: transit delay of 1, retransmit interval of 5, hello of 10, and dead interval of 60 ๐Ÿ“

     --  OSPF Virtual Interface Table

     --      The Virtual Interface Table describes the virtual
     --      links that the OSPF Process is configured to
     --      carry on.

     ospfVirtIfTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfVirtIfEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "Information about this router's virtual interfaces."
         REFERENCE
            "OSPF Version 2, Appendix C.4  Virtual link parameters"
         ::= { ospf 9 }

     ospfVirtIfEntry OBJECT-TYPE
         SYNTAX   OspfVirtIfEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "Information about a single Virtual Interface."
         INDEX { ospfVirtIfAreaID, ospfVirtIfNeighbor }
         ::= { ospfVirtIfTable 1 }

     OspfVirtIfEntry ::=
         SEQUENCE {
             ospfVirtIfAreaID
                 AreaID,
             ospfVirtIfNeighbor
                 RouterID,
             ospfVirtIfTransitDelay
                 UpToMaxAge,
             ospfVirtIfRetransInterval
                 UpToMaxAge,

             ospfVirtIfHelloInterval
                 HelloRange,
             ospfVirtIfRtrDeadInterval
                 PositiveInteger,
             ospfVirtIfState
                 INTEGER,
             ospfVirtIfEvents
                 Counter,
             ospfVirtIfAuthKey
                 OCTET STRING,
             ospfVirtIfStatus
                 Validation
         }

     ospfVirtIfAreaID OBJECT-TYPE
         SYNTAX   AreaID
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The Router ID of the Virtual Neighbor."
         ::= { ospfVirtIfEntry 2 }

     ospfVirtIfTransitDelay OBJECT-TYPE
         SYNTAX   UpToMaxAge
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The estimated number of seconds it takes to transmit a
            link- state update packet over this interface."
         DEFVAL { 1 }
         ::= { ospfVirtIfEntry 3 }

     ospfVirtIfRetransInterval OBJECT-TYPE
         SYNTAX   UpToMaxAge
         ACCESS   read-write
         STATUS   mandatory
         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.
            This value should be well over the expected round-trip
            time."
         DEFVAL { 5 }
         ::= { ospfVirtIfEntry 4 }

     ospfVirtIfHelloInterval OBJECT-TYPE
         SYNTAX   HelloRange
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The number of seconds that a router's Hello packets
            have not been seen before it's 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
                  }
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "OSPF virtual interface states."
         DEFVAL   { down }
         ::= { ospfVirtIfEntry 7 }

     ospfVirtIfEvents OBJECT-TYPE
         SYNTAX   Counter
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION

            "The number of state changes or error events on this
            Virtual Link"
         DEFVAL   { 0 }
         ::= { ospfVirtIfEntry 8 }

     ospfVirtIfAuthKey OBJECT-TYPE
         SYNTAX   OCTET STRING
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "If Authentication Type is simplePassword, the device
            will left adjust and zero fill to 8 octets.

            When read, ospfVifAuthKey always returns a 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   Validation
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "This variable displays the validity or invalidity of
            the entry.  Setting it to 'invalid' has the effect of
            rendering it inoperative.  The internal effect (row
            removal) is implementation dependent."
         DEFVAL   { valid }
         ::= { ospfVirtIfEntry 10 }

the virtual state only has two possible values, down (1) and pointToPoint (4), and they share the same encoding as the ospfIfTable ๐ŸŽ€

Last bit for this part: the OSPF Neighbor Table ๐Ÿ‘‘ It describes all the neighbors in the subject router's locality, and that's where we pick up next ๐Ÿ’œ

     --  OSPF Neighbor Table

     --      The OSPF Neighbor Table describes all neighbors in
     --      the locality of the subject router.

     ospfNbrTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfNbrEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "A table of non-virtual neighbor information."
         REFERENCE
            "OSPF Version 2, Section 10 The Neighbor Data
            Structure"

         ::= { ospf 10 }
     ospfNbrEntry OBJECT-TYPE
         SYNTAX   OspfNbrEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "The information regarding a single neighbor."
         REFERENCE
            "OSPF Version 2, Section 10 The Neighbor Data
            Structure"
         INDEX { ospfNbrIpAddr, ospfNbrAddressLessIndex }
         ::= { ospfNbrTable 1 }

     OspfNbrEntry ::=
         SEQUENCE {
             ospfNbrIpAddr
                 IpAddress,
             ospfNbrAddressLessIndex
                 InterfaceIndex,
             ospfNbrRtrId
                 RouterID,
             ospfNbrOptions
                 INTEGER,
             ospfNbrPriority
                 DesignatedRouterPriority,
             ospfNbrState
                 INTEGER,
             ospfNbrEvents
                 Counter,
             ospfNbrLSRetransQLen
                 Gauge,
             ospfNBMANbrStatus
                 Validation
         }

     ospfNbrIpAddr OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "The IP address of this neighbor."
         ::= { ospfNbrEntry 1 }

     ospfNbrAddressLessIndex OBJECT-TYPE
         SYNTAX   InterfaceIndex
         ACCESS   read-write
         STATUS   mandatory
         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
         ACCESS   read-only
         STATUS   mandatory
         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   INTEGER
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "A Bit Mask corresponding to the neighbor's options
            field.

            Bit 0, if set, indicates that the area accepts and
            operates on external information; if zero, it is a stub
            area.

            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."
         REFERENCE
            "OSPF Version 2, Section 12.1.2 Options"
         DEFVAL { 0 }
         ::= { ospfNbrEntry 4 }

     ospfNbrPriority OBJECT-TYPE
         SYNTAX   DesignatedRouterPriority
         ACCESS   read-write
         STATUS   mandatory
         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)
                  }
         ACCESS   read-only
         STATUS   mandatory
         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   Counter
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The number of times this neighbor relationship has
            changed state, or an error has occurred."
         DEFVAL   { 0 }
         ::= { ospfNbrEntry 7 }

     ospfNbrLSRetransQLen OBJECT-TYPE
         SYNTAX   Gauge
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The current length of the retransmission queue."
         DEFVAL   { 0 }
         ::= { ospfNbrEntry 8 }

     ospfNBMANbrStatus OBJECT-TYPE
         SYNTAX   Validation
         ACCESS   read-write
         STATUS   mandatory
         DESCRIPTION
            "This variable displays the validity or invalidity of
            the entry.  Setting it to 'invalid' has the effect of
            rendering it inoperative.  The internal effect (row
            removal) is implementation dependent."
         DEFVAL { valid }
         ::= { ospfNbrEntry 9 }


     --  OSPF Virtual Neighbor Table

     --      This table describes all virtual neighbors.
     --      Since Virtual Links are configured in the
     --      virtual interface table, this table is read-only.

     ospfVirtNbrTable OBJECT-TYPE
         SYNTAX   SEQUENCE OF OspfVirtNbrEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "A table of virtual neighbor information."
         REFERENCE
            "OSPF Version 2, Section 15  Virtual Links"
         ::= { ospf 11 }

     ospfVirtNbrEntry OBJECT-TYPE
         SYNTAX   OspfVirtNbrEntry
         ACCESS   not-accessible
         STATUS   mandatory
         DESCRIPTION
            "Virtual neighbor information."
         INDEX { ospfVirtNbrArea, ospfVirtNbrRtrId }
         ::= { ospfVirtNbrTable 1 }

     OspfVirtNbrEntry ::=
         SEQUENCE {
             ospfVirtNbrArea
                 AreaID,
             ospfVirtNbrRtrId
                 RouterID,
             ospfVirtNbrIpAddr
                 IpAddress,
             ospfVirtNbrOptions
                 INTEGER,
             ospfVirtNbrState
                 INTEGER,
             ospfVirtNbrEvents
                 Counter,
             ospfVirtNbrLSRetransQLen
                 Gauge

         }

     ospfVirtNbrArea OBJECT-TYPE
         SYNTAX   AreaID
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The Transit Area Identifier."
         ::= { ospfVirtNbrEntry 1 }

     ospfVirtNbrRtrId OBJECT-TYPE
         SYNTAX   RouterID
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "A 32-bit integer uniquely identifying the neighboring
            router in the Autonomous System."
         ::= { ospfVirtNbrEntry 2 }

     ospfVirtNbrIpAddr OBJECT-TYPE
         SYNTAX   IpAddress
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The IP address this Virtual Neighbor is using."
         ::= { ospfVirtNbrEntry 3 }

     ospfVirtNbrOptions OBJECT-TYPE
         SYNTAX   INTEGER
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "A bit map corresponding to the neighbor's options
            field.  Thus, Bit 1, if set, indicates that the
            neighbor supports Type of Service Routing; if zero, no
            metrics other than TOS 0 are in use by the neighbor."
         ::= { ospfVirtNbrEntry 4 }

     ospfVirtNbrState OBJECT-TYPE
         SYNTAX   INTEGER {
                     down (1),
                     attempt (2),
                     init (3),
                     twoWay (4),
                     exchangeStart (5),
                     exchange (6),
                     loading (7),
                     full (8)

                  }
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The state of the Virtual Neighbor Relationship."
         ::= { ospfVirtNbrEntry 5 }

     ospfVirtNbrEvents OBJECT-TYPE
         SYNTAX   Counter
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The number of times this virtual link has changed its
            state, or an error has occurred."
         DEFVAL   { 0 }
         ::= { ospfVirtNbrEntry 6 }

     ospfVirtNbrLSRetransQLen OBJECT-TYPE
         SYNTAX   Gauge
         ACCESS   read-only
         STATUS   mandatory
         DESCRIPTION
            "The current length of the retransmission queue."
         ::= { ospfVirtNbrEntry 7 }

     END

6. Acknowledgements ๐Ÿซถ

Okay bestie, this RFC was cooked up by the OSPF Working Group ๐Ÿ’… and their Chairman was John Moy over at Proteon ๐ŸŒธ

A bunch of other people also gave comments and got a shoutout, so here they are:

      John Moy                Proteon, Inc
      Dino Farinacci          3COM
      Stan Froyd              Advanced Computer Communications
      Steve Willis            Wellfleet
      John Burress            Wellfleet
      Keith McCloghrie        Hughes LAN Systems

7. References ๐Ÿ“š

These are all the sources the doc leans on, and yes, I'm listing every single one ๐Ÿงš

   [1] Cerf, V., "IAB Recommendations for the Development of Internet
       Network Management Standards", RFC 1052, NRI, April 1988.

   [2] Cerf, V., "Report of the Second Ad Hoc Network Management Review

       Group", RFC 1109, NRI, August 1989.

   [3] Rose M., and K. McCloghrie, "Structure and Identification of
       Management Information for TCP/IP-based internets", RFC 1155,
       Performance Systems International, Hughes LAN Systems, May 1990.

   [4] McCloghrie K., and M. Rose, "Management Information Base for
       Network Management of TCP/IP-based internets", RFC 1156, Hughes
       LAN Systems, Performance Systems International, May 1990.

   [5] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple
       Network Management Protocol", RFC 1157, SNMP Research,
       Performance Systems International, Performance Systems
       International, MIT Laboratory for Computer Science, May 1990.

   [6] Rose M., Editor, "Management Information Base for Network
       Management of TCP/IP-based internets: MIB-II", RFC 1213,
       Performance Systems International, March 1991.

   [7] Information processing systems - Open Systems Interconnection -
       Specification of Abstract Syntax Notation One (ASN.1),
       International Organization for Standardization, International
       Standard 8824, December 1987.

   [8] Information processing systems - Open Systems Interconnection -
       Specification of Basic Encoding Rules for Abstract Notation One
       (ASN.1), International Organization for Standardization,
       International Standard 8825, December 1987.

   [9] Rose, M., and K. McCloghrie, Editors, "Concise MIB Definitions",
       RFC 1212, Performance Systems International, Hughes LAN Systems,
       March 1991.

  [10] Moy, J., Editor, "The OSPF Specification, Version 2", RFC 1247,
       Proteon, Inc., July 1991.

8. Security Considerations ๐Ÿ™ˆ

Security issues are not discussed in this memo. Yes, you read that right. Zero security talk in this one, so keep your own locks on ๐Ÿ”’๐Ÿ’€

9. Authors' Addresses ๐Ÿฆ‹

Here's where you can find the authors. Bookmark it, bestie โœจ

   Fred Baker
   Advanced Computer Communications
   720 Santa Barbara Street
   Santa Barbara, California  93101

   Phone: (805) 963-9431
   EMail:  fbaker@acc.com


   Rob Coltun
   Computer Science Center
   Computer and Space Sciences Building
   College Park, Maryland 20742

   Phone: (301) 921-8600
   EMail: rcoltun@ni.umd.edu

   Or send comments to ospf@trantor.umd.edu.
๐Ÿ“ฆ where this page comes from