From: Jiri Pirko <jiri@resnulli.us>
To: netdev@vger.kernel.org
Cc: stephen@networkplumber.org, dsahern@gmail.com
Subject: [patch iproute2-next 4/4] devlink: print nested devlink handle for devlink dev
Date: Mon, 18 Sep 2023 12:54:16 +0200 [thread overview]
Message-ID: <20230918105416.1107260-5-jiri@resnulli.us> (raw)
In-Reply-To: <20230918105416.1107260-1-jiri@resnulli.us>
From: Jiri Pirko <jiri@nvidia.com>
Devlink dev may contain one or more nested devlink instances. If one is
present, print it out simple. If more are present (there is no
such case in current kernel, but may be in theory in the future),
print them in array.
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
---
devlink/devlink.c | 45 +++++++++++++++++++++++++++++++++++++++++----
1 file changed, 41 insertions(+), 4 deletions(-)
diff --git a/devlink/devlink.c b/devlink/devlink.c
index 8ea7b268c63c..a387da0f4995 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -3889,13 +3889,50 @@ static void pr_out_reload_data(struct dl *dl, struct nlattr **tb)
pr_out_object_end(dl);
}
+static void pr_out_dev_nested(struct dl *dl, const struct nlmsghdr *nlh)
+{
+ struct nlattr *attr, *attr2;
+ int count = 0;
+
+ mnl_attr_for_each(attr, nlh, sizeof(struct genlmsghdr)) {
+ if (mnl_attr_get_type(attr) == DEVLINK_ATTR_NESTED_DEVLINK) {
+ count++;
+ attr2 = attr;
+ }
+ }
+ if (!count) {
+ return;
+ } else if (count == 1) {
+ pr_out_nested_handle(attr2);
+ return;
+ }
+
+ pr_out_array_start(dl, "nested_devlinks");
+ mnl_attr_for_each(attr, nlh, sizeof(struct genlmsghdr)) {
+ if (mnl_attr_get_type(attr) == DEVLINK_ATTR_NESTED_DEVLINK) {
+ check_indent_newline(dl);
+ if (dl->json_output)
+ open_json_object(NULL);
+ check_indent_newline(dl);
+ pr_out_nested_handle(attr);
+ if (dl->json_output)
+ close_json_object();
+ else
+ __pr_out_newline();
+ }
+ }
+ pr_out_array_end(dl);
+}
-static void pr_out_dev(struct dl *dl, struct nlattr **tb)
+static void pr_out_dev(struct dl *dl, const struct nlmsghdr *nlh,
+ struct nlattr **tb)
{
if ((tb[DEVLINK_ATTR_RELOAD_FAILED] && mnl_attr_get_u8(tb[DEVLINK_ATTR_RELOAD_FAILED])) ||
- (tb[DEVLINK_ATTR_DEV_STATS] && dl->stats)) {
+ (tb[DEVLINK_ATTR_DEV_STATS] && dl->stats) ||
+ tb[DEVLINK_ATTR_NESTED_DEVLINK]) {
__pr_out_handle_start(dl, tb, true, false);
pr_out_reload_data(dl, tb);
+ pr_out_dev_nested(dl, nlh);
pr_out_handle_end(dl);
} else {
pr_out_handle(dl, tb);
@@ -3912,7 +3949,7 @@ static int cmd_dev_show_cb(const struct nlmsghdr *nlh, void *data)
if (!tb[DEVLINK_ATTR_BUS_NAME] || !tb[DEVLINK_ATTR_DEV_NAME])
return MNL_CB_ERROR;
- pr_out_dev(dl, tb);
+ pr_out_dev(dl, nlh, tb);
return MNL_CB_OK;
}
@@ -6828,7 +6865,7 @@ static int cmd_mon_show_cb(const struct nlmsghdr *nlh, void *data)
return MNL_CB_ERROR;
pr_out_mon_header(genl->cmd);
dl->stats = true;
- pr_out_dev(dl, tb);
+ pr_out_dev(dl, nlh, tb);
pr_out_mon_footer();
break;
case DEVLINK_CMD_PORT_GET: /* fall through */
--
2.41.0
prev parent reply other threads:[~2023-09-18 10:54 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-18 10:54 [patch iproute2-next 0/4] expose devlink instances relationships Jiri Pirko
2023-09-18 10:54 ` [patch iproute2-next 1/4] devlink: update headers Jiri Pirko
2023-09-18 10:54 ` [patch iproute2-next 2/4] devlink: introduce support for netns id for nested handle Jiri Pirko
2023-09-18 11:34 ` Daniel Machon
2023-09-18 12:29 ` Jiri Pirko
2023-09-19 3:06 ` David Ahern
2023-09-19 7:05 ` Jiri Pirko
2023-09-19 11:57 ` Jiri Pirko
2023-09-18 10:54 ` [patch iproute2-next 3/4] devlink: print nested handle for port function Jiri Pirko
2023-09-18 10:54 ` Jiri Pirko [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230918105416.1107260-5-jiri@resnulli.us \
--to=jiri@resnulli.us \
--cc=dsahern@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox