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.sun.com/software/products/lustre/docs/GPLv2.pdf
20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 * CA 95054 USA or visit www.sun.com if you need additional information or
27 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
30 * Copyright (c) 2011, Intel Corporation.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
36 * lnet/include/lnet/lnetst.h
38 * Author: Liang Zhen <liangzhen@clusterfs.com>
44 #include "../libcfs/libcfs.h"
46 #include "lib-types.h"
48 #define LST_FEAT_NONE (0)
49 #define LST_FEAT_BULK_LEN (1 << 0) /* enable variable page size */
51 #define LST_FEATS_EMPTY (LST_FEAT_NONE)
52 #define LST_FEATS_MASK (LST_FEAT_NONE | LST_FEAT_BULK_LEN)
54 #define LST_NAME_SIZE 32 /* max name buffer length */
56 #define LSTIO_DEBUG 0xC00 /* debug */
57 #define LSTIO_SESSION_NEW 0xC01 /* create session */
58 #define LSTIO_SESSION_END 0xC02 /* end session */
59 #define LSTIO_SESSION_INFO 0xC03 /* query session */
60 #define LSTIO_GROUP_ADD 0xC10 /* add group */
61 #define LSTIO_GROUP_LIST 0xC11 /* list all groups in session */
62 #define LSTIO_GROUP_INFO 0xC12 /* query default information of specified group */
63 #define LSTIO_GROUP_DEL 0xC13 /* delete group */
64 #define LSTIO_NODES_ADD 0xC14 /* add nodes to specified group */
65 #define LSTIO_GROUP_UPDATE 0xC15 /* update group */
66 #define LSTIO_BATCH_ADD 0xC20 /* add batch */
67 #define LSTIO_BATCH_START 0xC21 /* start batch */
68 #define LSTIO_BATCH_STOP 0xC22 /* stop batch */
69 #define LSTIO_BATCH_DEL 0xC23 /* delete batch */
70 #define LSTIO_BATCH_LIST 0xC24 /* show all batches in the session */
71 #define LSTIO_BATCH_INFO 0xC25 /* show defail of specified batch */
72 #define LSTIO_TEST_ADD 0xC26 /* add test (to batch) */
73 #define LSTIO_BATCH_QUERY 0xC27 /* query batch status */
74 #define LSTIO_STAT_QUERY 0xC30 /* get stats */
77 lnet_nid_t ses_nid
; /* nid of console node */
78 __u64 ses_stamp
; /* time stamp */
79 } lst_sid_t
; /*** session id */
81 extern lst_sid_t LST_INVALID_SID
;
84 __u64 bat_id
; /* unique id in session */
85 } lst_bid_t
; /*** batch id (group of tests) */
87 /* Status of test node */
88 #define LST_NODE_ACTIVE 0x1 /* node in this session */
89 #define LST_NODE_BUSY 0x2 /* node is taken by other session */
90 #define LST_NODE_DOWN 0x4 /* node is down */
91 #define LST_NODE_UNKNOWN 0x8 /* node not in session */
94 lnet_process_id_t nde_id
; /* id of node */
95 int nde_state
; /* state of node */
96 } lstcon_node_ent_t
; /*** node entry, for list_group command */
99 int nle_nnode
; /* # of nodes */
100 int nle_nactive
; /* # of active nodes */
101 int nle_nbusy
; /* # of busy nodes */
102 int nle_ndown
; /* # of down nodes */
103 int nle_nunknown
; /* # of unknown nodes */
104 } lstcon_ndlist_ent_t
; /*** node_list entry, for list_batch command */
107 int tse_type
; /* test type */
108 int tse_loop
; /* loop count */
109 int tse_concur
; /* concurrency of test */
110 } lstcon_test_ent_t
; /*** test summary entry, for list_batch command */
113 int bae_state
; /* batch status */
114 int bae_timeout
; /* batch timeout */
115 int bae_ntest
; /* # of tests in the batch */
116 } lstcon_batch_ent_t
; /*** batch summary entry, for list_batch command */
119 lstcon_ndlist_ent_t tbe_cli_nle
; /* client (group) node_list entry */
120 lstcon_ndlist_ent_t tbe_srv_nle
; /* server (group) node_list entry */
122 lstcon_test_ent_t tbe_test
; /* test entry */
123 lstcon_batch_ent_t tbe_batch
; /* batch entry */
125 } lstcon_test_batch_ent_t
; /*** test/batch verbose information entry,
126 *** for list_batch command */
129 struct list_head rpe_link
; /* link chain */
130 lnet_process_id_t rpe_peer
; /* peer's id */
131 struct timeval rpe_stamp
; /* time stamp of RPC */
132 int rpe_state
; /* peer's state */
133 int rpe_rpc_errno
; /* RPC errno */
135 lst_sid_t rpe_sid
; /* peer's session id */
136 int rpe_fwk_errno
; /* framework errno */
137 int rpe_priv
[4]; /* private data */
138 char rpe_payload
[0]; /* private reply payload */
142 int trs_rpc_stat
[4]; /* RPCs stat (0: total, 1: failed, 2: finished, 4: reserved */
143 int trs_rpc_errno
; /* RPC errno */
144 int trs_fwk_stat
[8]; /* framework stat */
145 int trs_fwk_errno
; /* errno of the first remote error */
146 void *trs_fwk_private
; /* private framework stat */
147 } lstcon_trans_stat_t
;
150 lstcon_rpc_stat_total(lstcon_trans_stat_t
*stat
, int inc
)
152 return inc
? ++stat
->trs_rpc_stat
[0] : stat
->trs_rpc_stat
[0];
156 lstcon_rpc_stat_success(lstcon_trans_stat_t
*stat
, int inc
)
158 return inc
? ++stat
->trs_rpc_stat
[1] : stat
->trs_rpc_stat
[1];
162 lstcon_rpc_stat_failure(lstcon_trans_stat_t
*stat
, int inc
)
164 return inc
? ++stat
->trs_rpc_stat
[2] : stat
->trs_rpc_stat
[2];
168 lstcon_sesop_stat_success(lstcon_trans_stat_t
*stat
, int inc
)
170 return inc
? ++stat
->trs_fwk_stat
[0] : stat
->trs_fwk_stat
[0];
174 lstcon_sesop_stat_failure(lstcon_trans_stat_t
*stat
, int inc
)
176 return inc
? ++stat
->trs_fwk_stat
[1] : stat
->trs_fwk_stat
[1];
180 lstcon_sesqry_stat_active(lstcon_trans_stat_t
*stat
, int inc
)
182 return inc
? ++stat
->trs_fwk_stat
[0] : stat
->trs_fwk_stat
[0];
186 lstcon_sesqry_stat_busy(lstcon_trans_stat_t
*stat
, int inc
)
188 return inc
? ++stat
->trs_fwk_stat
[1] : stat
->trs_fwk_stat
[1];
192 lstcon_sesqry_stat_unknown(lstcon_trans_stat_t
*stat
, int inc
)
194 return inc
? ++stat
->trs_fwk_stat
[2] : stat
->trs_fwk_stat
[2];
198 lstcon_tsbop_stat_success(lstcon_trans_stat_t
*stat
, int inc
)
200 return inc
? ++stat
->trs_fwk_stat
[0] : stat
->trs_fwk_stat
[0];
204 lstcon_tsbop_stat_failure(lstcon_trans_stat_t
*stat
, int inc
)
206 return inc
? ++stat
->trs_fwk_stat
[1] : stat
->trs_fwk_stat
[1];
210 lstcon_tsbqry_stat_idle(lstcon_trans_stat_t
*stat
, int inc
)
212 return inc
? ++stat
->trs_fwk_stat
[0] : stat
->trs_fwk_stat
[0];
216 lstcon_tsbqry_stat_run(lstcon_trans_stat_t
*stat
, int inc
)
218 return inc
? ++stat
->trs_fwk_stat
[1] : stat
->trs_fwk_stat
[1];
222 lstcon_tsbqry_stat_failure(lstcon_trans_stat_t
*stat
, int inc
)
224 return inc
? ++stat
->trs_fwk_stat
[2] : stat
->trs_fwk_stat
[2];
228 lstcon_statqry_stat_success(lstcon_trans_stat_t
*stat
, int inc
)
230 return inc
? ++stat
->trs_fwk_stat
[0] : stat
->trs_fwk_stat
[0];
234 lstcon_statqry_stat_failure(lstcon_trans_stat_t
*stat
, int inc
)
236 return inc
? ++stat
->trs_fwk_stat
[1] : stat
->trs_fwk_stat
[1];
239 /* create a session */
241 int lstio_ses_key
; /* IN: local key */
242 int lstio_ses_timeout
; /* IN: session timeout */
243 int lstio_ses_force
; /* IN: force create ? */
244 /** IN: session features */
245 unsigned lstio_ses_feats
;
246 lst_sid_t
*lstio_ses_idp
; /* OUT: session id */
247 int lstio_ses_nmlen
; /* IN: name length */
248 char *lstio_ses_namep
; /* IN: session name */
249 } lstio_session_new_args_t
;
251 /* query current session */
253 lst_sid_t
*lstio_ses_idp
; /* OUT: session id */
254 int *lstio_ses_keyp
; /* OUT: local key */
255 /** OUT: session features */
256 unsigned *lstio_ses_featp
;
257 lstcon_ndlist_ent_t
*lstio_ses_ndinfo
; /* OUT: */
258 int lstio_ses_nmlen
; /* IN: name length */
259 char *lstio_ses_namep
; /* OUT: session name */
260 } lstio_session_info_args_t
;
262 /* delete a session */
264 int lstio_ses_key
; /* IN: session key */
265 } lstio_session_end_args_t
;
267 #define LST_OPC_SESSION 1
268 #define LST_OPC_GROUP 2
269 #define LST_OPC_NODES 3
270 #define LST_OPC_BATCHCLI 4
271 #define LST_OPC_BATCHSRV 5
274 int lstio_dbg_key
; /* IN: session key */
275 int lstio_dbg_type
; /* IN: debug sessin|batch|group|nodes list */
276 int lstio_dbg_flags
; /* IN: reserved debug flags */
277 int lstio_dbg_timeout
; /* IN: timeout of debug */
279 int lstio_dbg_nmlen
; /* IN: len of name */
280 char *lstio_dbg_namep
; /* IN: name of group|batch */
281 int lstio_dbg_count
; /* IN: # of test nodes to debug */
282 lnet_process_id_t
*lstio_dbg_idsp
; /* IN: id of test nodes */
283 struct list_head
*lstio_dbg_resultp
; /* OUT: list head of result buffer */
284 } lstio_debug_args_t
;
287 int lstio_grp_key
; /* IN: session key */
288 int lstio_grp_nmlen
; /* IN: name length */
289 char *lstio_grp_namep
; /* IN: group name */
290 } lstio_group_add_args_t
;
293 int lstio_grp_key
; /* IN: session key */
294 int lstio_grp_nmlen
; /* IN: name length */
295 char *lstio_grp_namep
; /* IN: group name */
296 } lstio_group_del_args_t
;
298 #define LST_GROUP_CLEAN 1 /* remove inactive nodes in the group */
299 #define LST_GROUP_REFRESH 2 /* refresh inactive nodes in the group */
300 #define LST_GROUP_RMND 3 /* delete nodes from the group */
303 int lstio_grp_key
; /* IN: session key */
304 int lstio_grp_opc
; /* IN: OPC */
305 int lstio_grp_args
; /* IN: arguments */
306 int lstio_grp_nmlen
; /* IN: name length */
307 char *lstio_grp_namep
; /* IN: group name */
308 int lstio_grp_count
; /* IN: # of nodes id */
309 lnet_process_id_t
*lstio_grp_idsp
; /* IN: array of nodes */
310 struct list_head
*lstio_grp_resultp
; /* OUT: list head of result buffer */
311 } lstio_group_update_args_t
;
314 int lstio_grp_key
; /* IN: session key */
315 int lstio_grp_nmlen
; /* IN: name length */
316 char *lstio_grp_namep
; /* IN: group name */
317 int lstio_grp_count
; /* IN: # of nodes */
318 /** OUT: session features */
319 unsigned *lstio_grp_featp
;
320 lnet_process_id_t
*lstio_grp_idsp
; /* IN: nodes */
321 struct list_head
*lstio_grp_resultp
; /* OUT: list head of result buffer */
322 } lstio_group_nodes_args_t
;
325 int lstio_grp_key
; /* IN: session key */
326 int lstio_grp_idx
; /* IN: group idx */
327 int lstio_grp_nmlen
; /* IN: name len */
328 char *lstio_grp_namep
; /* OUT: name */
329 } lstio_group_list_args_t
;
332 int lstio_grp_key
; /* IN: session key */
333 int lstio_grp_nmlen
; /* IN: name len */
334 char *lstio_grp_namep
; /* IN: name */
335 lstcon_ndlist_ent_t
*lstio_grp_entp
; /* OUT: description of group */
337 int *lstio_grp_idxp
; /* IN/OUT: node index */
338 int *lstio_grp_ndentp
; /* IN/OUT: # of nodent */
339 lstcon_node_ent_t
*lstio_grp_dentsp
; /* OUT: nodent array */
340 } lstio_group_info_args_t
;
342 #define LST_DEFAULT_BATCH "batch" /* default batch name */
345 int lstio_bat_key
; /* IN: session key */
346 int lstio_bat_nmlen
; /* IN: name length */
347 char *lstio_bat_namep
; /* IN: batch name */
348 } lstio_batch_add_args_t
;
351 int lstio_bat_key
; /* IN: session key */
352 int lstio_bat_nmlen
; /* IN: name length */
353 char *lstio_bat_namep
; /* IN: batch name */
354 } lstio_batch_del_args_t
;
357 int lstio_bat_key
; /* IN: session key */
358 int lstio_bat_timeout
; /* IN: timeout for the batch */
359 int lstio_bat_nmlen
; /* IN: name length */
360 char *lstio_bat_namep
; /* IN: batch name */
361 struct list_head
*lstio_bat_resultp
; /* OUT: list head of result buffer */
362 } lstio_batch_run_args_t
;
365 int lstio_bat_key
; /* IN: session key */
366 int lstio_bat_force
; /* IN: abort unfinished test RPC */
367 int lstio_bat_nmlen
; /* IN: name length */
368 char *lstio_bat_namep
; /* IN: batch name */
369 struct list_head
*lstio_bat_resultp
; /* OUT: list head of result buffer */
370 } lstio_batch_stop_args_t
;
373 int lstio_bat_key
; /* IN: session key */
374 int lstio_bat_testidx
; /* IN: test index */
375 int lstio_bat_client
; /* IN: is test client? */
376 int lstio_bat_timeout
; /* IN: timeout for waiting */
377 int lstio_bat_nmlen
; /* IN: name length */
378 char *lstio_bat_namep
; /* IN: batch name */
379 struct list_head
*lstio_bat_resultp
; /* OUT: list head of result buffer */
380 } lstio_batch_query_args_t
;
383 int lstio_bat_key
; /* IN: session key */
384 int lstio_bat_idx
; /* IN: index */
385 int lstio_bat_nmlen
; /* IN: name length */
386 char *lstio_bat_namep
; /* IN: batch name */
387 } lstio_batch_list_args_t
;
390 int lstio_bat_key
; /* IN: session key */
391 int lstio_bat_nmlen
; /* IN: name length */
392 char *lstio_bat_namep
; /* IN: name */
393 int lstio_bat_server
; /* IN: query server or not */
394 int lstio_bat_testidx
; /* IN: test index */
395 lstcon_test_batch_ent_t
*lstio_bat_entp
; /* OUT: batch ent */
397 int *lstio_bat_idxp
; /* IN/OUT: index of node */
398 int *lstio_bat_ndentp
; /* IN/OUT: # of nodent */
399 lstcon_node_ent_t
*lstio_bat_dentsp
; /* array of nodent */
400 } lstio_batch_info_args_t
;
402 /* add stat in session */
404 int lstio_sta_key
; /* IN: session key */
405 int lstio_sta_timeout
; /* IN: timeout for stat request */
406 int lstio_sta_nmlen
; /* IN: group name length */
407 char *lstio_sta_namep
; /* IN: group name */
408 int lstio_sta_count
; /* IN: # of pid */
409 lnet_process_id_t
*lstio_sta_idsp
; /* IN: pid */
410 struct list_head
*lstio_sta_resultp
; /* OUT: list head of result buffer */
418 /* create a test in a batch */
419 #define LST_MAX_CONCUR 1024 /* Max concurrency of test */
422 int lstio_tes_key
; /* IN: session key */
423 int lstio_tes_bat_nmlen
; /* IN: batch name len */
424 char *lstio_tes_bat_name
; /* IN: batch name */
425 int lstio_tes_type
; /* IN: test type */
426 int lstio_tes_oneside
; /* IN: one sided test */
427 int lstio_tes_loop
; /* IN: loop count */
428 int lstio_tes_concur
; /* IN: concurrency */
430 int lstio_tes_dist
; /* IN: node distribution in destination groups */
431 int lstio_tes_span
; /* IN: node span in destination groups */
432 int lstio_tes_sgrp_nmlen
; /* IN: source group name length */
433 char *lstio_tes_sgrp_name
; /* IN: group name */
434 int lstio_tes_dgrp_nmlen
; /* IN: destination group name length */
435 char *lstio_tes_dgrp_name
; /* IN: group name */
437 int lstio_tes_param_len
; /* IN: param buffer len */
438 void *lstio_tes_param
; /* IN: parameter for specified test:
442 int *lstio_tes_retp
; /* OUT: private returned value */
443 struct list_head
*lstio_tes_resultp
; /* OUT: list head of result buffer */
452 LST_BRW_CHECK_NONE
= 1,
453 LST_BRW_CHECK_SIMPLE
= 2,
454 LST_BRW_CHECK_FULL
= 3
458 int blk_opc
; /* bulk operation code */
459 int blk_size
; /* size (bytes) */
460 int blk_time
; /* time of running the test*/
461 int blk_flags
; /* reserved flags */
462 } lst_test_bulk_param_t
;
465 int png_size
; /* size of ping message */
466 int png_time
; /* time */
467 int png_loop
; /* loop */
468 int png_flags
; /* reserved flags */
469 } lst_test_ping_param_t
;
480 } WIRE_ATTR srpc_counters_t
;
483 /** milliseconds since current session started */
485 __u32 active_batches
;
486 __u32 zombie_sessions
;
489 } WIRE_ATTR sfw_counters_t
;