Configuring IPMP

How to configure Solaris 10 Probe based IPMP

http://docs.oracle.com/cd/E19253-01/816-4554/emqul/index.html

http://blog.verwilst.be/2008/04/09/active-passive-bonding-on-solaris-10/comment-page-1/

http://www.c0t0d0s0.org/archives/6300-Less-known-Solaris-features-IP-Multipathing-Part-8-Classic-IPMP.html

Original docs

1. Place each interface into the group

# ifconfig hme0 group testgroup1
# ifconfig hme1 group testgroup1

if active-standby configuration is needed than

# ifconfig hme0 group testgroup1 deprecated -failover up
# ifconfig hme1 group testgroup1 deprecated -failover standby up

2. Configure test IP (v4) address on physical interfaces

# ifconfig hme0 addif 192.168.85.21 255.255.255.0 -failover deprecated up

the address is marked as deprecated to prevent applications from using it

Flag "-failover" means that this address configures as non-failover.

3. Add logicial interface
# ifconfig
hme0 addif 10.16.244.60 netmask 255.255.252.0 up

(to remove logical interface:

# ifconfig hme0:1 unplumb

------------------------------------------------------------------

Testing IPMP failover

We can check the failure and repair of an interface very easily using if_mpadm command. “-d” detaches the interface whereas “-r” reattaches it.

# if_mpadm -d ce0
# if_mpadm -r ce0

Meanings of FLAGs

You would see flags such as NOFAILOVER, DEPRECATED, STANDBY etc.. in the output of “ifconfig -a” command. The meanings of these flags and parameters to enable them are:
deprecated -> can only be used as test address for IPMP and not for any actual data transfer by applications.
-failover -> does not failover when the interface fails
standby -> makes the interface to be used as standby

Example active-standby config (tested):

vnet1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
inet 172.16.0.30 netmask ffffff00 broadcast 172.16.0.255
groupname g1
ether 0:14:4f:f9:28:16
vnet1:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 3
inet 172.16.0.31 netmask ffffff00 broadcast 172.16.0.255
vnet2: flags=69040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,STANDBY,INACTIVE> mtu 1500 index 4
inet 172.16.0.32 netmask ffffff00 broadcast 172.16.0.255
groupname g1
ether 0:14:4f:fb:c4:e4

working IP that will fail over is 172.16.0.30

cat /etc/hostname.vnet1
172.16.0.31 netmask 255.255.255.0  deprecated -failover group g1 up addif 172.16.0.30 netmask 255.255.255.0 up

cat /etc/hostname.vnet2
172.16.0.32 netmask 255.255.255.0 group g1 deprecated -failover standby up
———————————————————————————-

Important!

–  during reconfiguration try not to unplumb interfaces because it may lead to connection reset on all system interfaces.
– DEPRECATED and NOFAILOVER flags are managed by “deprecated” and “failover” options of the ifconfig command.
“-deprecated” switches off DEPRECATED flag and “failover” switches off NOFAILOVER flag.
Most commonly used Probe-Based IPMP configurations

1. Active – Active configuration

Groupname:             ipmp0
Active interface(s):   e1000g0
e1000g1
Standby interface(s):  –
Data IP addresse(s):   192.168.1.2
Test IP addresse(s):   192.168.1.3
192.168.1.4

Command line :

Invalid:

# ifconfig e1000g0 plumb 192.168.1.2 netmask + broadcast + group ipmp0 up addif 192.168.1.3 netmask + broadcast + deprecated -failover up

Should be:

# ifconfig e1000g0 plumb 192.168.1.2 netmask + broadcast + deprecated -failover group ipmp0 up addif 192.168.1.3 netmask + broadcast + up
# ifconfig e1000g1 plumb 192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 up

To ensure persistent configuration across reboots edit the files :

/etc/hostname.e1000g0:
192.168.1.2 netmask + broadcast + group ipmp0 up \
addif 192.168.1.3 netmask + broadcast + deprecated -failover up

/etc/hostname.e1000g1:
192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 up

Before failure :

# ifconfig -a
lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4] mtu 1500 index 9
inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255
groupname ipmp0
ether 0:c:29:f6:ef:67
e1000g0:1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 9
inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255
e1000g1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 10
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
groupname ipmp0
ether 0:c:29:f6:ef:71

