From: Jiri Pirko <j...@mellanox.com> There a is need for some userspace API that would allow to expose things that are not directly related to any device class like net_device of ib_device, but rather chip-wide/switch-ASIC-wide stuff.
Use cases: 1) get/set of port type (Ethernet/InfiniBand) 2) monitoring of hardware messages to and from chip 3) setting up port splitters - split port into multiple ones and squash again, enables usage of splitter cable 4) setting up shared buffers - shared among multiple ports within one chip First patch of this set introduces a new generic Netlink based interface, called "devlink". It is similar to nl80211 model and it is heavily influenced by it, including the API definition. The devlink introduction patch implements use cases 1) and 2). Other 2 are in development atm and will be addressed by follow-ups. It is very convenient for drivers to use devlink, as you can see in other patches in this set. Counterpart for devlink is userspace tool called "dl". Command line interface and outputs are derived from "ip" tool so it should be easy for users to get used to it. It is available here: https://github.com/jpirko/devlink Example usage: butter:~$ dl help Usage: dl [ OPTIONS ] OBJECT { COMMAND | help } where OBJECT := { dev | port | monitor } OPTIONS := { -v/--verbose } butter:~$ dl dev show 0: devlink0: bus pci dev 0000:01:00.0 butter:~$ dl port help Usage: dl port show [DEV/PORT_INDEX] Usage: dl port set DEV/PORT_INDEX [ type { eth | ib | auto} ] butter:~$ dl port show devlink0/1: type ib ibdev mlx4_0 devlink0/2: type ib ibdev mlx4_0 butter:~$ sudo dl port set devlink0/1 type eth butter:~$ dl port show devlink0/1: type eth netdev ens4 devlink0/2: type ib ibdev mlx4_0 butter:~$ sudo dl port set devlink0/1 type auto butter:~$ dl port show devlink0/1: type eth(auto) netdev ens4 devlink0/2: type ib ibdev mlx4_0 Jiri Pirko (6): Introduce devlink infrastructure mlxsw: Implement devlink interface mlxsw: Implement hardware messages notification using devlink mlx4: Implement devlink interface mlx4: Implement hardware messages notification using devlink mlx4: Implement port type setting via devlink interface MAINTAINERS | 8 + drivers/infiniband/hw/mlx4/main.c | 7 + drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 8 +- drivers/net/ethernet/mellanox/mlx4/fw.c | 9 + drivers/net/ethernet/mellanox/mlx4/intf.c | 9 + drivers/net/ethernet/mellanox/mlx4/main.c | 129 +++- drivers/net/ethernet/mellanox/mlx4/mlx4.h | 2 + drivers/net/ethernet/mellanox/mlxsw/core.c | 39 +- drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 20 + drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 2 + drivers/net/ethernet/mellanox/mlxsw/switchx2.c | 20 + include/linux/mlx4/driver.h | 3 + include/net/devlink.h | 152 +++++ include/uapi/linux/devlink.h | 84 +++ net/Kconfig | 7 + net/core/Makefile | 1 + net/core/devlink.c | 856 +++++++++++++++++++++++++ 17 files changed, 1313 insertions(+), 43 deletions(-) create mode 100644 include/net/devlink.h create mode 100644 include/uapi/linux/devlink.h create mode 100644 net/core/devlink.c -- 1.9.3