Link aggregation, Jumpstart post install script

Solaris 10 introduced the nemo framework for drivers and Solaris Nevada has more projects which build on said framework. In Update 2 of Solaris 10 support for data link aggregation was added which means we can build fat network pipes from most nics :) without any trunking software.

From the manual for dladm

     The dladm command is used to configure data-links. A config-
     ured  data-link  is  represented  in the system as a STREAMS
     DLPI (v2) interface which  may  be  plumbed  under  protocol
     stacks  such  as  TCP/IP.  Each data-link relies on either a
     single network device or an aggregation of devices  to  send
     packets to or receive packets from a network.
Heres it on a galaxy but you can do the same on a t2000 using the new e1000g driver.
oaf316# ifconfig -a unplumb
oaf316# dladm show-dev

e1000g0         link: up        speed: 1000  Mbps       duplex: full
e1000g1         link: up        speed: 1000  Mbps       duplex: full
e1000g2         link: up        speed: 1000  Mbps       duplex: full
e1000g3         link: up        speed: 1000  Mbps       duplex: full
Now we know what devices are available for our aggregation. We will make a an aggregation of 2 of the nics.
 
oaf316# dladm create-aggr -d e1000g0 -d e1000g3 1
oaf316# dladm show-aggr 1
key: 1 (0x0001) policy: L4      address: 0:14:4f:1:c8:b0 (auto)
           device       address                 speed           duplex  link    state
           e1000g0      0:14:4f:1:c8:b0   1000  Mbps    full    up      standby
           e1000g3      0:14:4f:1:c8:b3   1000  Mbps    full    up      standby
Agrregation completes and the link is in standby mode, next we need to plumb it.
oaf316# ifconfig aggr1 plumb
oaf316# ifconfig aggr1 10.1.10.1 netmask 255.255.255.0 up
regular ifconfig to setup the link. Lets check the device state now.
dladm show-aggr 1
key: 1 (0x0001) policy: L4      address: 0:14:4f:1:c8:b0 (auto)
           device       address                 speed           duplex  link    state
           e1000g0      0:14:4f:1:c8:b0   1000  Mbps    full    up      attached
           e1000g3      0:14:4f:1:c8:b3   1000  Mbps    full    up      attached
We add some more nics to the device while the device is up and running.
oaf316# dladm add-aggr -d e1000g1 -d e1000g2 1
oaf316# dladm show-aggr 1
key: 1 (0x0001) policy: L4      address: 0:14:4f:1:c8:b0 (auto)
           device       address                 speed           duplex  link    state
           e1000g0      0:14:4f:1:c8:b0   1000  Mbps    full    up      attached
           e1000g3      0:14:4f:1:c8:b3   1000  Mbps    full    up      attached
           e1000g1      0:14:4f:1:c8:b1   1000  Mbps    full    up      attached
           e1000g2      0:14:4f:1:c8:b2   1000  Mbps    full    up      attached
Now lets show off and remove a nic from the link
oaf316# dladm remove-aggr -d e1000g0 1
oaf316# dladm show-aggr 1
key: 1 (0x0001) policy: L4      address: 0:14:4f:1:c8:b3 (auto)
           device       address                 speed           duplex  link    state
           e1000g3      0:14:4f:1:c8:b3   1000  Mbps    full    up      attached
           e1000g1      0:14:4f:1:c8:b1   1000  Mbps    full    up      attached
           e1000g2      0:14:4f:1:c8:b2   1000  Mbps    full    up      attached

heres the postinstall script which we use with some of our systems, you will have to change the IP.

# script to setup link aggregation on nics which are not in use
# it trys to ignore unsupported nics.
# This script can be used as part of a jumpstart.
#
# man dladm

PRE=/
[ -f /a/usr/sbin/dladm ] && PRE=/a

PATH=$PRE/usr/bin:$PRE/usr/sbin
export PATH

# ip for configured device to use  eg 10.1.1.1
IP=10.1.1.1

# netmasks for configured device eg 255.255.255.0
Netmasks=255.255.255.0

# set this to "e1000g0 nge0 bge1" etc this can be left blank and we try to use
# other gld nics
NicsToUse=



showError() {
        echo "$0: $1"
        exit 1
}

# exit if no ip or netmask
[ -z "$IP" -o  -z "$Netmasks" ] && showError "IP and Netmasks must be defined"

# check network devices exists
if [ -z "$NicsToUse" ]; then
        ifconfig -a plumb 2>/dev/null
        NicsToUse=`ifconfig -a |awk -F: '//dev/null
        [ `dladm show-link $nic |grep -v -c legacy` ] && vNics="$vNics -d $nic"
done

# no nics supported by dladm
[ -z "$vNics" ] && showError "No supported nics on system"

# configure and plumb device
dladm create-aggr -R $PRE $vNics 1
[ $? != 0 ] && showError "error configuring aggr1 with dladm and $vNics"

ifconfig aggr1 plumb
ifconfig aggr1 $IP netmask $Netmasks up
[ $? != 0 ] && showError "error bringing up aggr1 with ifconfig $IP netmask $Netmasks "

# store nic details
echo $IP >$PRE/etc/hostname.aggr1
IP=`echo $IP|cut -f1-3 -d\\.`.0
echo "$IP $Netmasks" >>$PRE/etc/netmasks

You will also want to increase the number of soft rings used by your aggregations. This can be done via /etc/system or via mdb as the default is 2 per interface.

oaf316# mdb -kw 
Loading modules: [ unix krtld genunix specfs dtrace cpu.AuthenticAMD.15 ufs ip sctp usba fcp 
fctl nca random md lofs zfs nfs sppp crypto cpc fcip logindmux ptm ]
> ip_soft_rings_cnt/W 8
ip_soft_rings_cnt:              0x2             =       0x8
> $q
This increases the number of soft rings from 2 to 8. If your aggregation is already plumbed you will need to replumb it to take advantage of the extra rings. To make this permanent you will need to add it to /etc/system
set ip:ip_soft_rings_cnt=8
Be warned this will do it for each link after the next reboot. More to come on t2000 and link aggregation.
Comments:

Post a Comment:
Comments are closed for this entry.
About

nickyv

Search

Archives
« April 2014
MonTueWedThuFriSatSun
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today