Whamcloud - gitweb
LU-6034 lnet: add default case for check summing
[fs/lustre-release.git] / lnet / include / lnet / lnetst.h
index ea5cd49..62ff200 100644 (file)
@@ -1,18 +1,55 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
+/*
+ * GPL HEADER START
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ * GPL HEADER END
+ */
+/*
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * Copyright (c) 2012, 2014, Intel Corporation.
+ */
+/*
+ * This file is part of Lustre, http://www.lustre.org/
+ * Lustre is a trademark of Sun Microsystems, Inc.
+ *
+ * lnet/include/lnet/lnetst.h
  *
  * Author: Liang Zhen <liangzhen@clusterfs.com>
- * 
- * This file is part of Lustre, http://www.lustre.org
  */
 
 #ifndef __LNET_ST_H__
 #define __LNET_ST_H__
 
-#include <libcfs/kp30.h>
-#include <lnet/lnet.h>
+#include <libcfs/libcfs.h>
 #include <lnet/lib-types.h>
 
+#define LST_FEAT_NONE          (0)
+#define LST_FEAT_BULK_LEN      (1 << 0)        /* enable variable page size */
+
+#define LST_FEATS_EMPTY                (LST_FEAT_NONE)
+#define LST_FEATS_MASK         (LST_FEAT_NONE | LST_FEAT_BULK_LEN)
+
 #define LST_NAME_SIZE           32              /* max name buffer length */
 
 #define LSTIO_DEBUG             0xC00           /* debug */
@@ -40,8 +77,7 @@ typedef struct {
         __u64                   ses_stamp;              /* time stamp */
 } lst_sid_t;                                            /*** session id */
 
