linux/drivers/staging/lustre/include/linux/lnet/lnetst.h
<<
>>
Prefs
   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
  71typedef struct {
  72        lnet_nid_t      ses_nid;        /* nid of console node */
  73        __u64           ses_stamp;      /* time stamp */
  74} lst_sid_t;                            /*** session id */
  75
  76extern lst_sid_t LST_INVALID_SID;
  77
  78typedef 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
  88typedef 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
  93typedef 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
 101typedef 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
 108typedef 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
 115typedef 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
 127typedef 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
 140typedef 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
 151static inline int
 152lstcon_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
 157static inline int
 158lstcon_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
 163static inline int
 164lstcon_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
 169static inline int
 170lstcon_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
 175static inline int
 176lstcon_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
 181static inline int
 182lstcon_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
 187static inline int
 188lstcon_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
 193static inline int
 194lstcon_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
 199static inline int
 200lstcon_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
 205static inline int
 206lstcon_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
 211static inline int
 212lstcon_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
 217static inline int
 218lstcon_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
 223static inline int
 224lstcon_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
 229static inline int
 230lstcon_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
 235static inline int
 236lstcon_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 */
 242typedef 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 __user *lstio_ses_idp;        /* OUT: session id */
 249        int              lstio_ses_nmlen;       /* IN: name length */
 250        char __user      *lstio_ses_namep;      /* IN: session name */
 251} lstio_session_new_args_t;
 252
 253/* query current session */
 254typedef struct {
 255        lst_sid_t __user        *lstio_ses_idp;         /* OUT: session id */
 256        int __user              *lstio_ses_keyp;        /* OUT: local key */
 257        /** OUT: session features */
 258        unsigned __user         *lstio_ses_featp;
 259        lstcon_ndlist_ent_t __user *lstio_ses_ndinfo;   /* OUT: */
 260        int                      lstio_ses_nmlen;       /* IN: name length */
 261        char __user             *lstio_ses_namep;       /* OUT: session name */
 262} lstio_session_info_args_t;
 263
 264/* delete a session */
 265typedef 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
 275typedef 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 __user             *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 __user *lstio_dbg_idsp;       /* IN: id of test
 291                                                               nodes */
 292        struct list_head __user *lstio_dbg_resultp;     /* OUT: list head of
 293                                                                result buffer */
 294} lstio_debug_args_t;
 295
 296typedef struct {
 297        int              lstio_grp_key;         /* IN: session key */
 298        int              lstio_grp_nmlen;       /* IN: name length */
 299        char __user     *lstio_grp_namep;       /* IN: group name */
 300} lstio_group_add_args_t;
 301
 302typedef struct {
 303        int              lstio_grp_key;         /* IN: session key */
 304        int              lstio_grp_nmlen;       /* IN: name length */
 305        char __user     *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
 313typedef 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 __user             *lstio_grp_namep;       /* IN: group name */
 319        int                      lstio_grp_count;       /* IN: # of nodes id */
 320        lnet_process_id_t __user *lstio_grp_idsp;       /* IN: array of nodes */
 321        struct list_head __user *lstio_grp_resultp;     /* OUT: list head of
 322                                                                result buffer */
 323} lstio_group_update_args_t;
 324
 325typedef struct {
 326        int                      lstio_grp_key;         /* IN: session key */
 327        int                      lstio_grp_nmlen;       /* IN: name length */
 328        char __user             *lstio_grp_namep;       /* IN: group name */
 329        int                      lstio_grp_count;       /* IN: # of nodes */
 330        /** OUT: session features */
 331        unsigned __user         *lstio_grp_featp;
 332        lnet_process_id_t __user *lstio_grp_idsp;       /* IN: nodes */
 333        struct list_head __user *lstio_grp_resultp;     /* OUT: list head of
 334                                                                result buffer */
 335} lstio_group_nodes_args_t;
 336
 337typedef 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 __user *lstio_grp_namep;   /* OUT: name */
 342} lstio_group_list_args_t;
 343
 344typedef struct {
 345        int                      lstio_grp_key;         /* IN: session key */
 346        int                      lstio_grp_nmlen;       /* IN: name len */
 347        char __user             *lstio_grp_namep;       /* IN: name */
 348        lstcon_ndlist_ent_t __user *lstio_grp_entp;     /* OUT: description of
 349                                                                group */
 350        int __user              *lstio_grp_idxp;        /* IN/OUT: node index */
 351        int __user              *lstio_grp_ndentp;      /* IN/OUT: # of nodent */
 352        lstcon_node_ent_t __user *lstio_grp_dentsp;     /* OUT: nodent array */
 353} lstio_group_info_args_t;
 354
 355#define LST_DEFAULT_BATCH       "batch"                 /* default batch name */
 356
 357typedef struct {
 358        int      lstio_bat_key;         /* IN: session key */
 359        int      lstio_bat_nmlen;       /* IN: name length */
 360        char __user *lstio_bat_namep;   /* IN: batch name */
 361} lstio_batch_add_args_t;
 362
 363typedef struct {
 364        int      lstio_bat_key;         /* IN: session key */
 365        int      lstio_bat_nmlen;       /* IN: name length */
 366        char __user *lstio_bat_namep;   /* IN: batch name */
 367} lstio_batch_del_args_t;
 368
 369typedef 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 __user             *lstio_bat_namep;       /* IN: batch name */
 375        struct list_head __user *lstio_bat_resultp;     /* OUT: list head of
 376                                                                result buffer */
 377} lstio_batch_run_args_t;
 378
 379typedef 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 __user             *lstio_bat_namep;       /* IN: batch name */
 385        struct list_head __user *lstio_bat_resultp;     /* OUT: list head of
 386                                                                result buffer */
 387} lstio_batch_stop_args_t;
 388
 389typedef 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 __user             *lstio_bat_namep;       /* IN: batch name */
 398        struct list_head __user *lstio_bat_resultp;     /* OUT: list head of
 399                                                                result buffer */
 400} lstio_batch_query_args_t;
 401
 402typedef 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 __user *lstio_bat_namep;   /* IN: batch name */
 407} lstio_batch_list_args_t;
 408
 409typedef struct {
 410        int                      lstio_bat_key;         /* IN: session key */
 411        int                      lstio_bat_nmlen;       /* IN: name length */
 412        char __user             *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 __user *lstio_bat_entp; /* OUT: batch ent */
 417
 418        int __user              *lstio_bat_idxp;        /* IN/OUT: index of node */
 419        int __user              *lstio_bat_ndentp;      /* IN/OUT: # of nodent */
 420        lstcon_node_ent_t __user *lstio_bat_dentsp;     /* array of nodent */
 421} lstio_batch_info_args_t;
 422
 423/* add stat in session */
 424typedef 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 __user             *lstio_sta_namep;       /* IN: group name */
 431        int                      lstio_sta_count;       /* IN: # of pid */
 432        lnet_process_id_t __user *lstio_sta_idsp;       /* IN: pid */
 433        struct list_head __user *lstio_sta_resultp;     /* OUT: list head of
 434                                                                result buffer */
 435} lstio_stat_args_t;
 436
 437typedef 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
 445typedef struct {
 446        int               lstio_tes_key;        /* IN: session key */
 447        int               lstio_tes_bat_nmlen;  /* IN: batch name len */
 448        char __user      *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 __user      *lstio_tes_sgrp_name;  /* IN: group name */
 461        int               lstio_tes_dgrp_nmlen; /* IN: destination group
 462                                                       name length */
 463        char __user      *lstio_tes_dgrp_name;  /* IN: group name */
 464
 465        int               lstio_tes_param_len;  /* IN: param buffer len */
 466        void __user      *lstio_tes_param;      /* IN: parameter for specified
 467                                                       test:
 468                                                       lstio_bulk_param_t,
 469                                                       lstio_ping_param_t,
 470                                                       ... more */
 471        int __user       *lstio_tes_retp;       /* OUT: private returned
 472                                                        value */
 473        struct list_head __user *lstio_tes_resultp;/* OUT: list head of
 474                                                        result buffer */
 475} lstio_test_args_t;
 476
 477typedef enum {
 478        LST_BRW_READ    = 1,
 479        LST_BRW_WRITE   = 2
 480} lst_brw_type_t;
 481
 482typedef 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
 488typedef 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
 495typedef 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
 502typedef 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
 512typedef 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
 522