OpenFlow Link Discovery

OpenFlow Link Discovery

The OpenFlow Link Discovery application is the default OpenFlow link supplier application that is installed with the controller. This application implements the com.hp.sdn.supplier.LinkSuppliersBroker interface and uses LinkSupplierService and LinkService APIs to create and maintain link information for OpenFlow datapaths that register with the controller.

The OpenFlow Link Discovery application pushes flow-mods to steal discovery packets, injects discovery packets to all ports on all datapaths, and discovers links on the controlled network by listening for PACKET_IN messages.

If the ControllerManager configuration has hybrid.mode=true, the OpenFlow Link Discovery application pushes a flow-mod to controlled devices that steals all controller-generated link discovery packets to the controller. If the ControllerManager configuration has hybrid.mode=false,all packets are stolen to the controller by default, so the OpenFlow Link Discovery application does not push flow-mods to devices.

A controller-generated link discovery packet:

  • Uses a non-standard protocol, BDDP, which uses a payload format similar to LLDP.

  • Is sent to either a link-local MAC address (to discover direct links) or a multicast MAC address (to discover multihop links).

    The link-local MAC address is: 01:08:c2:00:00:0e

    The multicast MAC address used for link discovery is: 01:1B:78:E9:7B:CD.

  • Contains the device ID, which introduces the packet to the controlled network.

The OpenFlow Link Discovery application listens for PACKET_IN messages that contain the BDDP protocol. Each discovery packet has the source device ID embedded within its payload, and the destination device can be derived from the PACKET_IN message. This design enables the OpenFlow Link Discovery application to populate the link table with information it learns from such received packets.


NOTE: Because PACKET_IN messages that contain the BDDP protocol are for controller-generated link discovery packets, no corresponding PACKET_OUT is sent back to the device that sent the PACKET_IN.


The OpenFlow Link Discovery application also listens to device events and registers with the ControllerService API to send OpenFlow packets to datapaths.

If the OpenFlowLinkDiscoveryComponent configuration has age.multihop.links=true, the OpenFlow Link Discovery application periodically injects discovery packets into the controlled network to refresh the multihop links. Any multihop links that are not refreshed at the interval configured for the multihop.poll.interval key are considered to be invalid and are removed from the link table. Additionally, network events such as a port going down or a device status change causes relevant links to be removed from the link table, and causes discovery packets to be sent to all datapaths that are in a ready state.

OpenFlow Link Discovery configurable components

com.hp.sdn.disco.of.node.impl.OpenFlowLinkDiscoveryComponent

Configures the OpenFlow Link Discovery application.

Use the age.multihop.links key to configure the OpenFlow Link Discovery application to remove multihop links from the link table after a timeout value is reached.

Use the multihop.poll.interval key to configure the polling interval, in seconds, for multihop links.