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.
# 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.
# dladm modify-aggr -m dlmp aggr0
Add Additional Interfaces to an Aggregration
Add additional interfaces (net2 and net3) to the existing aggregation group aggr0.
# 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.
# dladm remove-aggr -l net2 -l net3 aggr0
Delete an Aggregation Group
To delete an existing aggregation group, you can use the following command.
# 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.
# 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
Hi Matthew,
Thanks for the write-up. Just wondering if you know of any implications on load balancing policies if a dlmp aggregate (with vlan trunking) is configured on a control domain for a virtual switch. (.eg: # ldm add-vsw net-dev=aggr1 primary-vsw0 primary). For example, ldom1 vnet0 connected to primary-vsw0 and ldom2 vnet0 connected to the same vswitch.
Thanks.
Derek