Skip site navigation (1)Skip section navigation (2)
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>