I was recently setting up a new Solaris box and one thing we knew we wanted to do was link aggregation. For a file server this is pretty handy when some of the heavy-access nodes are on the same switch.
I had the box up and the DHCP gave the first interface an address. I used this to log in and set up another link we wouldn't be using in the aggregation with an IP address, which I would then use to log in and set up the aggregation. I logged in on the spare link, took down the first link and unplumbed it.
# ifconfig e1000g1 down unplumb
Then I created the aggregation of three links with key of 1.
# dladm create-aggr -d e1000g1 -d e1000g2 -d e1000g3 1
dladm: create operation failed: Device busy (invalid interface name)
Well, that's not quite what I wanted. After searching around a little and fiddling with dladm commands I was about to reboot and see if that would help when I struck on an idea.
# ps -e | grep dh
42 ? 0:00 dhcpagen
# kill 42
# ps -e | grep dh
# dladm create-aggr -d e1000g1 -d e1000g2 -d e1000g3 1
# ifconfig aggr1 plumb up
# dladm show-aggr
key: 1 (0x0001) policy: L4 address: 0:14:4f:21:11:d1 (auto)
device address speed duplex link state
e1000g1 0:14:4f:21:11:d1 1000 Mbps full up attached
e1000g2 0:14:4f:21:11:d2 1000 Mbps full up attached
e1000g3 0:14:4f:21:11:d3 1000 Mbps full up attached
# ifconfig aggr1 aggr1: flags=1000843mtu 1500 index 12
inet 0.0.0.0 netmask ff000000
ether 0:14:4f:21:11:d1
Ah-ha! The dhcp agent was keeping the interface busy. Lesson of the day: if you configure an interface with DHCP once, don't forget to take down the dhcp daemon when you want to do anything else with it.