From: David Lamparter <equinox@diac24.net>
To: Nikolay Aleksandrov <nikolay@nvidia.com>,
Alexandra Winter <wintera@linux.ibm.com>
Cc: Jakub Kicinski <kuba@kernel.org>,
David Lamparter <equinox@diac24.net>,
netdev@vger.kernel.org
Subject: Re: [PATCH] bridge: extend BR_ISOLATE to full split-horizon
Date: Fri, 10 Dec 2021 17:49:28 +0100 [thread overview]
Message-ID: <YbOFGJbLtQirRGvc@eidolon.nox.tf> (raw)
In-Reply-To: <898155b2-08d7-1977-d0c9-bbb1ae99c0bb@nvidia.com>
Thanks all for the feedback!
(rolled up several mails below)
On Thu, Dec 09, 2021 at 07:42:04AM -0800, Jakub Kicinski wrote:
> Does not apply to net-next, you'll need to repost even if the code is
> good. Please put [PATCH net-next] in the subject.
Apologies, I think I skipped a step in my rebase somewhere.
On Thu, Dec 09, 2021 at 06:08:03PM +0200, Nikolay Aleksandrov wrote:
> - please drop the sysfs part, we're not extending sysfs anymore
ACK (will remove the "horizon_group" file, change to "isolated" remains)
> - split the bridge change from the driver
ACK - I wasn't sure if it's OK if the intermediate doesn't compile due
to deleted BR_ISOLATED? Or should I make 3 patches with only the 3rd
removing the flag definition?
> - drop the /* BR_ISOLATED - previously BIT(16) */ comment
Should I move up the other bits below it or just leave a hole at 16?
> - [IFLA_BRPORT_HORIZON_GROUP] = NLA_POLICY_MIN(NLA_S32, 0), why not just { .type = NLA_U32 } ?
>
> Why the limitation (UAPI limited to positive signed int. (recommended ifindex namespace)) ?
> You have the full unsigned space available, user-space can use it as it sees fit.
> You can just remove the comment about recommended ifindex.
No problem, I guess I'm overthinking this a bit. Using the ifindex is
just a "good way" of avoiding confusion if multiple things in userspace
try to configure this. Kernel really doesn't care.
> Also please extend the port isolation self-test with a test for a different horizon group.
ACK
> - just forbid having both set (tb[IFLA_BRPORT_ISOLATED] && tb[IFLA_BRPORT_HORIZON_GROUP])
> user-space should use just one of the two, if isolated is set then it overwrites any older
> IFLA_BRPORT_HORIZON_GROUP settings, that should simplify things considerably
So a bit of a hidden question here is which way "BR_ISOLATED" maps -
both "ISOLATED :=: group >= 1" and "ISOLATED :=: group == 1" are
possible. But regardless of which way it's defined, there's to some
degree a risk of "old" tools accidentally wrecking the horizon group
setting. That's why I ended up making BR_ISOLATE=1 not change the
horizon group if it's nonzero already...
On Thu, Dec 09, 2021 at 05:23:35PM +0100, Alexandra Winter wrote:
> Yes, please keep it compatible with userspace setting IFLA_BRPORT_ISOLATED only.
On Thu, Dec 09, 2021 at 06:23:25PM +0200, Nikolay Aleksandrov wrote:
> Actually they'll have to be exported together always... that's unfortunate. I get
> why you need the extra netlink logic, I think we'll have to keep it.
Yeah - we can't remove BR_ISOLATED from netlink GETs to keep compat, so
we need to accept it in SETs too in order to not break userspace handing
it right back in 1:1 for a get(-modify)-set...
On Thu, Dec 09, 2021 at 06:57:23PM +0200, Nikolay Aleksandrov wrote:
> So one relatively simple way to drop most of the logic is to have BRPORT_HORIZON_GROUP's
> attribute get set after ISOLATED so it always overwrites it, which is similar to the current
> situation but if you set only ISOLATED later it will function as intended (i.e. drop the logic
> for horizon_group when using the old attr). Still will have to disallow ISOLATED = 0/HORIZON_GROUP >0
> and ISOLATED=1/HORIZON_GROUP=0 though as these don't make sense.
>
> e.g.:
> if (tb[IFLA_BRPORT_ISOLATED])
> p->horizon_group = !!nla_get_u8(tb[IFLA_BRPORT_ISOLATED]);
> if (tb[IFLA_BRPORT_HORIZON_GROUP])
> p->horizon_group = nla_get_u32(tb[IFLA_BRPORT_HORIZON_GROUP]);
>
> This will be also in line with how they're exported (ISOLATED = 1 and HORIZON_GROUP >0).
This boils down to the same logic as is currently in the patch, except
it's written the other way around and with an else, i.e.
if (tb[IFLA_BRPORT_HORIZON_GROUP])
p->horizon_group = ...
else if (tb[IFLA_BRPORT_ISOLATED])
p->horizon_group = ...
With the else it seems more obvious to me, to avoid someone in the
future missing the fact that the 2 settings interact - so I would
preferably keep it like this.
Cheers,
-David
next prev parent reply other threads:[~2021-12-10 16:49 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-09 12:14 [PATCH] bridge: extend BR_ISOLATE to full split-horizon David Lamparter
2021-12-09 15:42 ` Jakub Kicinski
2021-12-09 16:08 ` Nikolay Aleksandrov
2021-12-09 16:23 ` Nikolay Aleksandrov
2021-12-09 16:57 ` Nikolay Aleksandrov
2021-12-10 16:49 ` David Lamparter [this message]
2021-12-09 16:23 ` Alexandra Winter
2021-12-10 16:53 ` Alexandra Winter
2021-12-10 16:57 ` David Lamparter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YbOFGJbLtQirRGvc@eidolon.nox.tf \
--to=equinox@diac24.net \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nikolay@nvidia.com \
--cc=wintera@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).