/*
 * 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.gnu.org/licenses/gpl-2.0.html
 *
 * GPL HEADER END
 */
/*
 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
 * Use is subject to license terms.
 *
 * Copyright (c) 2011, 2012, Intel Corporation.
 */
/*
 * This file is part of Lustre, http://www.lustre.org/
 * Lustre is a trademark of Sun Microsystems, Inc.
 *
 * lnet/selftest/console.h
 *
 * kernel structure for LST console
 *
 * Author: Liang Zhen <liangzhen@clusterfs.com>
 */

#ifndef __LST_CONSOLE_H__
#define __LST_CONSOLE_H__

#include "../../include/linux/libcfs/libcfs.h"
#include "../../include/linux/lnet/lnet.h"
#include "../../include/linux/lnet/lib-types.h"
#include "../../include/linux/lnet/lnetst.h"
#include "selftest.h"
#include "conrpc.h"

/* node descriptor */
struct lstcon_node {
	lnet_process_id_t nd_id;      /* id of the node */
	int		  nd_ref;     /* reference count */
	int		  nd_state;   /* state of the node */
	int		  nd_timeout; /* session timeout */
	unsigned long	  nd_stamp;   /* timestamp of last replied RPC */
	struct lstcon_rpc nd_ping;    /* ping rpc */
};

/* node link descriptor */
struct lstcon_ndlink {
	struct list_head ndl_link;    /* chain on list */
	struct list_head ndl_hlink;   /* chain on hash */
	struct lstcon_node	*ndl_node;	/* pointer to node */
};

/* (alias of nodes) group descriptor */
struct lstcon_group {
	struct list_head grp_link;		  /* chain on global group list
						   */
	int		 grp_ref;		  /* reference count */
	int		 grp_userland;		  /* has userland nodes */
	int		 grp_nnode;		  /* # of nodes */
	char		 grp_name[LST_NAME_SIZE]; /* group name */

	struct list_head grp_trans_list;	  /* transaction list */
	struct list_head grp_ndl_list;		  /* nodes list */
	struct list_head grp_ndl_hash[0];	  /* hash table for nodes */
};

#define LST_BATCH_IDLE	  0xB0	    /* idle batch */
#define LST_BATCH_RUNNING 0xB1	    /* running batch */

struct lstcon_tsb_hdr {
	struct lst_bid	 tsb_id;	 /* batch ID */
	int		 tsb_index;	 /* test index */
};

/* (tests ) batch descriptor */
struct lstcon_batch {
	struct lstcon_tsb_hdr	bat_hdr;	/* test_batch header */
	struct list_head bat_link;	  /* chain on session's batches list */
	int		 bat_ntest;	  /* # of test */
	int		 bat_state;	  /* state of the batch */
	int		 bat_arg;	  /* parameter for run|stop, timeout
					   * for run, force for stop
					   */
	char		 bat_name[LST_NAME_SIZE];/* name of batch */

	struct list_head bat_test_list;   /* list head of tests (struct lstcon_test)
					   */
	struct list_head bat_trans_list;  /* list head of transaction */
	struct list_head bat_cli_list;	  /* list head of client nodes
					   * (struct lstcon_node)
					   */
	struct list_head *bat_cli_hash;   /* hash table of client nodes */
	struct list_head bat_srv_list;	  /* list head of server nodes */
	struct list_head *bat_srv_hash;   /* hash table of server nodes */
};

/* a single test descriptor */
struct lstcon_test {
	struct lstcon_tsb_hdr	tes_hdr;	/* test batch header */
	struct list_head tes_link;	 /* chain on batch's tests list */
	struct lstcon_batch	*tes_batch;	 /* pointer to batch */

	int		 tes_type;	 /* type of the test, i.e: bulk, ping */
	int		 tes_stop_onerr; /* stop on error */
	int		 tes_oneside;	 /* one-sided test */
	int		 tes_concur;	 /* concurrency */
	int		 tes_loop;	 /* loop count */
	int		 tes_dist;	 /* nodes distribution of target group */
	int		 tes_span;	 /* nodes span of target group */
	int		 tes_cliidx;	 /* client index, used for RPC creating */

	struct list_head tes_trans_list; /* transaction list */
	struct lstcon_group	*tes_src_grp;	/* group run the test */
	struct lstcon_group	*tes_dst_grp;	/* target group */

	int		 tes_paramlen;	 /* test parameter length */
	char		 tes_param[0];	 /* test parameter */
};

#define LST_GLOBAL_HASHSIZE 503	     /* global nodes hash table size */
#define LST_NODE_HASHSIZE   239	     /* node hash table (for batch or group) */

#define LST_SESSION_NONE    0x0	     /* no session */
#define LST_SESSION_ACTIVE  0x1	     /* working session */

#define LST_CONSOLE_TIMEOUT 300	     /* default console timeout */

