]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
devlink: print nested handle for port function
authorJiri Pirko <jiri@nvidia.com>
Tue, 7 Nov 2023 08:06:06 +0000 (09:06 +0100)
committerDavid Ahern <dsahern@kernel.org>
Sat, 11 Nov 2023 17:31:34 +0000 (17:31 +0000)
If port function contains nested handle attribute, print it.

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

index f276026b9ba7edf22b1ce2808a5a2212a4bcf911..ae31e7cf34e36b3a5ebacaca57ba5b47bac38b1c 100644 (file)
@@ -772,6 +772,7 @@ static const enum mnl_attr_data_type
 devlink_function_policy[DEVLINK_PORT_FUNCTION_ATTR_MAX + 1] = {
        [DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR ] = MNL_TYPE_BINARY,
        [DEVLINK_PORT_FN_ATTR_STATE] = MNL_TYPE_U8,
+       [DEVLINK_PORT_FN_ATTR_DEVLINK] = MNL_TYPE_NESTED,
 };
 
 static int function_attr_cb(const struct nlattr *attr, void *data)
@@ -2896,6 +2897,22 @@ static void pr_out_nested_handle(struct nlattr *nla_nested_dl)
        __pr_out_nested_handle(NULL, nla_nested_dl, false);
 }
 
+static void pr_out_nested_handle_obj(struct dl *dl,
+                                    struct nlattr *nla_nested_dl,
+                                    bool obj_start, bool obj_end)
+{
+       if (obj_start) {
+               pr_out_object_start(dl, "nested_devlink");
+               check_indent_newline(dl);
+       }
+       __pr_out_nested_handle(dl, nla_nested_dl, true);
+       if (obj_end) {
+               if (!dl->json_output)
+                       __pr_out_indent_dec();
+               pr_out_object_end(dl);
+       }
+}
+
 static bool cmp_arr_last_port_handle(struct dl *dl, const char *bus_name,
                                     const char *dev_name, uint32_t port_index)
 {
@@ -4839,6 +4856,9 @@ static void pr_out_port_function(struct dl *dl, struct nlattr **tb_port)
                                     port_fn_caps->value & DEVLINK_PORT_FN_CAP_IPSEC_PACKET ?
                                     "enable" : "disable");
        }
+       if (tb[DEVLINK_PORT_FN_ATTR_DEVLINK])
+               pr_out_nested_handle_obj(dl, tb[DEVLINK_PORT_FN_ATTR_DEVLINK],
+                                        true, true);
 
        if (!dl->json_output)
                __pr_out_indent_dec();