#include "rdma.h"
#include "res.h"
+#include "stat.h"
#include <inttypes.h>
static int stat_help(struct rd *rd)
snprintf(output, sizeof(output), "qp auto off");
}
- if (rd->json_output) {
- jsonw_uint_field(rd->jw, "ifindex", idx);
- jsonw_uint_field(rd->jw, "port", port);
- jsonw_string_field(rd->jw, "mode", output);
- } else {
- pr_out("%u/%u: %s/%u: %s\n", idx, port, name, port, output);
- }
-
+ open_json_object(NULL);
+ print_link(rd, idx, name, port, tb);
+ print_color_string(PRINT_ANY, COLOR_NONE, "mode", "mode %s ", output);
+ newline(rd);
return MNL_CB_OK;
}
if (ret)
return ret;
- if (rd->json_output)
- jsonw_start_object(rd->jw);
ret = rd_recv_msg(rd, qp_link_get_mode_parse_cb, rd, seq);
- if (rd->json_output)
- jsonw_end_object(rd->jw);
-
return ret;
}
return rd_exec_cmd(rd, cmds, "parameter");
}
-static int res_get_hwcounters(struct rd *rd, struct nlattr *hwc_table, bool print)
+int res_get_hwcounters(struct rd *rd, struct nlattr *hwc_table, bool print)
{
struct nlattr *nla_entry;
const char *nm;
err = res_get_hwcounters(rd, hwc_table, false);
if (err != MNL_CB_OK)
return err;
-
- if (rd->json_output) {
- jsonw_string_field(rd->jw, "ifname", name);
- if (port)
- jsonw_uint_field(rd->jw, "port", port);
- jsonw_uint_field(rd->jw, "cntn", cntn);
- } else {
- if (port)
- pr_out("link %s/%u cntn %u ", name, port, cntn);
- else
- pr_out("dev %s cntn %u ", name, cntn);
- }
-
+ open_json_object(NULL);
+ print_link(rd, index, name, port, nla_line);
+ print_color_uint(PRINT_ANY, COLOR_NONE, "cntn", "cntn %u ", cntn);
res_print_uint(rd, "pid", pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]);
print_comm(rd, comm, nla_line);
-
res_get_hwcounters(rd, hwc_table, true);
-
isfirst = true;
+ open_json_array(PRINT_JSON, "lqpn");
+ print_color_string(PRINT_FP, COLOR_NONE, NULL, "\n LQPN: <", NULL);
mnl_attr_for_each_nested(nla_entry, qp_table) {
struct nlattr *qp_line[RDMA_NLDEV_ATTR_MAX] = {};
-
- if (isfirst && !rd->json_output)
- pr_out("\n LQPN: <");
-
err = mnl_attr_parse_nested(nla_entry, rd_attr_cb, qp_line);
if (err != MNL_CB_OK)
return -EINVAL;
return -EINVAL;
qpn = mnl_attr_get_u32(qp_line[RDMA_NLDEV_ATTR_RES_LQPN]);
- if (rd->json_output) {
- jsonw_uint_field(rd->jw, "lqpn", qpn);
- } else {
- if (isfirst)
- pr_out("%d", qpn);
- else
- pr_out(", %d", qpn);
- }
+ if (!isfirst)
+ print_color_string(PRINT_FP, COLOR_NONE, NULL, ",",
+ NULL);
+ print_color_uint(PRINT_ANY, COLOR_NONE, NULL, "%d", qpn);
isfirst = false;
}
-
- if (!rd->json_output)
- pr_out(">\n");
+ close_json_array(PRINT_ANY, ">");
+ newline(rd);
return MNL_CB_OK;
}
if (ret)
return ret;
- if (rd->json_output)
- jsonw_start_object(rd->jw);
ret = rd_recv_msg(rd, stat_qp_show_parse_cb, rd, seq);
- if (rd->json_output)
- jsonw_end_object(rd->jw);
-
return ret;
}
name = mnl_attr_get_str(tb[RDMA_NLDEV_ATTR_DEV_NAME]);
port = mnl_attr_get_u32(tb[RDMA_NLDEV_ATTR_PORT_INDEX]);
- if (rd->json_output) {
- jsonw_string_field(rd->jw, "ifname", name);
- jsonw_uint_field(rd->jw, "port", port);
- } else {
- pr_out("link %s/%u ", name, port);
- }
-
+ open_json_object(NULL);
+ print_color_string(PRINT_ANY, COLOR_NONE, "ifname", "link %s/", name);
+ print_color_uint(PRINT_ANY, COLOR_NONE, "port", "%u ", port);
ret = res_get_hwcounters(rd, tb[RDMA_NLDEV_ATTR_STAT_HWCOUNTERS], true);
- if (!rd->json_output)
- pr_out("\n");
+ newline(rd);
return ret;
}
const struct rd_cmd cmds[] = {
{ NULL, stat_show_link },
{ "link", stat_show_link },
+ { "mr", stat_mr },
{ "help", stat_help },
{ 0 }
};
{ "list", stat_show },
{ "help", stat_help },
{ "qp", stat_qp },
+ { "mr", stat_mr },
{ 0 }
};