netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Scott Feldman <sfeldma@gmail.com>
To: roopa <roopa@cumulusnetworks.com>
Cc: Jiri Pirko <jiri@resnulli.us>, Netdev <netdev@vger.kernel.org>,
	Guenter Roeck <linux@roeck-us.net>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"andrew@lunn.ch" <andrew@lunn.ch>,
	"simon.horman@netronome.com" <simon.horman@netronome.com>,
	Joe Perches <joe@perches.com>,
	"Samudrala, Sridhar" <sridhar.samudrala@intel.com>,
	"Arad, Ronen" <ronen.arad@intel.com>
Subject: Re: [PATCH net-next v6 14/23] bridge: restore br_setlink back to original
Date: Sun, 10 May 2015 19:46:49 -0700	[thread overview]
Message-ID: <CAE4R7bAhOzJT-bE-o8K83h6EwwNF5ceAfnH4_poGYa2qv9rLdw@mail.gmail.com> (raw)
In-Reply-To: <554FFDF6.4040105@cumulusnetworks.com>

On Sun, May 10, 2015 at 5:55 PM, roopa <roopa@cumulusnetworks.com> wrote:
> On 5/10/15, 4:55 PM, Scott Feldman wrote:
>>
>> On Sun, May 10, 2015 at 9:10 AM, roopa <roopa@cumulusnetworks.com> wrote:
>>>
>>> On 5/9/15, 12:00 PM, Jiri Pirko wrote:
>>>>
>>>> Sat, May 09, 2015 at 07:40:16PM CEST, sfeldma@gmail.com wrote:
>>>>>
>>>>> From: Scott Feldman <sfeldma@gmail.com>
>>>>>
>>>>> Restore br_setlink back to original and don't call into SELF port
>>>>> driver.
>>>>> rtnetlink.c:bridge_setlink() already does a call into port driver for
>>>>> SELF.
>>>>>
>>>>> bridge set link cmd defaults to MASTER.  From man page for bridge link
>>>>> set
>>>>> cmd:
>>>>>
>>>>>         self   link setting is configured on specified physical device
>>>>>
>>>>>         master link setting is configured on the software bridge
>>>>> (default)
>>>>>
>>>>> The link setting has two values: the device-side value and the software
>>>>> bridge-side value.  These are independent and settable using the bridge
>>>>> link set cmd by specifying some combination of [master] | [self].
>>>>> Futhermore, the device-side and bridge-side settings have their own
>>>>> initial
>>>>> value, viewable from bridge -d link show cmd.
>>>>>
>>>>> Restoring br_setlink back to original makes rocker (the only in-kernel
>>>>> user
>>>>> of SELF link settings) work as first implement: two-sided values.
>>>>>
>>>>> It's true that when both MASTER and SELF are specified from the
>>>>> command,
>>>>> two netlink notifications are generated, one for each side of the
>>>>> settings.
>>>>> The user-space app can distiquish between the two notifications by
>>>>> observing the MASTER or SELF flag.
>>>>
>>>> This is revert of:
>>>>
>>>> commit 68e331c785b85b78f4155e2ab6f90e976b609dc1
>>>> Author: Roopa Prabhu <roopa@cumulusnetworks.com>
>>>> Date:   Thu Jan 29 22:40:14 2015 -0800
>>>>
>>>>       bridge: offload bridge port attributes to switch asic if feature
>>>> flag
>>>> set
>>>>
>>>> Noting that because I want to make sure everybody is ok with new
>>>> behaviour. I tend to like it more.
>>>>
>>> I am not ok with it. I have raised this earlier. same argument as the fib
>>> code, app now has to remember to call with both master and self. I do
>>> however feel that this code needs some rework..,.add to hardware first
>>> and
>>> then software
>>> just like fib and rollback hardware on failure. In which case, i am ok
>>> with
>>> submitting a new patch to do it differently.
>>
>> The problem with your patch to br_setlink/br_dellink is it hard-coded
>> a default in the kernel bridge driver, inconsistent with the default
>> of the application (iproute2/bridge).  Reverting it keeps the kernel
>> out of the default decision and lets the application define a default
>> that suits it.
>
> sorry, I am not understanding how this is different from how we do offload
> for fib and stp.
> just like stp offload from the bridge driver, i am hoping we can also
> offload vlans (current patch under discussion)
> and fdb entries. The switch driver can decide if it is only interested in
> calls with flags set to 'self' (rocker for example).
>
> another example: mstp daemon running in userspace will use bridge setlink to
> propagate stp states to the in-kernel bridge driver. If the current patch is
> removed, mstp daemon will now have to make sure it calls bridge setlink with
> self and master flags to hit both the bridge driver and hardware.

You're making my point with this example: let the application set the
flags it wants, and let the kernel provide the mechanism.

The kernel mechanism for both FDB (rtnl_fdb_add) and bridge settings
(rtnl_bridge_setlink) are the same: they both have this basic logic to
handle MASTER and SELF flags:

if (!flags || flags & MASTER)
    if (master->ops->ndo_xxx)
        master->ops->ndo_xxx(...);
if (flags & SELF)
    if (port->ops->ndo_xxx)
        port->ops->ndo_xxx(...);

That's all the kernel should do.  What is the default flags when
explicit flags aren't specified by the user is up to the application.
Current example apps:

iproute2/bridge/fbd app passes SELF when no flags are given by user.
iproute2/bridge/vlan app passes no flags when no flags are given by user.
iproute2/bridge/link set app passes SELF if setting hwmode, otherwise
passes no flags when no flags are given by user.
mstp app passes no flags (I assume, based on what you wrote above).

So if you want different app defaults than above, we need to change
the app, not the kernel.

(FIB isn't part of this discussion because there is (currently) no
MASTER|SELF flags for FIB entries, so I'm not sure why you're bringing
up FIB).

-scott

  reply	other threads:[~2015-05-11  2:46 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-09 17:40 [PATCH net-next v6 00/23] switchdev: spring cleanup sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 01/23] switchdev: s/netdev_switch_/switchdev_/ and s/NETDEV_SWITCH_/SWITCHDEV_/ sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 02/23] switchdev: s/swdev_/switchdev_/ sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 03/23] switchdev: introduce get/set attrs ops sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 04/23] switchdev: convert parent_id_get to switchdev attr get sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 05/23] rocker: support prepare-commit transaction model sfeldma
2015-05-09 18:18   ` Jiri Pirko
2015-05-10  6:14     ` Scott Feldman
2015-05-09 17:40 ` [PATCH net-next v6 06/23] switchdev: convert STP update to switchdev attr set sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 07/23] switchdev: introduce switchdev add/del obj ops sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 08/23] switchdev: add port vlan obj sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 09/23] rocker: use switchdev add/del obj for bridge port vlans sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 10/23] switchdev: add bridge port flags attr sfeldma
2015-05-09 18:47   ` Jiri Pirko
2015-05-09 17:40 ` [PATCH net-next v6 11/23] switchdev: add new switchdev bridge setlink sfeldma
2015-05-09 18:48   ` Jiri Pirko
2015-05-09 17:40 ` [PATCH net-next v6 12/23] switchdev: cut over to new switchdev_port_bridge_setlink sfeldma
2015-05-09 18:49   ` Jiri Pirko
2015-05-09 17:40 ` [PATCH net-next v6 13/23] switchdev: remove old switchdev_port_bridge_setlink sfeldma
2015-05-09 18:49   ` Jiri Pirko
2015-05-09 17:40 ` [PATCH net-next v6 14/23] bridge: restore br_setlink back to original sfeldma
2015-05-09 19:00   ` Jiri Pirko
2015-05-10 16:10     ` roopa
2015-05-10 23:55       ` Scott Feldman
2015-05-11  0:55         ` roopa
2015-05-11  2:46           ` Scott Feldman [this message]
2015-05-11  3:03             ` roopa
2015-05-09 17:40 ` [PATCH net-next v6 15/23] switchdev: add new switchdev_port_bridge_dellink sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 16/23] switchdev: cut over to " sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 17/23] switchdev: remove unused switchdev_port_bridge_dellink sfeldma
2015-05-09 18:54   ` Jiri Pirko
2015-05-09 17:40 ` [PATCH net-next v6 18/23] switchdev: add new switchdev_port_bridge_getlink sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 19/23] switchdev: cut over to " sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 20/23] switchdev: convert fib_ipv4_add/del over to switchdev_port_obj_add/del sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 21/23] switchdev: remove NETIF_F_HW_SWITCH_OFFLOAD feature flag sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 22/23] rocker: make checkpatch -f clean sfeldma
2015-05-09 17:40 ` [PATCH net-next v6 23/23] switchdev: bring documentation up-to-date sfeldma

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=CAE4R7bAhOzJT-bE-o8K83h6EwwNF5ceAfnH4_poGYa2qv9rLdw@mail.gmail.com \
    --to=sfeldma@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=f.fainelli@gmail.com \
    --cc=jiri@resnulli.us \
    --cc=joe@perches.com \
    --cc=linux@roeck-us.net \
    --cc=netdev@vger.kernel.org \
    --cc=ronen.arad@intel.com \
    --cc=roopa@cumulusnetworks.com \
    --cc=simon.horman@netronome.com \
    --cc=sridhar.samudrala@intel.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).