2 * Record, and label definitions for Bacula
9 Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
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.
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.
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,
32 /* Return codes from read_device_volume_label() */
33 #define VOL_NOT_READ 0 /* Volume label not read */
34 #define VOL_OK 1 /* volume name OK */
35 #define VOL_NO_LABEL 2 /* volume not labeled */
36 #define VOL_IO_ERROR 3 /* volume I/O error */
37 #define VOL_NAME_ERROR 4 /* Volume name mismatch */
38 #define VOL_CREATE_ERROR 5 /* Error creating label */
39 #define VOL_VERSION_ERROR 6 /* Bacula version error */
40 #define VOL_LABEL_ERROR 7 /* Bad label type */
43 /* Length of Record Header (5 * 4 bytes) */
44 #define RECHDR_LENGTH 20
47 * This is the Media structure for a record header.
48 * NB: when it is written it is serialized.
50 typedef struct s_record_hdr {
51 uint32_t VolSessionId;
52 uint32_t VolSessionTime;
59 * DEV_RECORD for reading and writing records.
60 * It consists of a Record Header, and the Record Data
62 * This is the memory structure for the record header.
64 typedef struct s_dev_rec {
65 int sync; /* synchronous */
66 uint32_t File; /* File number, returned if sync set */
67 uint32_t Block; /* Block number, returned if sync set */
68 uint32_t VolSessionId; /* sequential id within this session */
69 uint32_t VolSessionTime; /* session start time */
70 int32_t FileIndex; /* sequential file number */
71 int32_t Stream; /* stream number */
72 uint32_t data_len; /* current record length */
73 uint32_t remainder; /* remaining bytes to read/write */
74 uint8_t ser_buf[RECHDR_LENGTH]; /* serialized record header goes here */
75 POOLMEM *data; /* Record data. This MUST be a memory pool item */
80 * Values for LabelType that are put into the FileIndex field
81 * Note, these values are negative to distinguish them
82 * from user records where the FileIndex is forced positive.
84 #define PRE_LABEL -1 /* Vol label on unwritten tape */
85 #define VOL_LABEL -2 /* Volume label first file */
86 #define EOM_LABEL -3 /* Writen at end of tape */
87 #define SOS_LABEL -4 /* Start of Session */
88 #define EOS_LABEL -5 /* End of Session */
96 * The first items in this structure are saved
97 * in the DEVICE buffer, but are not actually written
100 int32_t LabelType; /* This is written in header only */
101 uint32_t LabelSize; /* length of serialized label */
103 * The items below this line are stored on
106 char Id[32]; /* Bacula Immortal ... */
108 uint32_t VerNum; /* Label version number */
110 float64_t label_date; /* Date tape labeled */
111 float64_t label_time; /* Time tape labeled */
112 float64_t write_date; /* Date this label written */
113 float64_t write_time; /* Time this label written */
115 char VolName[MAX_NAME_LENGTH]; /* Volume name */
116 char PrevVolName[MAX_NAME_LENGTH]; /* Previous Volume Name */
117 char PoolName[MAX_NAME_LENGTH]; /* Pool name */
118 char PoolType[MAX_NAME_LENGTH]; /* Pool type */
119 char MediaType[MAX_NAME_LENGTH]; /* Type of this media */
121 char HostName[MAX_NAME_LENGTH]; /* Host name of writing computer */
122 char LabelProg[32]; /* Label program name */
123 char ProgVersion[32]; /* Program version */
124 char ProgDate[32]; /* Program build date/time */
127 #define SER_LENGTH_Volume_Label 1024 /* max serialised length of volume label */
128 #define SER_LENGTH_Session_Label 1024 /* max serialised length of session label */
130 typedef struct Volume_Label VOLUME_LABEL;
133 * Session Start/End Label
134 * This record is at the beginning and end of each session
136 struct Session_Label {
137 char Id[32]; /* Bacula Immortal ... */
139 uint32_t VerNum; /* Label version number */
141 uint32_t JobId; /* Job id */
142 uint32_t VolumeIndex; /* Sequence no of volume for this job */
144 float64_t write_date; /* Date this label written */
145 float64_t write_time; /* Time this label written */
147 char PoolName[MAX_NAME_LENGTH]; /* Pool name */
148 char PoolType[MAX_NAME_LENGTH]; /* Pool type */
149 char JobName[MAX_NAME_LENGTH];
150 char ClientName[MAX_NAME_LENGTH];
153 uint32_t start_block;
160 typedef struct Session_Label SESSION_LABEL;
162 #define SERIAL_BUFSIZE 1024 /* volume serialisation buffer size */