/*
 * 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 <linux/libcfs/libcfs.h>
#include <linux/lnet/lib-types.h>
#include <uapi/linux/lnet/lnetst.h>
#include "selftest.h"
#include "conrpc.h"

/* node descriptor */
struct lstcon_node {
	struct lnet_process_id	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(struct lnet_process_id 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,
		       struct lnet_process_id __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, struct lnet_process_id __user *nds_up,
		     unsigned int *featp, struct list_head __user *result_up);
int lstcon_nodes_remove(char *name, int nnd,
			struct lnet_process_id __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, struct lnet_process_id __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
