155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak/*
255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   Copyright (c) International Business Machines Corp., 2001-2004
355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *
455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   This program is free software;  you can redistribute it and/or modify
555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   it under the terms of the GNU General Public License as published by
655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   the Free Software Foundation; either version 2 of the License, or
755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   (at your option) any later version.
855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *
955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   This program is distributed in the hope that it will be useful,
1055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
1155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
1255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   the GNU General Public License for more details.
1355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *
1455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   You should have received a copy of the GNU General Public License
1555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak *   along with this program;  if not, write to the Free Software
164548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak */
1855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#ifndef _PARSER_H_
1955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define _PARSER_H_
2055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
2155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include "ffsb.h"
2255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include "list.h"
2355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
2455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define COMMENT_CHAR	'#'
2555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
2655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define STORE_SINGLE		0x0001
2755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define STORE_LIST		0x0002
2855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
2955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_U32		0x0001
3055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define	TYPE_U64		0x0002
3155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_STRING		0x0004
3255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_BOOLEAN		0x0008
3355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_DOUBLE		0x0010
3455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_RANGE		0x0020
3555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_SIZEWEIGHT		0x0040
3655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_DEPRECATED		0x0080
3755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_WEIGHT		0x0100
3855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_SIZE32		0x0200
3955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define TYPE_SIZE64		0x0400
4055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
4155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define ROOT			0x0001
4255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define THREAD_GROUP		0x0002
4355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define FILESYSTEM		0x0004
4455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define END			0x0008
4555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define STATS			0x0010
4655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
4755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define GLOBAL_OPTIONS {						\
4855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"num_filesystems", NULL, TYPE_DEPRECATED, STORE_SINGLE},	\
4955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"num_threadgroups", NULL, TYPE_DEPRECATED, STORE_SINGLE},	\
5055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"verbose", NULL, TYPE_BOOLEAN, STORE_SINGLE},			\
5155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"time", NULL, TYPE_U32, STORE_SINGLE},				\
5255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"directio", NULL, TYPE_BOOLEAN, STORE_SINGLE},			\
5355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"bufferio", NULL, TYPE_BOOLEAN, STORE_SINGLE},			\
5455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"alignio", NULL, TYPE_BOOLEAN, STORE_SINGLE},			\
5555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"callout", NULL, TYPE_STRING, STORE_SINGLE},			\
5655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{NULL, NULL, 0, 0} }
5755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
5855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define THREADGROUP_OPTIONS {						\
5955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"bindfs", NULL, TYPE_STRING, STORE_SINGLE},			\
6055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"num_threads", NULL, TYPE_U32, STORE_SINGLE},			\
6155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"read_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
6255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"readall_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
6355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"read_random", NULL, TYPE_BOOLEAN, STORE_SINGLE},		\
6455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"read_skip", NULL, TYPE_U32, STORE_SINGLE},			\
6555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"read_size", NULL, TYPE_SIZE64, STORE_SINGLE},			\
6655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"read_blocksize", NULL, TYPE_SIZE32, STORE_SINGLE},		\
6755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"read_skipsize", NULL, TYPE_SIZE32, STORE_SINGLE},		\
6855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"write_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
6955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"write_fsync_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},	\
7055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"write_random", NULL, TYPE_BOOLEAN, STORE_SINGLE},		\
7155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"fsync_file", NULL, TYPE_DEPRECATED, STORE_SINGLE},		\
7255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"write_size", NULL, TYPE_SIZE64, STORE_SINGLE},		\
7355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"write_blocksize", NULL, TYPE_SIZE32, STORE_SINGLE},		\
7455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"create_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
7555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"create_fsync_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},	\
7655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"delete_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
7755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"append_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
7855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"append_fsync_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},	\
7955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"metaop_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
8055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"createdir_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
8155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"op_delay", NULL, TYPE_U32, STORE_SINGLE},			\
8255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"stat_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
8355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"writeall_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
8455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"writeall_fsync_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},	\
8555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"open_close_weight", NULL, TYPE_WEIGHT, STORE_SINGLE},		\
8655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{NULL, NULL, 0} }
8755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
8855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define FILESYSTEM_OPTIONS {						\
8955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"location", NULL, TYPE_STRING, STORE_SINGLE},			\
9055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"num_files", NULL, TYPE_U32, STORE_SINGLE},			\
9155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"num_dirs", NULL, TYPE_U32, STORE_SINGLE},			\
9255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"reuse", NULL, TYPE_BOOLEAN, STORE_SINGLE},			\
9355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"min_filesize", NULL, TYPE_SIZE64, STORE_SINGLE},		\
9455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"max_filesize", NULL, TYPE_SIZE64, STORE_SINGLE},		\
9555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"create_blocksize", NULL, TYPE_SIZE32, STORE_SINGLE},		\
9655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"age_blocksize", NULL, TYPE_SIZE32, STORE_SINGLE},		\
9755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"desired_util", NULL, TYPE_DOUBLE, STORE_SINGLE},		\
9855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"agefs", NULL, TYPE_BOOLEAN, STORE_SINGLE},			\
9955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"size_weight", NULL, TYPE_SIZEWEIGHT, STORE_LIST},		\
10055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"init_util", NULL, TYPE_DOUBLE, STORE_SINGLE},			\
10155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"init_size", NULL, TYPE_SIZE64, STORE_SINGLE},			\
10255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"clone", NULL, TYPE_STRING, STORE_SINGLE},			\
10355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{NULL, NULL, 0} }
10455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
10555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define STATS_OPTIONS {							\
10655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"enable_stats", NULL, TYPE_BOOLEAN, STORE_SINGLE},		\
10755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"enable_range", NULL, TYPE_BOOLEAN, STORE_SINGLE},		\
10855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"ignore", NULL, TYPE_STRING, STORE_LIST},			\
10955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"msec_range", NULL, TYPE_RANGE, STORE_LIST},			\
11055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{NULL, NULL, 0} }
11155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
11255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define CONTAINER_DESC {				\
11355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"filesystem", FILESYSTEM, 10},			\
11455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"threadgroup", THREAD_GROUP, 11},		\
11555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"end", END, 3},				\
11655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{"stats", STATS, 5},				\
11755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	{NULL, 0, 0} }
11855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
11955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modaktypedef struct container {
12055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	struct config_options *config;
12155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	uint32_t type;
12255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	struct container *child;
12355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	struct container *next;
12455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} container_t;
12555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
12655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modaktypedef struct config_options {
12755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	char *name;
12855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	void *value;
12955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	int type;
13055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	int storage_type;
13155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} config_options_t;
13255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
13355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modaktypedef struct container_desc {
13455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	char *name;
13555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	uint16_t type;
13655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	uint16_t size;
13755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} container_desc_t;
13855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
13955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modaktypedef struct range {
14055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	double a;
14155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	double b;
14255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} range_t;
14355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
14455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modaktypedef struct value_list {
14555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	void *value;
14655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak	struct list_head list;
14755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} value_list_t;
14855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
14955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_parse_newconfig(ffsb_config_t *fc, char *filename);
15055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak
15155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#endif
152