
= OSPF Discovery
:description: Learn more about OSPF link discovery in {page-component-title} topology mapping, including supported OIDs.

OSPF links are found in the `ospfNbrTable` (defined in the OSPF-MIB module) and persisted in the `ospfLink` table.

The relevant MIBs for creating an OSPF topology are those in the https://mibs.observium.org/mib/OSPF-MIB/[OSPF-MIB] and https://mibs.observium.org/mib/OSPF-TRAP-MIB/[OSPF-TRAP-MIB] modules.
They define the relevant objects used to find OSPF links--specifically, the router ID.

In OSPF, the router ID has the same format as an IP address, but identifies the router independently of its IP address.
All interfaces are identified by their IP addresses.

You can find generic information about the OSPF link discovery process in the OSPF Information box on any device's Node Detail page.

== OSPF Topology Updater

The OSPF Topology Updater consolidates OSPF data and provides the OSPF OnmsTopology.
Only full bidirectional connections between two OSPF-supported devices become edges in the topology.
For example, node A and node B are connected by an edge if, and only if, there is an OSPF link in Node A to Node B, and vice versa.

Information gathered from supported OIDs is stored in the following database tables:

.Database tables related to OSPF discovery
image::enlinkd/ospf-database.png["Network diagram depicting database tables that are used in OSPF discovery"]

== Supported OIDs

[caption=]
.Supported OIDs from the `OSPF-MIB` module
[cols="1,3,1"]
|===
| Name  | Description   | OID

| ospfRouterId
| 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.
| .1.3.6.1.2.1.14.1.1.0

| ospfAdminStat
| Administrative status of OSPF in the router.
The value `enabled` indicates 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.
| .1.3.6.1.2.1.14.1.2.0

| ospfVersionNumber
| Current version number of the OSPF protocol (`2`).
| .1.3.6.1.2.1.14.1.3.0

| ospfAreaBdrRtrStatus
| Flag that notes whether this router is an area border router.
| .1.3.6.1.2.1.14.1.4.0

| ospfAreaASBdrRtrStatus
| Flag that notes 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.
| .1.3.6.1.2.1.14.1.5.0

| ospfAreaId
| A 32-bit integer uniquely identifying an area.
Area ID `0.0.0.0` is used for the OSPF backbone.
| .1.3.6.1.2.1.14.2.1.1

| ospfAuthType
| The authentication type specified for an area.
| .1.3.6.1.2.1.14.2.1.2

| ospfImportAsExtern
| 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.
| .1.3.6.1.2.1.14.2.1.3

| ospfAreaBdrRtrCount
| The total number of area border routers reachable
 within this area. This value is initially zero and is
 calculated in each Shortest Path First (SPF) pass.
| .1.3.6.1.2.1.14.2.1.5

| ospfAsBdrRtrCount
| The total number of autonomous system border
 routers reachable within this area. This value is
 initially zero and is calculated in each SPF
 pass.
| .1.3.6.1.2.1.14.2.1.6

| ospfAreaLsaCount
| The total number of link state advertisements in this area's link state database, excluding AS-external LSAs.
| .1.3.6.1.2.1.14.2.1.7

| ospfIfIpAddress
| IP address of this OSPF interface.
| .1.3.6.1.2.1.14.7.1.1

| ospfAddressLessIf
| Takes the value `0` on interfaces with IP addresses, and the corresponding value of `ifIndex` for interfaces that have no IP addresses.
This eases the instancing of addressed and addressless interfaces.
| .1.3.6.1.2.1.14.7.1.2

| ospfNbrIpAddr
| IP address this neighbor uses 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.
| .1.3.6.1.2.1.14.10.1.1

| ospfNbrAddressLessIndex
| Takes the value `0` on interfaces with IP addresses, and the corresponding value of `ifIndex` in the Internet Standard MIB for interfaces that have no IP addresses. +
On row creation, this can be derived from the instance.
| .1.3.6.1.2.1.14.10.1.2

| ospfNbrRtrId
| 32-bit integer (represented as an `IpAddress`) that uniquely identifies the neighboring router in the autonomous system.
| .1.3.6.1.2.1.14.10.1.3
|===

[caption=]
.Supported OIDs from the `IP-MIB` module
[cols="1,3,1"]
|===
| Name  | Description   | OID

| ipAdEntIfIndex
| Index value that uniquely identifies the interface to which this entry applies.
The interface identified by a particular value of this index is the same interface as identified by the same value of `ifIndex` in the IF-MIB.
| .1.3.6.1.2.1.4.20.1.2

| ipAdEntNetMask
| Subnet mask associated with the IPv4 address of this entry.
The value of the mask is an IPv4 address with all the network bits set to `1` and all the host bits set to `0`.
| .1.3.6.1.2.1.4.20.1.3
|===