After failure :

# ifconfig -a
lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0: flags=19000802[BROADCAST,MULTICAST,IPv4,NOFAILOVER,FAILED] mtu 0 index 9
inet 0.0.0.0 netmask 0
groupname ipmp0
ether 0:c:29:f6:ef:67
e1000g0:1: flags=19040803[UP,BROADCAST,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,FAILED] mtu 1500 index 9
inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255
e1000g1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 10
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
groupname ipmp0
ether 0:c:29:f6:ef:71
e1000g1:1: flags=1000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4] mtu 1500 index 10
inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255

2. Active – Standby
The only difference in case of a active-standby configuration is – the interface configured as standby is not used to send any out bound traffic. Thus disabling the load balancing feature of an active-active configuration.

Groupname:             ipmp0
Active interface(s):   e1000g0
Standby interface(s):  e1000g1
Data IP addresse(s):   192.168.1.2
Test IP addresse(s):   192.168.1.3
192.168.1.4

Command line :

# ifconfig e1000g0 plumb 192.168.1.2 netmask + broadcast + group ipmp0 up addif 192.168.1.3 netmask + broadcast + deprecated -failover up
# ifconfig e1000g1 plumb 192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 standby up

To ensure persistent configuration across reboots edit the files :

/etc/hostname.e1000g0:
192.168.1.2 netmask + broadcast + group ipmp0 up \
addif 192.168.1.3 netmask + broadcast + deprecated -failover up

/etc/hostname.e1000g1:
192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 standby up

Before failure :

# ifconfig -a
lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4] mtu 1500 index 11
inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255
groupname ipmp0
ether 0:c:29:f6:ef:67
e1000g0:1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 11
inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255
e1000g1: flags=69040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,STANDBY,INACTIVE] mtu 1500 index 12
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
groupname ipmp0
ether 0:c:29:f6:ef:71

After failure :

# ifconfig -a
lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0: flags=19000802[BROADCAST,MULTICAST,IPv4,NOFAILOVER,FAILED] mtu 0 index 11
inet 0.0.0.0 netmask 0
groupname ipmp0
ether 0:c:29:f6:ef:67
e1000g0:1: flags=19040803[UP,BROADCAST,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,FAILED] mtu 1500 index 11
inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255
e1000g1: flags=29040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,STANDBY] mtu 1500 index 12
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
groupname ipmp0
ether 0:c:29:f6:ef:71
e1000g1:1: flags=21000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4,STANDBY] mtu 1500 index 12
inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255

—————————————————————————————————————–

As a result of switchover the following records are placed into messages log:

Feb 13 18:23:18 mer4.tcinet.ru bge: [ID 801725 kern.info] NOTICE: bge1: link down
Feb 13 17:23:18 mer4.tcinet.ru in.mpathd[11563]: [ID 215189 daemon.error] The link has gone down on bge600001
Feb 13 17:23:18 mer4.tcinet.ru in.mpathd[11563]: [ID 594170 daemon.error] NIC failure detected on bge600001 of group group600
Feb 13 17:23:18 mer4.tcinet.ru in.mpathd[11563]: [ID 832587 daemon.error] Successfully failed over from NIC bge600001 to NIC bge600000
Feb 13 18:25:33 mer4.tcinet.ru bge: [ID 801725 kern.info] NOTICE: bge1: link up 1000Mbps Full-Duplex
Feb 13 17:25:33 mer4.tcinet.ru in.mpathd[11563]: [ID 820239 daemon.error] The link has come up on bge600001