Enhanced Linkd

Enhanced Linkd (Enlinkd) has been designed to discover connections between nodes using data generated by various link discovery protocols and accessible via SNMP. Enlinkd gathers this data on a regular interval and creates a snapshot of a device’s neighbors from its perspective by SNMP data collectors. Enlinkd consolidates the collected Data by Bridge Domain Discovery and Topologies Updater.

Enlinkd-Bridge Domain Discovery use the data gathered by Bridge and IpNetToMedia collectors to provide Bridge Broadcast Domain layout. The Bridge Forwarding Table provided by the single nodes displays information about the MAC address learned on which bridge port, this is what the Bridge considers a connection: this is not very useful, so Bridge Discovery will perform domain calculation to assign to every MAC address the port where the device that holds it is effectively connected (or the known nearest bridge port).

Enlinkd-Updaters, for every supported discovery protocol, use the provided Topologies Update API to provide connections information to other OpenNMS service and daemon via OnmsTopologyDao. The provided topologies are used in topology-map and for sending TopologyMessage via Kafka Producer.

The connections discovered by Enlinkd collectors and by Bridge Domain Discovery are called links. The term link, within the context of Enlinkd, is not synonymous with the term "link" when used with respect to the network OSI Layer 2 domain, whereby a link only indicates a Layer 2 connection. A link in context of Enlinkd is a more abstract concept and describes any connection between two Horizon nodes. These links are discovered based on information provided by an agent’s understanding of connections at the OSI Layer 2, Layer 3, or other OSI layers.

The topologies Enlinkd-Updaters discover are made of vertices and edges.

The following sections describe the Enlinkd daemon and its configuration. Additionally, the supported link discovery implementations will be described as well as a list of the SNMP MIBs that the SNMP agents must expose in order for EnLinkd to gather links between nodes. FYI: Detailed information about a node’s connections (discovered links) and supporting link data can be seen on the node detail page within the Horizon Web UI.

Enlinkd Daemon

Essentially each Enlinkd-Collector asks each device the following question: "What is the network topology from your point of view?"; this will provide local topology discovery features.

The Enlinkd-Discovery does attempt to discover bridge domain links with the data coming from all collected Bridge Forwarding Tables.

The Enlinkd-Updaters does attempt to discover global OnmsTopology doing correlation with the data coming from all node discovered links.

For large environments, you can configure the behavior of Enlinkd. During the EnLink discovery process, informational and error output is logged to a global log file.

Table 1. Global log and configuration files for Enlinkd
File Location Description

enlinkd-configuration.xml

${OPENNMS_HOME}/etc

Global configuration for the daemon process

enlinkd.log

${OPENNMS_HOME}/logs

Global Enlinkd log file

log4j2.xml

${OPENNMS_HOME}/etc

Configuration file to set the log level for Enlinkd

Configuration file for Enlinkd
<?xml version="1.0" encoding="ISO-8859-1"?>
<enlinkd-configuration threads="5"
                     initial_sleep_time="60000"
                     rescan_interval="86400000"
                     use-cdp-discovery="true"
                     use-bridge-discovery="true"
                     use-lldp-discovery="true"
                     use-ospf-discovery="true"
                     use-isis-discovery="true"
                     topology_interval="30000"
                     bridge_topology_interval="300000"
                     max_bft="100"
                     discovery-bridge-threads="1"
                     />
Table 2. Descriptione for global configuration parameter
Attribute Type Default Description

threads

Integer

5

Number of parallel threads collectors, updaters, and discovery use.

initial_sleep_time

Integer

60000

Time in milliseconds to wait to start collectors after Horizon is started.

rescan_interval

Integer

86400000

Interval in milliseconds for collectors.

topology_interval

Integer

30000

Interval in milliseconds for updater.

bridge_topology_interval

Integer

300000

Interval in milliseconds for discovery.

max_bft

Integer

100

The max. number of bft stored in memory for discovery.

discovery-bridge-threads

Integer

1

The number of threads used for discovery.

use-cdp-discovery

Boolean

true

Enable or disable discovery based on CDP information.

use-bridge-discovery

Boolean

true

Enable or disable discovery based on the Bridge information.

use-lldp-discovery

Boolean

true

Enable or disable discovery based on LLDP information.

use-ospf-discovery

Boolean

true

Enable or disable discovery based on OSPF information.

use-isis-discovery

Boolean

true

Enable or disable discovery based on IS-IS information.

The Discovery for bridge first start is scheduled at initial_sleep_time + bridge_topology_interval. The updaters' first start is scheduled at 0L. Configuration changes are applied by restarting OpenNMS and Enlinkd. It is also possible to send an event to Enlinkd reloading the configuration. An event can be sent on the CLI or the Web UI.

Send configuration reload event on CLI
cd $\{OPENNMS_HOME}/bin
./send-event.pl uei.opennms.org/internal/reloadDaemonConfig --parm 'daemonName Enlinkd'
If multiple protocols are enabled, the links will be discovered for each enabled discovery protocol. The topology Web UI will visualize links for each discovery protocol. For example, if you start CDP and LLDP discovery, the Web UI will visualize a CDP link and an LLDP link.