[dbench @ tridge@samba.org-20070716041205-ndm0vhllg1guj8eb]
[tridge/dbench.git] / dbench.h
1 /* 
2    dbench version 2
3    Copyright (C) Andrew Tridgell 1999
4    
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9    
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14    
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include "config.h"
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <signal.h>
23 #include <unistd.h>
24 #include <string.h>
25 #include <ctype.h>
26 #include <dirent.h>
27 #include <sys/stat.h>
28 #include <sys/time.h>
29 #include <sys/wait.h>
30 #include <sys/types.h>
31 #include <sys/socket.h>
32 #include <fcntl.h>
33 #include <time.h>
34 #include <sys/ipc.h>
35 #include <sys/shm.h>
36 #include <sys/mman.h>
37
38 #ifdef HAVE_SYS_VFS_H
39 #include <sys/vfs.h>
40 #endif
41
42 #ifdef HAVE_SYS_STATVFS_H
43 #include <sys/statvfs.h>
44 #endif
45
46 #include <sys/param.h>
47 #ifdef HAVE_SYS_MOUNT_H
48 #include <sys/mount.h>
49 #endif
50 #include <utime.h>
51 #include <errno.h>
52 #include <strings.h>
53 #ifdef HAVE_STDINT_H
54 #include <stdint.h>
55 #endif
56 #include <netinet/in.h>
57 #include <netinet/tcp.h>
58 #include <netdb.h>
59
60 #if HAVE_ATTR_XATTR_H
61 #include <attr/xattr.h>
62 #elif HAVE_SYS_XATTR_H
63 #include <sys/xattr.h>
64 #elif HAVE_SYS_ATTRIBUTES_H
65 #include <sys/attributes.h>
66 #endif
67
68 #ifdef HAVE_SYS_EXTATTR_H
69 #include <sys/extattr.h>
70 #endif
71
72 #ifdef HAVE_SYS_UIO_H
73 #include <sys/uio.h>
74 #endif
75
76 #ifndef MSG_WAITALL
77 #define MSG_WAITALL 0x100
78 #endif
79
80 #define PRINT_FREQ 1
81
82 #ifndef MIN
83 #define MIN(x,y) ((x)<(y)?(x):(y))
84 #endif
85
86 #define TCP_PORT 7003
87 #define TCP_OPTIONS "TCP_NODELAY SO_REUSEADDR"
88
89 #define BOOL int
90 #define True 1
91 #define False 0
92 #define uint32 unsigned
93
94 struct child_struct {
95         int id;
96         int failed;
97         int line;
98         int done;
99         int cleanup;
100         const char *directory;
101         double bytes;
102         double bytes_done_warmup;
103         double max_latency;
104         struct timeval starttime;
105         struct timeval lasttime;
106         off_t bytes_since_fsync;
107         char *cname;
108         struct {
109                 double last_bytes;
110                 struct timeval last_time;
111         } rate;
112         void *private;
113 };
114
115 struct options {
116         int nprocs;
117         int sync_open;
118         int sync_dirs;
119         int do_fsync;
120         int fsync_frequency;
121         char *tcp_options;
122         int timelimit;
123         int warmup;
124         const char *directory;
125         char *loadfile;
126         double targetrate;
127         int ea_enable;
128         const char *server;
129         int clients_per_process;
130 };
131
132 /* CreateDisposition field. */
133 #define FILE_SUPERSEDE 0
134 #define FILE_OPEN 1
135 #define FILE_CREATE 2
136 #define FILE_OPEN_IF 3
137 #define FILE_OVERWRITE 4
138 #define FILE_OVERWRITE_IF 5
139
140 /* CreateOptions field. */
141 #define FILE_DIRECTORY_FILE       0x0001
142 #define FILE_WRITE_THROUGH        0x0002
143 #define FILE_SEQUENTIAL_ONLY      0x0004
144 #define FILE_NON_DIRECTORY_FILE   0x0040
145 #define FILE_NO_EA_KNOWLEDGE      0x0200
146 #define FILE_EIGHT_DOT_THREE_ONLY 0x0400
147 #define FILE_RANDOM_ACCESS        0x0800
148 #define FILE_DELETE_ON_CLOSE      0x1000
149
150 #ifndef O_DIRECTORY
151 #define O_DIRECTORY    0200000
152 #endif
153
154 #include "proto.h"
155
156 extern struct options options;