An increase in data traffic requirements for a link usually involves a difficult choice between reducing services available on the link and dealing with incompatibility between various new physical and data link layer technologies that may provide the higher bandwidth. Combining existing parallel, physical layer links into a single logical link becomes increasingly attractive in such situations. This enables linearly scalable bandwidth per network connection while simultaneously providing high availability and reliability through multiple link redundancy. Further, it leverages economies of scale for existing or legacy physical layer technologies without having to adopt new ones. Merlink’s framework contains APIs to manually or automatically add and remove existing links from aggregates, and has the capability to make an aggregate appear as a virtual network interface driver to the higher network layers providing for maximum application portability. On the lower end, the framework builds upon standard network drivers requiring no special OS or networking source code and supports links of different physical types and bandwidths transparently.
Merlink includes the following components:
A (link aggregation) framework providing basic APIs to create and manage aggregations
A virtual end driver to create virtual devices out of aggregations, to provide a transparent end device to the MAC clients.
A load balancing algorithm interface, also referred to as a 'distribution function'.
A conformance-tested LACP protocol implementation, that automatically configures aggregations based on protocol level communication.
A marker library, consisting of marker generator and marker responder.
Besides the immediate cost and scalability benefits of utilizing multiple lower-bandwidth links instead of one higher bandwidth link, aggregates also enable increased system resiliency and redundancy. Failure of a single component link does not disrupt communications between interconnected devices, and the loss of a link within an aggregate just reduces available capacity while maintaining the connection and data flow. Merlink adds a unique twist to this, additionally providing for sets (sub-aggregates) of ports that can be marked for use only during failure conditions. When the regular ports in an aggregate work normally, these ports optionally may not participate in traffic handling. However, when a failure condition occurs, as determined by a configurable function that depends on the state of various links, the fail-over ports take over the data flow. When the regular ports are active again, the framework enables a seamless transition back to normal conditions, setting the pre-designated fail-over ports back into passive mode. Merlink thus helps achieve high-availability and fault-tolerance in critical embedded systems.
To improve the traffic distribution characteristics for an aggregate, Merlink provides standard load balancing across links so that traffic is distributed across all links without overwhelming any single link. Normally, link aggregation assumes that a uniform distribution of traffic will occur over the links in an aggregate (except for ones connected to fail-over ports). However, this assumption of a trivial load-balancing may not work for specialized applications, as well as for links of different bandwidths and physical types. For this, Merlink provides a plug-in mechanism to introduce a custom load-sharing algorithm between various links, which defaults to a round-robin scheme if no such algorithm is present. The default scheme provides for configurability such as the relative priority of each link and quantum of each time slice across which balancing is scheduled and is a 802.3ad compliant distribution function that can be used as a reference implementation for custom load-balancing algorithms. Addition of custom load balancing schemes requires no knowledge of Merlink’s underlying implementation, yet allows for full flexibility via the provided APIs.
IEEE 802.3ad LACP
While Merlink supports manual deletion and addition of links to aggregates, its automated configuration facility also provides for a convenient way to manage and detect capabilities and connectivity of individual links within aggregation groups. Merlink includes full support for the LACP protocol based on IEEE 802.3ad specification. 802.3ad specifies automatic and dynamic configuration of appropriate sets of links within an aggregation group in the absence of manual overrides. Rapid configuration and reconfiguration are also possible in event of changes in physical connectivity of the links. Merlink allows selective configuration of LACP only on certain ports, if required, and supports both active and passive mode LACP based on whether the Merlink-enabled system wants to act as a source of control packets (PDUs) or wants to only respond to incoming packets.
Merlink is available in full-source format and is highly customizable. Hooks are provided for application specific event-handlers to be called when links are added or removed from aggregation groups, or when an aggregation converges after a network connectivity change. With the APIs provided, any custom switch fabric chipset can be glued in for LACP control of hardware based aggregation. This, in addition to its custom load balancing algorithm capability, initialization time and run-time choice of fail-over ports, and complete control over the LACP activities of individual ports and the complete system, makes Merlink an ideal choice for critical network applications requiring bandwidth and high availability.