4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.gnu.org/licenses/gpl-2.0.html
23 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Use is subject to license terms.
26 * Copyright (c) 2011 - 2015, Intel Corporation.
29 * This file is part of Lustre, http://www.lustre.org/
30 * Lustre is a trademark of Seagate, Inc.
32 * lnet/include/lnet/lnetst.h
34 * Author: Liang Zhen <liang.zhen@intel.com>
40 #include <linux/types.h>
42 #define LST_FEAT_NONE (0)
43 #define LST_FEAT_BULK_LEN (1 << 0) /* enable variable page size */
45 #define LST_FEATS_EMPTY (LST_FEAT_NONE)
46 #define LST_FEATS_MASK (LST_FEAT_NONE | LST_FEAT_BULK_LEN)
48 #define LST_NAME_SIZE 32 /* max name buffer length */
50 #define LSTIO_DEBUG 0xC00 /* debug */
51 #define LSTIO_SESSION_NEW 0xC01 /* create session */
52 #define LSTIO_SESSION_END 0xC02 /* end session */
53 #define LSTIO_SESSION_INFO 0xC03 /* query session */
54 #define LSTIO_GROUP_ADD 0xC10 /* add group */
55 #define LSTIO_GROUP_LIST 0xC11 /* list all groups in session */
56 #define LSTIO_GROUP_INFO 0xC12 /* query default information of
59 #define LSTIO_GROUP_DEL 0xC13 /* delete group */
60 #define LSTIO_NODES_ADD 0xC14 /* add nodes to specified group */
61 #define LSTIO_GROUP_UPDATE 0xC15 /* update group */
62 #define LSTIO_BATCH_ADD 0xC20 /* add batch */
63 #define LSTIO_BATCH_START 0xC21 /* start batch */
64 #define LSTIO_BATCH_STOP 0xC22 /* stop batch */
65 #define LSTIO_BATCH_DEL 0xC23 /* delete batch */
66 #define LSTIO_BATCH_LIST 0xC24 /* show all batches in the session */
67 #define LSTIO_BATCH_INFO 0xC25 /* show defail of specified batch */
68 #define LSTIO_TEST_ADD 0xC26 /* add test (to batch) */
69 #define LSTIO_BATCH_QUERY 0xC27 /* query batch status */
70 #define LSTIO_STAT_QUERY 0xC30 /* get stats */
73 lnet_nid_t ses_nid; /* nid of console node */
74 __u64 ses_stamp; /* time stamp */
77 extern struct lst_sid LST_INVALID_SID;
80 __u64 bat_id; /* unique id in session */
81 }; /*** batch id (group of tests) */
83 /* Status of test node */
84 #define LST_NODE_ACTIVE 0x1 /* node in this session */
85 #define LST_NODE_BUSY 0x2 /* node is taken by other session */
86 #define LST_NODE_DOWN 0x4 /* node is down */
87 #define LST_NODE_UNKNOWN 0x8 /* node not in session */
89 struct lstcon_node_ent {
90 struct lnet_process_id nde_id; /* id of node */
91 int nde_state; /* state of node */
92 }; /*** node entry, for list_group command */
94 struct lstcon_ndlist_ent {
95 int nle_nnode; /* # of nodes */
96 int nle_nactive; /* # of active nodes */
97 int nle_nbusy; /* # of busy nodes */
98 int nle_ndown; /* # of down nodes */
99 int nle_nunknown; /* # of unknown nodes */
100 }; /*** node_list entry, for list_batch command */
102 struct lstcon_test_ent {
103 int tse_type; /* test type */
104 int tse_loop; /* loop count */
105 int tse_concur; /* concurrency of test */
106 }; /* test summary entry, for
110 struct lstcon_batch_ent {
111 int bae_state; /* batch status */
112 int bae_timeout; /* batch timeout */
113 int bae_ntest; /* # of tests in the batch */
114 }; /* batch summary entry, for
118 struct lstcon_test_batch_ent {
119 struct lstcon_ndlist_ent tbe_cli_nle; /* client (group) node_list
122 struct lstcon_ndlist_ent tbe_srv_nle; /* server (group) node_list
126 struct lstcon_test_ent tbe_test; /* test entry */
127 struct lstcon_batch_ent tbe_batch;/* batch entry */
129 }; /* test/batch verbose information entry,
130 * for list_batch command
133 struct lstcon_rpc_ent {
134 struct list_head rpe_link; /* link chain */
135 struct lnet_process_id rpe_peer; /* peer's id */
136 struct timeval rpe_stamp; /* time stamp of RPC */
137 int rpe_state; /* peer's state */
138 int rpe_rpc_errno; /* RPC errno */
140 struct lst_sid rpe_sid; /* peer's session id */
141 int rpe_fwk_errno; /* framework errno */
142 int rpe_priv[4]; /* private data */
143 char rpe_payload[0]; /* private reply payload */
146 struct lstcon_trans_stat {
147 int trs_rpc_stat[4]; /* RPCs stat (0: total 1: failed
151 int trs_rpc_errno; /* RPC errno */
152 int trs_fwk_stat[8]; /* framework stat */
153 int trs_fwk_errno; /* errno of the first remote error */
154 void *trs_fwk_private; /* private framework stat */
158 lstcon_rpc_stat_total(struct lstcon_trans_stat *stat, int inc)
160 return inc ? ++stat->trs_rpc_stat[0] : stat->trs_rpc_stat[0];
164 lstcon_rpc_stat_success(struct lstcon_trans_stat *stat, int inc)
166 return inc ? ++stat->trs_rpc_stat[1] : stat->trs_rpc_stat[1];
170 lstcon_rpc_stat_failure(struct lstcon_trans_stat *stat, int inc)
172 return inc ? ++stat->trs_rpc_stat[2] : stat->trs_rpc_stat[2];
176 lstcon_sesop_stat_success(struct lstcon_trans_stat *stat, int inc)
178 return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
182 lstcon_sesop_stat_failure(struct lstcon_trans_stat *stat, int inc)
184 return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
188 lstcon_sesqry_stat_active(struct lstcon_trans_stat *stat, int inc)
190 return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
194 lstcon_sesqry_stat_busy(struct lstcon_trans_stat *stat, int inc)
196 return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
200 lstcon_sesqry_stat_unknown(struct lstcon_trans_stat *stat, int inc)
202 return inc ? ++stat->trs_fwk_stat[2] : stat->trs_fwk_stat[2];
206 lstcon_tsbop_stat_success(struct lstcon_trans_stat *stat, int inc)
208 return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
212 lstcon_tsbop_stat_failure(struct lstcon_trans_stat *stat, int inc)
214 return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
218 lstcon_tsbqry_stat_idle(struct lstcon_trans_stat *stat, int inc)
220 return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
224 lstcon_tsbqry_stat_run(struct lstcon_trans_stat *stat, int inc)
226 return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
230 lstcon_tsbqry_stat_failure(struct lstcon_trans_stat *stat, int inc)
232 return inc ? ++stat->trs_fwk_stat[2] : stat->trs_fwk_stat[2];
236 lstcon_statqry_stat_success(struct lstcon_trans_stat *stat, int inc)
238 return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
242 lstcon_statqry_stat_failure(struct lstcon_trans_stat *stat, int inc)
244 return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
247 /* create a session */
248 struct lstio_session_new_args {
249 int lstio_ses_key; /* IN: local key */
250 int lstio_ses_timeout; /* IN: session timeout */
251 int lstio_ses_force; /* IN: force create ? */
252 /** IN: session features */
253 unsigned int lstio_ses_feats;
254 struct lst_sid __user *lstio_ses_idp; /* OUT: session id */
255 int lstio_ses_nmlen; /* IN: name length */
256 char __user *lstio_ses_namep; /* IN: session name */
259 /* query current session */
260 struct lstio_session_info_args {
261 struct lst_sid __user *lstio_ses_idp; /* OUT: session id */
262 int __user *lstio_ses_keyp; /* OUT: local key */
263 /** OUT: session features */
264 unsigned int __user *lstio_ses_featp;
265 struct lstcon_ndlist_ent __user *lstio_ses_ndinfo;/* OUT: */
266 int lstio_ses_nmlen; /* IN: name length */
267 char __user *lstio_ses_namep; /* OUT: session name */
270 /* delete a session */
271 struct lstio_session_end_args {
272 int lstio_ses_key; /* IN: session key */
275 #define LST_OPC_SESSION 1
276 #define LST_OPC_GROUP 2
277 #define LST_OPC_NODES 3
278 #define LST_OPC_BATCHCLI 4
279 #define LST_OPC_BATCHSRV 5
281 struct lstio_debug_args {
282 int lstio_dbg_key; /* IN: session key */
283 int lstio_dbg_type; /* IN: debug
287 int lstio_dbg_flags; /* IN: reserved debug
290 int lstio_dbg_timeout; /* IN: timeout of
293 int lstio_dbg_nmlen; /* IN: len of name */
294 char __user *lstio_dbg_namep; /* IN: name of
297 int lstio_dbg_count; /* IN: # of test nodes
300 struct lnet_process_id __user *lstio_dbg_idsp; /* IN: id of test
303 struct list_head __user *lstio_dbg_resultp; /* OUT: list head of
308 struct lstio_group_add_args {
309 int lstio_grp_key; /* IN: session key */
310 int lstio_grp_nmlen; /* IN: name length */
311 char __user *lstio_grp_namep; /* IN: group name */
314 struct lstio_group_del_args {
315 int lstio_grp_key; /* IN: session key */
316 int lstio_grp_nmlen; /* IN: name length */
317 char __user *lstio_grp_namep; /* IN: group name */
320 #define LST_GROUP_CLEAN 1 /* remove inactive nodes in the group */
321 #define LST_GROUP_REFRESH 2 /* refresh inactive nodes
324 #define LST_GROUP_RMND 3 /* delete nodes from the group */
326 struct lstio_group_update_args {
327 int lstio_grp_key; /* IN: session key */
328 int lstio_grp_opc; /* IN: OPC */
329 int lstio_grp_args; /* IN: arguments */
330 int lstio_grp_nmlen; /* IN: name length */
331 char __user *lstio_grp_namep; /* IN: group name */
332 int lstio_grp_count; /* IN: # of nodes id */
333 struct lnet_process_id __user *lstio_grp_idsp; /* IN: array of nodes */
334 struct list_head __user *lstio_grp_resultp; /* OUT: list head of
339 struct lstio_group_nodes_args {
340 int lstio_grp_key; /* IN: session key */
341 int lstio_grp_nmlen; /* IN: name length */
342 char __user *lstio_grp_namep; /* IN: group name */
343 int lstio_grp_count; /* IN: # of nodes */
344 /** OUT: session features */
345 unsigned int __user *lstio_grp_featp;
346 struct lnet_process_id __user *lstio_grp_idsp; /* IN: nodes */
347 struct list_head __user *lstio_grp_resultp; /* OUT: list head of
352 struct lstio_group_list_args {
353 int lstio_grp_key; /* IN: session key */
354 int lstio_grp_idx; /* IN: group idx */
355 int lstio_grp_nmlen; /* IN: name len */
356 char __user *lstio_grp_namep; /* OUT: name */
359 struct lstio_group_info_args {
360 int lstio_grp_key; /* IN: session key */
361 int lstio_grp_nmlen; /* IN: name len */
362 char __user *lstio_grp_namep; /* IN: name */
363 struct lstcon_ndlist_ent __user *lstio_grp_entp;/* OUT: description
366 int __user *lstio_grp_idxp; /* IN/OUT: node index */
367 int __user *lstio_grp_ndentp; /* IN/OUT: # of nodent */
368 struct lstcon_node_ent __user *lstio_grp_dentsp;/* OUT: nodent array */
371 #define LST_DEFAULT_BATCH "batch" /* default batch name */
373 struct lstio_batch_add_args {
374 int lstio_bat_key; /* IN: session key */
375 int lstio_bat_nmlen; /* IN: name length */
376 char __user *lstio_bat_namep; /* IN: batch name */
379 struct lstio_batch_del_args {
380 int lstio_bat_key; /* IN: session key */
381 int lstio_bat_nmlen; /* IN: name length */
382 char __user *lstio_bat_namep; /* IN: batch name */
385 struct lstio_batch_run_args {
386 int lstio_bat_key; /* IN: session key */
387 int lstio_bat_timeout; /* IN: timeout for
390 int lstio_bat_nmlen; /* IN: name length */
391 char __user *lstio_bat_namep; /* IN: batch name */
392 struct list_head __user *lstio_bat_resultp; /* OUT: list head of
397 struct lstio_batch_stop_args {
398 int lstio_bat_key; /* IN: session key */
399 int lstio_bat_force; /* IN: abort unfinished
402 int lstio_bat_nmlen; /* IN: name length */
403 char __user *lstio_bat_namep; /* IN: batch name */
404 struct list_head __user *lstio_bat_resultp; /* OUT: list head of
409 struct lstio_batch_query_args {
410 int lstio_bat_key; /* IN: session key */
411 int lstio_bat_testidx; /* IN: test index */
412 int lstio_bat_client; /* IN: we testing
415 int lstio_bat_timeout; /* IN: timeout for
418 int lstio_bat_nmlen; /* IN: name length */
419 char __user *lstio_bat_namep; /* IN: batch name */
420 struct list_head __user *lstio_bat_resultp; /* OUT: list head of
425 struct lstio_batch_list_args {
426 int lstio_bat_key; /* IN: session key */
427 int lstio_bat_idx; /* IN: index */
428 int lstio_bat_nmlen; /* IN: name length */
429 char __user *lstio_bat_namep; /* IN: batch name */
432 struct lstio_batch_info_args {
433 int lstio_bat_key; /* IN: session key */
434 int lstio_bat_nmlen; /* IN: name length */
435 char __user *lstio_bat_namep; /* IN: name */
436 int lstio_bat_server; /* IN: query server
439 int lstio_bat_testidx; /* IN: test index */
440 struct lstcon_test_batch_ent __user *lstio_bat_entp;/* OUT: batch ent */
442 int __user *lstio_bat_idxp; /* IN/OUT: index of node */
443 int __user *lstio_bat_ndentp; /* IN/OUT: # of nodent */
444 struct lstcon_node_ent __user *lstio_bat_dentsp;/* array of nodent */
447 /* add stat in session */
448 struct lstio_stat_args {
449 int lstio_sta_key; /* IN: session key */
450 int lstio_sta_timeout; /* IN: timeout for
453 int lstio_sta_nmlen; /* IN: group name
456 char __user *lstio_sta_namep; /* IN: group name */
457 int lstio_sta_count; /* IN: # of pid */
458 struct lnet_process_id __user *lstio_sta_idsp; /* IN: pid */
459 struct list_head __user *lstio_sta_resultp; /* OUT: list head of
469 /* create a test in a batch */
470 #define LST_MAX_CONCUR 1024 /* Max concurrency of test */
472 struct lstio_test_args {
473 int lstio_tes_key; /* IN: session key */
474 int lstio_tes_bat_nmlen; /* IN: batch name len */
475 char __user *lstio_tes_bat_name; /* IN: batch name */
476 int lstio_tes_type; /* IN: test type */
477 int lstio_tes_oneside; /* IN: one sided test */
478 int lstio_tes_loop; /* IN: loop count */
479 int lstio_tes_concur; /* IN: concurrency */
481 int lstio_tes_dist; /* IN: node distribution in
484 int lstio_tes_span; /* IN: node span in
487 int lstio_tes_sgrp_nmlen; /* IN: source group
490 char __user *lstio_tes_sgrp_name; /* IN: group name */
491 int lstio_tes_dgrp_nmlen; /* IN: destination group
494 char __user *lstio_tes_dgrp_name; /* IN: group name */
496 int lstio_tes_param_len; /* IN: param buffer len */
497 void __user *lstio_tes_param; /* IN: parameter for specified
498 * test: lstio_bulk_param_t,
499 * lstio_ping_param_t,
502 int __user *lstio_tes_retp; /* OUT: private returned
505 struct list_head __user *lstio_tes_resultp;/* OUT: list head of
516 LST_BRW_CHECK_NONE = 1,
517 LST_BRW_CHECK_SIMPLE = 2,
518 LST_BRW_CHECK_FULL = 3
521 struct lst_test_bulk_param {
522 int blk_opc; /* bulk operation code */
523 int blk_size; /* size (bytes) */
524 int blk_time; /* time of running the test*/
525 int blk_flags; /* reserved flags */
526 int blk_cli_off; /* bulk offset on client */
527 int blk_srv_off; /* reserved: bulk offset on server */
530 struct lst_test_ping_param {
531 int png_size; /* size of ping message */
532 int png_time; /* time */
533 int png_loop; /* loop */
534 int png_flags; /* reserved flags */
537 struct srpc_counters {
547 struct sfw_counters {
548 /** milliseconds since current session started */
550 __u32 active_batches;
551 __u32 zombie_sessions;