illumos-joyent
illumos-joyent copied to clipboard
LACP Initialization error occurred in case when two aggregated channels use the same Actor key
There is a server in datacenter. It is connected with 4 network ports to 4 identical Brocade network switches. 2 connections are aggregated to one interface for private network, other two are aggregated to public interface.
The issue is in the following:
When establishing new connection in SmartOS, it is being checked according to the source code: https://github.com/openzfs/openzfs/blob/master/usr/src/uts/common/io/aggr/aggr_lacp.c In the lacp_misconfig_check function it is checked whether Actor system and Actor key are used in existing connections.
In my case all of the Brocade network switches have the same Actor system ID (01-e0-52-00-00-01) whilst the Actor key number matches port-channel number. In its turn, port-channel number matches the port number in the primary network switch of the switch group.
Brocade network switches do no allow to specify the Actor system and the Actor key.
Thus, when the server is connected to the 4 ports with the same number, one of the aggregated channels will not work because Actor key and Actor system will match the ones of the existing channel, though it is separate independent aggregated connection.
For example, if the server is connected with all 4 its ports to ports number 22 of 4 network switches, I get the following error:
[ID 272870 kern.notice] NOTICE: aggr 6 port 3: Port Partner MAC 1:e0:52:0:0:1 and key 22 in use on aggregation 5 port 2#012
So aggregation doesn't work.
Is it possible to reconsider the logic of this function?
My config is following:
[root@smartos-test ~]# cat /usbkey/config
aggr0_aggr=20:47:47:84:cc:74,a0:36:9F:76:e1:9b
aggr0_lacp_mode=active
admin_nic=aggr0
admin_ip=111.111.111.108
admin_netmask=255.255.255.248
admin_gateway=111.111.111.107
aggr1_aggr=20:47:47:84:cc:72,a0:36:9f:76:e1:9a
aggr1_lacp_mode=active
external_nic=aggr1
external_ip=10.107.4.28
external_netmask=255.255.255.248
external_gateway=10.107.4.27
headnode_default_gateway=111.111.111.107
dns_resolvers=8.8.8.8,8.8.4.4
dns_domain=local
ntp_hosts=0.smartos.pool.ntp.org
hostname=smartos-test
[root@smartos-test ~]# ifconfig
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
aggr0: flags=1001000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,FIXEDMTU> mtu 1500 index 2
inet 111.111.111.108 netmask fffffff8 broadcast 111.111.111.111
ether 20:47:47:84:cc:74
external0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
inet 10.107.4.28 netmask fffffff8 broadcast 10.107.4.31
ether 2:8:20:ed:4d:62
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
inet6 ::1/128
[root@smartos-test ~]# dladm show-phys
LINK MEDIA STATE SPEED DUPLEX DEVICE
igb0 Ethernet up 1000 full igb0
igb1 Ethernet up 1000 full igb1
bge0 Ethernet up 1000 full bge0
bge1 Ethernet up 1000 full bge1
[root@smartos-test ~]# dladm show-aggr -x
LINK PORT SPEED DUPLEX STATE ADDRESS PORTSTATE
aggr0 -- 1000Mb full up 20:47:47:84:cc:74 --
bge1 1000Mb full up 20:47:47:84:cc:74 attached
igb1 1000Mb full up a0:36:9f:76:e1:9b attached
aggr1 -- 1000Mb full up 20:47:47:84:cc:72 --
bge0 1000Mb full up 20:47:47:84:cc:72 attached
igb0 1000Mb full up a0:36:9f:76:e1:9a attached
[root@smartos-test ~]# dladm show-aggr -L
LINK PORT AGGREGATABLE SYNC COLL DIST DEFAULTED EXPIRED
aggr0 bge1 yes yes yes yes no no
-- igb1 yes yes yes yes no no
aggr1 bge0 yes no no no no no
-- igb0 yes no no no no no
[root@smartos-test ~]# dladm show-aggr -s
LINK PORT IPACKETS RBYTES OPACKETS OBYTES IPKTDIST OPKTDIST
aggr0 -- 3286 323720 744 84740 -- --
-- bge1 824 102106 389 50568 25,1 52,3
-- igb1 2462 221614 355 34172 74,9 47,7
aggr1 -- 0 0 0 0 -- --
-- bge0 0 0 0 0 -NaN -NaN
-- igb0 0 0 0 0 -NaN -NaN