ethtool: set device channel counts with CHANNELS_SET request
Implement CHANNELS_SET netlink request to set channel counts of a network device. These are traditionally set with ETHTOOL_SCHANNELS ioctl request. Like the ioctl implementation, the generic ethtool code checks if supplied values do not exceed driver defined limits; if they do, first offending attribute is reported using extack. Checks preventing removing channels used for RX indirection table or zerocopy AF_XDP socket are also implemented. Move ethtool_get_max_rxfh_channel() helper into common.c so that it can be used by both ioctl and netlink code. v2: - fix netdev reference leak in error path (found by Jakub Kicinsky) Signed-off-by: Michal Kubecek <mkubecek@suse.cz> Reviewed-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
0c84979c95
commit
e19c591eaf
@@ -196,6 +196,7 @@ Userspace to kernel:
|
||||
``ETHTOOL_MSG_RINGS_GET`` get ring sizes
|
||||
``ETHTOOL_MSG_RINGS_SET`` set ring sizes
|
||||
``ETHTOOL_MSG_CHANNELS_GET`` get channel counts
|
||||
``ETHTOOL_MSG_CHANNELS_SET`` set channel counts
|
||||
===================================== ================================
|
||||
|
||||
Kernel to userspace:
|
||||
@@ -723,6 +724,26 @@ Kernel response contents:
|
||||
===================================== ====== ==========================
|
||||
|
||||
|
||||
CHANNELS_SET
|
||||
============
|
||||
|
||||
Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_CHANNELS_HEADER`` nested request header
|
||||
``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
|
||||
``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
|
||||
``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
|
||||
``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
|
||||
===================================== ====== ==========================
|
||||
|
||||
Kernel checks that requested channel counts do not exceed limits reported by
|
||||
driver. Driver may impose additional constraints and may not suspport all
|
||||
attributes.
|
||||
|
||||
|
||||
Request translation
|
||||
===================
|
||||
|
||||
@@ -794,7 +815,7 @@ have their netlink replacement yet.
|
||||
``ETHTOOL_GFEATURES`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SFEATURES`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GCHANNELS`` ``ETHTOOL_MSG_CHANNELS_GET``
|
||||
``ETHTOOL_SCHANNELS`` n/a
|
||||
``ETHTOOL_SCHANNELS`` ``ETHTOOL_MSG_CHANNELS_SET``
|
||||
``ETHTOOL_SET_DUMP`` n/a
|
||||
``ETHTOOL_GET_DUMP_FLAG`` n/a
|
||||
``ETHTOOL_GET_DUMP_DATA`` n/a
|
||||
|
||||
Reference in New Issue
Block a user