Ido Schimmel
2023-Apr-12 16:00 UTC
[Bridge] [PATCH net] net: bridge: switchdev: don't notify FDB entries with "master dynamic"
On Wed, Apr 12, 2023 at 05:27:33PM +0300, Vladimir Oltean wrote:> How are extern_learn FDB entries processed by spectrum's > SWITCHDEV_FDB_ADD_TO_DEVICE handler?No different than "BR_FDB_STATIC", which is a bug I'm aware of and intend to fix in net-next when I get the time (together with all the other combinations enabled by the bridge). Entry has ageing disabled, but can roam in which case it becomes age-able. TBH, I think most devices don't handle "BR_FDB_STATIC" correctly. In the Linux bridge, "BR_FDB_STATIC" only means ageing disabled. The entry can still roam, but remains "static". I believe that in most devices out there "static" means no roaming and no ageing which is equivalent to "BR_FDB_STATIC | BR_FDB_STICKY". Mentioned in your commit message as well: "As for the hardware FDB entry, that's static, it doesn't move when the station roams." As it stands, the situation is far from perfect, but the patch doesn't solve a regression (always broken) and will introduce one. My suggestion allows you to move forward and solve the "dynamic" case, so let's proceed with that unless there's a better alternative.
Vladimir Oltean
2023-Apr-12 16:24 UTC
[Bridge] [PATCH net] net: bridge: switchdev: don't notify FDB entries with "master dynamic"
On Wed, Apr 12, 2023 at 07:00:02PM +0300, Ido Schimmel wrote:> On Wed, Apr 12, 2023 at 05:27:33PM +0300, Vladimir Oltean wrote: > > How are extern_learn FDB entries processed by spectrum's > > SWITCHDEV_FDB_ADD_TO_DEVICE handler? > > No different than "BR_FDB_STATIC", which is a bug I'm aware of and > intend to fix in net-next when I get the time (together with all the > other combinations enabled by the bridge). Entry has ageing disabled, > but can roam in which case it becomes age-able. > > TBH, I think most devices don't handle "BR_FDB_STATIC" correctly. In the > Linux bridge, "BR_FDB_STATIC" only means ageing disabled. The entry can > still roam, but remains "static". I believe that in most devices out > there "static" means no roaming and no ageing which is equivalent to > "BR_FDB_STATIC | BR_FDB_STICKY". Mentioned in your commit message as > well: "As for the hardware FDB entry, that's static, it doesn't move > when the station roams." > > As it stands, the situation is far from perfect, but the patch doesn't > solve a regression (always broken) and will introduce one. My suggestion > allows you to move forward and solve the "dynamic" case, so let's > proceed with that unless there's a better alternative.I'm not trying to accuse anybody, I just wanted to make sure I'm not missing something (and surprise, I was). The comment regarding BR_FDB_STATIC vs BR_FDB_STATIC | BR_FDB_STICKY is interesting. This whole "hey, did you know you were never using the bridge fdb flags correctly?" is starting to become a bit of a meme. I'll send v2 with BR_FDB_ADDED_BY_EXT_LEARN not prevented from being notified from switchdev. Unless you have any objection, I won't send v2 like this: if (test_bit(BR_FDB_ADDED_BY_USER, &fdb->flags) && !test_bit(BR_FDB_STATIC, &fdb->flags) && !test_bit(BR_FDB_ADDED_BY_EXT_LEARN, &fdb->flags)) return; but like this: /* Entries with just the BR_FDB_ADDED_BY_USER flag set were created * using 'bridge fdb add ... master dynamic' */ if (fdb->flags == BIT(BR_FDB_ADDED_BY_USER)) return; Thanks for the review and for pointing out the regression early.
Apparently Analagous Threads
- [Bridge] [PATCH net] net: bridge: switchdev: don't notify FDB entries with "master dynamic"
- [Bridge] [PATCH net] net: bridge: switchdev: don't notify FDB entries with "master dynamic"
- [Bridge] [PATCH net] net: bridge: switchdev: don't notify FDB entries with "master dynamic"
- [Bridge] [PATCH net] net: bridge: switchdev: don't notify FDB entries with "master dynamic"
- [Bridge] [PATCH net] net: bridge: switchdev: don't notify FDB entries with "master dynamic"