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

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`

`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