/*
 * 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) 2011, 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>
 */

#ifndef __LNET_ST_H__
#define __LNET_ST_H__

#include "../libcfs/libcfs.h"
#include "lnet.h"
#include "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 */
#define LSTIO_SESSION_NEW       0xC01	   /* create session */
#define LSTIO_SESSION_END       0xC02	   /* end session */
#define LSTIO_SESSION_INFO      0xC03	   /* query session */
#define LSTIO_GROUP_ADD	 0xC10	   /* add group */
#define LSTIO_GROUP_LIST	0xC11	   /* list all groups in session */
#define LSTIO_GROUP_INFO	0xC12	   /* query default information of specified group */
#define LSTIO_GROUP_DEL	 0xC13	   /* delete group */
#define LSTIO_NODES_ADD	 0xC14	   /* add nodes to specified group */
#define LSTIO_GROUP_UPDATE      0xC15	   /* update group */
#define LSTIO_BATCH_ADD	 0xC20	   /* add batch */
#define LSTIO_BATCH_START       0xC21	   /* start batch */
#define LSTIO_BATCH_STOP	0xC22	   /* stop batch */
#define LSTIO_BATCH_DEL	 0xC23	   /* delete batch */
#define LSTIO_BATCH_LIST	0xC24	   /* show all batches in the session */
#define LSTIO_BATCH_INFO	0xC25	   /* show defail of specified batch */
#define LSTIO_TEST_ADD	  0xC26	   /* add test (to batch) */
#define LSTIO_BATCH_QUERY       0xC27	   /* query batch status */
#define LSTIO_STAT_QUERY	0xC30	   /* get stats */

typedef struct {
	lnet_nid_t	      ses_nid;		/* nid of console node */
	__u64		   ses_stamp;	      /* time stamp */
} lst_sid_t;					    /*** session id */

extern lst_sid_t LST_INVALID_SID;

typedef struct {
	__u64		   bat_id;		 /* unique id in session */
} lst_bid_t;					    /*** batch id (group of tests) */

/* Status of test node */
#define LST_NODE_ACTIVE	 0x1		     /* node in this session */
#define LST_NODE_BUSY	   0x2		     /* node is taken by other session */
#define LST_NODE_DOWN	   0x4		     /* node is down */
#define LST_NODE_UNKNOWN	0x8		     /* node not in session */

typedef struct {
	lnet_process_id_t       nde_id;		 /* id of node */
	int		     nde_state;	      /* state of node */
} lstcon_node_ent_t;				    /*** node entry, for list_group command */

typedef struct {
	int		     nle_nnode;	      /* # of nodes */
	int		     nle_nactive;	    /* # of active nodes */
	int		     nle_nbusy;	      /* # of busy nodes */
	int		     nle_ndown;	      /* # of down nodes */
	int		     nle_nunknown;	   /* # of unknown nodes */
} lstcon_ndlist_ent_t;				  /*** node_list entry, for list_batch command */

typedef struct {
	int		     tse_type;	       /* test type */
	int		     tse_loop;	       /* loop count */
	int		     tse_concur;	     /* concurrency of test */
} lstcon_test_ent_t;				    /*** test summary entry, for list_batch command */

typedef struct {
	int		     bae_state;	      /* batch status */
	int		     bae_timeout;	    /* batch timeout */
	int		     bae_ntest;	      /* # of tests in the batch */
} lstcon_batch_ent_t;				   /*** batch summary entry, for list_batch command */

typedef struct {
	lstcon_ndlist_ent_t     tbe_cli_nle;	    /* client (group) node_list entry */
	lstcon_ndlist_ent_t     tbe_srv_nle;	    /* server (group) node_list entry */
	union {
		lstcon_test_ent_t  tbe_test;	    /* test entry */
		lstcon_batch_ent_t tbe_batch;	   /* batch entry */
	} u;
} lstcon_test_batch_ent_t;			      /*** test/batch verbose information entry,
							 *** 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 */

	lst_sid_t	       rpe_sid;		/* peer's session id */
	int		     rpe_fwk_errno;	  /* framework errno */
	int		     rpe_priv[4];	    /* private data */
	char		    rpe_payload[0];	 /* private reply payload */
} lstcon_rpc_ent_t;

typedef struct {
	int		     trs_rpc_stat[4];	/* RPCs stat (0: total, 1: failed, 2: finished, 4: reserved */
	int		     trs_rpc_errno;	  /* RPC errno */
	int		     trs_fwk_stat[8];	/* framework stat */
	int		     trs_fwk_errno;	  /* errno of the first remote error */
	void		   *trs_fwk_private;	/* private framework stat */
} lstcon_trans_stat_t;

static inline int
lstcon_rpc_stat_total(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_rpc_stat[0] : stat->trs_rpc_stat[0];
}

static inline int
lstcon_rpc_stat_success(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_rpc_stat[1] : stat->trs_rpc_stat[1];
}

static inline int
lstcon_rpc_stat_failure(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_rpc_stat[2] : stat->trs_rpc_stat[2];
}

static inline int
lstcon_sesop_stat_success(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
}

static inline int
lstcon_sesop_stat_failure(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
}

