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