[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231214181549.1270696-1-jiri@resnulli.us>
Date: Thu, 14 Dec 2023 19:15:40 +0100
From: Jiri Pirko <jiri@...nulli.us>
To: netdev@...r.kernel.org
Cc: kuba@...nel.org,
pabeni@...hat.com,
davem@...emloft.net,
edumazet@...gle.com,
jacob.e.keller@...el.com,
jhs@...atatu.com,
johannes@...solutions.net,
andriy.shevchenko@...ux.intel.com,
amritha.nambiar@...el.com,
sdf@...gle.com,
horms@...nel.org,
przemyslaw.kitszel@...el.com
Subject: [patch net-next v7 0/9] devlink: introduce notifications filtering
From: Jiri Pirko <jiri@...dia.com>
Currently the user listening on a socket for devlink notifications
gets always all messages for all existing devlink instances and objects,
even if he is interested only in one of those. That may cause
unnecessary overhead on setups with thousands of instances present.
User is currently able to narrow down the devlink objects replies
to dump commands by specifying select attributes.
Allow similar approach for notifications providing user a new
notify-filter-set command to select attributes with values
the notification message has to match. In that case, it is delivered
to the socket.
Note that the filtering is done per-socket, so multiple users may
specify different selection of attributes with values.
This patchset initially introduces support for following attributes:
DEVLINK_ATTR_BUS_NAME
DEVLINK_ATTR_DEV_NAME
DEVLINK_ATTR_PORT_INDEX
Patches #1 - #4 are preparations in devlink code, patch #3 is
an optimization done on the way.
Patches #5 - #7 are preparations in netlink and generic netlink code.
Patch #8 is the main one in this set implementing of
the notify-filter-set command and the actual
per-socket filtering.
Patch #9 extends the infrastructure allowing to filter according
to a port index.
Example:
$ devlink mon port pci/0000:08:00.0/32768
[port,new] pci/0000:08:00.0/32768: type notset flavour pcisf controller 0 pfnum 0 sfnum 107 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached roce enable
[port,new] pci/0000:08:00.0/32768: type eth flavour pcisf controller 0 pfnum 0 sfnum 107 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached roce enable
[port,new] pci/0000:08:00.0/32768: type eth netdev eth3 flavour pcisf controller 0 pfnum 0 sfnum 107 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached roce enable
[port,new] pci/0000:08:00.0/32768: type eth netdev eth3 flavour pcisf controller 0 pfnum 0 sfnum 107 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached roce enable
[port,new] pci/0000:08:00.0/32768: type eth flavour pcisf controller 0 pfnum 0 sfnum 107 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached roce enable
[port,new] pci/0000:08:00.0/32768: type notset flavour pcisf controller 0 pfnum 0 sfnum 107 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached roce enable
[port,del] pci/0000:08:00.0/32768: type notset flavour pcisf controller 0 pfnum 0 sfnum 107 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached roce enable
---
v6->v7:
- bigger changes in patch #5, moves the tracking to the family xarray
with sock as index, makes all lot more nicer and fixes the race
conditions
v5->v6:
- in patch #5 added family removal handling of privs destruction,
couple other things, see the patch changelog for details
v4->v5:
- converted priv pointer in netlink_sock to genl_sock container,
containing xarray pointer
- introduced per-family init/destroy callbacks and priv_size to allocate
per-sock private, converted devlink to that
- see patches #5 and #8 for more details
v3->v4:
- converted from sk_user_data pointer use to nlk(sk)->priv pointer and
allow priv to be stored for multiple generic netlink families, see
patch #5 for more details
v2->v3:
- small cosmetical fixes in patch #6
v1->v2:
- added patch #6, fixed generated docs
- see individual patches for details
Jiri Pirko (9):
devlink: use devl_is_registered() helper instead xa_get_mark()
devlink: introduce __devl_is_registered() helper and use it instead of
xa_get_mark()
devlink: send notifications only if there are listeners
devlink: introduce a helper for netlink multicast send
genetlink: introduce per-sock family private storage
netlink: introduce typedef for filter function
genetlink: introduce helpers to do filtered multicast
devlink: add a command to set notification filter and use it for
multicasts
devlink: extend multicast filtering by port index
Documentation/netlink/specs/devlink.yaml | 11 ++
drivers/connector/connector.c | 5 +-
include/linux/connector.h | 3 +-
include/linux/netlink.h | 6 +-
include/net/genetlink.h | 46 +++++++-
include/net/netlink.h | 31 ++++-
include/uapi/linux/devlink.h | 2 +
net/devlink/dev.c | 13 ++-
net/devlink/devl_internal.h | 59 +++++++++-
net/devlink/health.c | 10 +-
net/devlink/linecard.c | 5 +-
net/devlink/netlink.c | 116 ++++++++++++++++++
net/devlink/netlink_gen.c | 16 ++-
net/devlink/netlink_gen.h | 4 +-
net/devlink/param.c | 5 +-
net/devlink/port.c | 8 +-
net/devlink/rate.c | 5 +-
net/devlink/region.c | 6 +-
net/devlink/trap.c | 18 +--
net/netlink/af_netlink.c | 3 +-
net/netlink/genetlink.c | 143 ++++++++++++++++++++++-
21 files changed, 462 insertions(+), 53 deletions(-)
--
2.43.0
Powered by blists - more mailing lists