]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/dird/dird_conf.h
Last major change for 1.27 code -- see kes13Nov02
[bacula/bacula] / bacula / src / dird / dird_conf.h
1 /*
2  * Director specific configuration and defines
3  *
4  *     Kern Sibbald, Feb MM
5  *
6  *    Version $Id$
7  */
8 /*
9    Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
10
11    This program is free software; you can redistribute it and/or
12    modify it under the terms of the GNU General Public License as
13    published by the Free Software Foundation; either version 2 of
14    the License, or (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19    General Public License for more details.
20
21    You should have received a copy of the GNU General Public
22    License along with this program; if not, write to the Free
23    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
24    MA 02111-1307, USA.
25
26  */
27
28 /* NOTE:  #includes at the end of this file */
29
30 /*
31  * Resource codes -- they must be sequential for indexing   
32  */
33 #define R_FIRST                       1001
34
35 #define R_DIRECTOR                    1001
36 #define R_CLIENT                      1002
37 #define R_JOB                         1003
38 #define R_STORAGE                     1004
39 #define R_CATALOG                     1005
40 #define R_SCHEDULE                    1006
41 #define R_FILESET                     1007
42 #define R_GROUP                       1008
43 #define R_POOL                        1009
44 #define R_MSGS                        1010
45 #define R_COUNTER                     1011
46
47 #define R_LAST                        R_COUNTER
48
49 /*
50  * Some resource attributes
51  */
52 #define R_NAME                        1020
53 #define R_ADDRESS                     1021
54 #define R_PASSWORD                    1022
55 #define R_TYPE                        1023
56 #define R_BACKUP                      1024
57
58
59 /* Used for certain KeyWord tables */
60 struct s_kw {       
61    char *name;
62    int token;   
63 };
64
65 /* Job Level keyword structure */
66 struct s_jl {
67    char *level_name;                  /* level keyword */
68    int  level;                        /* level */
69    int  job_type;                     /* JobType permitting this level */
70 };
71
72 /* Job Type keyword structure */
73 struct s_jt {
74    char *type_name;
75    int job_type;
76 };
77
78 /* Definition of the contents of each Resource */
79
80 /* 
81  *   Director Resource  
82  *
83  */
84 struct s_res_dir {
85    RES   hdr;
86    int   DIRport;                     /* where we listen -- UA port server port */
87    char *DIRaddr;                     /* bind address */
88    char *password;                    /* Password for UA access */
89    char *query_file;                  /* SQL query file */
90    char *working_directory;           /* WorkingDirectory */
91    char *pid_directory;               /* PidDirectory */
92    char *subsys_directory;            /* SubsysDirectory */
93    struct s_res_msgs *messages;       /* Daemon message handler */
94    int   MaxConcurrentJobs;
95    utime_t FDConnectTimeout;          /* timeout for connect in seconds */
96    utime_t SDConnectTimeout;          /* timeout in seconds */
97 };
98 typedef struct s_res_dir DIRRES;
99
100 /*
101  *   Client Resource
102  *
103  */
104 struct s_res_client {
105    RES   hdr;
106
107    int   FDport;                      /* Where File daemon listens */
108    int   AutoPrune;                   /* Do automatic pruning? */
109    utime_t FileRetention;             /* file retention period in seconds */
110    utime_t JobRetention;              /* job retention period in seconds */
111    char *address;
112    char *password;
113    struct s_res_cat    *catalog;       /* Catalog resource */
114 };
115 typedef struct s_res_client CLIENT;
116
117 /*
118  *   Store Resource
119  * 
120  */
121 struct s_res_store {
122    RES   hdr;
123
124    int   SDport;                      /* port where Directors connect */
125    int   SDDport;                     /* data port for File daemon */
126    char *address;
127    char *password;
128    char *media_type;
129    char *dev_name;   
130    int  autochanger;                  /* set if autochanger */
131 };
132 typedef struct s_res_store STORE;
133
134 /*
135  *   Catalog Resource
136  *
137  */
138 struct s_res_cat {
139    RES   hdr;
140
141    int   DBport;                      /* Port -- not yet implemented */
142    char *address;
143    char *db_password;
144    char *db_user;
145    char *db_name;
146 };
147 typedef struct s_res_cat CAT;
148
149 /*
150  *   Job Resource
151  *
152  */
153 struct s_res_job {
154    RES   hdr;
155
156    int   JobType;                     /* job type (backup, verify, restore */
157    int   level;                       /* default backup/verify level */
158    int   RestoreJobId;                /* What -- JobId to restore */
159    char *RestoreWhere;                /* Where on disk to restore -- directory */
160    char *RestoreBootstrap;            /* Bootstrap file */
161    char *RunBeforeJob;                /* Run program before Job */
162    char *RunAfterJob;                 /* Run program after Job */
163    char *WriteBootstrap;              /* Where to write bootstrap Job updates */
164    int   replace;                     /* How (overwrite, ..) */
165    utime_t MaxRunTime;                /* max run time in seconds */
166    utime_t MaxStartDelay;             /* max start delay in seconds */
167    int PruneJobs;                     /* Force pruning of Jobs */
168    int PruneFiles;                    /* Force pruning of Files */
169    int PruneVolumes;                  /* Force pruning of Volumes */
170    int SpoolAttributes;               /* Set to spool attributes in SD */
171
172    struct s_res_msgs   *messages;     /* How and where to send messages */
173    struct s_res_sch    *schedule;     /* When -- Automatic schedule */
174    struct s_res_client *client;       /* Who to backup */
175    struct s_res_fs     *fileset;      /* What to backup -- Fileset */
176    struct s_res_store  *storage;      /* Where is device -- Storage daemon */
177    struct s_res_pool   *pool;         /* Where is media -- Media Pool */
178 };
179 typedef struct s_res_job JOB;
180
181 /* 
182  *   FileSet Resource
183  *
184  */
185 struct s_res_fs {
186    RES   hdr;
187
188    char **include_array;
189    int num_includes;
190    int include_size;
191    char **exclude_array;
192    int num_excludes;
193    int exclude_size;
194    int have_MD5;                      /* set if MD5 initialized */
195    struct MD5Context md5c;            /* MD5 of include/exclude */
196    char MD5[50];                      /* base 64 representation of MD5 */
197 };
198 typedef struct s_res_fs FILESET;
199  
200
201 /* 
202  *   Schedule Resource
203  *
204  */
205 struct s_res_sch {
206    RES   hdr;
207
208    struct s_run *run;
209 };
210 typedef struct s_res_sch SCHED;
211
212 /*
213  *   Group Resource (not used)
214  *
215  */
216 struct s_res_group {
217    RES   hdr;
218 };
219 typedef struct s_res_group GROUP;
220
221 /*
222  *   Counter Resource
223  */
224 struct s_res_counter {
225    RES   hdr;
226
227    int32_t MinValue;                  /* Minimum value */
228    int32_t MaxValue;                  /* Maximum value */
229    int     Global;                    /* global/local */
230    char  *WrapCounter;                /* Wrap counter name */
231 };
232 typedef struct s_res_counter COUNTER;
233
234 /*
235  *   Pool Resource   
236  *
237  */
238 struct s_res_pool {
239    RES   hdr;
240
241    struct s_res_counter counter;      /* Counter resources */
242    char *pool_type;                   /* Pool type */
243    char *label_format;                /* Label format string */
244    int   use_catalog;                 /* maintain catalog for media */
245    int   catalog_files;               /* maintain file entries in catalog */
246    int   use_volume_once;             /* write on volume only once */
247    int   accept_any_volume;           /* accept any volume */
248    int   max_volumes;                 /* max number of volumes */
249    utime_t VolRetention;              /* volume retention period in seconds */
250    utime_t VolUseDuration;            /* duration volume can be used */
251    uint32_t MaxVolumeJobs;            /* Maximum jobs on the volume */
252    int   AutoPrune;                   /* default for pool auto prune */
253    int   Recycle;                     /* default for media recycle yes/no */
254 };
255 typedef struct s_res_pool POOL;
256
257
258 /* Define the Union of all the above
259  * resource structure definitions.
260  */
261 union u_res {
262    struct s_res_dir     res_dir;
263    struct s_res_client  res_client;
264    struct s_res_store   res_store;
265    struct s_res_cat     res_cat;
266    struct s_res_job     res_job;
267    struct s_res_fs      res_fs;
268    struct s_res_sch     res_sch;
269    struct s_res_group   res_group;
270    struct s_res_pool    res_pool;
271    struct s_res_msgs    res_msgs;
272    struct s_res_counter res_counter;
273    RES hdr;
274 };
275
276 typedef union u_res URES;
277
278
279 /* Run structure contained in Schedule Resource */
280 struct s_run {
281    struct s_run *next;                /* points to next run record */
282    int level;                         /* level override */
283    int job_type;  
284    POOL *pool;                        /* Pool override */
285    STORE *storage;                    /* Storage override */
286    MSGS *msgs;                        /* Messages override */
287    char *since;
288    int level_no;
289    int minute;                        /* minute to run job */
290    time_t last_run;                   /* last time run */
291    time_t next_run;                   /* next time to run */
292    char hour[nbytes_for_bits(24)];    /* bit set for each hour */
293    char mday[nbytes_for_bits(31)];    /* bit set for each day of month */
294    char month[nbytes_for_bits(12)];   /* bit set for each month */
295    char wday[nbytes_for_bits(7)];     /* bit set for each day of the week */
296 };
297 typedef struct s_run RUN;