/*
- * Resource codes -- they must be sequential for indexing
- *
- * Version $Id$
- */
-/*
- Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+ Bacula(R) - The Network Backup Solution
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License, or (at your option) any later version.
+ Copyright (C) 2000-2016 Kern Sibbald
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ The original author of Bacula is Kern Sibbald, with contributions
+ from many others, a complete list can be found in the file AUTHORS.
- You should have received a copy of the GNU General Public
- License along with this program; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
+ You may use this file and others of this release according to the
+ license defined in the LICENSE file, which includes the Affero General
+ Public License, v3.0 ("AGPLv3") and some additional permissions and
+ terms pursuant to its AGPLv3 Section 7.
- */
+ This notice must be preserved when any source code is
+ conveyed and/or propagated.
-#define R_FIRST 3001
+ Bacula(R) is a registered trademark of Kern Sibbald.
+*/
-#define R_DIRECTOR 3001
-#define R_STORAGE 3002
-#define R_DEVICE 3003
-#define R_MSGS 3004
+extern s_kw dev_types[];
-#define R_LAST R_MSGS
+/*
+ * Resource codes -- they must be sequential for indexing
+ *
+ */
+enum {
+ R_DIRECTOR = 3001,
+ R_STORAGE,
+ R_DEVICE,
+ R_MSGS,
+ R_AUTOCHANGER,
+ R_FIRST = R_DIRECTOR,
+ R_LAST = R_AUTOCHANGER /* keep this updated */
+};
-#define R_NAME 3020
-#define R_ADDRESS 3021
-#define R_PASSWORD 3022
-#define R_TYPE 3023
-#define R_BACKUP 3024
+enum {
+ R_NAME = 3020,
+ R_ADDRESS,
+ R_PASSWORD,
+ R_TYPE,
+ R_BACKUP
+};
-#define STORAGE_DAEMON 1
/* Definition of the contents of each Resource */
-struct s_res_dir {
- RES hdr;
-
- char *password; /* Director password */
- char *address; /* Director IP address or zero */
+class DIRRES {
+public:
+ RES hdr;
+
+ char *password; /* Director password */
+ char *address; /* Director IP address or zero */
+ bool monitor; /* Have only access to status and .status functions */
+ bool tls_authenticate; /* Authenticate with TLS */
+ bool tls_enable; /* Enable TLS */
+ bool tls_require; /* Require TLS */
+ bool tls_verify_peer; /* TLS Verify Client Certificate */
+ char *tls_ca_certfile; /* TLS CA Certificate File */
+ char *tls_ca_certdir; /* TLS CA Certificate Directory */
+ char *tls_certfile; /* TLS Server Certificate File */
+ char *tls_keyfile; /* TLS Server Key File */
+ char *tls_dhfile; /* TLS Diffie-Hellman Parameters */
+ alist *tls_allowed_cns; /* TLS Allowed Clients */
+
+ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
};
-typedef struct s_res_dir DIRRES;
/* Storage daemon "global" definitions */
-struct s_res_store {
- RES hdr;
-
- char *address; /* deprecated */
- char *SDaddr; /* bind address */
- int SDport; /* Where we listen for Directors */
- int SDDport; /* "Data" port where we listen for File daemons */
- char *working_directory; /* working directory for checkpoints */
+class s_res_store {
+public:
+ RES hdr;
+
+ dlist *sdaddrs;
+ dlist *sddaddrs;
+ char *working_directory; /* working directory for checkpoints */
char *pid_directory;
char *subsys_directory;
+ char *plugin_directory; /* Plugin directory */
+ char *scripts_directory;
uint32_t max_concurrent_jobs; /* maximum concurrent jobs to run */
- struct s_res_msgs *messages; /* Daemon message handler */
+ MSGS *messages; /* Daemon message handler */
+ utime_t ClientConnectTimeout; /* Max time to wait to connect client */
+ utime_t heartbeat_interval; /* Interval to send hb to FD */
+ utime_t client_wait; /* Time to wait for FD to connect */
+ bool tls_authenticate; /* Authenticate with TLS */
+ bool tls_enable; /* Enable TLS */
+ bool tls_require; /* Require TLS */
+ bool tls_verify_peer; /* TLS Verify Client Certificate */
+ char *tls_ca_certfile; /* TLS CA Certificate File */
+ char *tls_ca_certdir; /* TLS CA Certificate Directory */
+ char *tls_certfile; /* TLS Server Certificate File */
+ char *tls_keyfile; /* TLS Server Key File */
+ char *tls_dhfile; /* TLS Diffie-Hellman Parameters */
+ alist *tls_allowed_cns; /* TLS Allowed Clients */
+ char *verid; /* Custom Id to print in version command */
+ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
+
+};
+typedef class s_res_store STORES;
+
+class AUTOCHANGER {
+public:
+ RES hdr;
+ alist *device; /* List of DEVRES device pointers */
+ char *changer_name; /* Changer device name */
+ char *changer_command; /* Changer command -- external program */
+ brwlock_t changer_lock; /* One changer operation at a time */
};
-typedef struct s_res_store STORES;
/* Device specific definitions */
-struct s_res_dev {
- RES hdr;
-
- char *media_type; /* User assigned media type */
- char *device_name; /* Archive device name */
- char *changer_name; /* Changer device name */
- char *changer_command; /* Changer command -- external program */
- int cap_bits; /* Capabilities of this device */
- uint32_t max_changer_wait; /* Changer timeout */
- uint32_t max_rewind_wait; /* maximum secs to wait for rewind */
- uint32_t max_open_wait; /* maximum secs to wait for open */
- uint32_t min_block_size; /* min block size */
- uint32_t max_block_size; /* max block size */
- uint32_t max_volume_jobs; /* max jobs to put on one volume */
- int64_t max_volume_files; /* max files to put on one volume */
- int64_t max_volume_size; /* max bytes to put on one volume */
- int64_t max_file_size; /* max file size in bytes */
- int64_t volume_capacity; /* advisory capacity */
- DEVICE *dev; /* Pointer to phyical dev -- set at runtime */
+class DEVRES {
+public:
+ RES hdr;
+
+ char *media_type; /* User assigned media type */
+ char *device_name; /* Archive device name */
+ char *changer_name; /* Changer device name */
+ char *control_name; /* SCSI control device name */
+ char *changer_command; /* Changer command -- external program */
+ char *alert_command; /* Alert command -- external program */
+ char *spool_directory; /* Spool file directory */
+ uint32_t dev_type; /* device type */
+ uint32_t label_type; /* label type */
+ bool enabled; /* Set when enabled (default) */
+ bool autoselect; /* Automatically select from AutoChanger */
+ bool read_only; /* Drive is read only */
+ uint32_t drive_index; /* Autochanger drive index */
+ uint32_t cap_bits; /* Capabilities of this device */
+ utime_t max_changer_wait; /* Changer timeout */
+ utime_t max_rewind_wait; /* maximum secs to wait for rewind */
+ utime_t max_open_wait; /* maximum secs to wait for open */
+ uint32_t padding_size; /* adata block padding -- bytes */
+ uint32_t file_alignment; /* adata file alignment -- bytes */
+ uint32_t min_block_size; /* min block size */
+ uint32_t max_block_size; /* max block size */
+ uint32_t max_volume_jobs; /* max jobs to put on one volume */
+ uint32_t max_network_buffer_size; /* max network buf size */
+ uint32_t max_concurrent_jobs; /* maximum concurrent jobs this drive */
+ utime_t vol_poll_interval; /* interval between polling volume during mount */
+ int64_t max_volume_files; /* max files to put on one volume */
+ int64_t max_volume_size; /* max bytes to put on one volume */
+ int64_t max_file_size; /* max file size in bytes */
+ int64_t volume_capacity; /* advisory capacity */
+ int64_t min_free_space; /* Minimum disk free space */
+ int64_t max_spool_size; /* Max spool size for all jobs */
+ int64_t max_job_spool_size; /* Max spool size for any single job */
+
+ int64_t max_part_size; /* Max part size */
+ char *mount_point; /* Mount point for require mount devices */
+ char *mount_command; /* Mount command */
+ char *unmount_command; /* Unmount command */
+ char *write_part_command; /* Write part command */
+ char *free_space_command; /* Free space command */
+
+ /* The following are set at runtime */
+ DEVICE *dev; /* Pointer to phyical dev -- set at runtime */
+ AUTOCHANGER *changer_res; /* pointer to changer res if any */
};
-typedef struct s_res_dev DEVRES;
-union u_res {
- struct s_res_dir res_dir;
- struct s_res_store res_store;
- struct s_res_dev res_dev;
- struct s_res_msgs res_msgs;
- RES hdr;
+
+union URES {
+ DIRRES res_dir;
+ STORES res_store;
+ DEVRES res_dev;
+ MSGS res_msgs;
+ AUTOCHANGER res_changer;
+ RES hdr;
};
-typedef union u_res URES;