Date: Mon, 24 Jun 2013 14:40:48 +0300 From: Boris Astardzhiev <boris.astardzhiev@gmail.com> To: thompsa@freebsd.org, freebsd-bugs@freebsd.org Subject: LACP: active aggregator selection bug Message-ID: <CAP=KkTwEboyHRvb0vPa-CR2QSXmPn4sMds2HH3X4BR-mkex9tQ@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hi,
I've been investigating the LACP implementation in FreeBSD and have
encountered a bug. Here's the set:
" --------- ---------- "
" | lagg1 | | bond0 | "
" --------- | xl0--------eth0 | --------- "
" | hosts |----b1----1 FBSD rl0--------eth1 Linux|---| hosts | "
" --------- | 9.1 rl1--------eth2 | --------- "
" | | | | "
" --------- ---------- "
On a FreeBSD 9.1-RELEASE #0 r243826 system a lagg is created and three
interfaces are added to it:
- xl0
- rl0
- rl1
On a Linux system a bonding interface is added *ONLY ONE* interface:
- eth0
Note: I think the Linux may be substituted with any other LACP
implementation.
The lagg protocol on both of the systems is LACP.
LACPDUs transmission/reception takes place only between xl0 and eth0.
Here's the result:
root@freebsd91:/root # ifconfig lagg1
lagg1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=2008<VLAN_MTU,WOL_MAGIC>
ether 00:10:b5:7f:97:fb
inet6 fe80::210:b5ff:fe7f:97fb%lagg1 prefixlen 64 scopeid 0x9
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
media: Ethernet autoselect
status: active
laggproto lacp lagghash l2,l3,l4
laggport: xl0 flags=18<COLLECTING,DISTRIBUTING>
laggport: rl1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: rl0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
I consider that xl0 is the only available link therefor the aggregation must
rely on it. However the lacp implementation has chosen the other two links
that haven't received a single LACPDU.
I think the problem is related to the selection of best active aggregator -
in lacp_select_active_aggregator(). I've attached the debug output of
sysctl net.lacp_debug.
... snippet ...
Jun 24 10:41:43 freebsd91 kernel: xl0: new pstate
3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:43 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:43 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:43 freebsd91 kernel: xl0: lacp_sm_mux: state 3
Jun 24 10:41:43 freebsd91 kernel: xl0: enable distributing on aggregator
[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,E0-8F-EC-00-B5-2F,0009,0000,0000)],
nports 0 -> 1
Jun 24 10:41:43 freebsd91 kernel: lacp_select_active_aggregator
Jun 24 10:41:43 freebsd91 kernel:
[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)],
speed=200000000, nports=2
Jun 24 10:41:43 freebsd91 kernel:
[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,E0-8F-EC-00-B5-2F,0009,0000,0000)],
speed=100000000, nports=1
Jun 24 10:41:43 freebsd91 kernel: active aggregator not changed
Jun 24 10:41:43 freebsd91 kernel: new
[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:43 freebsd91 kernel: xl0: mux_state 3 -> 4
Jun 24 10:41:43 freebsd91 kernel: xl0: lacpdu transmit
... snippet ...
Though there is an aggregator with an active partner the implementation has
chosen
the other aggregator:
Jun 24 10:41:43 freebsd91 kernel: new
[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)]
Do you think that such aggregators must be skipped in favour of aggregators
with active
partners? I've applied a patch that fixes this issue and xl0 remains the
only active link
but I'm not sure it is correct and it has the correct approach.
I've posted a PR - http://www.freebsd.org/cgi/query-pr.cgi?pr=179926
Any comments are appreciated.
Greetings,
Boris Astardzhiev,
Smartcom Bulgaria AD
[-- Attachment #2 --]
Jun 24 10:41:35 freebsd91 kernel: lagg1: link state changed to UP
Jun 24 10:41:35 freebsd91 kernel: xl0: link state changed to DOWN
Jun 24 10:41:35 freebsd91 kernel: xl0: media changed 0x0 -> 0x22, ether = 1, fdx = 0, link = 0
Jun 24 10:41:35 freebsd91 kernel: xl0: lacp_sm_rx_record_default
Jun 24 10:41:35 freebsd91 kernel: xl0: partner timeout changed
Jun 24 10:41:35 freebsd91 kernel: xl0: -> UNSELECTED
Jun 24 10:41:35 freebsd91 kernel: rl1: media changed 0x0 -> 0x100026, ether = 1, fdx = 1, link = 1
Jun 24 10:41:35 freebsd91 kernel: rl1: -> UNSELECTED
Jun 24 10:41:35 freebsd91 kernel: rl0: media changed 0x0 -> 0x100026, ether = 1, fdx = 1, link = 1
Jun 24 10:41:35 freebsd91 kernel: rl0: -> UNSELECTED
Jun 24 10:41:36 freebsd91 kernel: rl0: port lagid=[(8000,00-10-B5-7F-97-FB,0126,8000,0003),(0000,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:36 freebsd91 kernel: rl0: aggregator created
Jun 24 10:41:36 freebsd91 kernel: rl0: aggregator lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(0000,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:36 freebsd91 kernel: rl0: lacp_sm_mux: state 0
Jun 24 10:41:36 freebsd91 kernel: rl0: mux_state 0 -> 1
Jun 24 10:41:36 freebsd91 kernel: rl1: port lagid=[(8000,00-10-B5-7F-97-FB,0126,8000,0005),(0000,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:36 freebsd91 kernel: rl1: aggregator created
Jun 24 10:41:36 freebsd91 kernel: rl1: aggregator lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(0000,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:36 freebsd91 kernel: rl1: lacp_sm_mux: state 0
Jun 24 10:41:36 freebsd91 kernel: rl1: mux_state 0 -> 1
Jun 24 10:41:37 freebsd91 kernel: lacp_select_tx_port: no active aggregator
Jun 24 10:41:37 freebsd91 kernel: xl0: lacpdu receive
Jun 24 10:41:37 freebsd91 kernel: actor=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:37 freebsd91 kernel: actor.state=c7<ACTIVITY,TIMEOUT,AGGREGATION,DEFAULTED,EXPIRED>
Jun 24 10:41:37 freebsd91 kernel: partner=(FFFF,00-00-00-00-00-00,0001,00FF,0001)
Jun 24 10:41:37 freebsd91 kernel: partner.state=1<ACTIVITY>
Jun 24 10:41:37 freebsd91 kernel: maxdelay=0
Jun 24 10:41:37 freebsd91 kernel: xl0: media changed 0x22 -> 0x100026, ether = 1, fdx = 1, link = 1
Jun 24 10:41:37 freebsd91 kernel: xl0: -> UNSELECTED
Jun 24 10:41:37 freebsd91 kernel: xl0: link state changed to UP
Jun 24 10:41:37 freebsd91 kernel: rl0: lacp_sm_mux: state 1
Jun 24 10:41:37 freebsd91 kernel: rl0: lacpdu transmit
Jun 24 10:41:37 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0003)
Jun 24 10:41:37 freebsd91 kernel: actor.state=85<ACTIVITY,AGGREGATION,EXPIRED>
Jun 24 10:41:37 freebsd91 kernel: partner=(0000,00-00-00-00-00-00,0000,0000,0000)
Jun 24 10:41:37 freebsd91 kernel: partner.state=2<TIMEOUT>
Jun 24 10:41:37 freebsd91 kernel: maxdelay=0
Jun 24 10:41:37 freebsd91 kernel: rl1: lacp_sm_mux: state 1
Jun 24 10:41:37 freebsd91 kernel: rl1: lacpdu transmit
Jun 24 10:41:37 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0005)
Jun 24 10:41:37 freebsd91 kernel: actor.state=85<ACTIVITY,AGGREGATION,EXPIRED>
Jun 24 10:41:37 freebsd91 kernel: partner=(0000,00-00-00-00-00-00,0000,0000,0000)
Jun 24 10:41:37 freebsd91 kernel: partner.state=2<TIMEOUT>
Jun 24 10:41:37 freebsd91 kernel: maxdelay=0
Jun 24 10:41:37 freebsd91 kernel: xl0: port lagid=[(8000,00-10-B5-7F-97-FB,0126,8000,0004),(FFFF,00-00-00-00-00-00,0000,FFFF,0000)]
Jun 24 10:41:37 freebsd91 kernel: xl0: aggregator created
Jun 24 10:41:37 freebsd91 kernel: xl0: aggregator lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:37 freebsd91 kernel: xl0: lacp_sm_mux: state 0
Jun 24 10:41:37 freebsd91 kernel: xl0: mux_state 0 -> 1
Jun 24 10:41:38 freebsd91 kernel: rl0: lacp_sm_rx_timer: EXPIRED -> DEFAULTED
Jun 24 10:41:38 freebsd91 kernel: rl0: lacp_sm_rx_update_default_selected
Jun 24 10:41:38 freebsd91 kernel: rl0: lacp_sm_rx_update_selected_from_peerinfo
Jun 24 10:41:38 freebsd91 kernel: rl0: lacp_sm_rx_record_default
Jun 24 10:41:38 freebsd91 kernel: rl0: partner timeout changed
Jun 24 10:41:38 freebsd91 kernel: rl0: lacp_sm_mux_timer: aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(0000,00-00-00-00-00-00,0000,0000,0000)], pending 1 -> 0
Jun 24 10:41:38 freebsd91 kernel: rl0: lacp_sm_mux: state 1
Jun 24 10:41:38 freebsd91 kernel: rl0: collecting disabled
Jun 24 10:41:38 freebsd91 kernel: lacp_aggregator_delref: lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(0000,00-00-00-00-00-00,0000,0000,0000)], refcnt 1 -> 0
Jun 24 10:41:38 freebsd91 kernel: rl0: mux_state 1 -> 0
Jun 24 10:41:38 freebsd91 kernel: rl0: lacpdu transmit
Jun 24 10:41:38 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0003)
Jun 24 10:41:38 freebsd91 kernel: actor.state=45<ACTIVITY,AGGREGATION,DEFAULTED>
Jun 24 10:41:38 freebsd91 kernel: partner=(FFFF,00-00-00-00-00-00,0000,FFFF,0000)
Jun 24 10:41:38 freebsd91 kernel: partner.state=3c<AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:38 freebsd91 kernel: maxdelay=0
Jun 24 10:41:38 freebsd91 kernel: rl1: lacp_sm_rx_timer: EXPIRED -> DEFAULTED
Jun 24 10:41:38 freebsd91 kernel: rl1: lacp_sm_rx_update_default_selected
Jun 24 10:41:38 freebsd91 kernel: rl1: lacp_sm_rx_update_selected_from_peerinfo
Jun 24 10:41:38 freebsd91 kernel: rl1: lacp_sm_rx_record_default
Jun 24 10:41:38 freebsd91 kernel: rl1: partner timeout changed
Jun 24 10:41:38 freebsd91 kernel: rl1: lacp_sm_mux_timer: aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(0000,00-00-00-00-00-00,0000,0000,0000)], pending 1 -> 0
Jun 24 10:41:38 freebsd91 kernel: rl1: lacp_sm_mux: state 1
Jun 24 10:41:38 freebsd91 kernel: rl1: collecting disabled
Jun 24 10:41:38 freebsd91 kernel: lacp_aggregator_delref: lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(0000,00-00-00-00-00-00,0000,0000,0000)], refcnt 1 -> 0
Jun 24 10:41:38 freebsd91 kernel: rl1: mux_state 1 -> 0
Jun 24 10:41:38 freebsd91 kernel: rl1: lacpdu transmit
Jun 24 10:41:38 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0005)
Jun 24 10:41:38 freebsd91 kernel: actor.state=45<ACTIVITY,AGGREGATION,DEFAULTED>
Jun 24 10:41:38 freebsd91 kernel: partner=(FFFF,00-00-00-00-00-00,0000,FFFF,0000)
Jun 24 10:41:38 freebsd91 kernel: partner.state=3c<AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:38 freebsd91 kernel: maxdelay=0
Jun 24 10:41:38 freebsd91 kernel: xl0: lacp_sm_mux: state 1
Jun 24 10:41:39 freebsd91 kernel: xl0: lacpdu receive
Jun 24 10:41:39 freebsd91 kernel: actor=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:39 freebsd91 kernel: actor.state=cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:39 freebsd91 kernel: partner=(FFFF,00-00-00-00-00-00,0001,00FF,0001)
Jun 24 10:41:39 freebsd91 kernel: partner.state=1<ACTIVITY>
Jun 24 10:41:39 freebsd91 kernel: maxdelay=0
Jun 24 10:41:39 freebsd91 kernel: xl0: lacp_sm_rx_update_selected
Jun 24 10:41:39 freebsd91 kernel: xl0: lacp_sm_rx_update_selected_from_peerinfo
Jun 24 10:41:39 freebsd91 kernel: xl0: lacp_sm_rx_update_ntt
Jun 24 10:41:39 freebsd91 kernel: xl0: lacp_sm_rx_update_ntt: assert ntt
Jun 24 10:41:39 freebsd91 kernel: xl0: lacp_sm_rx_record_pdu
Jun 24 10:41:39 freebsd91 kernel: xl0: old pstate 38<SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:39 freebsd91 kernel: xl0: new pstate cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:39 freebsd91 kernel: xl0: partner timeout changed
Jun 24 10:41:39 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:39 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:39 freebsd91 kernel: actor.state=5<ACTIVITY,AGGREGATION>
Jun 24 10:41:39 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:39 freebsd91 kernel: partner.state=cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:39 freebsd91 kernel: maxdelay=0
Jun 24 10:41:39 freebsd91 kernel: rl0: port lagid=[(8000,00-10-B5-7F-97-FB,0126,8000,0003),(FFFF,00-00-00-00-00-00,0000,FFFF,0000)]
Jun 24 10:41:39 freebsd91 kernel: rl0: compatible aggregator found
Jun 24 10:41:39 freebsd91 kernel: lacp_aggregator_addref: lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], refcnt 1 -> 2
Jun 24 10:41:39 freebsd91 kernel: rl0: aggregator lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:39 freebsd91 kernel: rl0: lacp_sm_mux: state 0
Jun 24 10:41:39 freebsd91 kernel: rl0: mux_state 0 -> 1
Jun 24 10:41:39 freebsd91 kernel: rl1: port lagid=[(8000,00-10-B5-7F-97-FB,0126,8000,0005),(FFFF,00-00-00-00-00-00,0000,FFFF,0000)]
Jun 24 10:41:39 freebsd91 kernel: rl1: compatible aggregator found
Jun 24 10:41:39 freebsd91 kernel: lacp_aggregator_addref: lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], refcnt 2 -> 3
Jun 24 10:41:39 freebsd91 kernel: rl1: aggregator lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:39 freebsd91 kernel: rl1: lacp_sm_mux: state 0
Jun 24 10:41:39 freebsd91 kernel: rl1: mux_state 0 -> 1
Jun 24 10:41:39 freebsd91 kernel: xl0: lacp_sm_mux_timer: aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], pending 3 -> 2
Jun 24 10:41:39 freebsd91 kernel: xl0: lacp_sm_mux: state 1
Jun 24 10:41:39 freebsd91 kernel: xl0: collecting disabled
Jun 24 10:41:39 freebsd91 kernel: lacp_aggregator_delref: lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], refcnt 3 -> 2
Jun 24 10:41:39 freebsd91 kernel: xl0: mux_state 1 -> 0
Jun 24 10:41:39 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:39 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:39 freebsd91 kernel: actor.state=5<ACTIVITY,AGGREGATION>
Jun 24 10:41:39 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:39 freebsd91 kernel: partner.state=cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:39 freebsd91 kernel: maxdelay=0
Jun 24 10:41:40 freebsd91 kernel: rl0: lacp_sm_mux: state 1
Jun 24 10:41:40 freebsd91 kernel: rl1: lacp_sm_mux: state 1
Jun 24 10:41:40 freebsd91 kernel: xl0: port lagid=[(8000,00-10-B5-7F-97-FB,0126,8000,0004),(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)]
Jun 24 10:41:40 freebsd91 kernel: xl0: aggregator created
Jun 24 10:41:40 freebsd91 kernel: xl0: aggregator lagid=[(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,E0-8F-EC-00-B5-2F,0009,0000,0000)]
Jun 24 10:41:40 freebsd91 kernel: xl0: lacp_sm_mux: state 0
Jun 24 10:41:40 freebsd91 kernel: xl0: mux_state 0 -> 1
Jun 24 10:41:40 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:40 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:40 freebsd91 kernel: actor.state=5<ACTIVITY,AGGREGATION>
Jun 24 10:41:40 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:40 freebsd91 kernel: partner.state=cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:40 freebsd91 kernel: maxdelay=0
Jun 24 10:41:41 freebsd91 kernel: rl0: lacp_sm_mux_timer: aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], pending 2 -> 1
Jun 24 10:41:41 freebsd91 kernel: rl0: lacp_sm_mux: state 1
Jun 24 10:41:41 freebsd91 kernel: rl1: lacp_sm_mux_timer: aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], pending 1 -> 0
Jun 24 10:41:41 freebsd91 kernel: rl1: lacp_sm_mux: state 1
Jun 24 10:41:41 freebsd91 kernel: rl1: collecting disabled
Jun 24 10:41:41 freebsd91 kernel: rl1: mux_state 1 -> 2
Jun 24 10:41:41 freebsd91 kernel: rl1: collecting enabled
Jun 24 10:41:41 freebsd91 kernel: rl1: mux_state 2 -> 3
Jun 24 10:41:41 freebsd91 kernel: rl1: enable distributing on aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], nports 0 -> 1
Jun 24 10:41:41 freebsd91 kernel: lacp_select_active_aggregator
Jun 24 10:41:41 freebsd91 kernel: [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], speed=100000000, nports=1
Jun 24 10:41:41 freebsd91 kernel: active aggregator changed
Jun 24 10:41:41 freebsd91 kernel: old (none)
Jun 24 10:41:41 freebsd91 kernel: new [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:41 freebsd91 kernel: Set table 1 with 1 ports
Jun 24 10:41:41 freebsd91 kernel: lacp_suppress_distributing
Jun 24 10:41:41 freebsd91 kernel: rl0: marker transmit, port=3, sys=00:10:b5:7f:97:fb, id=1
Jun 24 10:41:41 freebsd91 kernel: rl1: marker transmit, port=5, sys=00:10:b5:7f:97:fb, id=1
Jun 24 10:41:41 freebsd91 kernel: xl0: marker transmit, port=4, sys=00:10:b5:7f:97:fb, id=1
Jun 24 10:41:41 freebsd91 kernel: rl1: mux_state 3 -> 4
Jun 24 10:41:41 freebsd91 kernel: xl0: marker response, port=4, sys=00:10:b5:7f:97:fb, id=1
Jun 24 10:41:41 freebsd91 kernel: rl1: lacpdu transmit
Jun 24 10:41:41 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0005)
Jun 24 10:41:41 freebsd91 kernel: actor.state=7d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING,DEFAULTED>
Jun 24 10:41:41 freebsd91 kernel: partner=(FFFF,00-00-00-00-00-00,0000,FFFF,0000)
Jun 24 10:41:41 freebsd91 kernel: partner.state=3c<AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:41 freebsd91 kernel: maxdelay=0
Jun 24 10:41:41 freebsd91 kernel: xl0: lacp_sm_mux: state 1
Jun 24 10:41:41 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:41 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:41 freebsd91 kernel: actor.state=5<ACTIVITY,AGGREGATION>
Jun 24 10:41:41 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:41 freebsd91 kernel: partner.state=cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:41 freebsd91 kernel: maxdelay=0
Jun 24 10:41:42 freebsd91 kernel: rl0: lacp_sm_mux: state 1
Jun 24 10:41:42 freebsd91 kernel: rl0: collecting disabled
Jun 24 10:41:42 freebsd91 kernel: rl0: mux_state 1 -> 2
Jun 24 10:41:42 freebsd91 kernel: rl0: collecting enabled
Jun 24 10:41:42 freebsd91 kernel: rl0: mux_state 2 -> 3
Jun 24 10:41:42 freebsd91 kernel: rl0: enable distributing on aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], nports 1 -> 2
Jun 24 10:41:42 freebsd91 kernel: lacp_suppress_distributing
Jun 24 10:41:42 freebsd91 kernel: rl0: marker transmit, port=3, sys=00:10:b5:7f:97:fb, id=2
Jun 24 10:41:42 freebsd91 kernel: rl1: marker transmit, port=5, sys=00:10:b5:7f:97:fb, id=2
Jun 24 10:41:42 freebsd91 kernel: xl0: marker transmit, port=4, sys=00:10:b5:7f:97:fb, id=2
Jun 24 10:41:42 freebsd91 kernel: Set table 0 with 2 ports
Jun 24 10:41:42 freebsd91 kernel: xl0: marker response, port=4, sys=00:10:b5:7f:97:fb, id=2
Jun 24 10:41:42 freebsd91 kernel: rl0: mux_state 3 -> 4
Jun 24 10:41:42 freebsd91 kernel: rl0: lacpdu transmit
Jun 24 10:41:42 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0003)
Jun 24 10:41:42 freebsd91 kernel: actor.state=7d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING,DEFAULTED>
Jun 24 10:41:42 freebsd91 kernel: partner=(FFFF,00-00-00-00-00-00,0000,FFFF,0000)
Jun 24 10:41:42 freebsd91 kernel: partner.state=3c<AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:42 freebsd91 kernel: maxdelay=0
Jun 24 10:41:42 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:42 freebsd91 kernel: xl0: lacp_sm_mux_timer: aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,E0-8F-EC-00-B5-2F,0009,0000,0000)], pending 1 -> 0
Jun 24 10:41:42 freebsd91 kernel: xl0: lacp_sm_mux: state 1
Jun 24 10:41:42 freebsd91 kernel: xl0: collecting disabled
Jun 24 10:41:42 freebsd91 kernel: xl0: mux_state 1 -> 2
Jun 24 10:41:42 freebsd91 kernel: xl0: collecting enabled
Jun 24 10:41:42 freebsd91 kernel: xl0: mux_state 2 -> 3
Jun 24 10:41:42 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:42 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:42 freebsd91 kernel: actor.state=1d<ACTIVITY,AGGREGATION,SYNC,COLLECTING>
Jun 24 10:41:42 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:42 freebsd91 kernel: partner.state=cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:42 freebsd91 kernel: maxdelay=0
Jun 24 10:41:43 freebsd91 kernel: xl0: lacpdu receive
Jun 24 10:41:43 freebsd91 kernel: actor=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:43 freebsd91 kernel: actor.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:43 freebsd91 kernel: partner=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:43 freebsd91 kernel: partner.state=1d<ACTIVITY,AGGREGATION,SYNC,COLLECTING>
Jun 24 10:41:43 freebsd91 kernel: maxdelay=0
Jun 24 10:41:43 freebsd91 kernel: xl0: lacp_sm_rx_update_selected
Jun 24 10:41:43 freebsd91 kernel: xl0: lacp_sm_rx_update_selected_from_peerinfo
Jun 24 10:41:43 freebsd91 kernel: xl0: lacp_sm_rx_update_ntt
Jun 24 10:41:43 freebsd91 kernel: xl0: lacp_sm_rx_record_pdu
Jun 24 10:41:43 freebsd91 kernel: xl0: old pstate cf<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,DEFAULTED,EXPIRED>
Jun 24 10:41:43 freebsd91 kernel: xl0: new pstate 3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:43 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:43 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:43 freebsd91 kernel: xl0: lacp_sm_mux: state 3
Jun 24 10:41:43 freebsd91 kernel: xl0: enable distributing on aggregator [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,E0-8F-EC-00-B5-2F,0009,0000,0000)], nports 0 -> 1
Jun 24 10:41:43 freebsd91 kernel: lacp_select_active_aggregator
Jun 24 10:41:43 freebsd91 kernel: [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)], speed=200000000, nports=2
Jun 24 10:41:43 freebsd91 kernel: [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,E0-8F-EC-00-B5-2F,0009,0000,0000)], speed=100000000, nports=1
Jun 24 10:41:43 freebsd91 kernel: active aggregator not changed
Jun 24 10:41:43 freebsd91 kernel: new [(8000,00-10-B5-7F-97-FB,0126,0000,0000),(FFFF,00-00-00-00-00-00,0000,0000,0000)]
Jun 24 10:41:43 freebsd91 kernel: xl0: mux_state 3 -> 4
Jun 24 10:41:43 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:43 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:43 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:43 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:43 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:43 freebsd91 kernel: maxdelay=0
Jun 24 10:41:44 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:44 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:44 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:44 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:44 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:44 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:44 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:44 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:44 freebsd91 kernel: maxdelay=0
Jun 24 10:41:45 freebsd91 kernel: lacp_transit_expire
Jun 24 10:41:45 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:45 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:45 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:45 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:45 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:45 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:45 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:45 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:45 freebsd91 kernel: maxdelay=0
Jun 24 10:41:46 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:46 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:46 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:46 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:46 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:46 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:46 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:46 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:46 freebsd91 kernel: maxdelay=0
Jun 24 10:41:47 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:47 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:47 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:47 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:47 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:47 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:47 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:47 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:47 freebsd91 kernel: maxdelay=0
Jun 24 10:41:48 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:48 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:48 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:48 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:48 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:48 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:48 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:48 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:48 freebsd91 kernel: maxdelay=0
Jun 24 10:41:49 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:49 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:49 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:49 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:49 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:49 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:49 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:49 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:49 freebsd91 kernel: maxdelay=0
Jun 24 10:41:50 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:50 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:50 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:50 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:50 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:50 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:50 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:50 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:50 freebsd91 kernel: maxdelay=0
Jun 24 10:41:51 freebsd91 kernel: rl0: lacp_sm_mux: state 4
Jun 24 10:41:51 freebsd91 kernel: rl1: lacp_sm_mux: state 4
Jun 24 10:41:51 freebsd91 kernel: xl0: lacp_sm_mux: state 4
Jun 24 10:41:51 freebsd91 kernel: xl0: lacpdu transmit
Jun 24 10:41:51 freebsd91 kernel: actor=(8000,00-10-B5-7F-97-FB,0126,8000,0004)
Jun 24 10:41:51 freebsd91 kernel: actor.state=3d<ACTIVITY,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:51 freebsd91 kernel: partner=(FFFF,E0-8F-EC-00-B5-2F,0009,00FF,0001)
Jun 24 10:41:51 freebsd91 kernel: partner.state=3f<ACTIVITY,TIMEOUT,AGGREGATION,SYNC,COLLECTING,DISTRIBUTING>
Jun 24 10:41:51 freebsd91 kernel: maxdelay=0
[-- Attachment #3 --]
diff --git a/sys/net/ieee8023ad_lacp.c b/sys/net/ieee8023ad_lacp.c
index 70de743..5060223 100644
--- a/sys/net/ieee8023ad_lacp.c
+++ b/sys/net/ieee8023ad_lacp.c
@@ -947,6 +947,7 @@ lacp_select_active_aggregator(struct lacp_softc *lsc)
struct lacp_aggregator *best_la = NULL;
uint64_t best_speed = 0;
char buf[LACP_LAGIDSTR_MAX+1];
+ u_char zero_mac[] = { 0, 0, 0, 0, 0, 0 };
LACP_TRACE(NULL);
@@ -957,6 +958,13 @@ lacp_select_active_aggregator(struct lacp_softc *lsc)
continue;
}
+ /*
+ * Skip aggregators that has no partner.
+ */
+ if (!memcmp(LACP_SYS_MAC(la->la_partner),
+ zero_mac, sizeof(zero_mac)))
+ continue;
+
speed = lacp_aggregator_bandwidth(la);
LACP_DPRINTF((NULL, "%s, speed=%jd, nports=%d\n",
lacp_format_lagid_aggregator(la, buf, sizeof(buf)),
diff --git a/sys/net/ieee8023ad_lacp.h b/sys/net/ieee8023ad_lacp.h
index 9481ce2..4076513 100644
--- a/sys/net/ieee8023ad_lacp.h
+++ b/sys/net/ieee8023ad_lacp.h
@@ -264,6 +264,7 @@ struct lacp_softc {
((((s1) ^ (s2)) & (mask)) == 0)
#define LACP_SYS_PRI(peer) (peer).lip_systemid.lsi_prio
+#define LACP_SYS_MAC(peer) (peer).lip_systemid.lsi_mac
#define LACP_PORT(_lp) ((struct lacp_port *)(_lp)->lp_psc)
#define LACP_SOFTC(_sc) ((struct lacp_softc *)(_sc)->sc_psc)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAP=KkTwEboyHRvb0vPa-CR2QSXmPn4sMds2HH3X4BR-mkex9tQ>
