1

ethtool: rss: echo the context number back

The response to a GET request in Netlink should fully identify
the queried object. RSS_GET accepts context id as an input,
so it must echo that attribute back to the response.

After (assuming context 1 has been created):

  $ ./cli.py --spec netlink/specs/ethtool.yaml \
             --do rss-get \
	     --json '{"header": {"dev-index": 2}, "context": 1}'
  {'context': 1,
   'header': {'dev-index': 2, 'dev-name': 'eth0'},
  [...]

Fixes: 7112a04664 ("ethtool: add netlink based get rss support")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Joe Damato <jdamato@fastly.com>
Link: https://patch.msgid.link/20240724234249.2621109-3-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski 2024-07-24 16:42:49 -07:00
parent a40c7a24f9
commit f96aae91b0
3 changed files with 9 additions and 1 deletions

View File

@ -1757,6 +1757,7 @@ operations:
reply: reply:
attributes: attributes:
- header - header
- context
- hfunc - hfunc
- indir - indir
- hkey - hkey

View File

@ -1875,6 +1875,7 @@ Kernel response contents:
===================================== ====== ========================== ===================================== ====== ==========================
``ETHTOOL_A_RSS_HEADER`` nested reply header ``ETHTOOL_A_RSS_HEADER`` nested reply header
``ETHTOOL_A_RSS_CONTEXT`` u32 context number
``ETHTOOL_A_RSS_HFUNC`` u32 RSS hash func ``ETHTOOL_A_RSS_HFUNC`` u32 RSS hash func
``ETHTOOL_A_RSS_INDIR`` binary Indir table bytes ``ETHTOOL_A_RSS_INDIR`` binary Indir table bytes
``ETHTOOL_A_RSS_HKEY`` binary Hash key bytes ``ETHTOOL_A_RSS_HKEY`` binary Hash key bytes

View File

@ -111,7 +111,8 @@ rss_reply_size(const struct ethnl_req_info *req_base,
const struct rss_reply_data *data = RSS_REPDATA(reply_base); const struct rss_reply_data *data = RSS_REPDATA(reply_base);
int len; int len;
len = nla_total_size(sizeof(u32)) + /* _RSS_HFUNC */ len = nla_total_size(sizeof(u32)) + /* _RSS_CONTEXT */
nla_total_size(sizeof(u32)) + /* _RSS_HFUNC */
nla_total_size(sizeof(u32)) + /* _RSS_INPUT_XFRM */ nla_total_size(sizeof(u32)) + /* _RSS_INPUT_XFRM */
nla_total_size(sizeof(u32) * data->indir_size) + /* _RSS_INDIR */ nla_total_size(sizeof(u32) * data->indir_size) + /* _RSS_INDIR */
nla_total_size(data->hkey_size); /* _RSS_HKEY */ nla_total_size(data->hkey_size); /* _RSS_HKEY */
@ -124,6 +125,11 @@ rss_fill_reply(struct sk_buff *skb, const struct ethnl_req_info *req_base,
const struct ethnl_reply_data *reply_base) const struct ethnl_reply_data *reply_base)
{ {
const struct rss_reply_data *data = RSS_REPDATA(reply_base); const struct rss_reply_data *data = RSS_REPDATA(reply_base);
struct rss_req_info *request = RSS_REQINFO(req_base);
if (request->rss_context &&
nla_put_u32(skb, ETHTOOL_A_RSS_CONTEXT, request->rss_context))
return -EMSGSIZE;
if ((data->hfunc && if ((data->hfunc &&
nla_put_u32(skb, ETHTOOL_A_RSS_HFUNC, data->hfunc)) || nla_put_u32(skb, ETHTOOL_A_RSS_HFUNC, data->hfunc)) ||