In this article we are going to go over Datalink Multipathing Protocol (DLMP) available in Solaris.  DLMP is similar to IPMP, however there are some key differences, the biggest being the layer at which it operates.  DLMP operates at the datalink layer of the OSI model, while IPMP operates at the network layer.  Due to the differences in those layers DLMP opens up a lot of possibilities that were not possible with IPMP.  For example if you had a requirement for redundant networking for a service, either IPMP and DLMP would both be able to meet that requirement very well.  However if you had a requirement that the service runs inside of a zone or a logical domain then the level of work in IPMP becomes much higher.  This is because these hypervisors assign datalink devices to their guests.  Since the redundancy for IPMP is built on a level higher we need to assign multiple non-redundant interfaces to the guests and then build the interfaces and IPMP groups inside each of the guests.

Benefits of DLMP

  • Virtualization friendly, you configure the aggregation on the control domain (or global zone) and hand out a redundant interface to a guest.
  • Single command to configure a DLMP aggregation group.
  • More portable, no switch side configuration or support is required

Drawbacks of DLMP

  • Requires the same media speed for all members (differing speeds get put into standby and will not receive a failover).
  • Requires a switch to mediate the connections, so no server to server connections.

Create a DLMP Aggregation

Creating and DLMP based aggregation is really similar to creating an LACP aggregation.  Simply change the mode to be dlmp.

bash
dladm create-aggr -m dlmp -l net0 -l net1 aggr0

Change an Existing Aggregration to DLMP

If you forgot to include the mode flag, that can be added using modify-aggr.

bash
dladm modify-aggr -m dlmp aggr0

Add Additional Interfaces to an Aggregration

Add additional interfaces (net2 and net3) to the existing aggregation group aggr0.

bash
dladm add-aggr -l net2 -l net3 aggr0

Remove Interfaces from an Aggregation

Remove interfaces (net2 and net3) to the existing aggregation group aggr0.  You cannot remove the last interface using this method.

bash
dladm remove-aggr -l net2 -l net3 aggr0

Delete an Aggregation Group

To delete an existing aggregation group, you can use the following command.

bash
dladm delete-aggr aggr0

Show Detailed Aggregation Information

Below will show you additional information about the aggregations.  In this case I find the speed, duplex and portstate fields helpful.  Additionally you can see the mac address on an interface.

bash
dladm show-aggr -x
LINK PORT SPEED DUPLEX STATE ADDRESS PORTSTATE
xgaggr1 -- 10000Mb full up 0:10:e0:2d:ec:a4 --
 net0 10000Mb full up 0:10:e0:2d:ec:a4 attached
 net1 10000Mb full up 0:10:e0:2d:ec:a5 attached
aggr1 -- 1000Mb full up a0:36:9f:1e:b5:9c --
 net8 1000Mb full up a0:36:9f:1e:b5:88 attached
 net4 1000Mb full up a0:36:9f:1e:b5:9c attached