]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
devlink: extend pr_out_nested_handle() to print object
authorJiri Pirko <jiri@nvidia.com>
Tue, 7 Nov 2023 08:06:04 +0000 (09:06 +0100)
committerDavid Ahern <dsahern@kernel.org>
Sat, 11 Nov 2023 17:31:24 +0000 (17:31 +0000)
For existing pr_out_nested_handle() user (line card), the output stays
the same. For the new users, introduce __pr_out_nested_handle()
to allow to print devlink instance as object allowing to carry
attributes in it (like netns).

Note that as __pr_out_handle_start() and pr_out_handle_end() are newly
used, the function is moved below the definitions.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
devlink/devlink.c

index 90f6f8ff90e235f213293b9ad235c8a83957fa1f..f06f3069e80a9f3a3bbec8a181b04fdad107c649 100644 (file)
@@ -2747,26 +2747,6 @@ static bool should_arr_last_handle_end(struct dl *dl, const char *bus_name,
               !cmp_arr_last_handle(dl, bus_name, dev_name);
 }
 
-static void pr_out_nested_handle(struct nlattr *nla_nested_dl)
-{
-       struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {};
-       char buf[64];
-       int err;
-
-       err = mnl_attr_parse_nested(nla_nested_dl, attr_cb, tb);
-       if (err != MNL_CB_OK)
-               return;
-
-       if (!tb[DEVLINK_ATTR_BUS_NAME] ||
-           !tb[DEVLINK_ATTR_DEV_NAME])
-               return;
-
-       snprintf(buf, sizeof(buf), "%s/%s",
-                mnl_attr_get_str(tb[DEVLINK_ATTR_BUS_NAME]),
-                mnl_attr_get_str(tb[DEVLINK_ATTR_DEV_NAME]));
-       print_string(PRINT_ANY, "nested_devlink", " nested_devlink %s", buf);
-}
-
 static void __pr_out_handle_start(struct dl *dl, struct nlattr **tb,
                                  bool content, bool array)
 {
@@ -2862,6 +2842,39 @@ static void pr_out_selftests_handle_end(struct dl *dl)
                __pr_out_newline();
 }
 
+static void __pr_out_nested_handle(struct dl *dl, struct nlattr *nla_nested_dl,
+                                  bool is_object)
+{
+       struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {};
+       int err;
+
+       err = mnl_attr_parse_nested(nla_nested_dl, attr_cb, tb);
+       if (err != MNL_CB_OK)
+               return;
+
+       if (!tb[DEVLINK_ATTR_BUS_NAME] ||
+           !tb[DEVLINK_ATTR_DEV_NAME])
+               return;
+
+       if (!is_object) {
+               char buf[64];
+
+               snprintf(buf, sizeof(buf), "%s/%s",
+                        mnl_attr_get_str(tb[DEVLINK_ATTR_BUS_NAME]),
+                        mnl_attr_get_str(tb[DEVLINK_ATTR_DEV_NAME]));
+               print_string(PRINT_ANY, "nested_devlink", " nested_devlink %s", buf);
+               return;
+       }
+
+       __pr_out_handle_start(dl, tb, false, false);
+       pr_out_handle_end(dl);
+}
+
+static void pr_out_nested_handle(struct nlattr *nla_nested_dl)
+{
+       __pr_out_nested_handle(NULL, nla_nested_dl, false);
+}
+
 static bool cmp_arr_last_port_handle(struct dl *dl, const char *bus_name,
                                     const char *dev_name, uint32_t port_index)
 {