]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
net: bridge: add support for user-controlled bool options
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Sat, 24 Nov 2018 02:34:20 +0000 (04:34 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Nov 2018 23:04:15 +0000 (15:04 -0800)
commita428afe82f98d2ffb31c981671630df1fa25906f
treebe2bd7e318f676db6aa7daa680b747d8048490cb
parent02c72d5edadc453f8e7f367df066ab6bd516c050
net: bridge: add support for user-controlled bool options

We have been adding many new bridge options, a big number of which are
boolean but still take up netlink attribute ids and waste space in the skb.
Recently we discussed learning from link-local packets[1] and decided
yet another new boolean option will be needed, thus introducing this API
to save some bridge nl space.
The API supports changing the value of multiple boolean options at once
via the br_boolopt_multi struct which has an optmask (which options to
set, bit per opt) and optval (options' new values). Future boolean
options will only be added to the br_boolopt_id enum and then will have
to be handled in br_boolopt_toggle/get. The API will automatically
add the ability to change and export them via netlink, sysfs can use the
single boolopt function versions to do the same. The behaviour with
failing/succeeding is the same as with normal netlink option changing.

If an option requires mapping to internal kernel flag or needs special
configuration to be enabled then it should be handled in
br_boolopt_toggle. It should also be able to retrieve an option's current
state via br_boolopt_get.

v2: WARN_ON() on unsupported option as that shouldn't be possible and
    also will help catch people who add new options without handling
    them for both set and get. Pass down extack so if an option desires
    it could set it on error and be more user-friendly.

[1] https://www.spinics.net/lists/netdev/msg532698.html

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/if_bridge.h
include/uapi/linux/if_link.h
net/bridge/br.c
net/bridge/br_netlink.c
net/bridge/br_private.h
net/core/rtnetlink.c