struct lstcon_session {
	struct mutex	    ses_mutex;	      /* only 1 thread in session */
	struct lst_sid	    ses_id;	      /* global session id */
	int		    ses_key;	      /* local session key */
	int		    ses_state;	      /* state of session */
	int		    ses_timeout;      /* timeout in seconds */
	time64_t	    ses_laststamp;    /* last operation stamp (seconds)
					       */
	unsigned int	    ses_features;     /* tests features of the session
					       */
	unsigned int	    ses_feats_updated:1; /* features are synced with
						  * remote test nodes
						  */
	unsigned int	    ses_force:1;      /* force creating */
	unsigned int	    ses_shutdown:1;   /* session is shutting down */
	unsigned int	    ses_expired:1;    /* console is timedout */
	__u64		    ses_id_cookie;    /* batch id cookie */
	char		    ses_name[LST_NAME_SIZE];/* session name */
	struct lstcon_rpc_trans	*ses_ping;		/* session pinger */
	struct stt_timer	 ses_ping_timer;   /* timer for pinger */
	struct lstcon_trans_stat ses_trans_stat;   /* transaction stats */

	struct list_head    ses_trans_list;   /* global list of transaction */
	struct list_head    ses_grp_list;     /* global list of groups */
	struct list_head    ses_bat_list;     /* global list of batches */
	struct list_head    ses_ndl_list;     /* global list of nodes */
	struct list_head    *ses_ndl_hash;    /* hash table of nodes */

	spinlock_t	    ses_rpc_lock;     /* serialize */
	atomic_t	    ses_rpc_counter;  /* # of initialized RPCs */
	struct list_head    ses_rpc_freelist; /* idle console rpc */
}; /* session descriptor */

extern struct lstcon_session	 console_session;

static inline struct lstcon_trans_stat *
lstcon_trans_stat(void)
{
	return &console_session.ses_trans_stat;
}

static inline struct list_head *
lstcon_id2hash(lnet_process_id_t id, struct list_head *hash)
{
	unsigned int idx = LNET_NIDADDR(id.nid) % LST_NODE_HASHSIZE;

	return &hash[idx];
}

int lstcon_ioctl_entry(unsigned int cmd, struct libcfs_ioctl_hdr *hdr);
int lstcon_console_init(void);
int lstcon_console_fini(void);
int lstcon_session_match(struct lst_sid sid);
int lstcon_session_new(char *name, int key, unsigned int version,
		       int timeout, int flags, struct lst_sid __user *sid_up);
int lstcon_session_info(struct lst_sid __user *sid_up, int __user *key,
			unsigned __user *verp, struct lstcon_ndlist_ent __user *entp,
			char __user *name_up, int len);
int lstcon_session_end(void);
int lstcon_session_debug(int timeout, struct list_head __user *result_up);
int lstcon_session_feats_check(unsigned int feats);
int lstcon_batch_debug(int timeout, char *name,
		       int client, struct list_head __user *result_up);
int lstcon_group_debug(int timeout, char *name,
		       struct list_head __user *result_up);
int lstcon_nodes_debug(int timeout, int nnd, lnet_process_id_t __user *nds_up,
		       struct list_head __user *result_up);
int lstcon_group_add(char *name);
int lstcon_group_del(char *name);
int lstcon_group_clean(char *name, int args);
int lstcon_group_refresh(char *name, struct list_head __user *result_up);
int lstcon_nodes_add(char *name, int nnd, lnet_process_id_t __user *nds_up,
		     unsigned int *featp, struct list_head __user *result_up);
int lstcon_nodes_remove(char *name, int nnd, lnet_process_id_t __user *nds_up,
			struct list_head __user *result_up);
int lstcon_group_info(char *name, struct lstcon_ndlist_ent __user *gent_up,
		      int *index_p, int *ndent_p,
		      struct lstcon_node_ent __user *ndents_up);
int lstcon_group_list(int idx, int len, char __user *name_up);
int lstcon_batch_add(char *name);
int lstcon_batch_run(char *name, int timeout,
		     struct list_head __user *result_up);
int lstcon_batch_stop(char *name, int force,
		      struct list_head __user *result_up);
int lstcon_test_batch_query(char *name, int testidx,
			    int client, int timeout,
			    struct list_head __user *result_up);
int lstcon_batch_del(char *name);
int lstcon_batch_list(int idx, int namelen, char __user *name_up);
int lstcon_batch_info(char *name, struct lstcon_test_batch_ent __user *ent_up,
		      int server, int testidx, int *index_p,
		      int *ndent_p, struct lstcon_node_ent __user *dents_up);
int lstcon_group_stat(char *grp_name, int timeout,
		      struct list_head __user *result_up);
int lstcon_nodes_stat(int count, lnet_process_id_t __user *ids_up,
		      int timeout, struct list_head __user *result_up);
int lstcon_test_add(char *batch_name, int type, int loop,
		    int concur, int dist, int span,
		    char *src_name, char *dst_name,
		    void *param, int paramlen, int *retp,
		    struct list_head __user *result_up);
#endif
