]>
git.proxmox.com Git - mirror_iproute2.git/blob - rdma/rdma.c
1 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
4 * Authors: Leon Romanovsky <leonro@mellanox.com>
10 static void help(char *name
)
12 pr_out("Usage: %s [ OPTIONS ] OBJECT { COMMAND | help }\n"
13 " %s [ -f[orce] ] -b[atch] filename\n"
14 "where OBJECT := { dev | link | resource | help }\n"
15 " OPTIONS := { -V[ersion] | -d[etails] | -j[son] | -p[retty]}\n", name
, name
);
18 static int cmd_help(struct rd
*rd
)
24 static int rd_cmd(struct rd
*rd
, int argc
, char **argv
)
26 const struct rd_cmd cmds
[] = {
31 { "resource", cmd_res
},
38 return rd_exec_cmd(rd
, cmds
, "object");
41 static int rd_batch(struct rd
*rd
, const char *name
, bool force
)
47 if (name
&& strcmp(name
, "-") != 0) {
48 if (!freopen(name
, "r", stdin
)) {
49 pr_err("Cannot open file \"%s\" for reading: %s\n",
50 name
, strerror(errno
));
56 while (getcmdline(&line
, &len
, stdin
) != -1) {
60 largc
= makeargs(line
, largv
, ARRAY_SIZE(largv
));
62 continue; /* blank line */
64 ret
= rd_cmd(rd
, largc
, largv
);
66 pr_err("Command failed %s:%d\n", name
, cmdlineno
);
77 static int rd_init(struct rd
*rd
, char *filename
)
82 rd
->filename
= filename
;
83 INIT_LIST_HEAD(&rd
->dev_map_list
);
84 INIT_LIST_HEAD(&rd
->filter_list
);
86 if (rd
->json_output
) {
87 rd
->jw
= jsonw_new(stdout
);
89 pr_err("Failed to create JSON writer\n");
92 jsonw_pretty(rd
->jw
, rd
->pretty_output
);
95 rd
->buff
= malloc(MNL_SOCKET_BUFFER_SIZE
);
99 rd_prepare_msg(rd
, RDMA_NLDEV_CMD_GET
,
100 &seq
, (NLM_F_REQUEST
| NLM_F_ACK
| NLM_F_DUMP
));
101 ret
= rd_send_msg(rd
);
105 return rd_recv_msg(rd
, rd_dev_init_cb
, rd
, seq
);
108 static void rd_cleanup(struct rd
*rd
)
111 jsonw_destroy(&rd
->jw
);
115 int main(int argc
, char **argv
)
117 static const struct option long_options
[] = {
118 { "version", no_argument
, NULL
, 'V' },
119 { "help", no_argument
, NULL
, 'h' },
120 { "json", no_argument
, NULL
, 'j' },
121 { "pretty", no_argument
, NULL
, 'p' },
122 { "details", no_argument
, NULL
, 'd' },
123 { "force", no_argument
, NULL
, 'f' },
124 { "batch", required_argument
, NULL
, 'b' },
127 bool show_driver_details
= false;
128 const char *batch_file
= NULL
;
129 bool pretty_output
= false;
130 bool show_details
= false;
131 bool json_output
= false;
138 filename
= basename(argv
[0]);
140 while ((opt
= getopt_long(argc
, argv
, ":Vhdpjfb:",
141 long_options
, NULL
)) >= 0) {
144 printf("%s utility, iproute2-ss%s\n",
148 pretty_output
= true;
152 show_driver_details
= true;
169 pr_err("-%c option requires an argument\n", optopt
);
172 pr_err("Unknown option.\n");
181 rd
.show_details
= show_details
;
182 rd
.show_driver_details
= show_driver_details
;
183 rd
.json_output
= json_output
;
184 rd
.pretty_output
= pretty_output
;
186 err
= rd_init(&rd
, filename
);
191 err
= rd_batch(&rd
, batch_file
, force
);
193 err
= rd_cmd(&rd
, argc
, argv
);
197 return err
? EXIT_FAILURE
: EXIT_SUCCESS
;