static inline int
lstcon_sesqry_stat_active(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
}

static inline int
lstcon_sesqry_stat_busy(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
}

static inline int
lstcon_sesqry_stat_unknown(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[2] : stat->trs_fwk_stat[2];
}

static inline int
lstcon_tsbop_stat_success(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
}

static inline int
lstcon_tsbop_stat_failure(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
}

static inline int
lstcon_tsbqry_stat_idle(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
}

static inline int
lstcon_tsbqry_stat_run(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
}

static inline int
lstcon_tsbqry_stat_failure(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[2] : stat->trs_fwk_stat[2];
}

static inline int
lstcon_statqry_stat_success(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[0] : stat->trs_fwk_stat[0];
}

static inline int
lstcon_statqry_stat_failure(lstcon_trans_stat_t *stat, int inc)
{
	return inc ? ++stat->trs_fwk_stat[1] : stat->trs_fwk_stat[1];
}

/* create a session */
typedef struct {
	int		     lstio_ses_key;	  /* IN: local key */
	int		     lstio_ses_timeout;      /* IN: session timeout */
	int		     lstio_ses_force;	/* IN: force create ? */
	/** IN: session features */
	unsigned		lstio_ses_feats;
	lst_sid_t	      *lstio_ses_idp;	  /* OUT: session id */
	int		     lstio_ses_nmlen;	/* IN: name length */
	char		   *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 */
	/** OUT: session features */
	unsigned	       *lstio_ses_featp;
	lstcon_ndlist_ent_t    *lstio_ses_ndinfo;       /* OUT: */
	int		     lstio_ses_nmlen;	/* IN: name length */
	char		   *lstio_ses_namep;	/* OUT: session name */
} lstio_session_info_args_t;

/* delete a session */
typedef struct {
	int		     lstio_ses_key;	  /* IN: session key */
} lstio_session_end_args_t;

#define LST_OPC_SESSION	 1
#define LST_OPC_GROUP	   2
#define LST_OPC_NODES	   3
#define LST_OPC_BATCHCLI	4
#define LST_OPC_BATCHSRV	5

typedef struct {
	int		     lstio_dbg_key;	  /* IN: session key */
	int		     lstio_dbg_type;	 /* IN: debug sessin|batch|group|nodes list */
	int		     lstio_dbg_flags;	/* IN: reserved debug flags */
	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 */
	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 */
} 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 */
} 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 */
} lstio_group_del_args_t;

#define LST_GROUP_CLEAN	 1		       /* remove inactive nodes in the group */
#define LST_GROUP_REFRESH       2		       /* refresh inactive nodes in the group */
#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 */
} 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 */
	/** OUT: session features */
	unsigned	       *lstio_grp_featp;
	lnet_process_id_t      *lstio_grp_idsp;	 /* IN: nodes */
	struct list_head	     *lstio_grp_resultp;      /* OUT: list head of result buffer */
} 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 */
} 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 */

	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 */
} lstio_group_info_args_t;

#define LST_DEFAULT_BATCH       "batch"		 /* default batch name */

typedef struct {
	int		     lstio_bat_key;	  /* IN: session key */
	int		     lstio_bat_nmlen;	/* IN: name length */
	char		   *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 */
} 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 */
} 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 */
} 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 */
} 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 */
} 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 */
	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 */

	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 */
} 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 request */
	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 */
} lstio_stat_args_t;

typedef enum {
	LST_TEST_BULK   = 1,
	LST_TEST_PING   = 2
} lst_test_type_t;

/* create a test in a batch */
#define LST_MAX_CONCUR	  1024		    /* Max concurrency of test */

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 */
	int		     lstio_tes_type;	 /* IN: test type */
	int		     lstio_tes_oneside;      /* IN: one sided test */
	int		     lstio_tes_loop;	 /* IN: loop count */
	int		     lstio_tes_concur;       /* IN: concurrency */

	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 */
	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 */
} lstio_test_args_t;

typedef enum {
	LST_BRW_READ    = 1,
	LST_BRW_WRITE   = 2
} lst_brw_type_t;

typedef enum {
	LST_BRW_CHECK_NONE   = 1,
	LST_BRW_CHECK_SIMPLE = 2,
	LST_BRW_CHECK_FULL   = 3
} lst_brw_flags_t;

typedef struct {
	int		     blk_opc;		/* bulk operation code */
	int		     blk_size;	       /* size (bytes) */
	int		     blk_time;	       /* time of running the test*/
	int		     blk_flags;	      /* reserved flags */
} 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;

/* more tests */
typedef struct {
	__u32 errors;
	__u32 rpcs_sent;
	__u32 rpcs_rcvd;
	__u32 rpcs_dropped;
	__u32 rpcs_expired;
	__u64 bulk_get;
	__u64 bulk_put;
} WIRE_ATTR srpc_counters_t;

typedef struct {
	/** milliseconds since current session started */
	__u32 running_ms;
	__u32 active_batches;
	__u32 zombie_sessions;
	__u32 brw_errors;
	__u32 ping_errors;
} WIRE_ATTR sfw_counters_t;

#endif
