devlink: Add devlink formatted message (fmsg) API
authorEran Ben Elisha <eranbe@mellanox.com>
Thu, 7 Feb 2019 09:36:32 +0000 (11:36 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 Feb 2019 18:34:28 +0000 (10:34 -0800)
commit1db64e8733f653814f041ffe1428524494ef6123
treee638e44b801111c9b7da0c16fb47b619ddcf7ebb
parent8f289805616e81f7c1690931aa8a586c76f4fa88
devlink: Add devlink formatted message (fmsg) API

Devlink fmsg is a mechanism to pass descriptors between drivers and
devlink, in json-like format. The API allows the driver to add nested
attributes such as object, object pair and value array, in addition to
attributes such as name and value.

Driver can use this API to fill the fmsg context in a format which will be
translated by the devlink to the netlink message later.
There is no memory allocation in advance (other than the initial list
head), and it dynamically allocates messages descriptors and add them to
the list on the fly.

When it needs to send the data using SKBs to the netlink layer, it
fragments the data between different SKBs. In order to do this
fragmentation, it uses virtual nests attributes, to avoid actual
nesting use which cannot be divided between different SKBs.

Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
Reviewed-by: Moshe Shemesh <moshe@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/devlink.h
include/uapi/linux/devlink.h
net/core/devlink.c