-#define LST_INVALID_SID         ((const lst_sid_t){.ses_nid   = LNET_NID_ANY,\
-                                                   .ses_stamp = -1})
+extern lst_sid_t LST_INVALID_SID;
 
 typedef struct {
         __u64                   bat_id;                 /* unique id in session */
@@ -89,11 +125,11 @@ typedef struct {
                                                          *** for list_batch command */
 
 typedef struct {
-        struct list_head        rpe_link;               /* link chain */
-        lnet_process_id_t       rpe_peer;               /* peer's id */
-        struct timeval          rpe_stamp;              /* time stamp of RPC */
-        int                     rpe_state;              /* peer's state */
-        int                     rpe_rpc_errno;          /* RPC errno */
+       struct list_head        rpe_link;               /* link chain */
+       lnet_process_id_t       rpe_peer;               /* peer's id */
+       struct timeval          rpe_stamp;              /* time stamp of RPC */
+       int                     rpe_state;              /* peer's state */
+       int                     rpe_rpc_errno;          /* RPC errno */
 
         lst_sid_t               rpe_sid;                /* peer's session id */
         int                     rpe_fwk_errno;          /* framework errno */
@@ -204,18 +240,22 @@ typedef struct {
         int                     lstio_ses_key;          /* IN: local key */
         int                     lstio_ses_timeout;      /* IN: session timeout */
         int                     lstio_ses_force;        /* IN: force create ? */
-        lst_sid_t              *lstio_ses_idp;          /* OUT: session id */
+       /** IN: session features */
+       unsigned                lstio_ses_feats;
+       lst_sid_t __user       *lstio_ses_idp;          /* OUT: session id */
         int                     lstio_ses_nmlen;        /* IN: name length */
-        char                   *lstio_ses_namep;        /* IN: session name */
+       char __user            *lstio_ses_namep;        /* IN: session name */
 } lstio_session_new_args_t;
 
 /* query current session */
 typedef struct {
-        lst_sid_t              *lstio_ses_idp;          /* OUT: session id */
-        int                    *lstio_ses_keyp;         /* OUT: local key */
-        lstcon_ndlist_ent_t    *lstio_ses_ndinfo;       /* OUT: */
-        int                     lstio_ses_nmlen;        /* IN: name length */
-        char                   *lstio_ses_namep;        /* OUT: session name */
+       lst_sid_t __user       *lstio_ses_idp;          /* OUT: session id */
+       int __user             *lstio_ses_keyp;         /* OUT: local key */
+       /** OUT: session features */
+       unsigned __user        *lstio_ses_featp;
+       lstcon_ndlist_ent_t __user *lstio_ses_ndinfo;   /* OUT: */
+       int                     lstio_ses_nmlen;        /* IN: name length */
+       char __user            *lstio_ses_namep;        /* OUT: session name */
 } lstio_session_info_args_t;
 
 /* delete a session */
@@ -236,22 +276,23 @@ typedef struct {
         int                     lstio_dbg_timeout;      /* IN: timeout of debug */
 
         int                     lstio_dbg_nmlen;        /* IN: len of name */
-        char                   *lstio_dbg_namep;        /* IN: name of group|batch */
+       char __user            *lstio_dbg_namep;        /* IN: name of group|batch */
         int                     lstio_dbg_count;        /* IN: # of test nodes to debug */
-        lnet_process_id_t      *lstio_dbg_idsp;         /* IN: id of test nodes */
-        struct list_head       *lstio_dbg_resultp;      /* OUT: list head of result buffer */
+       lnet_process_id_t __user *lstio_dbg_idsp;       /* IN: id of test nodes */
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_dbg_resultp;
 } lstio_debug_args_t;
 
 typedef struct {
         int                     lstio_grp_key;          /* IN: session key */
         int                     lstio_grp_nmlen;        /* IN: name length */
-        char                   *lstio_grp_namep;        /* IN: group name */
+       char __user            *lstio_grp_namep;        /* IN: group name */
 } lstio_group_add_args_t;
 
 typedef struct {
         int                     lstio_grp_key;          /* IN: session key */
         int                     lstio_grp_nmlen;        /* IN: name length */
-        char                   *lstio_grp_namep;        /* IN: group name */
+       char __user            *lstio_grp_namep;        /* IN: group name */
 } lstio_group_del_args_t;
 
 #define LST_GROUP_CLEAN         1                       /* remove inactive nodes in the group */
@@ -259,41 +300,45 @@ typedef struct {
 #define LST_GROUP_RMND          3                       /* delete nodes from the group */
 
 typedef struct {
-        int                     lstio_grp_key;          /* IN: session key */
-        int                     lstio_grp_opc;          /* IN: OPC */
-        int                     lstio_grp_args;         /* IN: arguments */
-        int                     lstio_grp_nmlen;        /* IN: name length */
-        char                   *lstio_grp_namep;        /* IN: group name */
-        int                     lstio_grp_count;        /* IN: # of nodes id */
-        lnet_process_id_t      *lstio_grp_idsp;         /* IN: array of nodes */
-        struct list_head       *lstio_grp_resultp;      /* OUT: list head of result buffer */
+       int                     lstio_grp_key;          /* IN: session key */
+       int                     lstio_grp_opc;          /* IN: OPC */
+       int                     lstio_grp_args;         /* IN: arguments */
+       int                     lstio_grp_nmlen;        /* IN: name length */
+       char __user            *lstio_grp_namep;        /* IN: group name */
+       int                     lstio_grp_count;        /* IN: # of nodes id */
+       lnet_process_id_t __user *lstio_grp_idsp;       /* IN: array of nodes */
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_grp_resultp;
 } lstio_group_update_args_t;
 
 typedef struct {
-        int                     lstio_grp_key;          /* IN: session key */
-        int                     lstio_grp_nmlen;        /* IN: name length */
-        char                   *lstio_grp_namep;        /* IN: group name */
-        int                     lstio_grp_count;        /* IN: # of nodes */
-        lnet_process_id_t      *lstio_grp_idsp;         /* IN: nodes */
-        struct list_head       *lstio_grp_resultp;      /* OUT: list head of result buffer */
+       int                      lstio_grp_key;         /* IN: session key */
+       int                      lstio_grp_nmlen;       /* IN: name length */
+       char __user             *lstio_grp_namep;       /* IN: group name */
+       int                      lstio_grp_count;       /* IN: # of nodes */
+       /** OUT: session features */
+       unsigned __user         *lstio_grp_featp;
+       lnet_process_id_t __user *lstio_grp_idsp;       /* IN: nodes */
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_grp_resultp;
 } lstio_group_nodes_args_t;
 
 typedef struct {
         int                     lstio_grp_key;          /* IN: session key */
         int                     lstio_grp_idx;          /* IN: group idx */
         int                     lstio_grp_nmlen;        /* IN: name len */
-        char                   *lstio_grp_namep;        /* OUT: name */
+       char __user            *lstio_grp_namep;        /* OUT: name */
 } lstio_group_list_args_t;
 
 typedef struct {
         int                     lstio_grp_key;          /* IN: session key */
         int                     lstio_grp_nmlen;        /* IN: name len */
-        char                   *lstio_grp_namep;        /* IN: name */
-        lstcon_ndlist_ent_t    *lstio_grp_entp;         /* OUT: description of group */
+       char __user            *lstio_grp_namep;        /* IN: name */
+       lstcon_ndlist_ent_t __user *lstio_grp_entp;         /* OUT: description of group */
 
-        int                    *lstio_grp_idxp;         /* IN/OUT: node index */
-        int                    *lstio_grp_ndentp;       /* IN/OUT: # of nodent */
-        lstcon_node_ent_t      *lstio_grp_dentsp;       /* OUT: nodent array */
+       int __user             *lstio_grp_idxp;         /* IN/OUT: node index */
+       int __user             *lstio_grp_ndentp;       /* IN/OUT: # of nodent */
+       lstcon_node_ent_t __user *lstio_grp_dentsp;     /* OUT: nodent array */
 } lstio_group_info_args_t;
 
 #define LST_DEFAULT_BATCH       "batch"                 /* default batch name */
@@ -301,70 +346,94 @@ typedef struct {
 typedef struct {
         int                     lstio_bat_key;          /* IN: session key */
         int                     lstio_bat_nmlen;        /* IN: name length */
-        char                   *lstio_bat_namep;        /* IN: batch name */
+       char __user            *lstio_bat_namep;        /* IN: batch name */
 } lstio_batch_add_args_t;
 
 typedef struct {
         int                     lstio_bat_key;          /* IN: session key */
         int                     lstio_bat_nmlen;        /* IN: name length */
-        char                   *lstio_bat_namep;        /* IN: batch name */
+       char __user            *lstio_bat_namep;        /* IN: batch name */
 } lstio_batch_del_args_t;
 
 typedef struct {
-        int                     lstio_bat_key;          /* IN: session key */
-        int                     lstio_bat_timeout;      /* IN: timeout for the batch */
-        int                     lstio_bat_nmlen;        /* IN: name length */
-        char                   *lstio_bat_namep;        /* IN: batch name */
-        struct list_head       *lstio_bat_resultp;      /* OUT: list head of result buffer */
+       /* IN: session key */
+       int                      lstio_bat_key;
+       /* IN: timeout for the batch */
+       int                      lstio_bat_timeout;
+       /* IN: name length */
+       int                      lstio_bat_nmlen;
+       /* IN: batch name */
+       char __user             *lstio_bat_namep;
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_bat_resultp;
 } lstio_batch_run_args_t;
 
 typedef struct {
-        int                     lstio_bat_key;          /* IN: session key */
-        int                     lstio_bat_force;        /* IN: abort unfinished test RPC */
-        int                     lstio_bat_nmlen;        /* IN: name length */
-        char                   *lstio_bat_namep;        /* IN: batch name */
-        struct list_head       *lstio_bat_resultp;      /* OUT: list head of result buffer */
+       /* IN: session key */
+       int                      lstio_bat_key;
+       /* IN: abort unfinished test RPC */
+       int                      lstio_bat_force;
+       /* IN: name length */
+       int                      lstio_bat_nmlen;
+       /* IN: batch name */
+       char __user             *lstio_bat_namep;
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_bat_resultp;
 } lstio_batch_stop_args_t;
 
 typedef struct {
-        int                     lstio_bat_key;          /* IN: session key */
-        int                     lstio_bat_testidx;      /* IN: test index */
-        int                     lstio_bat_client;       /* IN: is test client? */
-        int                     lstio_bat_timeout;      /* IN: timeout for waiting */
-        int                     lstio_bat_nmlen;        /* IN: name length */
-        char                   *lstio_bat_namep;        /* IN: batch name */
-        struct list_head       *lstio_bat_resultp;      /* OUT: list head of result buffer */
+       /* IN: session key */
+       int                     lstio_bat_key;
+       /* IN: test index */
+       int                     lstio_bat_testidx;
+       /* IN: is test client? */
+       int                     lstio_bat_client;
+       /* IN: timeout for waiting */
+       int                     lstio_bat_timeout;
+       /* IN: name length */
+       int                     lstio_bat_nmlen;
+       /* IN: batch name */
+       char __user             *lstio_bat_namep;
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_bat_resultp;
 } lstio_batch_query_args_t;
 
 typedef struct {
         int                     lstio_bat_key;          /* IN: session key */
         int                     lstio_bat_idx;          /* IN: index */
         int                     lstio_bat_nmlen;        /* IN: name length */
-        char                   *lstio_bat_namep;        /* IN: batch name */
+       char __user            *lstio_bat_namep;        /* IN: batch name */
 } lstio_batch_list_args_t;
 
 typedef struct {
         int                     lstio_bat_key;          /* IN: session key */
         int                     lstio_bat_nmlen;        /* IN: name length */
-        char                   *lstio_bat_namep;        /* IN: name */
+       char __user            *lstio_bat_namep;        /* IN: name */
         int                     lstio_bat_server;       /* IN: query server or not */
         int                     lstio_bat_testidx;      /* IN: test index */
-        lstcon_test_batch_ent_t *lstio_bat_entp;        /* OUT: batch ent */
+       lstcon_test_batch_ent_t __user *lstio_bat_entp; /* OUT: batch ent */
 
-        int                    *lstio_bat_idxp;         /* IN/OUT: index of node */
-        int                    *lstio_bat_ndentp;       /* IN/OUT: # of nodent */
-        lstcon_node_ent_t      *lstio_bat_dentsp;       /* array of nodent */
+       int __user             *lstio_bat_idxp;         /* IN/OUT: index of node */
+       int __user             *lstio_bat_ndentp;       /* IN/OUT: # of nodent */
+       lstcon_node_ent_t __user *lstio_bat_dentsp;     /* array of nodent */
 } lstio_batch_info_args_t;
 
 /* add stat in session */
 typedef struct {
-        int                     lstio_sta_key;          /* IN: session key */
-        int                     lstio_sta_timeout;      /* IN: timeout for stat requst */
-        int                     lstio_sta_nmlen;        /* IN: group name length */
-        char                   *lstio_sta_namep;        /* IN: group name */
-        int                     lstio_sta_count;        /* IN: # of pid */
-        lnet_process_id_t      *lstio_sta_idsp;         /* IN: pid */
-        struct list_head       *lstio_sta_resultp;      /* OUT: list head of result buffer */
+       /* IN: session key */
+       int                     lstio_sta_key;
+       /* IN: timeout for stat requst */
+       int                     lstio_sta_timeout;
+       /* IN: group name length */
+       int                     lstio_sta_nmlen;
+       /* IN: group name */
+       char __user            *lstio_sta_namep;
+       /* IN: # of pid */
+       int                     lstio_sta_count;
+       /* IN: pid */
+       lnet_process_id_t __user *lstio_sta_idsp;
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_sta_resultp;
 } lstio_stat_args_t;
 
 typedef enum {
@@ -378,7 +447,7 @@ typedef enum {
 typedef struct {
         int                     lstio_tes_key;          /* IN: session key */
         int                     lstio_tes_bat_nmlen;    /* IN: batch name len */
-        char                   *lstio_tes_bat_name;     /* IN: batch name */
+       char __user            *lstio_tes_bat_name;     /* IN: batch name */
         int                     lstio_tes_type;         /* IN: test type */
         int                     lstio_tes_oneside;      /* IN: one sided test */
         int                     lstio_tes_loop;         /* IN: loop count */
@@ -387,17 +456,21 @@ typedef struct {
         int                     lstio_tes_dist;         /* IN: node distribution in destination groups */
         int                     lstio_tes_span;         /* IN: node span in destination groups */
         int                     lstio_tes_sgrp_nmlen;   /* IN: source group name length */
-        char                   *lstio_tes_sgrp_name;    /* IN: group name */
+       char __user            *lstio_tes_sgrp_name;    /* IN: group name */
         int                     lstio_tes_dgrp_nmlen;   /* IN: destination group name length */
-        char                   *lstio_tes_dgrp_name;    /* IN: group name */
-
-        int                     lstio_tes_param_len;    /* IN: param buffer len */
-        void                   *lstio_tes_param;        /* IN: parameter for specified test:
-                                                               lstio_bulk_param_t,
-                                                               lstio_ping_param_t,
-                                                               ... more */
-        int                    *lstio_tes_retp;         /* OUT: private returned value */
-        struct list_head       *lstio_tes_resultp;      /* OUT: list head of result buffer */
+       char __user            *lstio_tes_dgrp_name;    /* IN: group name */
+
+       /* IN: param buffer len */
+       int                      lstio_tes_param_len;
+       /* IN: parameter for specified test:
+              lstio_bulk_param_t,
+              lstio_ping_param_t,
+              ... more */
+       void __user             *lstio_tes_param;
+       /* OUT: private returned value */
+       int __user              *lstio_tes_retp;
+       /* OUT: list head of result buffer */
+       struct list_head __user *lstio_tes_resultp;
 } lstio_test_args_t;
 
 typedef enum {
@@ -413,19 +486,17 @@ typedef enum {
 
 typedef struct {
         int                     blk_opc;                /* bulk operation code */
-        int                     blk_npg;                /* # pages */
+        int                     blk_size;               /* size (bytes) */
         int                     blk_time;               /* time of running the test*/
         int                     blk_flags;              /* reserved flags */
-} lst_test_bulk_param_t, lst_bulk_param_t;
+} lst_test_bulk_param_t;
 
 typedef struct {
         int                     png_size;               /* size of ping message */
         int                     png_time;               /* time */
         int                     png_loop;               /* loop */
         int                     png_flags;              /* reserved flags */
-} lst_test_ping_param_t, lst_ping_param_t;
-
-/* more tests */
+} lst_test_ping_param_t;
 
 typedef struct {
         __u32 errors;
@@ -435,14 +506,15 @@ typedef struct {
         __u32 rpcs_expired;
         __u64 bulk_get;
         __u64 bulk_put;
-} srpc_counters_t;
+} WIRE_ATTR srpc_counters_t;
 
 typedef struct {
-        __u32 active_tests;
+        /** milliseconds since current session started */
+        __u32 running_ms;
         __u32 active_batches;
         __u32 zombie_sessions;
         __u32 brw_errors;
         __u32 ping_errors;
-} sfw_counters_t;
+} WIRE_ATTR sfw_counters_t;
 
 #endif