These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / lustre / include / linux / lnet / lnetst.h
1 /*
2  * GPL HEADER START
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
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.
9  *
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).
15  *
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
19  *
20  * GPL HEADER END
21  */
22 /*
23  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24  * Use is subject to license terms.
25  *
26  * Copyright (c) 2011 - 2015, Intel Corporation.
27  */
28 /*
29  * This file is part of Lustre, http://www.lustre.org/
30  * Lustre is a trademark of Seagate, Inc.
31  *
32  * lnet/include/lnet/lnetst.h
33  *
34  * Author: Liang Zhen <liang.zhen@intel.com>
35  */
36
37 #ifndef __LNET_ST_H__
38 #define __LNET_ST_H__
39
40 #include <linux/types.h>
41
42 #define LST_FEAT_NONE           (0)
43 #define LST_FEAT_BULK_LEN       (1 << 0)        /* enable variable page size */
44
45 #define LST_FEATS_EMPTY         (LST_FEAT_NONE)
46 #define LST_FEATS_MASK          (LST_FEAT_NONE | LST_FEAT_BULK_LEN)
47
48 #define LST_NAME_SIZE           32      /* max name buffer length */
49
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
57                                          * specified group */
58 #define LSTIO_GROUP_DEL         0xC13   /* delete group */
59 #define LSTIO_NODES_ADD         0xC14   /* add nodes to specified group */
60 #define LSTIO_GROUP_UPDATE      0xC15   /* update group */
61 #define LSTIO_BATCH_ADD         0xC20   /* add batch */
62 #define LSTIO_BATCH_START       0xC21   /* start batch */
63 #define LSTIO_BATCH_STOP        0xC22   /* stop batch */
64 #define LSTIO_BATCH_DEL         0xC23   /* delete batch */
65 #define LSTIO_BATCH_LIST        0xC24   /* show all batches in the session */
66 #define LSTIO_BATCH_INFO        0xC25   /* show defail of specified batch */
67 #define LSTIO_TEST_ADD          0xC26   /* add test (to batch) */
68 #define LSTIO_BATCH_QUERY       0xC27   /* query batch status */
69 #define LSTIO_STAT_QUERY        0xC30   /* get stats */
70
71 typedef struct {
72         lnet_nid_t      ses_nid;        /* nid of console node */
73         __u64           ses_stamp;      /* time stamp */
74 } lst_sid_t;                            /*** session id */
75
76 extern lst_sid_t LST_INVALID_SID;
77
78 typedef struct {
79         __u64   bat_id;         /* unique id in session */
80 } lst_bid_t;                    /*** batch id (group of tests) */
81
82 /* Status of test node */
83 #define LST_NODE_ACTIVE         0x1     /* node in this session */
84 #define LST_NODE_BUSY           0x2     /* node is taken by other session */
85 #define LST_NODE_DOWN           0x4     /* node is down */
86 #define LST_NODE_UNKNOWN        0x8     /* node not in session */
87
88 typedef struct {
89         lnet_process_id_t       nde_id;         /* id of node */
90         int                     nde_state;      /* state of node */
91 } lstcon_node_ent_t;            /*** node entry, for list_group command */
92
93 typedef struct {
94         int     nle_nnode;      /* # of nodes */
95         int     nle_nactive;    /* # of active nodes */
96         int     nle_nbusy;      /* # of busy nodes */
97         int     nle_ndown;      /* # of down nodes */
98         int     nle_nunknown;   /* # of unknown nodes */
99 } lstcon_ndlist_ent_t;          /*** node_list entry, for list_batch command */
100
101 typedef struct {
102         int     tse_type;       /* test type */
103         int     tse_loop;       /* loop count */
104         int     tse_concur;     /* concurrency of test */
105 } lstcon_test_ent_t;            /*** test summary entry, for
106                                  *** list_batch command */
107
108 typedef struct {
109         int     bae_state;      /* batch status */
110         int     bae_timeout;    /* batch timeout */
111         int     bae_ntest;      /* # of tests in the batch */
112 } lstcon_batch_ent_t;           /*** batch summary entry, for
113                                  *** list_batch command */
114
115 typedef struct {
116         lstcon_ndlist_ent_t     tbe_cli_nle;    /* client (group) node_list
117                                                  * entry */
118         lstcon_ndlist_ent_t     tbe_srv_nle;    /* server (group) node_list
119                                                  * entry */
120         union {
121                 lstcon_test_ent_t  tbe_test;    /* test entry */
122                 lstcon_batch_ent_t tbe_batch;   /* batch entry */
123         } u;
124 } lstcon_test_batch_ent_t;      /*** test/batch verbose information entry,
125                                  *** for list_batch command */
126
127 typedef struct {
128         struct list_head        rpe_link;       /* link chain */
129         lnet_process_id_t       rpe_peer;       /* peer's id */
130         struct timeval          rpe_stamp;      /* time stamp of RPC */
131         int                     rpe_state;      /* peer's state */
132         int                     rpe_rpc_errno;  /* RPC errno */
133
134         lst_sid_t               rpe_sid;        /* peer's session id */
135         int                     rpe_fwk_errno;  /* framework errno */
136         int                     rpe_priv[4];    /* private data */
137         char                    rpe_payload[0]; /* private reply payload */
138 } lstcon_rpc_ent_t;
139
140 typedef struct {
141         int     trs_rpc_stat[4];        /* RPCs stat (0: total
142                                                       1: failed
143                                                       2: finished
144                                                       4: reserved */
145         int     trs_rpc_errno;          /* RPC errno */
146         int     trs_fwk_stat[8];        /* framework stat */
147         int     trs_fwk_errno;          /* errno of the first remote error */
148         void    *trs_fwk_private;       /* private framework stat */
149 } lstcon_trans_stat_t;
150
151 static inline int
152 lstcon_rpc_stat_total(lstcon_trans_stat_t *stat, int inc)
153 {
154         return inc ? ++stat->trs_rpc_stat[0] : stat->trs_rpc_stat[0];
155 }
156
157 static inline int
158 lstcon_rpc_stat_success(lstcon_trans_stat_t *stat, int inc)
159 {
160         return inc ? ++stat->trs_rpc_stat[1] : stat->trs_rpc_stat[1];
161 }
162
163 static inline int
164 lstcon_rpc_stat_failure(lstcon_trans_stat_t *stat, int inc)
165 {
166         return inc ? ++stat->trs_rpc_stat[2] : stat->trs_rpc_stat[2];
167 }
168
169 static inline int
170 lstcon_sesop_stat_success(lstcon_trans_stat_t *stat, int inc)
171 {
172         return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
173 }
174
175 static inline int
176 lstcon_sesop_stat_failure(lstcon_trans_stat_t *stat, int inc)
177 {
178         return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
179 }
180
181 static inline int
182 lstcon_sesqry_stat_active(lstcon_trans_stat_t *stat, int inc)
183 {
184         return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
185 }
186
187 static inline int
188 lstcon_sesqry_stat_busy(lstcon_trans_stat_t *stat, int inc)
189 {
190         return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
191 }
192
193 static inline int
194 lstcon_sesqry_stat_unknown(lstcon_trans_stat_t *stat, int inc)
195 {
196         return inc ? ++stat->trs_fwk_stat[2] : stat->trs_fwk_stat[2];
197 }
198
199 static inline int
200 lstcon_tsbop_stat_success(lstcon_trans_stat_t *stat, int inc)
201 {
202         return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
203 }
204
205 static inline int
206 lstcon_tsbop_stat_failure(lstcon_trans_stat_t *stat, int inc)
207 {
208         return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
209 }
210
211 static inline int
212 lstcon_tsbqry_stat_idle(lstcon_trans_stat_t *stat, int inc)
213 {
214         return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
215 }
216
217 static inline int
218 lstcon_tsbqry_stat_run(lstcon_trans_stat_t *stat, int inc)
219 {
220         return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
221 }
222
223 static inline int
224 lstcon_tsbqry_stat_failure(lstcon_trans_stat_t *stat, int inc)
225 {
226         return inc ? ++stat->trs_fwk_stat[2] : stat->trs_fwk_stat[2];
227 }
228
229 static inline int
230 lstcon_statqry_stat_success(lstcon_trans_stat_t *stat, int inc)
231 {
232         return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
233 }
234
235 static inline int
236 lstcon_statqry_stat_failure(lstcon_trans_stat_t *stat, int inc)
237 {
238         return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
239 }
240
241 /* create a session */
242 typedef struct {
243         int              lstio_ses_key;         /* IN: local key */
244         int              lstio_ses_timeout;     /* IN: session timeout */
245         int              lstio_ses_force;       /* IN: force create ? */
246         /** IN: session features */
247         unsigned         lstio_ses_feats;
248         lst_sid_t       *lstio_ses_idp;         /* OUT: session id */
249         int              lstio_ses_nmlen;       /* IN: name length */
250         char            *lstio_ses_namep;       /* IN: session name */
251 } lstio_session_new_args_t;
252
253 /* query current session */
254 typedef struct {
255         lst_sid_t               *lstio_ses_idp;         /* OUT: session id */
256         int                     *lstio_ses_keyp;        /* OUT: local key */
257         /** OUT: session features */
258         unsigned                *lstio_ses_featp;
259         lstcon_ndlist_ent_t     *lstio_ses_ndinfo;      /* OUT: */
260         int                      lstio_ses_nmlen;       /* IN: name length */
261         char                    *lstio_ses_namep;       /* OUT: session name */
262 } lstio_session_info_args_t;
263
264 /* delete a session */
265 typedef struct {
266         int                     lstio_ses_key;  /* IN: session key */
267 } lstio_session_end_args_t;
268
269 #define LST_OPC_SESSION         1
270 #define LST_OPC_GROUP           2
271 #define LST_OPC_NODES           3
272 #define LST_OPC_BATCHCLI        4
273 #define LST_OPC_BATCHSRV        5
274
275 typedef struct {
276         int                      lstio_dbg_key;         /* IN: session key */
277         int                      lstio_dbg_type;        /* IN: debug
278                                                                 session|batch|
279                                                                 group|nodes
280                                                                 list */
281         int                      lstio_dbg_flags;       /* IN: reserved debug
282                                                                flags */
283         int                      lstio_dbg_timeout;     /* IN: timeout of
284                                                                debug */
285         int                      lstio_dbg_nmlen;       /* IN: len of name */
286         char                    *lstio_dbg_namep;       /* IN: name of
287                                                                group|batch */
288         int                      lstio_dbg_count;       /* IN: # of test nodes
289                                                                to debug */
290         lnet_process_id_t       *lstio_dbg_idsp;        /* IN: id of test
291                                                                nodes */
292         struct list_head        *lstio_dbg_resultp;     /* OUT: list head of
293                                                                 result buffer */
294 } lstio_debug_args_t;
295
296 typedef struct {
297         int      lstio_grp_key;         /* IN: session key */
298         int      lstio_grp_nmlen;       /* IN: name length */
299         char    *lstio_grp_namep;       /* IN: group name */
300 } lstio_group_add_args_t;
301
302 typedef struct {
303         int      lstio_grp_key;         /* IN: session key */
304         int      lstio_grp_nmlen;       /* IN: name length */
305         char    *lstio_grp_namep;       /* IN: group name */
306 } lstio_group_del_args_t;
307
308 #define LST_GROUP_CLEAN         1       /* remove inactive nodes in the group */
309 #define LST_GROUP_REFRESH       2       /* refresh inactive nodes
310                                          * in the group */
311 #define LST_GROUP_RMND          3       /* delete nodes from the group */
312
313 typedef struct {
314         int                      lstio_grp_key;         /* IN: session key */
315         int                      lstio_grp_opc;         /* IN: OPC */
316         int                      lstio_grp_args;        /* IN: arguments */
317         int                      lstio_grp_nmlen;       /* IN: name length */
318         char                    *lstio_grp_namep;       /* IN: group name */
319         int                      lstio_grp_count;       /* IN: # of nodes id */
320         lnet_process_id_t       *lstio_grp_idsp;        /* IN: array of nodes */
321         struct list_head        *lstio_grp_resultp;     /* OUT: list head of
322                                                                 result buffer */
323 } lstio_group_update_args_t;
324
325 typedef struct {
326         int                      lstio_grp_key;         /* IN: session key */
327         int                      lstio_grp_nmlen;       /* IN: name length */
328         char                    *lstio_grp_namep;       /* IN: group name */
329         int                      lstio_grp_count;       /* IN: # of nodes */
330         /** OUT: session features */
331         unsigned                *lstio_grp_featp;
332         lnet_process_id_t       *lstio_grp_idsp;        /* IN: nodes */
333         struct list_head        *lstio_grp_resultp;     /* OUT: list head of
334                                                                 result buffer */
335 } lstio_group_nodes_args_t;
336
337 typedef struct {
338         int      lstio_grp_key;         /* IN: session key */
339         int      lstio_grp_idx;         /* IN: group idx */
340         int      lstio_grp_nmlen;       /* IN: name len */
341         char    *lstio_grp_namep;       /* OUT: name */
342 } lstio_group_list_args_t;
343
344 typedef struct {
345         int                      lstio_grp_key;         /* IN: session key */
346         int                      lstio_grp_nmlen;       /* IN: name len */
347         char                    *lstio_grp_namep;       /* IN: name */
348         lstcon_ndlist_ent_t     *lstio_grp_entp;        /* OUT: description of
349                                                                 group */
350         int                     *lstio_grp_idxp;        /* IN/OUT: node index */
351         int                     *lstio_grp_ndentp;      /* IN/OUT: # of nodent */
352         lstcon_node_ent_t       *lstio_grp_dentsp;      /* OUT: nodent array */
353 } lstio_group_info_args_t;
354
355 #define LST_DEFAULT_BATCH       "batch"                 /* default batch name */
356
357 typedef struct {
358         int      lstio_bat_key;         /* IN: session key */
359         int      lstio_bat_nmlen;       /* IN: name length */
360         char    *lstio_bat_namep;       /* IN: batch name */
361 } lstio_batch_add_args_t;
362
363 typedef struct {
364         int      lstio_bat_key;         /* IN: session key */
365         int      lstio_bat_nmlen;       /* IN: name length */
366         char    *lstio_bat_namep;       /* IN: batch name */
367 } lstio_batch_del_args_t;
368
369 typedef struct {
370         int                      lstio_bat_key;         /* IN: session key */
371         int                      lstio_bat_timeout;     /* IN: timeout for
372                                                                the batch */
373         int                      lstio_bat_nmlen;       /* IN: name length */
374         char                    *lstio_bat_namep;       /* IN: batch name */
375         struct list_head        *lstio_bat_resultp;     /* OUT: list head of
376                                                                 result buffer */
377 } lstio_batch_run_args_t;
378
379 typedef struct {
380         int                      lstio_bat_key;         /* IN: session key */
381         int                      lstio_bat_force;       /* IN: abort unfinished
382                                                                test RPC */
383         int                      lstio_bat_nmlen;       /* IN: name length */
384         char                    *lstio_bat_namep;       /* IN: batch name */
385         struct list_head        *lstio_bat_resultp;     /* OUT: list head of
386                                                                 result buffer */
387 } lstio_batch_stop_args_t;
388
389 typedef struct {
390         int                      lstio_bat_key;         /* IN: session key */
391         int                      lstio_bat_testidx;     /* IN: test index */
392         int                      lstio_bat_client;      /* IN: we testing
393                                                                client? */
394         int                      lstio_bat_timeout;     /* IN: timeout for
395                                                                waiting */
396         int                      lstio_bat_nmlen;       /* IN: name length */
397         char                    *lstio_bat_namep;       /* IN: batch name */
398         struct list_head        *lstio_bat_resultp;     /* OUT: list head of
399                                                                 result buffer */
400 } lstio_batch_query_args_t;
401
402 typedef struct {
403         int      lstio_bat_key;         /* IN: session key */
404         int      lstio_bat_idx;         /* IN: index */
405         int      lstio_bat_nmlen;       /* IN: name length */
406         char    *lstio_bat_namep;       /* IN: batch name */
407 } lstio_batch_list_args_t;
408
409 typedef struct {
410         int                      lstio_bat_key;         /* IN: session key */
411         int                      lstio_bat_nmlen;       /* IN: name length */
412         char                    *lstio_bat_namep;       /* IN: name */
413         int                      lstio_bat_server;      /* IN: query server
414                                                                or not */
415         int                      lstio_bat_testidx;     /* IN: test index */
416         lstcon_test_batch_ent_t *lstio_bat_entp;        /* OUT: batch ent */
417
418         int                     *lstio_bat_idxp;        /* IN/OUT: index of node */
419         int                     *lstio_bat_ndentp;      /* IN/OUT: # of nodent */
420         lstcon_node_ent_t       *lstio_bat_dentsp;      /* array of nodent */
421 } lstio_batch_info_args_t;
422
423 /* add stat in session */
424 typedef struct {
425         int                      lstio_sta_key;         /* IN: session key */
426         int                      lstio_sta_timeout;     /* IN: timeout for
427                                                                stat request */
428         int                      lstio_sta_nmlen;       /* IN: group name
429                                                                length */
430         char                    *lstio_sta_namep;       /* IN: group name */
431         int                      lstio_sta_count;       /* IN: # of pid */
432         lnet_process_id_t       *lstio_sta_idsp;        /* IN: pid */
433         struct list_head        *lstio_sta_resultp;     /* OUT: list head of
434                                                                 result buffer */
435 } lstio_stat_args_t;
436
437 typedef enum {
438         LST_TEST_BULK   = 1,
439         LST_TEST_PING   = 2
440 } lst_test_type_t;
441
442 /* create a test in a batch */
443 #define LST_MAX_CONCUR  1024    /* Max concurrency of test */
444
445 typedef struct {
446         int               lstio_tes_key;        /* IN: session key */
447         int               lstio_tes_bat_nmlen;  /* IN: batch name len */
448         char             *lstio_tes_bat_name;   /* IN: batch name */
449         int               lstio_tes_type;       /* IN: test type */
450         int               lstio_tes_oneside;    /* IN: one sided test */
451         int               lstio_tes_loop;       /* IN: loop count */
452         int               lstio_tes_concur;     /* IN: concurrency */
453
454         int               lstio_tes_dist;       /* IN: node distribution in
455                                                        destination groups */
456         int               lstio_tes_span;       /* IN: node span in
457                                                        destination groups */
458         int               lstio_tes_sgrp_nmlen; /* IN: source group
459                                                        name length */
460         char             *lstio_tes_sgrp_name;  /* IN: group name */
461         int               lstio_tes_dgrp_nmlen; /* IN: destination group
462                                                        name length */
463         char             *lstio_tes_dgrp_name;  /* IN: group name */
464
465         int               lstio_tes_param_len;  /* IN: param buffer len */
466         void             *lstio_tes_param;      /* IN: parameter for specified
467                                                        test:
468                                                        lstio_bulk_param_t,
469                                                        lstio_ping_param_t,
470                                                        ... more */
471         int              *lstio_tes_retp;       /* OUT: private returned
472                                                         value */
473         struct list_head *lstio_tes_resultp;    /* OUT: list head of
474                                                         result buffer */
475 } lstio_test_args_t;
476
477 typedef enum {
478         LST_BRW_READ    = 1,
479         LST_BRW_WRITE   = 2
480 } lst_brw_type_t;
481
482 typedef enum {
483         LST_BRW_CHECK_NONE      = 1,
484         LST_BRW_CHECK_SIMPLE    = 2,
485         LST_BRW_CHECK_FULL      = 3
486 } lst_brw_flags_t;
487
488 typedef struct {
489         int     blk_opc;        /* bulk operation code */
490         int     blk_size;       /* size (bytes) */
491         int     blk_time;       /* time of running the test*/
492         int     blk_flags;      /* reserved flags */
493 } lst_test_bulk_param_t;
494
495 typedef struct {
496         int     png_size;       /* size of ping message */
497         int     png_time;       /* time */
498         int     png_loop;       /* loop */
499         int     png_flags;      /* reserved flags */
500 } lst_test_ping_param_t;
501
502 typedef struct {
503         __u32 errors;
504         __u32 rpcs_sent;
505         __u32 rpcs_rcvd;
506         __u32 rpcs_dropped;
507         __u32 rpcs_expired;
508         __u64 bulk_get;
509         __u64 bulk_put;
510 } WIRE_ATTR srpc_counters_t;
511
512 typedef struct {
513         /** milliseconds since current session started */
514         __u32 running_ms;
515         __u32 active_batches;
516         __u32 zombie_sessions;
517         __u32 brw_errors;
518         __u32 ping_errors;
519 } WIRE_ATTR sfw_counters_t;
520
521 #endif