]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/dird/dird_conf.h
- Implement first cut of Migration.
[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-2006 Kern Sibbald
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
13    version 2 as amended with additional clauses defined in the
14    file LICENSE in the main source directory.
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 
19    the file LICENSE for additional details.
20
21  */
22
23 /* NOTE:  #includes at the end of this file */
24
25 /*
26  * Resource codes -- they must be sequential for indexing
27  */
28 enum {
29    R_DIRECTOR = 1001,
30    R_CLIENT,
31    R_JOB,
32    R_STORAGE,
33    R_CATALOG,
34    R_SCHEDULE,
35    R_FILESET,
36    R_POOL,
37    R_MSGS,
38    R_COUNTER,
39    R_CONSOLE,
40    R_JOBDEFS,
41    R_DEVICE,
42    R_FIRST = R_DIRECTOR,
43    R_LAST  = R_DEVICE                 /* keep this updated */
44 };
45
46
47 /*
48  * Some resource attributes
49  */
50 enum {
51    R_NAME = 1020,
52    R_ADDRESS,
53    R_PASSWORD,
54    R_TYPE,
55    R_BACKUP
56 };
57
58
59 /* Used for certain KeyWord tables */
60 struct s_kw {
61    const char *name;
62    int token;
63 };
64
65 /* Job Level keyword structure */
66 struct s_jl {
67    const 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    const char *type_name;
75    int job_type;
76 };
77
78 /* Definition of the contents of each Resource */
79 /* Needed for forward references */
80 struct SCHED;
81 struct CLIENT;
82 struct FILESET;
83 struct POOL;
84 struct RUN;
85 struct DEVICE;
86
87 /*
88  *   Director Resource
89  *
90  */
91 class DIRRES {
92 public:
93    RES   hdr;
94    dlist *DIRaddrs;
95    char *password;                    /* Password for UA access */
96    char *query_file;                  /* SQL query file */
97    char *working_directory;           /* WorkingDirectory */
98    const char *scripts_directory;     /* ScriptsDirectory */
99    char *pid_directory;               /* PidDirectory */
100    char *subsys_directory;            /* SubsysDirectory */
101    MSGS *messages;                    /* Daemon message handler */
102    uint32_t MaxConcurrentJobs;        /* Max concurrent jobs for whole director */
103    utime_t FDConnectTimeout;          /* timeout for connect in seconds */
104    utime_t SDConnectTimeout;          /* timeout in seconds */
105    int tls_enable;                    /* Enable TLS */
106    int tls_require;                   /* Require TLS */
107    int tls_verify_peer;              /* TLS Verify Client Certificate */
108    char *tls_ca_certfile;             /* TLS CA Certificate File */
109    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
110    char *tls_certfile;                /* TLS Server Certificate File */
111    char *tls_keyfile;                 /* TLS Server Key File */
112    char *tls_dhfile;                  /* TLS Diffie-Hellman Parameters */
113    alist *tls_allowed_cns;            /* TLS Allowed Clients */
114    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
115 };
116
117 /*
118  * Device Resource
119  *  This resource is a bit different from the other resources
120  *  because it is not defined in the Director 
121  *  by DEVICE { ... }, but rather by a "reference" such as
122  *  DEVICE = xxx; Then when the Director connects to the
123  *  SD, it requests the information about the device.
124  */
125 class DEVICE {
126 public:
127    RES hdr;
128
129    bool found;                        /* found with SD */
130    int num_writers;                   /* number of writers */
131    int max_writers;                   /* = 1 for files */
132    int reserved;                      /* number of reserves */
133    int num_drives;                    /* for autochanger */
134    bool autochanger;                  /* set if device is autochanger */
135    bool open;                         /* drive open */
136    bool append;                       /* in append mode */
137    bool read;                         /* in read mode */
138    bool labeled;                      /* Volume name valid */
139    bool offline;                      /* not available */
140    bool autoselect;                   /* can be selected via autochanger */
141    uint32_t PoolId;
142    char ChangerName[MAX_NAME_LENGTH];
143    char VolumeName[MAX_NAME_LENGTH];
144    char MediaType[MAX_NAME_LENGTH];
145 };
146
147 /*
148  * Console ACL positions
149  */
150 enum {
151    Job_ACL = 0,
152    Client_ACL,
153    Storage_ACL,
154    Schedule_ACL,
155    Run_ACL,
156    Pool_ACL,
157    Command_ACL,
158    FileSet_ACL,
159    Catalog_ACL,
160    Num_ACL                            /* keep last */
161 };
162
163 /*
164  *    Console Resource
165  */
166 class CONRES {
167 public:
168    RES   hdr;
169    char *password;                    /* UA server password */
170    alist *ACL_lists[Num_ACL];         /* pointers to ACLs */
171    int tls_enable;                    /* Enable TLS */
172    int tls_require;                   /* Require TLS */
173    int tls_verify_peer;              /* TLS Verify Client Certificate */
174    char *tls_ca_certfile;             /* TLS CA Certificate File */
175    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
176    char *tls_certfile;                /* TLS Server Certificate File */
177    char *tls_keyfile;                 /* TLS Server Key File */
178    char *tls_dhfile;                  /* TLS Diffie-Hellman Parameters */
179    alist *tls_allowed_cns;            /* TLS Allowed Clients */
180    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
181 };
182
183
184 /*
185  *   Catalog Resource
186  *
187  */
188 class CAT {
189 public:
190    RES   hdr;
191
192    int   db_port;                     /* Port -- not yet implemented */
193    char *db_address;                  /* host name for remote access */
194    char *db_socket;                   /* Socket for local access */
195    char *db_password;
196    char *db_user;
197    char *db_name;
198    int   mult_db_connections;         /* set if multiple connections wanted */
199 };
200
201
202 /*
203  *   Client Resource
204  *
205  */
206 class CLIENT {
207 public:
208    RES   hdr;
209
210    int   FDport;                      /* Where File daemon listens */
211    int   AutoPrune;                   /* Do automatic pruning? */
212    utime_t FileRetention;             /* file retention period in seconds */
213    utime_t JobRetention;              /* job retention period in seconds */
214    char *address;
215    char *password;
216    CAT *catalog;                      /* Catalog resource */
217    uint32_t MaxConcurrentJobs;        /* Maximume concurrent jobs */
218    uint32_t NumConcurrentJobs;        /* number of concurrent jobs running */
219    int tls_enable;                    /* Enable TLS */
220    int tls_require;                   /* Require TLS */
221    char *tls_ca_certfile;             /* TLS CA Certificate File */
222    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
223    char *tls_certfile;                /* TLS Client Certificate File */
224    char *tls_keyfile;                 /* TLS Client Key File */
225    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
226 };
227
228 /*
229  *   Store Resource
230  *
231  */
232 class STORE {
233 public:
234    RES   hdr;
235
236    int   SDport;                      /* port where Directors connect */
237    int   SDDport;                     /* data port for File daemon */
238    char *address;
239    char *password;
240    char *media_type;
241    alist *device;                     /* Alternate devices for this Storage */
242    int  autochanger;                  /* set if autochanger */
243    int  drives;                       /* number of drives in autochanger */
244    uint32_t MaxConcurrentJobs;        /* Maximume concurrent jobs */
245    uint32_t NumConcurrentJobs;        /* number of concurrent jobs running */
246    int tls_enable;                    /* Enable TLS */
247    int tls_require;                   /* Require TLS */
248    char *tls_ca_certfile;             /* TLS CA Certificate File */
249    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
250    char *tls_certfile;                /* TLS Client Certificate File */
251    char *tls_keyfile;                 /* TLS Client Key File */
252    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
253    int64_t StorageId;                 /* Set from Storage DB record */
254    int enabled;                       /* Set if device is enabled */
255
256    /* Methods */
257    char *dev_name() const;
258    char *name() const;
259 };
260
261 inline char *STORE::dev_name() const
262
263    DEVICE *dev = (DEVICE *)device->first();
264    return dev->hdr.name;
265 }
266
267 inline char *STORE::name() const { return hdr.name; }
268
269
270 /*
271  *   Job Resource
272  */
273 class JOB {
274 public:
275    RES   hdr;
276
277    int   JobType;                     /* job type (backup, verify, restore */
278    int   JobLevel;                    /* default backup/verify level */
279    int   Priority;                    /* Job priority */
280    int   RestoreJobId;                /* What -- JobId to restore */
281    char *RestoreWhere;                /* Where on disk to restore -- directory */
282    char *RestoreBootstrap;            /* Bootstrap file */
283    char *RunBeforeJob;                /* Run program before Job */
284    char *RunAfterJob;                 /* Run program after Job */
285    char *RunAfterFailedJob;           /* Run program after Job that errs */
286    char *ClientRunBeforeJob;          /* Run client program before Job */
287    char *ClientRunAfterJob;           /* Run client program after Job */
288    union {
289       char *WriteBootstrap;           /* Where to write bootstrap Job updates */
290       char *WriteVerifyList;          /* List of changed files */
291    };
292    int   replace;                     /* How (overwrite, ..) */
293    utime_t MaxRunTime;                /* max run time in seconds */
294    utime_t MaxWaitTime;               /* max blocking time in seconds */
295    utime_t FullMaxWaitTime;           /* Max Full job wait time */
296    utime_t DiffMaxWaitTime;           /* Max Differential job wait time */
297    utime_t IncMaxWaitTime;            /* Max Incremental job wait time */
298    utime_t MaxStartDelay;             /* max start delay in seconds */
299    int PrefixLinks;                   /* prefix soft links with Where path */
300    int PruneJobs;                     /* Force pruning of Jobs */
301    int PruneFiles;                    /* Force pruning of Files */
302    int PruneVolumes;                  /* Force pruning of Volumes */
303    int SpoolAttributes;               /* Set to spool attributes in SD */
304    int spool_data;                    /* Set to spool data in SD */
305    int rerun_failed_levels;           /* Upgrade to rerun failed levels */
306    int PreferMountedVolumes;          /* Prefer vols mounted rather than new one */
307    uint32_t MaxConcurrentJobs;        /* Maximume concurrent jobs */
308    int RescheduleOnError;             /* Set to reschedule on error */
309    int RescheduleTimes;               /* Number of times to reschedule job */
310    utime_t RescheduleInterval;        /* Reschedule interval */
311    utime_t JobRetention;              /* job retention period in seconds */
312    int write_part_after_job;          /* Set to write part after job in SD */
313    int enabled;                       /* Set if job enabled */
314    
315    MSGS      *messages;               /* How and where to send messages */
316    SCHED     *schedule;               /* When -- Automatic schedule */
317    CLIENT    *client;                 /* Who to backup */
318    FILESET   *fileset;                /* What to backup -- Fileset */
319    alist     *storage;                /* Where is device -- list of Storage to be used */
320    POOL      *pool;                   /* Where is media -- Media Pool */
321    POOL      *full_pool;              /* Pool for Full backups */
322    POOL      *inc_pool;               /* Pool for Incremental backups */
323    POOL      *dif_pool;               /* Pool for Differental backups */
324    union {
325       JOB       *verify_job;          /* Job name to verify */
326       JOB       *migration_job;       /* Job name to migrate */
327    };
328    JOB       *jobdefs;                /* Job defaults */
329    alist     *run_cmds;               /* Run commands */
330    uint32_t NumConcurrentJobs;        /* number of concurrent jobs running */
331 };
332
333 #undef  MAX_FOPTS
334 #define MAX_FOPTS 34
335
336 /* File options structure */
337 struct FOPTS {
338    char opts[MAX_FOPTS];              /* options string */
339    alist regex;                       /* regex string(s) */
340    alist regexdir;                    /* regex string(s) for directories */
341    alist regexfile;                   /* regex string(s) for files */
342    alist wild;                        /* wild card strings */
343    alist wilddir;                     /* wild card strings for directories */
344    alist wildfile;                    /* wild card strings for files */
345    alist base;                        /* list of base names */
346    alist fstype;                      /* file system type limitation */
347    char *reader;                      /* reader program */
348    char *writer;                      /* writer program */
349 };
350
351
352 /* This is either an include item or an exclude item */
353 struct INCEXE {
354    FOPTS *current_opts;               /* points to current options structure */
355    FOPTS **opts_list;                 /* options list */
356    int num_opts;                      /* number of options items */
357    alist name_list;                   /* filename list -- holds char * */
358 };
359
360 /*
361  *   FileSet Resource
362  *
363  */
364 class FILESET {
365 public:
366    RES   hdr;
367
368    bool new_include;                  /* Set if new include used */
369    INCEXE **include_items;            /* array of incexe structures */
370    int num_includes;                  /* number in array */
371    INCEXE **exclude_items;
372    int num_excludes;
373    bool have_MD5;                     /* set if MD5 initialized */
374    struct MD5Context md5c;            /* MD5 of include/exclude */
375    char MD5[30];                      /* base 64 representation of MD5 */
376    int ignore_fs_changes;             /* Don't force Full if FS changed */
377    int enable_vss;                    /* Enable Volume Shadow Copy */
378 };
379
380
381 /*
382  *   Schedule Resource
383  *
384  */
385 class SCHED {
386 public:
387    RES   hdr;
388
389    RUN *run;
390 };
391
392 /*
393  *   Counter Resource
394  */
395 class COUNTER {
396 public:
397    RES   hdr;
398
399    int32_t  MinValue;                 /* Minimum value */
400    int32_t  MaxValue;                 /* Maximum value */
401    int32_t  CurrentValue;             /* Current value */
402    COUNTER *WrapCounter;              /* Wrap counter name */
403    CAT     *Catalog;                  /* Where to store */
404    bool     created;                  /* Created in DB */
405 };
406
407 /*
408  *   Pool Resource
409  *
410  */
411 class POOL {
412 public:
413    RES   hdr;
414
415    char *pool_type;                   /* Pool type */
416    char *label_format;                /* Label format string */
417    char *cleaning_prefix;             /* Cleaning label prefix */
418    int   LabelType;                   /* Bacula/ANSI/IBM label type */
419    int   use_catalog;                 /* maintain catalog for media */
420    int   catalog_files;               /* maintain file entries in catalog */
421    int   use_volume_once;             /* write on volume only once */
422    int   accept_any_volume;           /* accept any volume */
423    int   purge_oldest_volume;         /* purge oldest volume */
424    int   recycle_oldest_volume;       /* attempt to recycle oldest volume */
425    int   recycle_current_volume;      /* attempt recycle of current volume */
426    uint32_t max_volumes;              /* max number of volumes */
427    utime_t VolRetention;              /* volume retention period in seconds */
428    utime_t VolUseDuration;            /* duration volume can be used */
429    uint32_t MaxVolJobs;               /* Maximum jobs on the Volume */
430    uint32_t MaxVolFiles;              /* Maximum files on the Volume */
431    uint64_t MaxVolBytes;              /* Maximum bytes on the Volume */
432    utime_t MigrationTime;             /* Time to migrate to next pool */
433    uint32_t MigrationHighBytes;       /* When migration starts */
434    uint32_t MigrationLowBytes;        /* When migration stops */
435    POOL  *NextPool;                   /* Next pool for migration */
436    alist *storage;                    /* Where is device -- list of Storage to be used */
437    int   AutoPrune;                   /* default for pool auto prune */
438    int   Recycle;                     /* default for media recycle yes/no */
439 };
440
441
442
443
444 /* Define the Union of all the above
445  * resource structure definitions.
446  */
447 union URES {
448    DIRRES     res_dir;
449    CONRES     res_con;
450    CLIENT     res_client;
451    STORE      res_store;
452    CAT        res_cat;
453    JOB        res_job;
454    FILESET    res_fs;
455    SCHED      res_sch;
456    POOL       res_pool;
457    MSGS       res_msgs;
458    COUNTER    res_counter;
459    DEVICE     res_dev;
460    RES        hdr;
461 };
462
463
464
465 /* Run structure contained in Schedule Resource */
466 class RUN {
467 public:
468    RUN *next;                         /* points to next run record */
469    int level;                         /* level override */
470    int Priority;                      /* priority override */
471    int job_type;
472    bool spool_data;                   /* Data spooling override */
473    bool spool_data_set;               /* Data spooling override given */
474    bool write_part_after_job;         /* Write part after job override */
475    bool write_part_after_job_set;     /* Write part after job override given */
476    
477    POOL *pool;                        /* Pool override */
478    POOL *full_pool;                   /* Pool override */
479    POOL *inc_pool;                    /* Pool override */
480    POOL *dif_pool;                    /* Pool override */
481    STORE *storage;                    /* Storage override */
482    MSGS *msgs;                        /* Messages override */
483    char *since;
484    int level_no;
485    int minute;                        /* minute to run job */
486    time_t last_run;                   /* last time run */
487    time_t next_run;                   /* next time to run */
488    char hour[nbytes_for_bits(24)];    /* bit set for each hour */
489    char mday[nbytes_for_bits(31)];    /* bit set for each day of month */
490    char month[nbytes_for_bits(12)];   /* bit set for each month */
491    char wday[nbytes_for_bits(7)];     /* bit set for each day of the week */
492    char wom[nbytes_for_bits(5)];      /* week of month */
493    char woy[nbytes_for_bits(54)];     /* week of year */
494 };